diff options
| author | DJ O'Leary <dijitol@proton.me> | 2025-08-19 00:48:54 +0200 |
|---|---|---|
| committer | DJ O'Leary <dijitol@proton.me> | 2025-08-19 00:49:06 +0200 |
| commit | dbdeb7eaf3b92308e4895eb76dd9f3c5dae5b041 (patch) | |
| tree | ff33f18e876fd3e4b23492c6241b03061b741de0 /2024/OCaml/lib/grid | |
| parent | bb9b8f0d29195f19df38608af9371a18c45b6d61 (diff) | |
some change idk
Diffstat (limited to '2024/OCaml/lib/grid')
| -rw-r--r-- | 2024/OCaml/lib/grid/cell.ml | 18 | ||||
| -rw-r--r-- | 2024/OCaml/lib/grid/cell.mli | 18 | ||||
| -rw-r--r-- | 2024/OCaml/lib/grid/grid.ml | 14 | ||||
| -rw-r--r-- | 2024/OCaml/lib/grid/grid.mli | 6 |
4 files changed, 56 insertions, 0 deletions
diff --git a/2024/OCaml/lib/grid/cell.ml b/2024/OCaml/lib/grid/cell.ml new file mode 100644 index 0000000..186e451 --- /dev/null +++ b/2024/OCaml/lib/grid/cell.ml @@ -0,0 +1,18 @@ +type t = { + value : string; + up : t option; + down : t option; + left : t option; + right : t option; +} + +let create value = { value; up = None; down = None; left = None; right = None } +let with_up up c = { c with up = Some up } +let with_down down c = { c with down = Some down } +let with_left left c = { c with left = Some left } +let with_right right c = { c with right = Some right } +let move_up co = match co with Some c -> c.up | None -> None +let move_down co = match co with Some c -> c.down | None -> None +let move_left co = match co with Some c -> c.left | None -> None +let move_right co = match co with Some c -> c.right | None -> None +let ( = ) c1 c2 = c1.value = c2.value diff --git a/2024/OCaml/lib/grid/cell.mli b/2024/OCaml/lib/grid/cell.mli new file mode 100644 index 0000000..e61e34a --- /dev/null +++ b/2024/OCaml/lib/grid/cell.mli @@ -0,0 +1,18 @@ +type t = { + value : string; + up : t option; + down : t option; + left : t option; + right : t option; +} + +val create : string -> t +val with_up : t -> t -> t +val with_down : t -> t -> t +val with_left : t -> t -> t +val with_right : t -> t -> t +val move_up : t option -> t option +val move_down : t option -> t option +val move_left : t option -> t option +val move_right : t option -> t option +val ( = ) : t -> t -> bool diff --git a/2024/OCaml/lib/grid/grid.ml b/2024/OCaml/lib/grid/grid.ml new file mode 100644 index 0000000..0d6bc4c --- /dev/null +++ b/2024/OCaml/lib/grid/grid.ml @@ -0,0 +1,14 @@ +let rec to_grid_aux tokens max_width acc = + match tokens with + | [] -> acc + | h :: t -> + let new_cell = Cell.create h |> Cell.with_left acc in + let new_acc = acc |> Cell.with_right new_cell in + to_grid_aux t max_width new_acc + +let to_grid tokens max_width : Cell.t option = + match tokens with + | [] -> None + | h :: t -> + let first_cell = Cell.create h in + Some (to_grid_aux t max_width first_cell) diff --git a/2024/OCaml/lib/grid/grid.mli b/2024/OCaml/lib/grid/grid.mli new file mode 100644 index 0000000..31c4329 --- /dev/null +++ b/2024/OCaml/lib/grid/grid.mli @@ -0,0 +1,6 @@ +val to_grid : string list -> int -> Cell.t option +(** The cell in the top left corner of the grid is returned where each element + of [tokens] is converted into rows with [width]. An empty list of [tokens] + returns None. Requires: [width] is greater than 0 **) + +val print : Cell.t -> () |
