adventofcode/2024/05/Part1.pm

42 lines
815 B
Perl
Raw Normal View History

2024-12-10 23:34:16 +00:00
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;