Альфис, королевский ученый подполья, завершил создание прототипа новой головоломки. Тем не менее, она не может найти никого, кто хотел бы проверить это.
Правила ее загадки следующие:
Цель состоит в том, чтобы попасть на правую сторону, начиная с центральной плитки слева. Для головоломок с четными высотами, начните с нижней из двух центральных плиток. (Примеры: в массиве 4x4 с нулевым индексом начальная позиция будет [2,0] - строка 2, столбец 0. В массиве 5x5 с нулевым индексом начальная позиция будет [2,0] - строка 2, столбец 0.)
Каждая цветная плитка имеет свою «садистскую» функцию:
- Розовые и зеленые плитки (обозначенные буквами «P» и «G») ничего не делают
- Красные и желтые плитки («R», «Y») непроходимы.
- Оранжевые плитки («О») заставляют игрока пахнуть апельсинами
- Фиолетовые плитки («U») вынуждают игрока перейти к следующей плитке в направлении, в котором они находятся, и заставляют их пахнуть лимонами
- Синие плитки («B») проходимы до тех пор, пока игрок не пахнет апельсинами.
Чтобы прояснить механику вкуса, запах игрока будет сохраняться бесконечно или пока не будет перекрыт плиткой с другим запахом, то есть, если игрок наступит на оранжевую плитку, он будет пахнуть как апельсины, пока не наступит на фиолетовую плитку.
Кроме того, желтая плитка, расположенная вертикально или горизонтально рядом с синей плиткой, также приведет к непроходимости синей плитки.
Ваша задача - написать программу или функцию, которая принимает двумерный массив символов (или массив строк 1D, или некоторый другой допустимый формат), представляющий макет головоломки в качестве входных данных, и выводит как исходную головоломку, так и решенную головоломку, со звездочками или некоторыми другой символ, показывающий правильный путь. Предположим, что данная головоломка разрешима.
Используйте эту головоломку в качестве примера:
BGYBG
PGPBG
PUBPB
OUGYB
PPOPP
Ваша программа выдаст:
BGYBG
PGPBG
PUBPB
OUGYB
PPOPP
BGYBG
PGPBG
*****
OUGYB
PPOPP
Любая используемая головоломка должна быть сгенерирована с использованием этого .
Применяются стандартные правила игры в гольф. Лучшие ответы будут самыми короткими для каждого языка. Ответы должны содержать язык, количество байтов и три контрольных примера. Первые два могут быть любым макетом, который вы выберете, но третий должен быть:
RRRR
RPPR
PUOR
RPBP
источник
Ответы:
C 529 байт
Подходим к головоломке, шагая сначала вправо, при условии, что мы не заблокированы, затем пробуем вверх, затем вниз и, наконец, снова налево. Поиск является рекурсивным, и как только мы определяем успешный путь, мы помечаем пробелы в нашей матрице и возвращаемся.
Попробуйте онлайн
Ungolfed
Пример вывода 1
Пример вывода 2
Пример вывода 3
источник