add init_grid func

This commit is contained in:
ryan 2023-10-31 14:43:12 -07:00
parent 63bad67c1b
commit 1d60878428
2 changed files with 15 additions and 3 deletions

View File

@ -21,6 +21,12 @@ let ( + ) a b = Pair.map_same2 ( + ) a b
let ( - ) a b = Pair.map_same2 ( - ) a b
let ( = ) a b = Pair.equal ( = ) ( = ) a b
let grid_vec2_of_idx ~width ~idx =
let y = idx / width in
let x = idx mod width in
x, y
;;
let at (grid : 'a grid) (point : t) =
let x, y = point in
if x >= 0 && x < grid.width && y >= 0 && y < grid.height
@ -35,9 +41,14 @@ let at_e (grid : 'a grid) (point : t) =
let find (grid : 'a grid) pred =
let open Option.Infix in
let* idx, item = Array.find_idx pred grid.items in
let y = idx / grid.width in
let x = idx mod grid.width in
Some ((x, y), item)
Some (grid_vec2_of_idx ~width:grid.width ~idx, item)
;;
let init_grid ~width ~height init =
{ width
; height
; items = Array.init (width * height) (fun idx -> init @@ grid_vec2_of_idx ~width ~idx)
}
;;
let parse_grid parse_char lines : 'a grid =

View File

@ -14,6 +14,7 @@ val ( - ) : t -> t -> t
val ( = ) : t -> t -> bool
val at : 'a grid -> t -> 'a option
val at_e : 'a grid -> t -> 'a
val init_grid : width:int -> height:int -> (t -> 'a) -> 'a grid
val parse_grid : (char -> 'a) -> string list -> 'a grid
val find : 'a grid -> ('a -> bool) -> (t * 'a) option
val iter_grid : 'a grid -> (t -> unit) -> unit