From 3c2e61176a5cec967e6f9663e1732aadff531528 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Thu, 3 Dec 2020 16:40:21 +0100 Subject: [PATCH] just keep the strings --- day3.ml | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/day3.ml b/day3.ml index e326a9e..3902b63 100644 --- a/day3.ml +++ b/day3.ml @@ -1,38 +1,26 @@ -type space = Tree | Free -type map = space array array +type map = string array -let (.%()) arr i = arr.(i mod Array.length arr) +let (.%[]) str i = str.[i mod String.length str] +let (+=) r x = r := !r + x let iter_map ?(step_x=1) ?(step_y=1) f arr = - let i = ref 0 in - let j = ref 0 in + let i = ref 0 in let j = ref 0 in while !i < Array.length arr do - f arr.(!i).%(!j); - i := !i + step_x; - j := !j + step_y + f arr.(!i).%[!j]; + i += step_x; j += step_y done -exception Unknown_char of char - -let make_line str = - Array.init (String.length str) - (fun i -> match str.[i] with - | '#' -> Tree - | '.' -> Free - | c -> raise (Unknown_char c)) - -let read_file = Bracket.infile_lines ~line:make_line ~of_seq:Array.of_seq +let read_file = Bracket.infile_lines ~line:Fun.id ~of_seq:Array.of_seq let count_trees ?step_x ?step_y map = let count = ref 0 in - iter_map ?step_x ?step_y (function Tree -> incr count | _ -> ()) map; + iter_map ?step_x ?step_y (fun c -> if c = '#' then incr count) map; !count let main1 input = - Format.printf "%d trees\n" - (count_trees ~step_y:3 (read_file input)) + Format.printf "%d\n" (count_trees ~step_y:3 (read_file input)) let main2 input = let map = read_file input in @@ -47,7 +35,7 @@ let main = Misc.main 3 [|main1; main2|] let%expect_test _ = main1 "../../data/day3"; - [%expect{| 244 trees |}] + [%expect{| 244 |}] let%expect_test _ = main2 "../../data/day3";