Hey! This post is really old. You should take it with a grain of salt.
Oh look, I made a pun.
So here's the thing. Maths teach sets this exercise where we use the random number generators on the calculator to generate a bunch of random numbers, add them together 4 at a time, do this 100 times and tally the result in order to demonstrate random data distributions. I figured there's an easier, and since we're already using the calculator pseudo-RNG and not a real random number, I thought what the hell and wrote this:
#!/usr/bin/env python
#A thing to roll some dice.
import random
import sys
def diceRoller(s,n):
r = 0
for i in range(n):
r = int(r) + random.randint(1,6)
return r
if len(sys.argv) != 4:
print "Usage: xdy.py [number of dice] [number of sides] [number of rolls]"
exit()
dice = int(sys.argv[1])
sides = int(sys.argv[2])
rolls = int(sys.argv[3])
maxroll = dice*sides
rawdata = list()
for i in range(rolls):
rawdata.append(diceRoller(sides,dice))
#print rawdata
rawdata.sort()
graphdata = dict()
for i in range(maxroll):
graphdata[i+1] = rawdata.count(i+1)
#print graphdata
for i in graphdata:
print str(i) + ":",
if rolls < 1000:
for j in range(graphdata[i]):
print "#",
print
else:
print graphdata[i]
So, a couple of points here. Key point one: I am a bit of a fail-programmer, so if you look at this and think "WTF" that's probably why.
Key point two: After having posted this I realise that sorting the data before counting it wasn't really necessary (I think that's a leftfover from the first attempt where I just printed the data straight out.). Which brings me to...
Key point three: I started this with 100 million rolls on my netbook about half an hour ago, and it maxxed the CPU, and it's still going. Pretty sure that's cause of the sorting-which-doesn't-need-doing. Gosh darn it.
Key point four: I chose 100 million because it runs out of memory at... erm, a thousand million? A billion? What do we call it? 10^9, anyway.
I plan to print out my final list of numbers and show it to the teacher, just for shiggles.
Speaking of list: it just finished. So ladies and gentlemen, I proudly present.... drum roll 100000000 rolls of 4d6!
Oh. It didn't finish. It crashed. Never mind, here's a million to tide you over:
1: 0
2: 0
3: 0
4: 780
5: 3204
6: 7711
7: 15402
8: 27017
9: 43364
10: 62143
11: 79685
12: 96621
13: 107970
14: 112631
15: 108367
16: 96390
17: 80221
18: 61420
19: 43159
20: 26855
21: 15331
22: 7872
23: 3079
24: 778
Now I should probably go and do something useful.
< On Paths Roman Newsflash. >