RosettaCodeData/Task/Statistics-Basic/CoffeeScript/statistics-basic.coffee

37 lines
804 B
CoffeeScript

generate_statistics = (n) ->
hist = {}
update_hist = (r) ->
hist[Math.floor 10*r] ||= 0
hist[Math.floor 10*r] += 1
sum = 0
sum_squares = 0.0
for i in [1..n]
r = Math.random()
sum += r
sum_squares += r*r
update_hist r
mean = sum / n
stddev = Math.sqrt((sum_squares / n) - mean*mean)
[n, mean, stddev, hist]
display_statistics = (n, mean, stddev, hist) ->
console.log "-- Stats for sample size #{n}"
console.log "mean: #{mean}"
console.log "sdev: #{stddev}"
for x, cnt of hist
bars = repeat "=", Math.floor(cnt*300/n)
console.log "#{x/10}: #{bars} #{cnt}"
repeat = (c, n) ->
s = ''
s += c for i in [1..n]
s
for n in [100, 1000, 10000, 1000000]
[n, mean, stddev, hist] = generate_statistics n
display_statistics n, mean, stddev, hist