From 4c3a50166bf0f78ce89459c352cc1c6536a8b96d Mon Sep 17 00:00:00 2001 From: DJ O'Leary Date: Sat, 29 Nov 2025 20:23:02 +0100 Subject: chore: make language folders snake_case --- 2024/ocaml/lib/day_05/part_01.ml | 62 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 2024/ocaml/lib/day_05/part_01.ml (limited to '2024/ocaml/lib/day_05') diff --git a/2024/ocaml/lib/day_05/part_01.ml b/2024/ocaml/lib/day_05/part_01.ml new file mode 100644 index 0000000..f32bef1 --- /dev/null +++ b/2024/ocaml/lib/day_05/part_01.ml @@ -0,0 +1,62 @@ +(* Day 5: Part 1 *) + +module StringMap = Map.Make (String) + +let inverse_page_rule page_rule = + String.split_on_char '|' page_rule |> fun lst -> + match lst with [] -> "" | _ :: _ -> String.concat "|" (List.rev lst) + +(** [parse_aux acc page_rules] is a map of all invalid transitions as defined by + [page_rules] *) +let rec get_invalid_transitions_aux acc page_rules : unit StringMap.t = + match page_rules with + | [] -> acc + | h :: t -> + get_invalid_transitions_aux + (acc |> StringMap.add (inverse_page_rule h) ()) + t + +let get_invalid_transitions page_rules = + get_invalid_transitions_aux StringMap.empty page_rules + +(** [solve page_rules updates] is the solution for this puzzle, given the + [page_rules] and a list of [updates]. + + BELOW DOESN'T WORK: no guarantee that second page comes immediately after + the first + - pass in updates to solve + - make sliding window of 2 elements + - invert element order and concat + - check if key is in map from [parse page_rules], + - if yes, then it is an illegal transition + - if no, then add the list to a list for further processing *) +let solve page_rules _ = + let invalid_transitions = get_invalid_transitions page_rules in + () + +let _ = + solve + [ + "47|53"; + "97|13"; + "97|61"; + "97|47"; + "75|29"; + "61|13"; + "75|53"; + "29|13"; + "97|29"; + "53|29"; + "61|53"; + "97|53"; + "61|29"; + "47|13"; + "75|47"; + "97|75"; + "47|61"; + "75|61"; + "47|29"; + "75|13"; + "53|13"; + ] + [] -- cgit v1.2.3