#include #define ROWS 32 #define COLUMNS 64 int main(void) { char cell[COLUMNS * ROWS + 1]; int i; /* Initialize first row, and first cell of next row. The extra cell is needed to prevent the automaton from reading cell[-1] */ for(i = -1; ++i <= COLUMNS; cell[i] = " #"[i == 31]); for(; i < COLUMNS * ROWS - 1; i++) { /* Write newline character in row-2 */ cell[(i >= COLUMNS * 2 + 2) ? ((i - COLUMNS - 2) & ~(COLUMNS - 1)) - 1 : i] = '\n'; /* Run automaton for current cell */ cell[i] = (cell[i - COLUMNS-1] ^ cell[i - COLUMNS+1]) | 32; } /* Write newline for last row - 1. Newline for final row is implicit with puts. */ cell[(ROWS - 1) * COLUMNS - 1] = '\n'; cell[i] = '\0'; (void)puts(cell); return 0; }