39 lines
530 B
Perl
39 lines
530 B
Perl
|
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;
|