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 |
+---+---+---+---+---+
| |
+---+
假设我们还修改了车辆,以便当我们编写“ goward”命令时,车辆将在垫子上精确地向前移动一个正方形。因此,如果车辆在U
广场上并向北行驶,它将恰好停在P
广场上。
车辆开始行驶之前,所有指示均已提供给车辆,其中包括:
F
:车辆前进到下一个方块。R
:车辆向右转90度(不能再移动)。L
:车辆在原处向左转90度(不再移动)。
给出指示后,您可以按“ GO”按钮并将车辆发送到指定位置,因为它将按照给定顺序遵循每个指示。因此,您可以告诉孩子插入车辆所需的说明,以转到给定的字母。
您必须编写最短的程序/函数来处理string
带有一组指令的(输入参数)并计算车辆停靠的字母(输出string
)。
细节:
- 车辆始终从底部的空白方块开始,面向北(朝向
U
方块)。 - 输入字符串将只包含字母
F
,R
,L
和G
(对于“走出去”按钮)。如果您愿意,可以在垫子和说明中使用小写字母。 - 该算法必须服从第一个指令之前的字符串中的
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)
这是代码高尔夫球,所以每种语言的最短程序可能会赢!
@
起始位置和空格不在mat上,因此此配置将是ERLBIXN\nOAQYCTG\nFWHPDZS\n KVUMJ \n @
(具有不同的间距,SE将其弄乱了)