McNuggets problem: Difference between revisions

Added Perl example
m (→‎Using Set Comprehension: (preamble edits in explicit concatMap route to set comprehension))
(Added Perl example)
Line 433:
Maximum non-McNuggets number is 43
</pre>
 
=={{header|Perl}}==
{{trans|Perl 6}}
<lang perl>use List::Util qw(all min);
use ntheory qw/forperm/;
 
sub Mcnugget_number {
our @counts; local *counts = shift;
 
return 'No maximum' if all { 0 == $_%2 } @counts;
 
my $min = min @counts;
my @meals;
my @min;
 
my $a = -1;
while (1) {
$a++;
for my $b (0..$a) {
for my $c (0..$b) {
my @s = ($a, $b, $c);
forperm {
$meals[
$s[$_[0]] * $counts[0]
+ $s[$_[1]] * $counts[1]
+ $s[$_[2]] * $counts[2]
] = 1;
} @s;
}
}
for my $i (0..$#meals) {
next unless $meals[$i];
if ($min[-1] and $i == ($min[-1] + 1)) {
push @min, $i;
last if $min == @min
} else {
@min = $i;
}
}
last if $min == @min
}
$min[0] ? $min[0] - 1 : 0
}
 
for my $counts ([6,9,20], [6,7,20], [1,3,20], [10,5,18], [5,17,44], [2,4,6]) {
print 'Maximum non-Mcnugget number using ' . join(', ', @$counts) . ' is: ' . Mcnugget_number($counts) . "\n"
}</lang>
{{out}}
<pre>Maximum non-Mcnugget number using 6, 9, 20 is: 43
Maximum non-Mcnugget number using 6, 7, 20 is: 29
Maximum non-Mcnugget number using 1, 3, 20 is: 0
Maximum non-Mcnugget number using 10, 5, 18 is: 67
Maximum non-Mcnugget number using 5, 17, 44 is: 131
Maximum non-Mcnugget number using 2, 4, 6 is: No maximum</pre>
 
=={{header|Perl 6}}==
2,392

edits