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 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 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 1: %i\n" Aoc25.Day2.day2_part1
let () = Printf.printf "Solution Day 2 part 2: %i\n" Aoc25.Day2.day2_part2

View File

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

View File

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