summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/day01.ml12
-rw-r--r--lib/day02.ml26
-rw-r--r--lib/day03.ml24
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