Knuth's algorithm S: Difference between revisions

Content added Content deleted
(Added 11l)
Line 1,142: Line 1,142:
[30172, 29856, 30132, 29884, 29818, 30220, 29900, 30069, 29869, 30080]
[30172, 29856, 30132, 29884, 29818, 30220, 29900, 30069, 29869, 30080]
</pre>
</pre>

=={{header|Nim}}==

<lang Nim>import random

func sOfNCreator[T](n: Positive): proc(item: T): seq[T] =
var sample = newSeqOfCap[T](n)
var i = 0

result = proc(item: T): seq[T] =
inc i
if i <= n:
sample.add(item)
elif rand(1..i) <= n:
sample[rand(n - 1)] = item
sample

when isMainModule:

randomize()

echo "Digits counts for 100_000 runs:"
var hist: array[10, Natural]
for _ in 1..100_000:
let sOfN = sOfNCreator[Natural](3)
for i in 0..8:
discard sOfN(i)
for val in sOfN(9):
inc hist[val]

for n, count in hist:
echo n, ": ", count</lang>

{{out}}
<pre>Digits counts for 100_000 runs:
0: 30092
1: 29906
2: 29956
3: 29896
4: 30151
5: 30000
6: 30267
7: 29853
8: 30186
9: 29693</pre>


=={{header|Objective-C}}==
=={{header|Objective-C}}==