day 6
This commit is contained in:
parent
3e379ce59d
commit
301acdcd7c
3 changed files with 2176 additions and 0 deletions
2119
day6.input
Normal file
2119
day6.input
Normal file
File diff suppressed because it is too large
Load diff
42
day6.ml
Normal file
42
day6.ml
Normal file
|
@ -0,0 +1,42 @@
|
|||
module CS = Set.Make(Char)
|
||||
|
||||
let set_of_string str =
|
||||
let rec aux s i st =
|
||||
if i < 0 then st
|
||||
else aux s (i - 1) (CS.add s.[i] st) in
|
||||
aux str ((String.length str) - 1) CS.empty
|
||||
|
||||
let all_char_set = "abcdefghijklmnopqrstuvwxyz" |> set_of_string
|
||||
|
||||
|
||||
let read_lines name =
|
||||
let ic = open_in name in
|
||||
let try_read () =
|
||||
try Some (input_line ic)
|
||||
with End_of_file -> None in
|
||||
let rec loop acc group =
|
||||
match try_read () with
|
||||
| Some "" -> loop (group :: acc) []
|
||||
| Some s -> loop acc (s :: group)
|
||||
| None -> close_in ic; (group :: acc) in
|
||||
loop [] []
|
||||
|
||||
|
||||
let part1 filename =
|
||||
read_lines filename
|
||||
|> List.map (fun x -> x
|
||||
|> (String.concat "")
|
||||
|> set_of_string
|
||||
|> CS.cardinal)
|
||||
|> List.fold_left (+) 0
|
||||
|
||||
let part2 filename =
|
||||
read_lines filename
|
||||
|> List.map (fun x -> x
|
||||
|> List.map set_of_string
|
||||
|> List.fold_left CS.inter all_char_set
|
||||
|> CS.cardinal)
|
||||
|> List.fold_left (+) 0
|
||||
|
||||
let () = print_endline (string_of_int (part1 "day6.input"))
|
||||
let () = print_endline (string_of_int (part2 "day6.input"))
|
15
day6.test
Normal file
15
day6.test
Normal file
|
@ -0,0 +1,15 @@
|
|||
abc
|
||||
|
||||
a
|
||||
b
|
||||
c
|
||||
|
||||
ab
|
||||
ac
|
||||
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
|
||||
b
|
Loading…
Add table
Reference in a new issue