improved code quality day2
This commit is contained in:
@ -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
|
||||
|
||||
25
lib/day2.ml
25
lib/day2.ml
@ -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
|
||||
|
||||
Reference in New Issue
Block a user