looping through possible combinations of McNuggets packs of 6, 9 and 20
John Posner
jjposner at optimum.net
Thu Aug 12 16:51:05 EDT 2010
On 8/12/2010 9:22 AM, Dave Angel wrote:
>>
>> Now you have to find the largest number below 120, which you can
>> easily do with brute force
Dept of overkill, iterators/generators division ...
-John
#------------------
from itertools import imap, product, ifilter
from operator import mul
box_sizes = (6, 9, 20)
def sum_product(s1, s2):
"""
return "scalar product" of two sequences
"""
return sum(imap(mul, s1, s2))
def reachables(target):
"""
return generator of numbers that are <= target
and are valid linear combos of McNuggets
"""
candidate_box_counts = product(
xrange(target/box_sizes[0] + 1),
xrange(target/box_sizes[1] + 1),
xrange(target/box_sizes[2] + 1),
)
gen = (sum_product(box_sizes, tup)
for tup in candidate_box_counts)
return (ifilter(lambda val, tgt=target: val < tgt,
gen))
if __name__ == "__main__":
tgt = 120 # thanks, Dave Angel
unreachables = set(xrange(tgt)) - set(reachables(tgt))
print "Max unreachable:", max(unreachables)
More information about the Python-list
mailing list