Ctrl K

Пересечёт ли робот свой след

Сложная
Робот стоит в точке (0, 0) на плоскости и выполняет команды из массива steps. Сначала он проходит steps[0] метров на север, потом steps[1] — на запад, steps[2] — на юг, steps[3] — на восток, затем снова на север и так далее: после каждого шага он поворачивает налево. За роботом остаётся след из отрезков. Верните true, если след где-нибудь пересекает или касается сам себя, и false иначе. Попробуйте решить за один проход и O(1) дополнительной памяти.
Пример 1
steps=[3, 1, 1, 2] → True

Путь: (0, 0) → (0, 3) → (−1, 3) → (−1, 2) → (1, 2). Последний отрезок пересекает первый в точке (0, 2).

Пример 2
steps=[2, 2, 3, 3, 4] → False

Каждый шаг длиннее того, что был два шага назад, — путь раскручивается наружу и ни разу себя не касается.

Пример 3
steps=[1, 1, 1, 1] → True

Робот обходит квадрат и возвращается в (0, 0). Касание уже пройденной точки тоже считается пересечением.

Ограничения
  • 1 ≤ len(steps) ≤ 10⁵
  • 1 ≤ steps[i] ≤ 10⁵
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЗвёзды на одной прямой СложнаяВерёвка вокруг столбов СложнаяПолить как можно больше растений СложнаяСклад поближе ко всем магазинам СложнаяПоворотная камера Сложная
загружаем Python…
Вход
steps=[3, 1, 1, 2]
Ожидается
True

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 116 тестов на сервере, включая скрытые.