adventofcode2018/6/2.pl
2018-12-11 21:39:38 +00:00

64 lines
No EOL
1.2 KiB
Perl

#!/usr/bin/perl
use strict;
use v5.10;
use Data::Dumper;
chomp (my @data = <STDIN>);
@data = sort @data;
my (@x, @y);
foreach my $coord (@data) {
my ($x, $y) = split /, /, $coord;
push @x, $x;
push @y, $y;
}
@x = sort { $a <=> $b } @x;
@y = sort { $a <=> $b } @y;
my $minX = $x[0];
my $minY = $y[0];
my $maxX = $x[$#x];
my $maxY = $y[$#y];
my $count;
for ( my $y = $minY; $y <= $maxY; $y++ ) {
for ( my $x = $minX; $x <= $maxX; $x++ ) {
# work out distances
my $closest = closest($x, $y, \@data);
# this assumes there's only a single region, but that seems to be the case here.
if ($closest < 10000) {
$count++;
}
}
}
say $count;
sub closest($$$) {
my ($x, $y, $coords) = @_;
my $result;
foreach my $c (@$coords) {
my ($cx, $cy) = split /, /, $c;
my ($xdiff, $ydiff);
if ($x < $cx) {
$xdiff = $cx - $x;
} else {
$xdiff = $x - $cx;
}
if ($y < $cy) {
$ydiff = $cy - $y;
} else {
$ydiff = $y - $cy;
}
$result += ($xdiff + $ydiff);
}
return $result;
}