-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathproblem14.ml
More file actions
30 lines (29 loc) · 1.15 KB
/
problem14.ml
File metadata and controls
30 lines (29 loc) · 1.15 KB
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
let rec mklist n lim acc =
match n with
| n when (n==lim) -> n::acc
| n -> mklist (n-1) lim (n::acc)
;;
let doomed_first_try n =
let hash = Hashtbl.create 5000000 in
let rec findseq n =
(*Printf.printf "checking %d\n" n; *)
match (try Hashtbl.find hash n with Not_found -> 0) with
| 0 ->
begin
match (n land 1) with
| 0 -> let value = ((findseq (n lsr 1))+1) in
Hashtbl.add hash n value;
value
| 1 -> let value = ((findseq ((n lsl 1) + n + 1)) + 1) in
Hashtbl.add hash n value;
value
| _ -> failwith "Sense. This value makes none"
end
| hashvalue -> hashvalue
in
Hashtbl.add hash 1 1;
Hashtbl.add hash 2 2;
List.fold_left (fun (num,maxn) x ->
let mynew = findseq x in
if (mynew>maxn) then (x,mynew) else (num,maxn)) (2,2) (mklist (n-1) 3 [])
;;