use 5.20.0; my %directions = ( 'v' => [ 0, 1 ], '^' => [ 0, -1 ], '<' => [ 1, 0 ], '>' => [ -1, 0 ], ); my @last = (0,0); my @positions = ( [0,0], map { my @this = ( $last[0] + $_->[0], $last[1] + $_->[1] ); @last = @this; \@this; } map { $directions{$_} } split '', <> ); use List::AllUtils qw/ uniq /; @positions = uniq map { join ':', @$_ } @positions; say scalar @positions;