diff options
| author | Alexandre Jesus <adbjesus@gmail.com> | 2025-12-03 21:05:57 +0000 |
|---|---|---|
| committer | Alexandre Jesus <adbjesus@gmail.com> | 2025-12-03 21:05:57 +0000 |
| commit | 6d80c94eb7ea8ac0421df0832409b63be7c1246a (patch) | |
| tree | 675ceb3feb257c4986860b4a10de5becc677a94a /lib | |
| parent | c260cea076a5dda847e108454aedc10385ea5c10 (diff) | |
| download | aoc2025-6d80c94eb7ea8ac0421df0832409b63be7c1246a.tar.gz aoc2025-6d80c94eb7ea8ac0421df0832409b63be7c1246a.zip | |
Setup ocamlformat
Define a initial setup for ocamlformat. I might still tweak the
settings in the future.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/day01.ml | 12 | ||||
| -rw-r--r-- | lib/day02.ml | 26 | ||||
| -rw-r--r-- | lib/day03.ml | 24 |
3 files changed, 25 insertions, 37 deletions
diff --git a/lib/day01.ml b/lib/day01.ml index 9a983a6..097ad28 100644 --- a/lib/day01.ml +++ b/lib/day01.ml @@ -5,10 +5,10 @@ *) let parse_rotation s = - let num = lazy (int_of_string (String.sub s 1 ((String.length s) - 1))) in + 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) + | 'L' -> -Lazy.force num | s -> failwith (Printf.sprintf "Unknown rotation %c" s) let parse_rotations ch = @@ -25,8 +25,7 @@ let part1 ch = (fun (a, p) r -> let nxt = (p + r) mod m in let inc = if nxt = 0 then 1 else 0 in - (a + inc, nxt) - ) + (a + inc, nxt)) (0, s) |> fst |> Printf.printf "%d\n" @@ -38,10 +37,9 @@ let part2 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 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) - ) + (a + inc, nxt)) (0, s) |> fst |> Printf.printf "%d\n" diff --git a/lib/day02.ml b/lib/day02.ml index b751fbd..4bce292 100644 --- a/lib/day02.ml +++ b/lib/day02.ml @@ -6,7 +6,7 @@ let parse_range s = match String.split_on_char '-' s with - | [a; b] -> (int_of_string a, int_of_string b) + | [ a; b ] -> (int_of_string a, int_of_string b) | _ -> failwith ("Invalid range " ^ s) let parse_ranges ch = @@ -16,11 +16,11 @@ let parse_ranges ch = |> List.map parse_range let is_invalid s cnt = - cnt > 0 && - (String.length s) mod cnt = 0 && - String.to_seqi s - |> Seq.drop cnt - |> Seq.for_all (fun (i, c) -> c = s.[i - cnt]) + cnt > 0 + && String.length s mod cnt = 0 + && String.to_seqi s + |> Seq.drop cnt + |> Seq.for_all (fun (i, c) -> c = s.[i - cnt]) let is_invalid_part1 a = let s = string_of_int a in @@ -31,23 +31,19 @@ let sum_invalid_ids invalid_fn (a, b) = Seq.ints a |> Seq.take (b - a + 1) |> Seq.filter invalid_fn - |> Seq.fold_left (+) 0 + |> Seq.fold_left ( + ) 0 let solve ch invalid_fn = parse_ranges ch |> List.map (sum_invalid_ids invalid_fn) - |> List.fold_left (+) 0 + |> List.fold_left ( + ) 0 |> Printf.printf "%d\n" -let part1 ch = - solve ch is_invalid_part1 +let part1 ch = solve ch is_invalid_part1 let is_invalid_part2 a = let s = string_of_int a in let l = String.length s in - Seq.ints 1 - |> Seq.take (l / 2) - |> Seq.exists (is_invalid s) + Seq.ints 1 |> Seq.take (l / 2) |> Seq.exists (is_invalid s) -let part2 ch = - solve ch is_invalid_part2 +let part2 ch = solve ch is_invalid_part2 diff --git a/lib/day03.ml b/lib/day03.ml index 4e535b2..a5fab4a 100644 --- a/lib/day03.ml +++ b/lib/day03.ml @@ -14,18 +14,16 @@ let parse_data ch = - Keep track of the number [k = |bat| - n] of banks that can be discarded Then process banks sequentially according to the following steps: - - While the stack is not empty, [k > 0], and the current bank is bigger - than the one at the top of the stack, pop a bank from the stack and - reduce [k] by 1 + - While the stack is not empty, [k > 0], and the current bank is bigger than + the one at the top of the stack, pop a bank from the stack and reduce [k] + by 1 - Insert the bank into the stack if the size of the stack is less then [n] - Otherwise, don't insert the bank, and reduce [k] by 1 At the end the stack contains the relevant banks, in reverse order. - Since each bank is inserted, and removed, at most once from the - stack, and all operations are [O(1)] the complexity is - [O(|bat|)]. - *) + Since each bank is inserted, and removed, at most once from the stack, and + all operations are [O(1)] the complexity is [O(|bat|)]. *) let joltage n bat = let rec fn s k m l = match Seq.uncons l with @@ -34,13 +32,10 @@ let joltage n bat = let digit c = int_of_char c - zero in List.rev_map digit s |> List.fold_left (fun a v -> (a * 10) + v) 0 | Some (h, t) -> ( - match s with - | sh :: st when k > 0 && sh < h -> - fn st (k - 1) (m - 1) l - | s when m < n -> - fn (h :: s) k (m + 1) t - | s -> - fn s (k - 1) m t ) + match s with + | sh :: st when k > 0 && sh < h -> fn st (k - 1) (m - 1) l + | s when m < n -> fn (h :: s) k (m + 1) t + | s -> fn s (k - 1) m t) in let k = String.length bat - n in fn [] k 0 (String.to_seq bat) @@ -52,5 +47,4 @@ let solve ch n = |> Printf.printf "%d\n" let part1 ch = solve ch 2 - let part2 ch = solve ch 12 |
