% Recursive nugget iterator. % This yields all the nugget numbers of the given box sizes from start to max. gen_nuggets = iter (start, max: int, sizes: sequence[int]) yields (int) si = sequence[int] if si$empty(sizes) then yield(start) else for i: int in int$from_to_by(start, max, si$bottom(sizes)) do for j: int in gen_nuggets(i, max, si$reml(sizes)) do yield(j) end end end end gen_nuggets start_up = proc () max = 100 ab = array[bool] po: stream := stream$primary_output() nuggets: ab := ab$fill(0,max+1,false) for nugget: int in gen_nuggets(0, max, sequence[int]$[6,9,20]) do nuggets[nugget] := true end maxn: int for i: int in ab$indexes(nuggets) do if ~nuggets[i] then maxn := i end end stream$putl(po, "Maximum non-McNuggets number: " || int$unparse(maxn)) end start_up