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 переплутав його)