4 use experimental 'multidimensional', 'for_list', 'builtin';
11 my @map = map { chomp; [ split // ] } <>;
12 my $xmax = @{ $map[0] };
19 for my $y (0 .. $ymax-1) {
20 for my $x (0 .. $xmax-1) {
22 next if $n !~ /\d/ || $seen{$x,$y}++;
26 if ($y > 0 && $map[$y-1][$x-1] !~ /\./) { $is_neigh = 1; }
27 if ($map[$y][$x-1] !~ /\./) { $is_neigh = 1; }
28 if ($y < $ymax-1 && $map[$y+1][$x-1] !~ /\./) { $is_neigh = 1; }
30 say "First $is_neigh";
31 if ($y > 0 && $map[$y-1][$x] !~ /\./) { $is_neigh = 1; }
32 if ($y < $ymax-1 && $map[$y+1][$x] !~ /\./) { $is_neigh = 1; }
33 while ($x+$dx < $xmax && $map[$y][$x+$dx] =~ /\d/) {
34 $n*=10; $n+= $map[$y][$x+$dx];
35 say "First $is_neigh at ", $x+$dx;
36 if ($y > 0 && $map[$y-1][$x+$dx] !~ /\./) { say $y-1, " ", $x+$dx; $is_neigh = 1; }
37 if ($y < $ymax-1 && $map[$y+1][$x+$dx] !~ /\./) { $is_neigh = 1; }
41 say "Before last $is_neigh at ", $x+$dx;
42 if ($x + $dx < $xmax) {
43 if ($y > 0 && $map[$y-1][$x+$dx] !~ /\./) { say $y-1, " ", $x+$dx; $is_neigh = 1; }
44 if ($y < $ymax-1 && $map[$y+1][$x+$dx] !~ /\./) { $is_neigh = 1; }
45 if ($x+$dx < $xmax-1 && $map[$y][$x+$dx] !~ /\./) { $is_neigh = 1; }
47 $sum += $n if $is_neigh;
48 if ($is_neigh) { say "$n at $x,$y" }