5 my @m = map { chomp; [ split // ]; } <>;
11 for my $y (0 .. $maxy) {
12 for my $x (0 .. $maxx) {
14 next if $y > 0 && $m[$y-1][$x] <= $val;
15 next if $y < $maxy && $m[$y+1][$x] <= $val;
16 next if $x > 0 && $m[$y][$x-1] <= $val;
17 next if $x < $maxx && $m[$y][$x+1] <= $val;
24 for my $start (@low) {
27 my @points = ($start);
28 my %pts = (join(',', @$start) => 1);
32 for my $add (([0, 1], [1, 0], [-1, 0], [0, -1])) {
33 my ($x, $y) = ($p->[0]+$add->[0], $p->[1]+$add->[1]);
34 # say "trying $x, $y";
35 next if $pts{join(',',$x,$y)};
36 next if $x < 0 || $x > $maxx;
37 next if $y < 0 || $y > $maxy;
38 next if $m[$y][$x] == 9;
40 $pts{join(',',$x,$y)} = 1;
41 push @points, [$x, $y];
42 # say "adding $x, $y = $m[$y][$x]";
47 # say "$start->[0], $start->[1] : $size";
51 @sizes = sort { $b <=> $a } @sizes;
53 say $sizes[0]*$sizes[1]*$sizes[2];