33 lines
565 B
Perl
33 lines
565 B
Perl
|
package Day2::Part1;
|
||
|
|
||
|
use 5.36.0;
|
||
|
|
||
|
use List::Util qw/ sum pairmap /;
|
||
|
use List::MoreUtils qw/ part zip /;
|
||
|
|
||
|
sub read_file(@lines) {
|
||
|
return map { [split] } @lines;
|
||
|
}
|
||
|
|
||
|
sub is_safe(@report) {
|
||
|
my $asc = $report[1] - $report[0];
|
||
|
|
||
|
my $level = shift @report;
|
||
|
|
||
|
while(@report) {
|
||
|
my $next = shift @report;
|
||
|
my $delta = $next - $level;
|
||
|
return 0 unless $delta*$asc >= 0;
|
||
|
return 0 unless 1 <= abs($delta) <= 3;
|
||
|
$level = $next;
|
||
|
}
|
||
|
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
sub solve(@reports) {
|
||
|
return sum map { is_safe(@$_) } @reports;
|
||
|
}
|
||
|
|
||
|
1;
|