#load "str.cma";; let char_value c = (int_of_char c) - (int_of_char 'A') + 1;; let word_value s = let word_length = String.length s in let rec sum_letters s n = if n == 0 then char_value s.[0] else (char_value s.[n]) + (sum_letters s (n-1)) in sum_letters s (word_length - 1);; 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 = List.sort (String.compare) (List.map (fun x -> let l = String.length x in String.sub x 1 (l - 2)) (List.concat (List.map (Str.split (Str.regexp_string ",")) (lines (Sys.argv.(1))))));; let rec sum l n = match l with h :: t -> ((word_value h) * n) + (sum t (n+1)) | [] -> 0;; Printf.printf "%d\n" (sum content 1)
lundi 12 avril 2010
Project Euler #22
Inscription à :
Publier les commentaires (Atom)
Aucun commentaire:
Enregistrer un commentaire