TL; DR: учитывая массив символов и робота в начальной позиции массива, напишите алгоритм, который может читать строку с движениями (
F
для «вперед»,R
для «поворота на 90 градусов вправо» иL
для «поворота на 90 градусов»). оставил ") и вычислил конечную позицию робота. Более подробная информация в полном тексте.
У нас дома очень простое программируемое устройство для детей: маленькое транспортное средство с кнопками, чтобы заставить автомобиль двигаться вперед, повернуть на 90 градусов влево или повернуть на 90 градусов вправо. Что-то похожее на это:
У нас также есть пенный коврик с такими буквами:
Цель всего этого - научить детей азбуке и элементам программирования одновременно.
Соревнование
Предположим, что мы случайно расположили наш поролоновый коврик так:
+---+---+---+---+---+---+---+
| E | R | L | B | I | X | N |
+---+---+---+---+---+---+---+
| O | A | Q | Y | C | T | G |
+---+---+---+---+---+---+---+
| F | W | H | P | D | Z | S |
+---+---+---+---+---+---+---+
| K | V | U | M | J |
+---+---+---+---+---+
| |
+---+
Предположим также, что мы изменили транспортное средство так, что когда мы программируем команду «идти вперед», транспортное средство движется вперед ровно на один квадрат в мате. Таким образом, если транспортное средство находится на U
площади и движется на север, оно останавливается именно на P
площади.
Все инструкции даны транспортному средству до того, как он начинает движение, а именно:
F
: Машина едет вперед на следующую площадь.R
: Автомобиль поворачивает на 90 градусов вправо на своем месте (без дальнейшего движения).L
: Автомобиль поворачивает на 90 градусов влево на своем месте (дальнейшее движение отсутствует).
После того, как инструкции даны, вы можете нажать кнопку «GO» и отправить автомобиль на заданную позицию, поскольку он будет следовать каждой инструкции в указанном порядке. Таким образом, вы можете сказать ребенку, чтобы вставить необходимые инструкции для транспортного средства, чтобы перейти к данному письму.
Вы должны написать самую короткую программу / функцию, которая обрабатывает string
(входной параметр) с набором инструкций и вычисляет букву, которую автомобиль останавливает (вывод string
).
Детали:
- Автомобиль всегда начинается с пустого квадрата внизу и направлен на север (в сторону
U
квадрата). - Строка ввода будет содержать только буквы
F
,R
,L
иG
(для кнопки «Go»). Вы можете использовать строчные буквы для мата и инструкции, если вы предпочитаете. - Алгоритм должен подчиняться каждой инструкции в строке перед первой
G
(каждая инструкция после этого игнорируется, поскольку транспортное средство начало движение). - Если транспортное средство выходит из мата в любой момент (даже если входная строка не была полностью обработана), алгоритм должен вернуть строку
Out of mat
. - Если нет, алгоритм должен вернуть букву, по которой автомобиль остановился. Начальная точка считается как
символ (или пустая строка).
Примеры:
Input: FFG
Output: P
Input: FRFRFG
Output: Out of mat
Input: RRFFG
Output: Out of mat
Input: FFFRFFLFG
Output: X
Input: FFFRFFLF
Output: <-- Nothing or a whitespace (the robot has not started moving)
Input: FFFRRFFFG
Output: <-- Nothing or a whitespace (the robot has returned to the starting point)
Input: RRRRRLFFFLFFRFRFGFFRRGRFF
Output: L (Everything after the first G is ignored)
Это код-гольф , поэтому победит самая короткая программа для каждого языка!
источник
@
начальной позицией и пробелами вне мата, так что эта конфигурация будетERLBIXN\nOAQYCTG\nFWHPDZS\n KVUMJ \n @
(с другим интервалом, SE испортила это)Ответы:
JavaScript (ES6),
194176169163 байтаСохранено несколько байтов благодаря @Luke и @Arnauld.
Ungolfed:
источник
false
на!1
every
метод обрабатывает это.(s,p=35,d=3,t='ERLBIXN1OAQYCTG1FWHPDZS11KVUMJ11111 11')=>[...s].every(i=>i=='L'?d--:i=='R'?d++:i=='F'?+t[p+=[1,8,-1,-8][d%4]]||!t[p]?p=1/0:1:0)?'':t[p]||'Out of mat'
[1,8,-1,-8]
массива, спасибо!Python 2 , 235 байт
Попробуйте онлайн!
источник
Python 3 ,
226231241 байтВторое редактирование; должен работать сейчас. Опять же, предстоит много оптимизации.
Попробуйте онлайн!
источник
Wolfram Language / Mathematica, 300 байт
Ungolfed:
источник