Anadromes: Difference between revisions

add OCaml
(add OCaml)
Line 570:
sallets <=> stellas
sennits <=> stinnes
</pre>
 
=={{header|OCaml}}==
<syntaxhighlight lang="ocaml">module StrSet = Set.Make(String)
 
let read_line_seq ch =
let rec repeat () =
match input_line ch with
| s -> Seq.Cons (s, repeat)
| exception End_of_file -> Nil
in repeat
 
let string_rev s =
let last = pred (String.length s) in
String.init (succ last) (fun i -> s.[last - i])
 
let get_anadromes set =
let aux s =
let r = string_rev s in
if s < r && StrSet.mem r set
then Some (s, r)
else None
in
Seq.filter_map aux (StrSet.to_seq set)
 
let () = read_line_seq stdin |> Seq.filter (fun s -> String.length s > 6)
|> Seq.map String.lowercase_ascii |> StrSet.of_seq |> get_anadromes
|> Seq.iter (fun (s, r) -> Printf.printf "%9s | %s\n" s r)</syntaxhighlight>
{{out}}
<pre>
amaroid | diorama
anacara | aracana
annabal | labanna
artamus | sumatra
colbert | trebloc
degener | reneged
deifier | reified
delbert | trebled
delevan | naveled
deliver | reviled
dessert | tressed
desserts | stressed
deviler | relived
dioramas | samaroid
eimmart | trammie
emmeram | maremme
gateman | nametag
latimer | remital
lattimer | remittal
lessees | seessel
leveler | relevel
nicolaus | sualocin
pat-pat | tap-tap
redrawer | rewarder
reknits | stinker
relever | reveler
reliver | reviler
revotes | setover
rotanev | venator
roygbiv | vibgyor
sallets | stellas
sennits | stinnes
</pre>
 
559

edits