package part2; use 5.20.0; use warnings; use List::AllUtils qw/ /; require './part1.pm'; use experimental qw/ signatures postderef /; use Memoize; memoize('ways'); sub ways($first, @rest) { return 1 unless @rest; my $ways = 0; while( my $next = shift @rest ) { last if $next - $first > 3; $ways += ways($next, @rest); } return $ways; } sub solution(@lines) { @lines = sort {$a<=>$b}@lines; unshift @lines, 0; push @lines, $lines[-1] + 3; return ways(@lines); } 1;