-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquine3.ml
36 lines (30 loc) · 791 Bytes
/
quine3.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
(*#use "binword.ml";;
*)
let quine accepted_words =
let rec merge w words merged used =
match words with
| x::r ->
if hamming_distance w x = 1 then
merge w r ((merge_word w x)::merged) (x::used)
else
merge w r merged used
| _ -> merged, used
in
let rec step words accu matched prime = match words with
| x::r ->
let (merged, used) = merge x r [] [] in
if merged <> [] then
step r (merged@accu) (used@matched) prime
else
step r accu matched (x::prime)
| _ -> accu, matched, prime
in
let rec aux words accu =
if words <> [] then
let new_words, matched, prime = step words [] [] [] in
(* supprimer les doublons avant ? *)
aux new_words (prime@accu)
else
accu
in aux accepted_words []
;;