#include #define SIZE 512 void initialize_grid(bool grid[SIZE][SIZE]){ for(int i = 0; i < SIZE; i++){ for(int j = 0; i < SIZE; i++){ grid[i][j] = false; } } } void mirror_grid(bool grid[SIZE][SIZE], bool mirror[SIZE][SIZE]){ for(int i = 0; i < SIZE; i++){ for(int j = 0; i < SIZE; i++){ mirror[i][j] = grid[i][j]; } } } void simulate_grid(bool grid[SIZE][SIZE], bool mirror[SIZE][SIZE]){ mirror_grid(grid, mirror); for(int i = 0; i < SIZE; i++){ for(int j = 0; i < SIZE; i++){ int neighbours = 0; int nx_prawo = i + 1 > SIZE ? 0 + (i + 1 - SIZE) : i + 1; int ny_prawo = j; int nx_lewo = i - 1 < 0 ? SIZE - (i - 1 + SIZE) : i - 1; int ny_lewo = j; int nx_gora = i; int ny_gora = j + 1 > SIZE ? 0 + (j + 1 - SIZE) : j + 1; int nx_dol = i; int ny_dol = j - 1 < 0 ? SIZE - (j - 1 + SIZE) : j - 1; neighbours = mirror[nx_prawo][ny_prawo] == true ? neighbours + 1 : neighbours; neighbours = mirror[nx_lewo][ny_lewo] == true ? neighbours + 1 : neighbours; neighbours = mirror[nx_gora][ny_gora] == true ? neighbours + 1 : neighbours; neighbours = mirror[nx_dol][ny_dol] == true ? neighbours + 1 : neighbours; neighbours = mirror[nx_prawo][ny_gora] == true ? neighbours + 1 : neighbours; neighbours = mirror[nx_prawo][ny_dol] == true ? neighbours + 1 : neighbours; neighbours = mirror[nx_lewo][ny_gora] == true ? neighbours + 1 : neighbours; neighbours = mirror[nx_lewo][ny_dol] == true ? neighbours + 1 : neighbours; int state = neighbours < 2 ? 1 : neighbours == 2 || neighbours == 3 ? 2 : neighbours > 3 ? 3 : neighbours == 3 ? 4 : 0; switch (state) { case 1: grid[i][j] = false; break; case 2: grid[i][j] = grid[i][j]; break; case 3: grid[i][j] = false; break; case 4: grid[i][j] = true; break; default: break; } } } } int main() { bool grid[SIZE][SIZE]; bool mirror[SIZE][SIZE]; initialize_grid(grid); mirror_grid(grid, mirror); simulate_grid(grid, mirror); return 0; }