diff options
| author | Alexandre Jesus <adbjesus@gmail.com> | 2025-12-01 13:39:12 +0000 |
|---|---|---|
| committer | Alexandre Jesus <adbjesus@gmail.com> | 2025-12-01 13:50:17 +0000 |
| commit | 04381ba237f9bc3c0a28d7c8fa5f6f748a9997e9 (patch) | |
| tree | a6cca70de40ea4429f469a4bb5796f3d49b0e89e | |
| parent | d7b315005ca063df0ae734cc8804ee3ce2c20e84 (diff) | |
| download | aoc2025-04381ba237f9bc3c0a28d7c8fa5f6f748a9997e9.tar.gz aoc2025-04381ba237f9bc3c0a28d7c8fa5f6f748a9997e9.zip | |
Day 1
| -rw-r--r-- | .gitmodules | 4 | ||||
| -rw-r--r-- | 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 <https://adbjesus.com> +# +# 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" |
