Knuth's algorithm S: Difference between revisions
→{{header|Java}}: Minor simplifications to both existing solutions.
(→{{header|Kotlin}}: Minor improvements to existing class based solution. Added alternative function based solution.) |
(→{{header|Java}}: Minor simplifications to both existing solutions.) |
||
Line 813:
=={{header|Java}}==
A class-based solution:
<lang java>import java.util.*;
class SOfN<T> {
private static final Random rand = new Random();
private List<T> sample;
private int i = 0;
private int n;
public SOfN(int _n) {
}
public List<T> process(T item) {
▲ if (i <= n) {
sample.add(item);
}
▲ }
}
}
public class AlgorithmS {
public static void main(String[] args) {
for (int s : s_of_n.process(9)) bin[s]++;
▲ for (int i = 0; i < 10; i++)
}
▲ }
▲ System.out.println(Arrays.toString(bin));
}
}</lang>
Sample output:
<pre>[
Alternative solution without using an explicitly named type; instead using an anonymous class implementing a generic "function" interface:
<lang java>import java.util.*;
interface Function<S, T> {
public T call(S x);
}
public class AlgorithmS {
private static final Random rand = new Random();
public static <T> Function<T, List<T>> s_of_n_creator(final int n) {
▲ if (i <= n) {
} else if (rand.nextInt(i) < n) {
▲ sample.add(item);
}
}
▲ return sample;
}
public static void main(String[] args) {
for (int i = 0; i < 9; i++) s_of_n.call(i);
}
▲ }
▲ System.out.println(Arrays.toString(bin));
}
}</lang>
Sample output:
<pre>[29965, 30178, 29956, 29957, 30016, 30114, 29977, 29996, 29982, 29859]</pre>
=={{header|Julia}}==
{{works with|Julia|0.6}}
|