2024 day 23 part 2

This commit is contained in:
2024-12-23 12:04:10 +00:00
parent 84bcf31a3d
commit 4e597eacad

View File

@@ -2,12 +2,8 @@ module StringMap = Map.Make (String)
module StringSet = Set.Make (String) module StringSet = Set.Make (String)
let[@warning "-32"] print_set set = let[@warning "-32"] print_set set =
StringSet.iter StringSet.to_list set |> List.sort compare |> String.concat ","
(fun x -> |> Printf.printf "%s\n"
print_string x;
print_char ' ')
set;
print_newline ()
let[@warning "-32"] print_sets = List.iter print_set let[@warning "-32"] print_sets = List.iter print_set
@@ -88,4 +84,35 @@ let part1 connections =
print_sets rings; print_sets rings;
List.length rings List.length rings
let _ = Aoc.main load_file [ (string_of_int, part1) ] let rec search_candidate max_set connections current candidates =
match StringSet.choose_opt candidates with
| None ->
if StringSet.cardinal current > StringSet.cardinal max_set then current
else max_set
| Some h ->
let current' = StringSet.add h current in
let candidates' =
StringSet.inter candidates (StringMap.find h connections)
in
let max_set = search_candidate max_set connections current' candidates' in
search_candidate max_set connections current
(StringSet.remove h candidates)
let find_max_set connections =
let rec impl max_set = function
| [] -> max_set
| (k, v) :: t ->
impl
(search_candidate max_set connections
(StringSet.add k StringSet.empty)
v)
t
in
impl StringSet.empty (StringMap.to_list connections)
let part2 connections =
let max_set = find_max_set connections in
print_set max_set;
StringSet.cardinal max_set
let _ = Aoc.main load_file [ (string_of_int, part1); (string_of_int, part2) ]