blob: 85b0bbfaafd4c325ba9cdfaf0fdd2e5a32ef99c0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
(** [input_to_matrix input] is a 2D Array where each line of the [input] is
a row and each character in that line is a column.
Requires: all lines in input are of equal length. *)
let input_to_matrix input =
let lines =
input |> String.split_on_char '\n'
|> List.filter_map (fun line ->
let trimmed = String.trim line in
if trimmed <> "" then Some trimmed else None )
in
let row_count = List.length lines in
let column_count =
match List.nth_opt lines 1 with
| None ->
failwith "first line should not be empty"
| Some line ->
String.length line
in
let matrix = Array.make_matrix column_count row_count "" in
List.iteri
(fun x line ->
String.iteri (fun y char -> matrix.(x).(y) <- Char.escaped char) line )
lines ;
matrix
let pp_matrix matrix =
"[\n"
^ ( matrix
|> Array.map @@ Array.fold_left (fun acc c -> acc ^ c) ""
|> Array.fold_left
(fun acc line ->
if acc = "" then " [" ^ line ^ "]" else acc ^ "\n [" ^ line ^ "]" )
"" )
^ "\n]"
let solve input () =
let matrix = input |> input_to_matrix in
Logs.debug (fun m -> m "%s" @@ pp_matrix matrix) ;
0
|