55 lines
912 B
Perl
55 lines
912 B
Perl
package part2;
|
|
|
|
use 5.20.0;
|
|
use warnings;
|
|
|
|
use List::AllUtils qw/ min max /;
|
|
use POSIX qw/ ceil /;
|
|
|
|
require './part1.pm';
|
|
|
|
use experimental qw/ signatures postderef /;
|
|
|
|
sub find($t, $next=undef, @buses) {
|
|
|
|
return 0 unless $next;
|
|
|
|
if( $next eq 'x' ) {
|
|
return find($t+1, @buses );
|
|
}
|
|
|
|
my $n = $t / $next;
|
|
my $nint = int $n;
|
|
|
|
if( $nint == $n ) {
|
|
return find( $t+1, @buses );
|
|
}
|
|
|
|
return (1+$nint)*$next;
|
|
|
|
}
|
|
|
|
sub solution(@buses) {
|
|
@buses = map { $_ eq 'x'?1:$_
|
|
} @buses;
|
|
|
|
my $t = 1;
|
|
T: while() {
|
|
my $i = 0;
|
|
my @min = map {
|
|
my $s = $t + $i++;
|
|
$_ * ceil($s/$_);
|
|
} @buses;
|
|
warn join " ", @min;
|
|
for(0..$#min-1) {
|
|
if( $min[$_] != $min[$_+1]-1 ) {
|
|
$t = max map { $min[$_] - $_ } 0..$#min;
|
|
next T;
|
|
}
|
|
}
|
|
return $t;
|
|
}
|
|
}
|
|
|
|
1;
|