Knuth's algorithm S: Difference between revisions
Content added Content deleted
SqrtNegInf (talk | contribs) m (→{{header|Sidef}}: Fix link: Perl 6 --> Raku) |
(Added Wren) |
||
Line 1,789: | Line 1,789: | ||
freq(8) = 30060 |
freq(8) = 30060 |
||
freq(9) = 29824 |
freq(9) = 29824 |
||
</pre> |
|||
=={{header|Wren}}== |
|||
{{trans|Go}} |
|||
<lang ecmascript>import "random" for Random |
|||
var r = Random.new() |
|||
var sOfNCreator = Fn.new { |n| |
|||
var s = List.filled(n, 0) |
|||
var next = 0 |
|||
var m = n |
|||
return Fn.new { |item| |
|||
if (next < n) { |
|||
s[next] = item |
|||
next = next + 1 |
|||
} else { |
|||
m = m + 1 |
|||
if (r.int(m) < n) { |
|||
var t = r.int(n) |
|||
s[t] = item |
|||
if (next <= t) next = t + 1 |
|||
} |
|||
} |
|||
return s |
|||
} |
|||
} |
|||
var freq = List.filled(10, 0) |
|||
for (r in 0...1e5) { |
|||
var sOfN = sOfNCreator.call(3) |
|||
for (d in 48...57) sOfN.call(d) |
|||
for (d in sOfN.call(57)) { |
|||
freq[d - 48] = freq[d - 48] + 1 |
|||
} |
|||
} |
|||
System.print(freq)</lang> |
|||
{{out}} |
|||
Sample run: |
|||
<pre> |
|||
[29842, 30051, 29878, 30178, 29731, 30089, 30070, 29939, 30058, 30164] |
|||
</pre> |
</pre> |
||