5 use experimental 'multidimensional';
7 my @m = map { chomp; [ split // ] } <>;
9 my $xmax = $#{ $m[0] };
13 for my $y (0 .. $ymax) {
14 for my $x (0 .. $xmax) {
15 if ($m[$y][$x] eq 'S') {
27 my ($x, $y, @path) = @$pt;
29 say "walking ", join(' ', @$pt);
33 next if $seen{"$x,$y"}++;
37 say scalar @path, ': ', @path;
41 for my $pt1 ([-1, 0], [1, 0], [0, -1], [0, 1]) {
42 my ($dx, $dy) = @$pt1;
43 my ($nx, $ny) = ($x+$dx, $y+$dy);
44 next if $nx > $xmax || $nx < 0 || $ny > $ymax || $ny < 0;
45 my $h1 = $m[$ny][$nx];
46 $h1 = 'z' if $h1 eq 'E';
47 say "trying $nx $ny $h $h1";
48 next if ord($h1)-ord($h) > 1;
49 push @q, [ $nx, $ny, @path, " $nx,$ny" ];