import rand
import math { abs }

const nmax = 20

fn ana(n int) f64 {
	return 1.0 // haven't started
}

fn avg(n int) f64 {
	tests := 1e4
	mut sum := 0
	for t := 0; t < tests; t++ {
		mut v := []bool{len: nmax, init: false}
		for x := 0; !v[x]; x = rand.intn(n) or { 0 } {
			v[x] = true
			sum++
		}
	}
	return f64(sum) / tests
}

fn main() {
	println(' N   average   analytical   (error)')
	println('=== ========= ============ =========')
	for n in 1 .. nmax + 1 {
		a := avg(n)
		b := ana(n)
		println('${n:3} ${a:9.4f} ${b:12.4f} (${(abs(a - b) / b * 100):6.2f}%)')
	}
}
