#load "str.cma";; #load "nums.cma";; let array_of_string delim s = Array.of_list (List.map (int_of_string) (Str.split (Str.regexp_string delim) s));; let line_stream_of_channel channel = Stream.from (fun _ -> try Some (input_line channel) with End_of_file -> None);; let lines datafile = let xs = ref [] in Stream.iter (fun x -> xs := x :: !xs) (line_stream_of_channel (open_in datafile)); List.rev !xs;; let content = Array.of_list (List.map (array_of_string " ") (lines (Sys.argv.(1))));; (* r1 - long array, r2 - short array *) let max_row r1 r2 = let lr2 = Array.length r2 in let sum = Array.make lr2 0 in for i = 0 to lr2 - 1 do sum.(i) <- max (r1.(i) + r2.(i)) (r1.(i+1) + r2.(i)) done; sum;; let calc_sum tr = let tl = Array.length tr in for n = tl - 1 downto 1 do tr.(n-1) <- (max_row tr.(n) tr.(n-1)) done; tr.(0).(0);; Printf.printf "%s\n" (string_of_int (calc_sum content))
lundi 12 avril 2010
Project Euler #18 and #67
Inscription à :
Publier les commentaires (Atom)
Aucun commentaire:
Enregistrer un commentaire