5 my @map = [ map { chomp; [ split // ] } <> ];
10 say "After ", ++$min, ":";
14 for my $l (0 .. $levels) {
15 say "Depth ", $l - $min;
20 for my ($dx, $dy) (1, 0, 0, 1, -1, 0, 0, -1) {
24 push @pts, [$l-2, 2, 1]; # L Y X
26 push @pts, [$l-2, 1, 2];
28 push @pts, [$l-2, 2, 3];
30 push @pts, [$l-2, 3, 2];
31 } elsif ($nx == 2 && $ny == 2) {
33 push @pts, [$l, $_, 0] for 0 .. 4;
35 push @pts, [$l, 0, $_] for 0 .. 4;
37 push @pts, [$l, $_, 4] for 0 .. 4;
39 push @pts, [$l, 4, $_] for 0 .. 4;
42 push @pts, [$l-1, $ny, $nx];
46 my ($nl, $ny, $nx) = @$pt;
47 next if $nl < 0 || $nl > $levels-2;
48 $sum++ if $map[$nl][$ny][$nx] eq '#';
50 if ($x == 2 & $y == 2) {
51 $nm[$l][$y][$x] = '?';
52 } elsif ($l > 0 && $l <= $levels-1 && $map[$l-1][$y][$x] eq '#') {
53 $nm[$l][$y][$x] = $sum == 1 ? '#' : '.';
55 $nm[$l][$y][$x] = $sum == 1 || $sum == 2 ? '#' : '.';
57 print $nm[$l][$y][$x];
58 $count++ if $nm[$l][$y][$x] eq '#';
65 print "==== $count ====\n";