-let main rows cols () =
- let pool = Matrix.create ~rows ~cols ~data:() in
- Matrix.iter pool ~f:(
- fun ~row ~col ~data:() -> printf "R: %d, K: %d\n" row col
- )
+type opt = { interval : Time.Span.t
+ ; bar : string
+ }
+
+
+let rec loop opt grid =
+ print_endline opt.bar;
+ Matrix.print grid ~to_string:Conway.to_string;
+ print_endline opt.bar;
+
+ let grid =
+ Matrix.mapi grid ~f:(fun point cell ->
+ let neighbors = Matrix.get_neighbors grid point in
+ Conway.react cell ~states:(List.map neighbors ~f:Conway.state)
+ )
+ in
+ Time.pause opt.interval;
+ loop opt grid
+
+
+let main () =
+ Random.self_init ();
+ let rs, ks = Or_error.ok_exn Linux_ext.get_terminal_size () in
+ Matrix.create ~rs:(rs - 3) ~ks ()
+ |> Matrix.map ~f:Conway.create
+ |> loop { interval = Time.Span.of_float 0.1
+ ; bar = String.make ks '-'
+ }