Population puzzle
Terry Judd
terry.judd at unimelb.edu.au
Mon Aug 25 01:04:30 EDT 2014
OK - I¹ll take the bait although elegant algorithms definitely aren¹t my
forte. As a result this is probably a very half-baked and inefficient
solution to the problem but it seems to work and doesn¹t have to resort to
recursion (which I can never get my head around) to generate the starting
combinations. Instead I just repeatedly randomise the order of the items
and sum them in that order until I get the required value.
Anyway, here goes (watch out for wrapped lines)
Terry...
on runIt
put the seconds into tTimer
put 100000000 into theTotal
put
"18897109,12828837,9461105,6371773,5965343,5946800,5582170,5564635,5268860,
4552402,4335391,4296250,4224851,4192887,3439809,3279833,3095313,2812896,278
3243,2710489,2543482,2356285,2226009,2149127,2142508,2134411" into
tCityPops
put empty into tKeys
put 0 into tN
repeat for each item tPop in tCityPops
add 1 to tN
put tPop into tPops[tN]
put tN & comma after tKeys
end repeat
delete last char of tKeys
put 0 into nIterations
repeat forever
add 1 to nIterations
# randomise the order of the keys
put randomiseItems(tKeys) into tX
put 0 into tTotal
repeat for each item tKey in tX
add tPops[tKey] to tTotal
if tTotal = theTotal then
# we have a winner
put itemOffset(tKey,tX) into nItem
put item 1 to nItem of tX into tY
sort items of tY ascending numeric
answer ("Items = "&tY &cr& "nIterations = "&nIterations &cr&
"Elapsed time = "&(the seconds - tTimer)&" secs")
exit to top
else
if tTotal > theTotal then
exit repeat
end if
end if
end repeat
end repeat
end runIt
function randomiseItems theItems
put empty into tItems
repeat forever
put the number of items in theItems into nItems
if nItems = 0 then exit repeat
put random(nItems) into nItem
put item nItem of theItems & comma after tItems
delete item nItem of theItems
end repeat
delete last char of tItems
return tItems
end randomiseItems
On 25/08/2014 9:52 am, "Michael Doub" <mikedoub at gmail.com> wrote:
>I know that some of the folks on this list enjoy puzzles. A friend sent
>me this one this afternoon and I thought it would be interesting to see
>the different approaches folks come up with and how fast it can be
>solved. enjoyŠ
>
>The 2010 Census puts populations of 26 largest US metro areas at
>18897109, 12828837, 9461105, 6371773, 5965343,5946800, 5582170, 5564635,
>5268860, 4552402, 4335391, 4296250, 4224851, 4192887, 3439809, 3279833,
>3095313,2812896, 2783243, 2710489, 2543482, 2356285, 2226009, 2149127,
>2142508, and 2134411.
>
>Can you find a subset of these areas where a total of exactly 100,000,000
>people live, assuming the census estimates are exactly right?
>_______________________________________________
>use-livecode mailing list
>use-livecode at lists.runrev.com
>Please visit this url to subscribe, unsubscribe and manage your
>subscription preferences:
>http://lists.runrev.com/mailman/listinfo/use-livecode
More information about the use-livecode
mailing list