Skip to content

Instantly share code, notes, and snippets.

@mgronhol
Created December 14, 2016 16:46
Show Gist options
  • Save mgronhol/e6b61895278452a977eda94797473c8a to your computer and use it in GitHub Desktop.
Save mgronhol/e6b61895278452a977eda94797473c8a to your computer and use it in GitHub Desktop.
Tool to bin dice throwings
#!/usr/bin/env python3
import math, random
def simuloi_nopanheittoa( d, N ):
out = []
for i in range( N ):
out.append( random.randint( 1, d ) )
return out
def simuloi_noppia( nopat, N, M ):
out = []
for i in range( N ):
tulokset = []
for d in nopat:
tulokset.append( simuloi_nopanheittoa( d, M ) )
for j in range( M ):
out.append(sum([tulokset[k][j] for k in range( len( nopat ) )]) )
return out
def rakenna_jakauma( nopat ):
# jotain isoa
N = 100
M = 100
heitot = simuloi_noppia( nopat, N, M )
heitot.sort()
histogrammi = {}
for h in heitot:
if h not in histogrammi:
histogrammi[h] = 0
histogrammi[h] += 1
for h in histogrammi:
histogrammi[h] /= float( len(heitot) )
#print( histogrammi )
return histogrammi
def pilko_laareihin( jakauma, laarit ):
koot_yhteensa = float( sum(l[1] for l in laarit) )
#print( "debug, koot ytheensa", koot_yhteensa )
kertyma = []
keys = list(jakauma.keys())
keys.sort()
for key in keys:
kertyma.append( (key, jakauma[key]) )
p = 0.0
bin_start = kertyma[0][0]
bin_stop = kertyma[-1][0]
bin_n = 0
bins = []
new_bin = True
for (silmaluku, p_bin) in kertyma:
if new_bin:
new_bin = False
p = 0.0
bin_start = silmaluku
bin_stop = kertyma[-1][0]
p += p_bin
if p >= laarit[bin_n][1]/koot_yhteensa:
#print( "debug", p, bin_n )
bin_stop = silmaluku
bins.append( (laarit[bin_n][0], bin_start, bin_stop, p, laarit[bin_n][1]/koot_yhteensa) )
bin_n += 1
new_bin = True
if not new_bin:
bins.append( (laarit[-1][0], bin_start, bin_stop, p, laarit[bin_n][1]/koot_yhteensa) )
return bins
# eli mita noppia heitetaan, silmaluvut listana esim [6,6] meinaa 2x d6
nopat = [6,6,6]
laarit = [
# (nimi, suhteellinen koko)
("A", 3 ),
("B", 10),
("C", 6)
]
jakauma = rakenna_jakauma( nopat )
tulokset = pilko_laareihin( jakauma, laarit )
# tulostaa laarin nimen, mille valille silmaluvun pitaa osua ja sit mika on laarin todennakoisyys ja mihin tahdattiin
for tulos in tulokset:
print( "%s\t[%3i, %3i] (p: %.2f, target: %.2f)" % tulos )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment