4 use experimental 'multidimensional';
7 my @map = map { chomp; [ split // ] } <>;
8 my $xmax = $#{ $map[0] };
12 return $x < 0 || $x > $xmax || $y < 0 || $y > $ymax
19 for my $y (0 .. $ymax) {
23 if (($n = get($x, $y)) !~ /\d/) {
27 while ((my $n1 = get($x + ++$dx, $y)) =~ /\d/) {
30 for my $x1 ($x-1 .. $x+$dx) {
31 for my $y1 ($y-1 .. $y+1) {
32 next if (my $s = get($x1, $y1)) ne '*';
33 push @{ $gear{$x1,$y1} }, $n;
34 # say "star at $x1,$y1 for $n at $x+$dx,$y";
41 for my $l (values %gear) {
43 $sum += $l->[0] * $l->[1];