#!/usr/bin/env perl use strict; use warnings; my @original_grid; my @grid; my @pos = (0,0); my @start_pos = (0,0); my %seen_positions; open(my $fh, "6-input.txt") or die; while (<$fh>) { chomp; push @original_grid, [split //]; } close($fh); @grid = map { [@$_] } @original_grid; for (my $i=0; $i= 0 and ($grid[$pos[0]-1][$pos[1]] eq '.' or $grid[$pos[0]-1][$pos[1]] eq 'X')) { $grid[$pos[0]][$pos[1]] = 'X'; $pos[0]--; $grid[$pos[0]][$pos[1]] = '^'; } else { $grid[$pos[0]][$pos[1]] = '>'; } } elsif ($direction eq '>') { if ($pos[1]+1 >= scalar @{$grid[$pos[0]]}) { $grid[$pos[0]][$pos[1]] = 'X'; } elsif ($pos[1]+1 < scalar @{$grid[$pos[0]]} and ($grid[$pos[0]][$pos[1]+1] eq '.' or $grid[$pos[0]][$pos[1]+1] eq 'X')) { $grid[$pos[0]][$pos[1]] = 'X'; $pos[1]++; $grid[$pos[0]][$pos[1]] = '>'; } else { $grid[$pos[0]][$pos[1]] = 'V'; } } elsif ($direction eq 'V') { if ($pos[0]+1 >= scalar @grid) { $grid[$pos[0]][$pos[1]] = 'X'; } elsif ($pos[0]+1 < scalar @grid and ($grid[$pos[0]+1][$pos[1]] eq '.' or $grid[$pos[0]+1][$pos[1]] eq 'X')) { $grid[$pos[0]][$pos[1]] = 'X'; $pos[0]++; $grid[$pos[0]][$pos[1]] = 'V'; } else { $grid[$pos[0]][$pos[1]] = '<'; } } elsif ($direction eq '<') { if ($pos[1]-1 < 0) { $grid[$pos[0]][$pos[1]] = 'X'; } elsif ($pos[1]-1 >= 0 and ($grid[$pos[0]][$pos[1]-1] eq '.' or $grid[$pos[0]][$pos[1]-1] eq 'X')) { $grid[$pos[0]][$pos[1]] = 'X'; $pos[1]--; $grid[$pos[0]][$pos[1]] = '<'; } else { $grid[$pos[0]][$pos[1]] = '^'; } } else { return 0; } return 1; } while (tick(\@pos, \@grid)) { $seen_positions{"$pos[0],$pos[1]"} = 1; } my $pone = 0; foreach(@grid) { foreach (@$_) { $pone++ if $_ eq 'X'; } } print "puzzle 1: ", $pone, "\n"; my $loops = 0; for (my $i=0; $i