34 lines
858 B
OCaml
34 lines
858 B
OCaml
module StrSet = Set.Make(String)
|
|
|
|
let str_rev s =
|
|
let len = String.length s in
|
|
let r = Bytes.create len in
|
|
for i = 0 to len - 1 do
|
|
Bytes.set r i s.[len - 1 - i]
|
|
done;
|
|
Bytes.to_string r
|
|
|
|
let input_line_opt ic =
|
|
try Some (input_line ic)
|
|
with End_of_file -> close_in ic; None
|
|
|
|
let () =
|
|
let ic = open_in "unixdict.txt" in
|
|
let rec aux set acc =
|
|
match input_line_opt ic with
|
|
| Some word ->
|
|
let rev = str_rev word in
|
|
if StrSet.mem rev set
|
|
then aux set ((word, rev) :: acc)
|
|
else aux (StrSet.add word set) acc
|
|
| None ->
|
|
(acc)
|
|
in
|
|
let pairs = aux StrSet.empty [] in
|
|
let len = List.length pairs in
|
|
Printf.printf "Semordnilap pairs: %d\n" len;
|
|
Random.self_init ();
|
|
for i = 1 to 5 do
|
|
let (word, rev) = List.nth pairs (Random.int len) in
|
|
Printf.printf " %s %s\n" word rev
|
|
done
|