From 791157b3035d856518044ab56dfe44071c2e63ea Mon Sep 17 00:00:00 2001 From: Acvaxoort Date: Thu, 19 Dec 2024 23:19:35 +0100 Subject: [PATCH] day19 shorter --- 19/main.ml | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/19/main.ml b/19/main.ml index 9d8c8f1..ff34c30 100644 --- a/19/main.ml +++ b/19/main.ml @@ -12,32 +12,26 @@ let get_input_lists list_of_lines = match list_of_lines with | towels_list :: _ :: tail -> (towels_list, tail) | _ -> raise (Invalid_argument "Not enough lines") - -let rec try_any_towel cache towels pattern = - towels - |> List.filter (fun towel -> - String.starts_with ~prefix:towel pattern) - |> List.map (fun towel -> - try_construct cache towels (String.sub pattern (String.length towel) (String.length pattern - String.length towel))) - |> List.fold_left Int.add 0 -and try_construct cache towels pattern = - if String.length pattern = 0 then - 1 - else - match Hashtbl.find_opt cache pattern with - | Some result -> - result - | None -> - let result = try_any_towel cache towels pattern in - Hashtbl.add cache pattern result; - result +let rec try_construct cache towels pattern = + match Hashtbl.find_opt cache pattern with + | Some result -> result + | None -> + let result = towels + |> List.filter (fun towel -> + String.starts_with ~prefix:towel pattern) + |> List.map (fun towel -> + try_construct cache towels (String.sub pattern (String.length towel) (String.length pattern - String.length towel))) + |> List.fold_left Int.add 0 in + Hashtbl.add cache pattern result; + result let () = let f = open_in "input.txt" in let towels_str, patterns_list = list_of_lines f |> get_input_lists in let towels_list = towels_str |> String.split_on_char ',' |> List.map (fun x -> x |> String.trim) in let cache = Hashtbl.create 1024 in + Hashtbl.add cache "" 1; let possibilities_list = patterns_list |> List.map (try_construct cache towels_list) in let result = possibilities_list |> List.filter (fun x-> x > 0) |> List.length in let result2 = List.fold_left Int.add 0 possibilities_list in