Knuth's algorithm S: Difference between revisions

→‎Tcl: Added implementation
(→‎Tcl: Added implementation)
Line 107:
The above can be instantiated as follows after which <code>s_of_n</code> can be called in the same way as it is in the first example where it is a function instead of an instance.
<lang python>s_of_n = S_of_n_creator(3)</lang>
 
=={{header|Tcl}}==
<lang tcl>package require Tcl 8.6
 
oo::class create SofN {
variable items size count
constructor {n} {
set size $n
}
method item {item} {
if {[incr count] <= $size} {
lappend items $item
} elseif {rand()*$count < $size} {
lset items [expr {int($size * rand())}] $item
}
return $items
}
}
 
# Test code
for {set i 0} {$i < 100000} {incr i} {
set sOf3 [SofN new 3]
foreach digit {0 1 2 3 4 5 6 7 8 9} {
set digs [$sOf3 item $digit]
}
$sOf3 destroy
foreach digit $digs {
incr freq($digit)
}
}
parray freq</lang>
Sample output:<pre>
freq(0) = 29812
freq(1) = 30099
freq(2) = 29927
freq(3) = 30106
freq(4) = 30048
freq(5) = 29993
freq(6) = 29912
freq(7) = 30219
freq(8) = 30060
freq(9) = 29824
</pre>
Anonymous user