4 use experimental 'multidimensional';
17 push @map, [ split //, "#$_#" ];
19 my $xmax = $#{ $map[0] };
22 push @map, [ ('#') x ($xmax+1) ];
23 unshift @map, [ ('#') x ($xmax+1) ];
27 my @dx = (1, 0, -1, 0);
28 my @dy = (0, 1, 0, -1);
31 my @q = ([ $sx, $sy, 0 ]);
33 my ($x, $y, $st) = @{ shift @q };
35 next if $st >= $steps;
37 my $nx = $x + $dx[$d];
38 my $ny = $y + $dy[$d];
39 if ($map[$ny][$nx] eq '.') {
40 next if $seen{$nx,$ny,$st+1}++;
41 push @q, [ $nx, $ny, $st+1 ];
47 for my $y (0 .. $ymax) {
48 for my $x (0 .. $xmax) {
49 print $seen{$x,$y,$steps} ? 'O' : $map[$y][$x];
50 $sum++ if $seen{$x,$y,$steps};