One of n lines in a file: Difference between revisions
Content added Content deleted
(added ocaml) |
|||
Line 109: | Line 109: | ||
Sample output:<pre>99470 99806 99757 99921 100213 100001 99778 100385 100081 100588</pre> |
Sample output:<pre>99470 99806 99757 99921 100213 100001 99778 100385 100081 100588</pre> |
||
=={{header|OCaml}}== |
|||
<lang ocaml>let one_of_n n = |
|||
let rec aux i r = |
|||
if i >= n then r else |
|||
if (Random.float 1.0) < (1.0 /. float (i + 1)) |
|||
then aux (succ i) i |
|||
else aux (succ i) r |
|||
in |
|||
aux 1 0 |
|||
let test ~n ~trials = |
|||
let ar = Array.make n 0 in |
|||
for i = 0 to pred trials do |
|||
let d = one_of_n n in |
|||
ar.(d) <- succ ar.(d) |
|||
done; |
|||
Array.iter (Printf.printf " %d") ar; |
|||
print_newline () |
|||
let () = |
|||
Random.self_init (); |
|||
test ~n:10 ~trials:1_000_000</lang> |
|||
Executing: |
|||
<pre> |
|||
$ ocamlopt -o one.opt one.ml |
|||
$ ./one.opt |
|||
100620 99719 99928 99864 99760 100151 99553 100529 99800 100076 |
|||
</pre> |
|||
=={{header|Perl 6}}== |
=={{header|Perl 6}}== |