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 ];
35 for my $i (0 .. $#carts) {
41 for my $i (0 .. $#carts) {
44 my ($x, $y, $dir, $state) = @$c;
48 } elsif ($m eq '\\') {
53 } elsif ($state == 2) {
56 $state = 0 if ++$state > 2;
58 delete $cartpos{$x,$y};
63 if (defined $cartpos{$x,$y}) {
65 $carts[$cartpos{$x,$y}]->[4] = 1;
66 delete $cartpos{$x,$y};
75 @carts = sort { $a->[1] == $b->[1]
77 : $a->[1] <=> $b->[1] } grep { !defined $_->[4] } @carts;
79 say $carts[0][0], ',', $carts[0][1];