45 lines
732 B
Perl
45 lines
732 B
Perl
package part2;
|
|
|
|
use 5.20.0;
|
|
use warnings;
|
|
|
|
use List::AllUtils qw/ /;
|
|
|
|
require './part1.pm';
|
|
|
|
use experimental qw/ signatures postderef /;
|
|
|
|
sub solution(@seeds) {
|
|
my $last = shift @seeds;
|
|
my $turn = 1;
|
|
my %said;
|
|
|
|
for(@seeds) {
|
|
$said{$last} ||= [];
|
|
push $said{$last}->@*, $turn++;
|
|
$last = $_;
|
|
}
|
|
|
|
until( $turn == 30000000 ) {
|
|
if( !$said{$last} ) {
|
|
$said{$last} = [$turn];
|
|
$last = 0
|
|
} else {
|
|
push $said{$last}->@*, $turn;
|
|
if( $said{$last}->@* > 2 ) {
|
|
shift $said{$last}->@*;
|
|
}
|
|
$last = $said{$last}[-1] - $said{$last}[-2];
|
|
}
|
|
|
|
$turn++;
|
|
}
|
|
|
|
return $last;
|
|
|
|
|
|
}
|
|
|
|
|
|
1;
|