5246. Следующее поколение игры «Жизнь»

Medium 2 решили
Дана прямоугольная таблица board из нулей и единиц — текущее поколение игры «Жизнь» Конвея. 1 означает живую клетку, 0 — мёртвую.

Посчитайте следующее поколение и верните таблицу того же размера (столько же строк и столбцов).

Соседи клетки — все восемь клеток вокруг, включая диагонали. Клеток за краем поля нет: у угловой клетки всего 3 соседа, у клетки на стороне — 5.
соседи клетки *:
. . .
. * .
. . .
Все клетки меняются одновременно: новое значение считается только по текущему поколению. Нельзя идти по таблице и сразу перезаписывать клетку — соседи ещё должны видеть старое состояние.

Пусть у клетки k живых соседей:
  • живая и k < 2 → умирает (мало соседей);
  • живая и k = 2 или k = 3 → остаётся живой;
  • живая и k > 3 → умирает (слишком тесно);
  • мёртвая и k = 3 → становится живой;
  • иначе мёртвая остаётся мёртвой.
Менять исходную таблицу на месте не обязательно — достаточно вернуть новую.

Пример одного шага (это первый пример ниже):
сейчас          следующее
0 1 0           0 0 0
0 0 1     →     1 0 1
1 1 1           0 1 1
0 0 0           0 1 0
Верхняя живая клетка имеет только одного живого соседа — умирает. Нижняя средняя мёртвая клетка имеет ровно трёх живых соседей — рождается.

Примеры:

Вход: [[0, 1, 0], [0, 0, 1], [1, 1, 1], [0, 0, 0]]
Выход: [[0, 0, 0], [1, 0, 1], [0, 1, 1], [0, 1, 0]]
Объяснение: Сетка 4×3. Смотрим несколько клеток по старому поколению: живая (строка 0, столбец 1) имеет k=1 → умирает; мёртвая (строка 1, столбец 0) имеет k=3 → рождается; живая (строка 2, столбец 1) имеет k=3 → выживает; мёртвая (строка 3, столбец 1) имеет k=3 → рождается. Итог: [[0,0,0],[1,0,1],[0,1,1],[0,1,0]].
Вход: [[1, 1], [1, 0]]
Выход: [[1, 1], [1, 1]]
Объяснение: Квадрат 2×2, три живые клетки. У каждой живой 2 или 3 живых соседа — все три выживают. Пустой угол видит ровно трёх живых соседей и рождается. Получается квадрат из четырёх единиц.
Вход: [[1, 1, 1]]
Выход: [[0, 1, 0]]
Объяснение: Одна строка из трёх живых. Крайние клетки имеют только одного соседа (за краем поля никого нет) и умирают. Средняя имеет двух соседей и выживает. Над и под строкой клеток нет, поэтому никто не рождается сбоку. Ответ: [[0, 1, 0]].

Ограничения:

1 <= m, n <= 25 board[i][j] равен 0 или 1

Теги:

Матрица Симуляция

Комментарии (0)

Зарегистрируйтесь или войдите, чтобы оставить комментарий

Пока нет комментариев. Будьте первым!