end
-let main rs ks () =
- Random.self_init ();
- let grid = Matrix.create ~rs ~ks ~data:() |> Matrix.map ~f:Conway.create in
+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 (String.make 80 '-');
+ print_endline opt.bar;
+
let grid =
Matrix.mapi grid ~f:(fun point ~data:cell ->
let neighbors = Matrix.get_neighbors grid point in
Conway.react cell ~states:(List.map neighbors ~f:Conway.state)
)
in
- Matrix.print grid ~to_string:Conway.to_string
+ 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 ~data:()
+ |> Matrix.map ~f:Conway.create
+ |> loop { interval = Time.Span.of_float 0.1
+ ; bar = String.make ks '-'
+ }
let spec =
let summary = "Polymorphic Cellular Automata" in
- let spec =
- let open Command.Spec in
- empty
- +> flag "-rows" (optional_with_default 5 int) ~doc:"Height"
- +> flag "-cols" (optional_with_default 5 int) ~doc:"Width"
- in
+ let spec = Command.Spec.empty in
Command.basic ~summary spec main