// version 1.2.51 import java.util.Random val rand = Random() fun SOfNCreator(n: Int): (T) -> List { val sample = ArrayList(n) var i = 0 return { if (++i <= n) sample.add(it) else if (rand.nextInt(i) < n) sample[rand.nextInt(n)] = it sample } } fun main(args: Array) { val bin = IntArray(10) (1..100_000).forEach { val sOfn = SOfNCreator(3) for (d in 0..8) sOfn(d) for (s in sOfn(9)) bin[s]++ } println(bin.contentToString()) }