(* I'd previously written this in Perl, but I didn't have the Perl version handy when I wanted to shuffle Bea's MP3 library through mplayer: find "$1" -name "*.mp3" | /home/kragen/bin/unsort | \ while read song ; do /home/kragen/bin/mplayer "$song" < /dev/tty ; done *)
(* randomly reorder the lines in a short file given on stdin *) (* my first useful OCaml program *) (* I wonder if there's an efficient way to randomly shuffle a list without mutation? *) let randomly_reordered lines = let result = Array.of_list lines in for i = Array.length result - 1 downto 0 do let other = Random.int (i + 1) and tmp = result.(i) in result.(i) <- result.(other) ; result.(other) <- tmp done; Array.to_list result let rec input_lines () = try let line = read_line () in line :: (input_lines ()) with End_of_file -> [] ;; Random.self_init () ; List.iter print_endline (randomly_reordered (input_lines())) ;;