From 04381ba237f9bc3c0a28d7c8fa5f6f748a9997e9 Mon Sep 17 00:00:00 2001 From: Alexandre Jesus Date: Mon, 1 Dec 2025 13:39:12 +0000 Subject: Day 1 --- .gitmodules | 4 ++++ lib/day01.ml | 44 ++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index 0de780d..12c8bea 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: Copyright 2025 Alexandre Jesus +# +# SPDX-License-Identifier: CC0-1.0 + [submodule "data"] path = data url = git@git.adbjesus.com:aoc2025data diff --git a/lib/day01.ml b/lib/day01.ml index e1d6457..9a983a6 100644 --- a/lib/day01.ml +++ b/lib/day01.ml @@ -4,8 +4,44 @@ * SPDX-License-Identifier: GPL-3.0-or-later *) -let part1 _ch = - failwith "Unimplemented" +let parse_rotation s = + let num = lazy (int_of_string (String.sub s 1 ((String.length s) - 1))) in + match s.[0] with + | 'R' -> Lazy.force num + | 'L' -> -(Lazy.force num) + | s -> failwith (Printf.sprintf "Unknown rotation %c" s) -let part2 _ch = - failwith "Unimplemented" +let parse_rotations ch = + In_channel.input_all ch + |> String.trim + |> String.split_on_char '\n' + |> List.map parse_rotation + +let part1 ch = + let m = 100 in + let s = 50 in + parse_rotations ch + |> List.fold_left + (fun (a, p) r -> + let nxt = (p + r) mod m in + let inc = if nxt = 0 then 1 else 0 in + (a + inc, nxt) + ) + (0, s) + |> fst + |> Printf.printf "%d\n" + +let part2 ch = + let m = 100 in + let s = 50 in + parse_rotations ch + |> List.fold_left + (fun (a, p) r -> + let nxt = p + r in + let inc = (abs nxt) / m + if p > 0 && nxt <= 0 then 1 else 0 in + let nxt = ((nxt mod m) + m) mod m in + (a + inc, nxt) + ) + (0, s) + |> fst + |> Printf.printf "%d\n" -- cgit v1.2.3