2024 day 14 part 2

This commit is contained in:
2024-12-14 08:48:36 +00:00
parent ccf4847c2b
commit 2afe323aec

View File

@@ -38,7 +38,23 @@ let loc_counts map p =
let idx = get_quadrant p in let idx = get_quadrant p in
IntMap.update idx update_count map IntMap.update idx update_count map
let part robots = let print_locs lst =
let a = Array.make_matrix height width '.' in
let rec impl = function
| [] -> ()
| (x, y) :: t ->
if a.(y).(x) = '.' then a.(y).(x) <- '1'
else a.(y).(x) <- char_of_int (1 + int_of_char a.(y).(x));
impl t
in
impl lst;
Array.iter
(fun r ->
Array.iter print_char r;
print_newline ())
a
let part1 robots =
let counts = let counts =
robots robots
|> List.map normalize_velocity |> List.map normalize_velocity
@@ -48,4 +64,23 @@ let part robots =
in in
IntMap.fold (fun _ v acc -> acc * v) counts 1 IntMap.fold (fun _ v acc -> acc * v) counts 1
let _ = Aoc.main robots_of_file [ (string_of_int, part) ] let find_tree max_n lst =
let num_robots = List.length lst in
let rec impl n =
if n > max_n then failwith "None found"
else
let poses = List.map (calc_pos_after n) lst in
if List.length (List.sort_uniq Aoc.IntPair.compare poses) = num_robots
then (
print_locs poses;
n)
else impl (n + 1)
in
impl 0
let part2 robots =
let robots = List.map normalize_velocity robots in
find_tree 100000 robots
let _ =
Aoc.main robots_of_file [ (string_of_int, part1); (string_of_int, part2) ]