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}}==