Verify distribution uniformity/Naive: Difference between revisions

Added Kotlin
m (added whitespace before the TOC (table of contents), added a ;Task: (bold) header.)
(Added Kotlin)
Line 968:
 
distribution potentially skewed for 0: expected result around 50000, got 95040</pre>
 
=={{header|Kotlin}}==
<lang scala>// version 1.1.3
 
import java.util.Random
 
val r = Random()
 
fun dice5() = 1 + r.nextInt(5)
 
fun checkDist(gen: () -> Int, nRepeats: Int, tolerance: Double = 0.5) {
val occurs = mutableMapOf<Int, Int>()
for (i in 1..nRepeats) {
val d = gen()
if (occurs.containsKey(d))
occurs[d] = occurs[d]!! + 1
else
occurs.put(d, 1)
}
val expected = (nRepeats.toDouble()/ occurs.size).toInt()
val maxError = (expected * tolerance / 100.0).toInt()
println("Repetitions = $nRepeats, Expected = $expected")
println("Tolerance = $tolerance%, Max Error = $maxError\n")
println("Integer Occurrences Error Acceptable")
val f = " %d %5d %5d %s"
var allAcceptable = true
for ((k,v) in occurs.toSortedMap()) {
val error = Math.abs(v - expected)
val acceptable = if (error <= maxError) "Yes" else "No"
if (acceptable == "No") allAcceptable = false
println(f.format(k, v, error, acceptable))
}
println("\nAcceptable overall: ${if (allAcceptable) "Yes" else "No"}")
}
 
fun main(args: Array<String>) {
checkDist(::dice5, 1_000_000)
println()
checkDist(::dice5, 100_000)
}</lang>
 
Sample output:
<pre>
Repetitions = 1000000, Expected = 200000
Tolerance = 0.5%, Max Error = 1000
 
Integer Occurrences Error Acceptable
1 200074 74 Yes
2 200497 497 Yes
3 199295 705 Yes
4 199822 178 Yes
5 200312 312 Yes
 
Acceptable overall: Yes
 
Repetitions = 100000, Expected = 20000
Tolerance = 0.5%, Max Error = 100
 
Integer Occurrences Error Acceptable
1 20265 265 No
2 20229 229 No
3 19836 164 No
4 19931 69 Yes
5 19739 261 No
 
Acceptable overall: No
</pre>
 
=={{header|Liberty BASIC}}==
9,476

edits