5 use experimental 'multidimensional';
7 my @map = map { chomp; [ split // ] } <>;
10 my $cols = @{ $map[0] };
16 for my $y (0 .. $rows-1) {
18 for my $x (0 .. $cols-1) {
19 my %count = map { $_ => 0 } ('#', '|', '.');
20 for my $neigh ([-1,-1], [0, -1], [1, -1],
22 [-1, 1], [0, 1], [1, 1]) {
23 my $nx = $x + $neigh->[0];
24 my $ny = $y + $neigh->[1];
25 next if $nx < 0 || $nx >= $cols
26 || $ny < 0 || $ny >= $cols;
27 $count{$map[$ny][$nx]}++;
29 my $self = $map[$y][$x];
30 if ($self eq '.' && $count{'|'} >= 3) {
32 } elsif ($self eq '|' && $count{'#'} >= 3) {
34 } elsif ($self eq '#' &&
35 ($count{'#'} == 0 || $count{'|'} == 0)) {
44 say map { join('', @$_, "\n") } @map;
47 say $total{"#"} * $total{'|'};