···
let filename = "./day_01_input.txt"
2
+
let try_read ic = try Some (input_line ic) with End_of_file -> None
4
-
let ic = open_in filename in
5
+
Str.split_delim (Str.regexp " ") s |> List.map int_of_string
6
-
let try_read () = try Some (input_line ic) with End_of_file -> None in
7
+
let rec read_lines left right ic =
8
+
match try_read ic with
10
+
line_to_ints line |> fun ints ->
12
+
| [ a; b ] -> read_lines (a :: left) (b :: right) ic
13
+
| _ -> failwith "invalid")
16
+
(List.sort compare left, List.sort compare right)
8
-
let rec read_lines left right =
9
-
match try_read () with
12
-
Str.split_delim (Str.regexp " ") line |> List.map int_of_string
15
-
| [ a; b ] -> read_lines (a :: left) (b :: right)
16
-
| _ -> failwith "invalid")
19
-
(List.sort compare left, List.sort compare right)
21
-
let left, right = read_lines [] [] in
23
-
List.map2 ( - ) left right |> List.map abs |> List.fold_left ( + ) 0
25
-
Printf.sprintf "Sum %d" sum |> print_endline;
28
-
(fun x -> x * (List.filter (fun y -> x == y) right |> List.length))
30
-
|> List.fold_left ( + ) 0
32
-
Printf.sprintf "Sim %d" sim |> print_endline
18
+
let calc_sum left right =
19
+
List.map2 ( - ) left right |> List.map abs |> List.fold_left ( + ) 0
21
+
let calc_sim left right =
23
+
(fun x -> x * (List.filter (fun y -> x == y) right |> List.length))
25
+
|> List.fold_left ( + ) 0
28
+
let left, right = open_in filename |> read_lines [] [] in
29
+
calc_sum left right |> Printf.sprintf "Sum %d" |> print_endline;
30
+
calc_sim left right |> Printf.sprintf "Sim %d" |> print_endline