4 use experimental 'multidimensional';
16 push @map, [ split //, ".$_." ];
19 push @map, [ ('.') x @{ $map[0] } ];
20 unshift @map, [ ('.') x @{ $map[0] } ];
22 my $xmax = $#{$map[0]};
34 my @dx = (1, 0, -1, 0);
35 my @dy = (0, 1, 0, -1);
40 my $p = $map[ $y+$dy[$d] ][ $x+$dx[$d] ];
41 $dir .= $d if $dirs{$p} =~ /$revdir/;
44 my %dir2sym = reverse %dirs;
45 $map[$y][$x] = $dir2sym{$dir}; # fill in the start point
46 $dir =~ s/.//; # Take any valid direction
52 last if $seen{$x,$y}++;
54 ($dir) = $dirs{ $map[$y][$x] } =~ /([^$dir])/;
57 say "loop half: ", (keys %seen)/2;
60 for my $y (0 .. $ymax) {
62 for my $x (0 .. $xmax) {
64 my $pt = $map[$y][$x];
65 $in += 2 if $pt eq '|';
66 $in++ if $pt =~ /[L7]/;
67 $in-- if $pt =~ /[FJ]/;
68 } elsif ($in % 4 == 2) {