'Simulated U.S. 2012 Presidential election 'Using data from http://fivethirtyeight.blogs.nytimes.com 'Copyleft M. Eric Carr / Paleotechnologist.Net 'eric@paleotechnologist.net const numDistricts = 55 'Needs to be at least as many as will be read in const maxRuns=1000000000 const debug=0 type district name as string*5 'Really, abbreviations for each odds as double 'Probability of Democratic victory in this district electors as ubyte 'No state will ever have more than 255 -- right?? end type dim districts(numdistricts) as district dim as ubyte curDistrict, lastDistrict dim as ulongint numRuns, numVictories, numTies, numLosses, goodGuy, badGuy, x dim as double r dim as ulongint electoralResults(540) 'Clear the electoral results for x = 0 to 540 electoralResults(x)=0 next x 'Read in the data open "c:\Users\Eric\Desktop\Electors.txt" for input as #1 curDistrict=0 while not eof(1) curDistrict=curDistrict+1 input #1, districts(curDistrict).name input #1, districts(curDistrict).odds districts(curDistrict).odds = districts(curDistrict).odds / 100 input #1, districts(curDistrict).electors wend close #1 lastDistrict = curDistrict 'Set up the simulation numRuns=0 numVictories=0 numTies=0 numLosses=0 while numRuns badGuy then numVictories = numVictories + 1 if goodGuy = badGuy then numTies = numTies + 1 if goodGuy < badGuy then numLosses = numLosses + 1 electoralResults(goodGuy)=electoralResults(goodGuy)+1 if numRuns mod 100000 = 0 then locate 1,1 print using "###,###,###,###";numVictories; print using "###,###,###,###"; numTies; print using "###,###,###,###"; numLosses locate 2,1 print using "###.##% wins ";100*numVictories/numRuns print using "###.##% ties ";100*numTies/numRuns print using "###.##% losses ";100*numLosses/numRuns end if wend 'Output results to a file open "c:\users\Eric\Desktop\electoral_results.txt" for output as #1 for x=0 to 540 print #1, x;", ";electoralResults(x) next x close #1 print "Done!" while inkey$="" wend