Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3558844
А
Аноним
03 февраля 2026 13:01 · публичный вопрос
А
Аноним

Роботу надо покрасить клетку если обе её соседней клетки слева и справа закрашены остановиться в любом случае в исходном клетке

Ответ нейросети
03 февраля 2026 13:01

Классная задача для 1D-полосы клеток. Я дам два варианта трактовки и пример пошагового решения, чтобы было понятно.

Что значит задача

  • Есть последовательность клеток, каждая либо закрашена (1), либо не закрашена (0).
  • Правило: клетка должна стать закрашенной, если обе её соседние клетки слева и справа закрашены.
  • В зависимости от точной формулировки может быть две интерпретации: A) Клетка окрашивается, если оба соседа слева и справа окрашены, иначе остаётся в исходном состоянии (то есть сохраняет своё текущее значение). B) Клетка окрашивается только по правилу (и если соседи не обе 1 — клетка может стать неокрашенной, т.е. обновляется полностью по правилу left AND right).

Ярко объясню обе версии и дам пример.

Версия A (сохранение текущего цвета, если условие не выполнено)

  • Правило: для i-й клетки
    • let left = предыдущая клетка слева (1 если i > 1 и a[i-1] = 1, иначе 0)
    • let right = следующая клетка справа (1 если i < n и a[i+1] = 1, иначе 0)
    • новая клетка b[i] = a[i] OR (left AND right)
  • Границы: у крайних клеток нет одного соседа. Обычно считают, что отсутствующие соседи не окрашены (то есть left = 0 для i = 1, right = 0 для i = n).
  • Пошагово:
    1. Запишем текущую строку a.
    2. Посчитаем для каждого i left и right.
    3. Применим b[i] = a[i] OR (left AND right).
    4. Получим новую строку b.

Пример

  • Пусть a = [0, 1, 1, 0, 1, 1, 0] (0 — не окрашено, 1 — окрашено).
  • Вычисляем b по правилу A:
    • i=1: left=0, right=1 → left AND right = 0; b1 = a1 OR 0 = 0
    • i=2: left=0, right=1 → 0; b2 = 1 OR 0 = 1
    • i=3: left=1, right=0 → 0; b3 = 1 OR 0 = 1
    • i=4: left=1, right=1 → 1; b4 = 0 OR 1 = 1
    • i=5: left=0, right=1 → 0; b5 = 1 OR 0 = 1
    • i=6: left=1, right=0 → 0; b6 = 1 OR 0 = 1
    • i=7: left=1, right=0 → 0; b7 = 0 OR 0 = 0
  • Результат: b = [0, 1, 1, 1, 1, 1, 0]

Как посчитать несколько шагов

  • Повторяем шаги обновления: взять текущее состояние, получить следующее по правилу A, затем повторяем для желаемого количества шагов.

Кодовая формула (псевдокод)

  • Пусть a — текущая строка из 0 и 1, длина n.
  • Для i от 1 до n:
    • left = (i > 1) ? a[i-1] : 0
    • right = (i < n) ? a[i+1] : 0
    • b[i] = a[i] OR (left AND right)
  • Возвращаем b как новое состояние.

Версия B (строгое обновление по правилу, без сохранения прежнего цвета)

  • Правило: клетка становится закрашенной только тогда, когда оба соседа слева и справа закрашены; иначе она становится незакрашенной (то есть b[i] = left AND right).
  • Границы те же: отсутствующие соседи считаем за 0.
  • Пример с тем же a = [0,1,1,0,1,1,0]:
    • i=1: left=0, right=1 → b1 = 0
    • i=2: left=0, right=1 → b2 = 0
    • i=3: left=1, right=0 → b3 = 0
    • i=4: left=1, right=1 → b4 = 1
    • i=5: left=0, right=1 → b5 = 0
    • i=6: left=1, right=0 → b6 = 0
    • i=7: left=1, right=0 → b7 = 0
  • Результат: b = [0, 0, 0, 1, 0, 0, 0]

Как выбрать вариант

  • Если задача предполагает «остататься закрашенным, если уже закрашено» или «прикладывать цвет, если соседи уже окрашены» — чаще используются версия A.
  • Если же задача строго запрещает сохранение цвета без выполнения условия и обновляет состояние полностью по правилу — используйте версия B.

Дополнительная помощь

  • Если дашь конкретную исходную строку (например, 0/1 последовательность) и скажешь, какой из вариантов считать, могу посчитать несколько шагов и показать таблицу переходов.
  • Могу привести пример на Python или псевдокод для твоего языка программирования.