Statistics/Normal distribution

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])
}

Output:

m: 50.0044648656132082719355525236118745075786781776
s: 3.98637441101167732229937662764717350787129665319
32  ⎸
33  ⎸
34  ⎸
35  ⎸
36  ▏
37  ▍
38  ▊
39  █▌
40  ███▏
41  █████▋
42  █████████▌
43  ███████████████▎
44  ███████████████████████⎸
45  ████████████████████████████████▌
46  ██████████████████████████████████████████▉
47  ██████████████████████████████████████████████████████▌
48  ████████████████████████████████████████████████████████████████▍
49  ██████████████████████████████████████████████████████████████████████⎸
50  ████████████████████████████████████████████████████████████████████████▏
51  ██████████████████████████████████████████████████████████████████████▎
52  ███████████████████████████████████████████████████████████████▍
53  █████████████████████████████████████████████████████▍
54  ██████████████████████████████████████████▊
55  ████████████████████████████████▋
56  ███████████████████████▏
57  ███████████████▌
58  █████████▋
59  ██████⎸
60  ███▎
61  █▊
62  ▋
63  ▎
64  ▏
65  ⎸
66  ⎸
67  ⎸
68  ⎸