Anagrams: Difference between revisions
Content deleted Content added
Line 371: | Line 371: | ||
{{abel,able,bale,bela,elba},{caret,carte,cater,crate,trace},{angel,angle,galen,glean,lange},{alger,glare,lager,large,regal},{elan,lane,lean,lena,neal},{evil,levi,live,veil,vile}} |
{{abel,able,bale,bela,elba},{caret,carte,cater,crate,trace},{angel,angle,galen,glean,lange},{alger,glare,lager,large,regal},{elan,lane,lean,lena,neal},{evil,levi,live,veil,vile}} |
||
</lang> |
</lang> |
||
=={{header|OCaml}}== |
|||
<lang ocaml>let explode str = |
|||
let l = ref [] in |
|||
let len = String.length str in |
|||
for i = len - 1 downto 0 do |
|||
l := str.[i] :: !l |
|||
done; |
|||
(!l) |
|||
let implode li = |
|||
let len = List.length li in |
|||
let s = String.create len in |
|||
ignore( |
|||
List.fold_left (fun i c -> |
|||
s.[i] <- c; succ i |
|||
) 0 li); |
|||
(s) |
|||
let () = |
|||
let h = Hashtbl.create 3571 in |
|||
let ic = open_in "unixdict.txt" in |
|||
try while true do |
|||
let w = input_line ic in |
|||
let k = implode(List.sort compare (explode w)) in |
|||
let l = |
|||
try Hashtbl.find h k |
|||
with Not_found -> [] |
|||
in |
|||
Hashtbl.add h k (w::l); |
|||
done with End_of_file -> (); |
|||
let n = Hashtbl.fold (fun _ lw n -> max n (List.length lw)) h 0 in |
|||
Hashtbl.iter (fun _ lw -> |
|||
if List.length lw >= n then |
|||
( List.iter (Printf.printf " %s") lw; |
|||
print_newline()) |
|||
) h; |
|||
;;</lang> |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |