44 lines
668 B
Perl
44 lines
668 B
Perl
|
use 5.20.0;
|
||
|
|
||
|
my @gifts = map { 0+$_} <>;
|
||
|
|
||
|
use List::AllUtils qw/ sum product min /;
|
||
|
|
||
|
my $goal = sum(@gifts)/4;
|
||
|
|
||
|
use experimental qw/ signatures postderef /;
|
||
|
|
||
|
use DDP;
|
||
|
|
||
|
my @min = ( 1 ) x $goal;
|
||
|
my $min = 1E99;
|
||
|
|
||
|
aggregate( \@gifts, $goal );
|
||
|
|
||
|
|
||
|
sub aggregate($gifts,$goal,@sofar) {
|
||
|
use DDP;
|
||
|
# p @_;
|
||
|
|
||
|
return if $goal < 0;
|
||
|
|
||
|
return if @sofar > @min;
|
||
|
return if product(@sofar) > $min;
|
||
|
|
||
|
if($goal == 0) {
|
||
|
@min = @sofar;
|
||
|
$min = product(@min);
|
||
|
say $min;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
return unless @$gifts;
|
||
|
|
||
|
my( $i, @gifts) = @$gifts;
|
||
|
|
||
|
aggregate( \@gifts, $goal - $i, @sofar, $i );
|
||
|
aggregate( \@gifts, $goal, @sofar );
|
||
|
|
||
|
}
|
||
|
|