aoc2023/day3/day3-1.pl
2023-12-04 20:51:18 +01:00

36 lines
740 B
Perl
Executable File

#!/usr/bin/perl
my $sum;
sub ss {
my ($expr, $start, $end) = @_;
$start = 0 if $start < 0;
$end = length $expr if $end > length $expr;
my $r = substr($expr, $start, $end-$start);
return $r;
}
sub borders {
my ($a,$c,$b) = @_;
while($c =~ /\d+/g) {
my $num = $&;
my $edge = "";
$edge .= ss($a, $-[0]-1, $+[0]+1) if defined $a;
$edge .= ss($c, $-[0]-1, $-[0]);
$edge .= ss($c, $+[0], $+[0]+1);
$edge .= ss($b, $-[0]-1, $+[0]+1) if defined $b;
$sum += $num if $edge =~ /[^0-9.]/;
}
}
my @lines = <>;
map { chomp } @lines;
borders(undef, $lines[0], $lines[1]);
for my $x (0 .. $#lines-2) {
borders(@lines[$x,$x+1,$x+2]);
}
borders($lines[$#lines-1], $lines[$#lines], undef);
print "$sum\n";