Normal distribution

sub normdist ($m, $σ) {
    my $r = sqrt -2 * log rand;
    my $Θ = τ * rand;
    $r * cos($Θ) * $σ + $m;
}

sub MAIN ($size = 100000, $mean = 50, $stddev = 4) {
    my @dataset = normdist($mean,$stddev) xx $size;

    my $m = [+](@dataset) / $size;
    say (:$m);

    my $σ = sqrt [+](@dataset X** 2) / $size - $m**2;
    say (:$σ);

    (my %hash){.round}++ for @dataset;
    my $scale = 180 * $stddev / $size;
    constant @subbar = < ⎸ ▏ ▎ ▍ ▌ ▋ ▊ ▉ █ >;
    for %hash.keys».Int.minmax(+*) -> $i {
        my $x = (%hash{$i} // 0) * $scale;
        my $full = floor $x;
        my $part = 8 * ($x - $full);
        say $i, "\t", '█' x $full, @subbar[$part];
    }
}

Output:

"m" => 50.006107405837142e0
"σ" => 4.0814435639885254e0
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      ⎸

Last updated