Некоторые текстовые мошеннические лайки не позволяют вам войти в стену и дают вам возможность вернуться, если вы попытаетесь это сделать. Зачем это делать, когда вы можете заставить игрока двигаться в ближайшем правильном направлении?
Соревнование
Напишите программу функций, которая, учитывая направление и сетку символов 3 на 3, выводит ту же сетку после того, как игрок сделал шаг.
Например,
9
#..
.@#
#.#
становится
#.@
..#
#.#
вход
Направление задается одной цифрой от 1 до 9, каждое из которых соответствует 8 основным направлениям и стоит на месте. Это получено из относительных местоположений чисел на клавиатуре:
NW N NE .. \ | / ... 7 8 9 W- 4 5 6 -E ... 1 2 3 ../ | \ SW S SE
Однако вы также можете использовать цифры 123, 456, 789 вместо 789, 456, 123. Другими словами, вы можете поменять местами верхние и нижние 2 строки или цифры, если вы того пожелаете. Это только две приемлемые комбинации индексов.Сетка 3 на 3 будет состоять из 3 различных печатных символов ASCII, представляющих проходной пол, стены и игрока. (В тестовых примерах
.
используется для пола,#
s - стены, и@
является игроком)- Вы можете выбрать, какие символы использует ваша программа, но вы должны указать их в своем ответе, и они должны быть согласованы в нескольких испытаниях.
- Символ, представляющий персонажа, всегда будет в середине сетки 3 на 3, а направление всегда будет между 1 и 9 (вкл.)
- Вы можете принять участие в любом порядке
- Сетка 3 на 3 может быть введена как массив символов, массив строк, строка длиной 9 или другая разумная альтернатива.
Выход
- Возврат из функции или вывод в StdOut или ближайшую альтернативу
- Пробелы и переводы строки разрешены
- Вы должны использовать те же представления символов, что и для ввода
- Те же форматы, разрешенные для входов, разрешены для выходов
Как игрок движется
Если указанное направление заблокировано стеной (например, если в приведенном выше примере было направление 6), то посмотрите на 2 ближайших направления:
- Если одно (и только одно) направление свободно, переместите игрока в этом направлении.
- Если нет свободных направлений, посмотрите на ближайшие 2 направления (исключая направление 5). Если вы завернули все вокруг и не нашли открытого направления (игрок окружен стенами), не двигайте игрока
- Если оба направления открыты, выберите одно, чтобы перейти к нему случайным образом (хотя и не обязательно равномерно).
Если данное направление 5, не двигайте игрока
Контрольные примеры
( #
= стена, .
= пол, @
= игрок)
Входные данные: 9 # .. . @ # #. # Выход: #. @ .. # #. # Входные данные: 3 # .. . @ # #. # Выход: # .. .. # # @ # Входные данные: 7 ##. # @ # .. # Выход: ## @ ##. #.# или #.# .. # @. # Входные данные: 5 ... . @. ... Выход: ... . @. ... Входные данные: 2 ### # @ # ### Выход: ### # @ # ###
счет
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
123;456;789
вместо 789;456;123
?
yuhjklbn
? ПОКОЙСЯ С МИРОМ.