7 my @map = map { chomp; [ split // ] } <>;
8 my $xmax = $#{ $map[0] };
12 for my $y (0 .. $ymax) {
13 for my $x (0 .. $xmax) {
17 push @carts, [ $x, $y, 0, 0 ];
21 push @carts, [ $x, $y, 1, 0 ];
25 push @carts, [ $x, $y, 2, 0 ];
29 push @carts, [ $x, $y, 3, 0 ];
41 my ($x, $y, $dir, $state) = @$c;
45 } elsif ($m eq '\\') {
50 } elsif ($state == 2) {
53 $state = 0 if ++$state > 2;
55 delete $cartpos{$x,$y};
60 if ($cartpos{$x,$y}++) {
69 @carts = sort { $a->[1] == $b->[1]
71 : $a->[1] <=> $b->[1] } @carts;