]>
wirehaze git hosting - lifeboot.git/blob - prototype.c
14 #define STR(x) _STR (x)
17 static uint16_t xss
; /* xs() state */
20 xs () /* xorshift prng */
32 printf ("\e[1;1H\e[2J");
36 print_row (char row
[COLS
])
38 printf ("%." STR (COLS
) "s\n", row
);
42 print_grid (char grid
[COLS
* ROWS
])
44 for (int i
= 0; i
< ROWS
; i
++)
45 print_row (grid
+ i
* COLS
);
49 init_grid (char grid
[COLS
* ROWS
])
51 for (int i
= 0; i
< COLS
* ROWS
; i
++)
53 if (xs () % INIT_RATIO
)
61 get_state (char grid
[COLS
* ROWS
], int row
, int col
)
63 if (row
< 0 || row
>= ROWS
|| col
< 0 || col
>= COLS
)
66 return grid
[row
* COLS
+ col
];
70 alive_neighbours (char grid
[COLS
* ROWS
], int idx
)
76 for (int i
= -1; i
<= 1; i
++)
77 for (int j
= -1; j
<= 1; j
++)
78 if (get_state (grid
, row
+ i
, col
+ j
) == ALIVE
)
81 if (get_state (grid
, row
, col
) == ALIVE
)
88 next_state (char grid
[COLS
* ROWS
], int idx
)
90 int n
= alive_neighbours (grid
, idx
);
92 if (get_state (grid
, idx
/ COLS
, idx
% COLS
) == ALIVE
)
107 update_grid (char grid
[COLS
* ROWS
])
109 char new[COLS
* ROWS
];
111 for (int i
= 0; i
< COLS
* ROWS
; i
++)
112 new[i
] = next_state (grid
, i
);
114 memcpy (grid
, new, COLS
* ROWS
);
120 char grid
[COLS
* ROWS
];
131 while (getchar () != 'q');