#!/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";