36 lines
1.1 KiB
Text
36 lines
1.1 KiB
Text
import "random" for Random
|
|
import "./fmt" for Fmt
|
|
|
|
var letters = ["aleph", "beth", "gimel", "daleth", "he", "waw", "zayin", "heth"]
|
|
var actual = [0] * 8
|
|
var probs = [1/5, 1/6, 1/7, 1/8, 1/9, 1/10, 1/11, 0]
|
|
var cumProbs = [0] * 8
|
|
|
|
cumProbs[0] = probs[0]
|
|
for (i in 1..6) cumProbs[i] = cumProbs[i-1] + probs[i]
|
|
cumProbs[7] = 1
|
|
probs[7] = 1 - cumProbs[6]
|
|
var n = 1e6
|
|
var rand = Random.new()
|
|
(1..n).each { |i|
|
|
var r = rand.float()
|
|
var index = (r <= cumProbs[0]) ? 0 :
|
|
(r <= cumProbs[1]) ? 1 :
|
|
(r <= cumProbs[2]) ? 2 :
|
|
(r <= cumProbs[3]) ? 3 :
|
|
(r <= cumProbs[4]) ? 4 :
|
|
(r <= cumProbs[5]) ? 5 :
|
|
(r <= cumProbs[6]) ? 6 : 7
|
|
actual[index] = actual[index] + 1
|
|
}
|
|
|
|
var sumActual = 0
|
|
System.print("Letter\t Actual Expected")
|
|
System.print("------\t-------- --------")
|
|
for (i in 0..7) {
|
|
var generated = actual[i]/n
|
|
Fmt.print("$s\t$8.6f $8.6f", letters[i], generated, probs[i])
|
|
sumActual = sumActual + generated
|
|
}
|
|
System.print("\t-------- --------")
|
|
Fmt.print("\t$8.6f 1.000000", sumActual)
|