package Part1; use 5.36.0; use experimental 'declared_refs'; no warnings qw/ uninitialized /; use List::AllUtils qw/ sum all /; sub read_input ($file) { my( $ordering, $manuals ) = split "\n\n", $file->slurp; $ordering = [ map { [ split '\|' ] } split "\n", $ordering ]; $manuals = [ split "\n", $manuals ]; return { ordering => $ordering, manuals => $manuals }; } sub good_manual( $ordering, $manual ) { return all { my $m = $_; my ($i,$j) = map { index $manual, $m->[$_] } 0..1; return 1 unless all { $_ > -1 } $i, $j; return $i <= $j; } @$ordering; } sub solve ($input) { return sum map { my @m = split ','; $m[@m/2]; } grep { good_manual($input->{ordering},$_) } $input->{manuals}->@*; } 1;