Вступ
У вас нещастя бути застряглими у втеченій машині на перешкоді. Усі характеристики автомобіля не реагують на чутливість, крім рульової системи, яка пошкоджена. Він може їхати прямо, або може повернути праворуч. Чи може машина керуватися безпекою?
Механіка
Ваш автомобіль починається у верхньому лівому куті на карті 8х8 і намагається досягти безпеки в правому нижньому куті. Автомобіль має орієнтацію (спочатку праворуч), виміряну з кроком 90 градусів. Автомобіль може виконувати одну з двох дій:
- Просуньте один квадрат вперед, або
- Поверніть на 90 градусів за годинниковою стрілкою, а потім рухайтеся на один квадрат вперед
Зауважте, що автомобіль не в змозі повернути досить різко, щоб здійснити 180-градусний поворот на одному квадраті.
Деякі квадрати - це перешкоди. Якщо автомобіль потрапить у квадрат перешкод, він врізається. Все поза межами курсу 8х8 вважається перешкодами, тому від'їзд з курсу рівносильний краху.
Правий нижній квадрат - це безпечний квадрат, який дозволяє автомобілю вийти з курсу перешкод. Початковий і безпечний квадрат вважаються не перешкодами.
Завдання
Ви повинні написати програму або функцію, яка приймає за свій вхід масив 8x8 (матриця, список списків тощо), що представляє курс перешкод. Програма повертає або друкує булеве або щось подібне до цього. Якщо автомобіль може доїхати до безпечної площі без збоїв (тобто, якщо карта вирішальна), вихід True
, інакше, є False
.
Оцінка балів
Стандартні правила гольф-коду - переможець - код з найменшою кількістю байтів.
Бонуси:
Якщо для вирішуваної карти ваш код видає дійсну серію вводів для водіїв, які спрямовують автомобіль до безпечної площі, відрахуйте 10 відсоткових балів від вашої оцінки. Приклад виведення формату може бути
SRSSR
(із зазначенням Прямий, Правий, Прямий, Прямий, Правий). Цей вихід замінить стандартний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