5 my @m = map { chomp; [ split // ]; } <>;
14 for my $i (0 .. $#$row) {
16 if ($row->[$i] == 9) {
18 } elsif (!$prev_l && !$prev_row[$i]) {
21 $b_id = $prev_row[$i];
22 } elsif (!$prev_row[$i] || $prev_l == $prev_row[$i]) {
25 $b_id = $prev_row[$i];
26 $basins[$b_id] += $basins[$prev_l];
27 $basins[$prev_l] = undef;
28 for my $j (0 .. $#$row) {
29 next if !$row->[$j] || $row->[$j] != $prev_l;
32 for my $j (0 .. $#$row) {
33 next if !$prev_row[$j] || $prev_row[$j] != $prev_l;
34 $prev_row[$j] = $b_id;
39 $basins[$b_id]++ if defined $b_id;
44 @basins = sort { $b <=> $a } grep { defined $_ } @basins;
46 say $basins[0]*$basins[1]*$basins[2];