day 16.1 down to 1.5 seconds !!

This commit is contained in:
ryan 2023-11-23 12:13:24 -08:00
parent 5c0d7867a4
commit 2a515a5323

View File

@ -136,16 +136,20 @@ let%expect_test "Day 16.1" =
[%expect {| 2265 |}]
;;
(* still takes 10 seconds >:( *)
(* down to 1.5 seconds! bitmasks ???? *)
let%expect_test "Day 16.2" =
let valves, get_dist = parse_valves @@ Utils.lines_of_input 16 in
let states = traverse get_dist valves "AA" 26 0 StrSet.empty in
let states =
traverse get_dist valves "AA" 26 0 StrSet.empty
|> Iter.of_hashtbl
|> Iter.sort ~cmp:(fun (_, a_score) (_, b_score) -> b_score - a_score)
in
let best =
states
|> Iter.of_hashtbl
|> Iter.diagonal
|> Iter.filter_map (fun ((a_set, a_score), (b_set, b_score)) ->
if StrSet.disjoint a_set b_set then Some (a_score + b_score) else None)
|> Iter.filter_map (fun (a_set, a_score) ->
match Iter.find_pred (fun (b_set, _) -> StrSet.disjoint a_set b_set) states with
| Some (_, b_score) -> Some (a_score + b_score)
| None -> None)
|> Iter.fold Int.max 0
in
Printf.printf "%i\n" @@ best;