Knuth's algorithm S: Difference between revisions

m
(add Haskell implementation)
Line 564:
 
=={{header|Elena}}==
ELENA 3.4.x :
<lang elena>import system'dynamic.;
import extensions.;
import system'routines.;
import system'collections.;
extension algorithmOp
{
s_of_n()
[{
var counter := Integer new. Integer();
var n := self.;
^ ArrayList new; ArrayList().mixInto:(
[{
eval(i)
{
eval counter.append: i1;
 
[
if (__target.Length < counter append:1.n)
{ ^ __target value
if (__target.append:i length < n)
[ __target append:i ];}
[ else
{ if(randomGenerator eval:counter < n)
[ __target[if(randomGenerator eval.nextInt:n]counter :=< i ].n)
]{ __target[randomGenerator.nextInt:n] := i }
};
 
^ __target value
]^ __target.Value
}.
] })
}
}
public program()
{
[
var bin := Array new:.allocate(10; ).populate:(:n)( Integer=> new Integer().);
0for(int trial till:= 0, trial < 10000, do(:trial += 1)
[{
var s_of_n := 3 s_of_n.s_of_n();
0for(int n till:= 0, n < 10, do(:n += 1)
[{
var sample := s_of_n .eval:n.;
if (n == 9)
[{ sample .forEach:(:i) [{ bin[i] .append:1 ]} ]}
]}
].};
console .printLine:bin; .readChar()
]}</lang>
{{out}}
<pre>
Anonymous user