Введение
У вас есть несчастье застрять в бегущей машине на полосе препятствий. Все функции автомобиля не реагируют, за исключением системы рулевого управления, которая повреждена. Он может ехать прямо или поворачивать направо. Можно ли направить машину в безопасное место?
механика
Ваша машина начинается в верхнем левом углу карты 8x8 и пытается добраться до безопасности в правом нижнем углу. Автомобиль имеет ориентацию (первоначально вправо), измеряемую с шагом в 90 градусов. Автомобиль может выполнять одно из двух действий:
- Двигайтесь на одну клетку вперед или
- Поверните на 90 градусов по часовой стрелке, затем поверните на один квадрат вперед
Обратите внимание, что автомобиль не может поворачивать достаточно резко, чтобы выполнить поворот на 180 градусов на одном квадрате.
Некоторые из квадратов являются препятствиями. Если автомобиль входит в квадрат препятствий, он падает. Предполагается, что все, что находится вне поля 8х8, является препятствием, поэтому выезд с трассы равносилен краху.
Нижний правый квадрат является безопасным квадратом, который позволяет машине преодолеть полосу препятствий. Предполагается, что начальная и безопасная квадраты не являются препятствиями.
задача
Вы должны написать программу или функцию, которая принимает в качестве входных данных массив 8x8 (матрица, список списков и т. Д.), Представляющий полосу препятствий. Программа возвращает или печатает логическое значение, или что-то похожее правдивое. Если автомобиль может добраться до безопасного квадрата без сбоев (т. Е. Если карта разрешима), то в True
противном случае вывод получится False
.
счет
Стандартный код правил гольфа - победителем становится код с наименьшим количеством байтов.
Бонусы:
Если для разрешимой карты ваш код выводит правильную серию входов водителя, которые ведут автомобиль к безопасному квадрату, вычтите 10 процентных пунктов из вашей оценки. Примерным форматом вывода может быть
SRSSR
(с указанием Straight, Right, Straight, Straight, Right). Этот вывод заменит стандартныйTrue
вывод.Если для неразрешимой карты выходные данные вашего кода будут различаться между ситуациями, когда сбой неизбежен, и ситуациями, в которых возможно объездить полосу препятствий навсегда, вычтите 10 процентных пунктов из вашей оценки. Примером может быть вывод,
Crash
если авария неизбежна, илиStuck
если автомобиль застрял на полосе препятствий навсегда. Эти выходы заменили бы стандартныйFalse
вывод для неразрешимой карты.
пример
Если программе дан массив 8x8, такой как этот:
[[0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0],
[1, 1, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 1, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 1, 0],
[0, 1, 1, 0, 0, 0, 1, 0]]
Это будет интерпретироваться как карта с черными квадратами, обозначающими препятствия:
И возможное решение может быть:
Поскольку решение существует, программа должна вернуть / напечатать True
для этой карты. Последовательность ходов , показанная здесь SSSSRSRRRSRSSRRRSSRSSS
.
Crash
иStuck
. Они здесь из-за того, как долго они. Строка 2 заполнена, все остальное пусто ->Crash
. Строка 7 заполнена, все остальное пусто ->Stuck