1use rapl::utils::random::NdarrRand;
2use rapl::*;
3use std::{
4 io::{stdout, Write},
5 thread::sleep,
6 time::Duration,
7};
8const N: usize = 17;
9const STEPS: usize = 100;
10
11fn update(mat: &mut Ndarr<i8, U2>) {
12 let rolls = Ndarr::from([1, 0, -1]);
13 let out = rolls
14 .map(|r| mat.roll(*r, 0))
15 .outer_product(&rolls, |a, r| a.roll(r, 1))
16 .sum();
17 mat.bimap_in_place(&out, |prev, new| {
18 if new == 3 || (prev == 1 && (new == 4)) {
19 1
20 } else {
21 0
22 }
23 })
24}
25
26fn main() {
27 let mut x = NdarrRand::choose(&[0, 1], [N, N], None);
29 let mut stdout = stdout();
30 stdout.flush().unwrap();
31 stdout.write_all(b"\x1B[2J\x1B[1;1H").unwrap();
32
33 for i in 0..STEPS {
34 update(&mut x); let vis = x.map(|x| {
36 if *x == 0 {
37 "░".to_string()
38 } else {
39 "█".to_string()
40 }
41 }); println!("{}", vis);
43 println!(
44 "\n Conway's Game of Life using rapl: [Step {} out of {}] \n",
45 i + 1,
46 STEPS
47 );
48 sleep(Duration::from_millis(50));
49 stdout.write_all(b"\x1B[1;1H").unwrap();
50 stdout.flush().unwrap();
51 }
52 stdout.write_all(b"\x1B[2J\x1B[1;1H").unwrap();
53}