summaryrefslogtreecommitdiff
path: root/2024/OCaml/lib/day_03
diff options
context:
space:
mode:
authorDJ O'Leary <dijitol@proton.me>2025-03-03 00:56:33 +0100
committerDJ O'Leary <dijitol@proton.me>2025-03-03 00:56:33 +0100
commite24effa8fd3574e9d396be0e1a47f101c27c0a60 (patch)
tree793896d20384facd10d925e09f8f0dd89c930cce /2024/OCaml/lib/day_03
perf: Merge Advent of Code year specific repos
Diffstat (limited to '2024/OCaml/lib/day_03')
-rw-r--r--2024/OCaml/lib/day_03/part_01.ml33
1 files changed, 33 insertions, 0 deletions
diff --git a/2024/OCaml/lib/day_03/part_01.ml b/2024/OCaml/lib/day_03/part_01.ml
new file mode 100644
index 0000000..c12b68a
--- /dev/null
+++ b/2024/OCaml/lib/day_03/part_01.ml
@@ -0,0 +1,33 @@
+(* Day 3: Part 1 *)
+
+let find_mul text =
+ let regex_or_err = Re2.create "mul\\(([0-9]{1,3}),([0-9]{1,3})\\)" in
+ match regex_or_err with
+ | Ok regex -> (
+ let matches = Re2.get_matches regex text in
+ match matches with Ok matches -> matches | Error _ -> [])
+ | Error _ -> []
+
+let extract_pairs (matches : Re2.Match.t list) : (int * int) list =
+ List.map
+ (fun x ->
+ let left = Re2.Match.get x ~sub:(`Index 1) in
+ match left with
+ | None -> (0, 0)
+ | Some left -> (
+ let left_num = int_of_string left in
+ let right = Re2.Match.get x ~sub:(`Index 2) in
+ match right with
+ | None -> (0, 0)
+ | Some right ->
+ let right_num = int_of_string right in
+ (left_num, right_num)))
+ matches
+
+let solve input =
+ input |> find_mul |> extract_pairs
+ |> List.fold_left
+ (fun acc pair ->
+ let left, right = pair in
+ acc + (left * right))
+ 0