looping through possible combinations of McNuggets packs of 6, 9 and 20

Mel mwilson at the-wire.com
Mon Aug 16 15:52:41 EDT 2010


Baba wrote:
[ ... ]
> Now, i believe that the number of consecutive passes required to make
> this work is equal to the smallest number of pack sizes. So if we have
> packs of (9,12,21) the number of passes needed would be 9 and the
> theorem would read
> 
> "If it is possible to buy n,n+1,n+2,...n+8 nuggets it is possible to
> buy any number of nuggets >= 9 given that they come in packs of
> 9,12,21"

That's the proper statement.
> 
> However i turn in circles because i don't seem to get any results for
> some random pack combinations like (9,12,21) or (10,20,30).

That "if it is possible" is the big if.  If every package you can buy has a 
multiple of 3, then every possible purchase will be a multiple of 3.  
Nothing that leaves a remainder of 1 or 2 will ever show up.
> 
> The must always be a solution i'm thinking, be it the smallest pack -
> 1

The set (9/3, 12/3, 21/3) settles down pretty quickly:

>>> s = nuggets.buyable_set ((3, 4, 7))
>>> nuggets.print_from (s, xrange(20))
0	set([])
3	set([0])
4	set([0])
6	set([3])
7	set([0, 3, 4])
8	set([4])
9	set([6])
10	set([3, 6, 7])
11	set([8, 4, 7])
12	set([8, 9])
13	set([9, 10, 6])
14	set([10, 11, 7])
15	set([8, 11, 12])
16	set([9, 12, 13])
17	set([10, 13, 14])
18	set([11, 14, 15])
19	set([16, 12, 15])
>>> 

The printout here is the 'genaeology' of each purchase -- the set of smaller 
purchases from which you can reach each one.  After ...,6,7,8,... every 
larger number can be reached.

	Mel.




More information about the Python-list mailing list