Каждая клетка либо жива (1), либо мертва (0), и имеет до 8 соседей. В следующем поколении живая клетка выживает при 2 или 3 живых соседях, а мёртвая становится живой только при ровно 3 живых соседях. Клетки за пределами сетки считаются мёртвыми. Все клетки обновляются одновременно.
Реализуйте функцию next_generation(grid).
Входные данные
grid: Прямоугольная сетка из 0 и 1.
Выходные данные
Верните следующее поколение.
Ограничения
0 ≤ строки, столбцы ≤ 200
Примеры
Ввод:
grid = [
[0, 1, 0],
[0, 1, 0],
[0, 1, 0]
]
Ожидаемый вывод:
expected = [
[0, 0, 0],
[1, 1, 1],
[0, 0, 0]
]
Ввод:
std::vector<std::vector<long long>> grid = {
{0, 1, 0},
{0, 1, 0},
{0, 1, 0}
};
Ожидаемый вывод:
std::vector<std::vector<long long>> expected = {
{0, 0, 0},
{1, 1, 1},
{0, 0, 0}
};
Ввод:
long[][] grid = new long[][] {
new long[] {0, 1, 0},
new long[] {0, 1, 0},
new long[] {0, 1, 0}
};
Ожидаемый вывод:
long[][] expected = new long[][] {
new long[] {0, 0, 0},
new long[] {1, 1, 1},
new long[] {0, 0, 0}
};
Пояснение
Вертикальный «мигалка» становится горизонтальным: центральная клетка выживает, а её левые и правые соседи оживают, заполняя среднюю строку.
Ввод:
grid = [
[1, 1],
[1, 1]
]
Ожидаемый вывод:
expected = [
[1, 1],
[1, 1]
]
Ввод:
std::vector<std::vector<long long>> grid = {
{1, 1},
{1, 1}
};
Ожидаемый вывод:
std::vector<std::vector<long long>> expected = {
{1, 1},
{1, 1}
};
Ввод:
long[][] grid = new long[][] {
new long[] {1, 1},
new long[] {1, 1}
};
Ожидаемый вывод:
long[][] expected = new long[][] {
new long[] {1, 1},
new long[] {1, 1}
};
Пояснение
У каждой клетки блока 2×2 — 3 соседа, поэтому блок остаётся неизменным.
Ссылки
Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.