package Part2; use 5.36.0; no warnings qw/ uninitialized /; use Math::VectorXYZ::2D; use List::Util qw/ sum pairmap /; use List::MoreUtils qw/ part zip /; sub find_word ( $grid, @locs ) { for (@locs) { return 0 if $_->[0] < 0 or $_->[1] < 0; } my $letters = join '', sort map { $grid->[ $_->[0] ][ $_->[1] ] } @locs; return $letters eq 'MS'; } sub solve ($grid) { my $total = 0; for my $x ( 0 .. $grid->$#* ) { for my $y ( 0 .. $grid->[0]->$#* ) { if ( $grid->[$x][$y] eq 'A' ) { $total++ if 2 == grep { find_word( $grid, Vec( $x, $y ) - Vec(@$_), Vec( $x, $y ) + Vec(@$_) ) } [ 1, 1 ], [ -1, 1 ]; } } } return $total; } 1;