summaryrefslogtreecommitdiff
path: root/2025/ocaml/lib/application/d04p02.ml
diff options
context:
space:
mode:
authorDJ O'Leary <dijitol@proton.me>2026-06-26 18:04:09 +0200
committerDJ O'Leary <dijitol@proton.me>2026-06-26 18:04:09 +0200
commit6d8fb621d1e93b83786890d6d9cb6f0d8defa8ae (patch)
tree17c90d3984c114aa023600cc5bec6f6004b02243 /2025/ocaml/lib/application/d04p02.ml
parentad4ea5ca4bc9f7540ee1d6a4fa2d881709dc6459 (diff)
refactor!: invert repo directory structure
now is language first
Diffstat (limited to '2025/ocaml/lib/application/d04p02.ml')
-rw-r--r--2025/ocaml/lib/application/d04p02.ml64
1 files changed, 0 insertions, 64 deletions
diff --git a/2025/ocaml/lib/application/d04p02.ml b/2025/ocaml/lib/application/d04p02.ml
deleted file mode 100644
index 75b1236..0000000
--- a/2025/ocaml/lib/application/d04p02.ml
+++ /dev/null
@@ -1,64 +0,0 @@
-open Domain
-
-let err_empty_input = "input is empty"
-
-let rec count_accessible_rolls matrix =
- let count_paper lst = List.length @@ List.filter (fun c -> c = "@") lst in
- let accessible_rolls_of_paper = ref [] in
- let no_change = ref false in
- while not !no_change do
- let accessible_rolls_of_paper' = !accessible_rolls_of_paper in
- count_accessible_rolls_aux matrix count_paper accessible_rolls_of_paper ;
- if
- List.length accessible_rolls_of_paper'
- = List.length !accessible_rolls_of_paper
- then no_change := true
- done ;
- List.length !accessible_rolls_of_paper
-
-and count_accessible_rolls_aux matrix count_paper accessible_rolls_of_paper =
- for y = 0 to Array.length matrix - 1 do
- for x = 0 to Array.length matrix.(y) - 1 do
- if matrix.(y).(x) = "." then ()
- else
- let neighbour_coords = Matrix.M.get_valid_neighbours matrix x y in
- let neighbours =
- List.map (fun (nx, ny) -> Matrix.M.get matrix nx ny) neighbour_coords
- in
- let paper_count = count_paper neighbours in
- let is_accessible = paper_count < 4 in
- if is_accessible then
- accessible_rolls_of_paper := (x, y) :: !accessible_rolls_of_paper ;
- print_iteration_debug_msg x y neighbour_coords neighbours paper_count
- is_accessible
- done
- done ;
- List.iter
- (fun (x', y') -> Matrix.M.set matrix x' y' ".")
- !accessible_rolls_of_paper
-
-and print_iteration_debug_msg x y neighbour_coords neighbours paper_count
- is_accessible =
- Logs.debug (fun m ->
- m
- "coords=(%d,%d) neighbour_coords=[%s] neighbours=[%s] paper=%d \
- is_accessible=%B"
- x y
- (List.fold_left
- (fun acc (x, y) ->
- if acc = "" then
- " (" ^ string_of_int x ^ "," ^ string_of_int y ^ "); "
- else acc ^ "(" ^ string_of_int x ^ "," ^ string_of_int y ^ "); " )
- "" neighbour_coords )
- (List.fold_left
- (fun acc neighbour ->
- if acc = "" then " " ^ neighbour ^ "; " else acc ^ neighbour ^ "; " )
- "" neighbours )
- paper_count is_accessible )
-
-let solve input () =
- if input = "" then Error err_empty_input
- else
- let matrix = Matrix.M.of_string input in
- let accessible_rolls_of_paper = count_accessible_rolls matrix in
- Ok accessible_rolls_of_paper