improved code quality day2

This commit is contained in:
Klotz
2025-12-03 13:19:29 +01:00
parent 747e649db4
commit d8dc1a750a
3 changed files with 16 additions and 13 deletions

View File

@ -1,3 +1,4 @@
let () = Printf.printf "Solution Day 1 part 1: %i\n" Aoc25.Day1.day1_part1
let () = Printf.printf "Solution Day 1 part 2: %i\n" Aoc25.Day1.day1_part2
let () = Printf.printf "Solution Day 2 part 1: %i\n" Aoc25.Day2.day2_part1
let () = Printf.printf "Solution Day 2 part 2: %i\n" Aoc25.Day2.day2_part2

View File

@ -6,6 +6,8 @@ let is_valid ((start, ending): string * string) : bool =
let filtered_out = start_length mod 2 != 0 && end_length mod 2 != 0 && start_length == end_length in
not filtered_out
let generate_tuple (value : string) : (string * string) =
let split = String.split_on_char '-' value in
match split with
@ -25,34 +27,33 @@ let is_invalid (number: int) : bool =
let invalid = is_even && first_part = last_part in
invalid
let is_invalid_2 (number: int) : bool =
let number_string = string_of_int number in
let pattern = Str.regexp "\\(.+\\)\\1+$" in
Str.string_match pattern number_string 0
let calculate_for_line ((start, ending) : (string * string)) : int =
let calculate_for_line ((start, ending) : (string * string)) (inv: int -> bool) : int =
let start_number = int_of_string start in
let end_number = int_of_string ending in
let rec loop i acc =
if i > end_number then acc
else loop (i + 1) (acc + if is_invalid i then i else 0)
else loop (i + 1) (acc + if inv i then i else 0)
in
loop start_number 0
let rec calculate_invalidities (entries: (string * string) list) (result : int): int =
match entries with
| x :: xs -> calculate_invalidities xs (result + calculate_for_line x)
| _ -> result
let calculate_invalidities entries inv =
List.fold_left (fun acc entry -> acc + calculate_for_line entry inv) 0 entries
let solve_part1 (inputs: string list) : int =
let inputs = generate_pairs inputs in
let filtered = List.filter is_valid inputs in
let result = 0 in
calculate_invalidities filtered result
calculate_invalidities filtered is_invalid
let solve_part2 (inputs: string list) : int =
List.length inputs
let inputs = generate_pairs inputs in
calculate_invalidities inputs is_invalid_2
let day2_part1 : int =
solve_part1 input

View File

@ -1,2 +1,3 @@
(library
(name aoc25))
(name aoc25)
(libraries str))