32 lines
674 B
Text
32 lines
674 B
Text
|
|
define τ = Num.tau
|
|||
|
|
|
|||
|
|
func normdist (m, σ) {
|
|||
|
|
var r = sqrt(-2 * 1.rand.log)
|
|||
|
|
var Θ = (τ * 1.rand)
|
|||
|
|
r * Θ.cos * σ + m
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var size = 100_000
|
|||
|
|
var mean = 50
|
|||
|
|
var stddev = 4
|
|||
|
|
|
|||
|
|
var dataset = size.of { normdist(mean, stddev) }
|
|||
|
|
var m = (dataset.sum / size)
|
|||
|
|
say ("m: #{m}")
|
|||
|
|
|
|||
|
|
var σ = sqrt(dataset »**» 2 -> sum / size - m**2)
|
|||
|
|
say ("s: #{σ}")
|
|||
|
|
|
|||
|
|
var hash = Hash()
|
|||
|
|
dataset.each { |n| hash{ n.round } := 0 ++ }
|
|||
|
|
|
|||
|
|
var scale = (180 * stddev / size)
|
|||
|
|
const subbar = < ⎸ ▏ ▎ ▍ ▌ ▋ ▊ ▉ █ >
|
|||
|
|
|
|||
|
|
for i in (hash.keys.map{.to_i}.sort) {
|
|||
|
|
var x = (hash{i} * scale)
|
|||
|
|
var full = x.int
|
|||
|
|
var part = (8 * (x - full))
|
|||
|
|
say (i, "\t", '█' * full, subbar[part])
|
|||
|
|
}
|