QOJ.ac

QOJ

Limite de temps : 2 s Limite de mémoire : 512 MB Points totaux : 100 Difficulté: [afficher]

#2265. 短代码

Statistiques

你参与了一个探索名为 Yokohama 2020 的小行星的项目。几年前的一次勘测在小行星地下发现了一个迷宫般的空间。该项目的目标是使用探测机器人对该迷宫进行更详细的调查。

通过探地雷达的勘测,迷宫的形状已被完全掌握。为了规划探索,迷宫被表示为一个网格,其中第一行的第一个单元格是网格的左上角,最后一行的最后一个单元格是网格的右下角。

每个网格单元格要么是空地,允许机器人从相邻的空地移动到该单元格;要么是被岩石填满,阻碍此类移动。迷宫的入口位于最上面一行的一个单元格中,出口位于最下面一行的一个单元格中。

探测机器人由存储在其中的程序控制,该程序由顺序编号的行组成,每一行包含下面描述的五种命令之一。寄存器 pc 指定要执行的程序行号。每个命令指定机器人的一个动作以及要设置给 pc 的值。

机器人从迷宫入口处开始,面向下方,pc 的值被设为 1。程序中由 pc 指定的行上的命令会被重复执行,一次执行一行,直到机器人到达迷宫出口。

pc 的值在递增后超过程序行数时,它会被重置为 1。当机器人到达出口单元格时,机器人停止,这就是项目的目标。

由于机器人的程序存储容量非常有限,程序的行数应尽可能少。你的任务是开发一个行数最少的程序,使机器人最终能够到达出口。

输入格式

输入包含单个测试用例,格式如下:

$n$ $m$ $s_1$ $\vdots$ $s_n$

第一行包含两个整数 $n$ ($2 \le n \le 10$) 和 $m$ ($2 \le m \le 10$)。迷宫表示为一个 $n$ 行 $m$ 列的网格。接下来的 $n$ 行描述了该网格。每一行包含一个长度为 $m$ 的字符串,对应网格的一行。第 $j$ 个字符串的第 $i$ 个字符(可以是 ‘.’、‘#’、‘S’ 或 ‘G’)描述了第 $j$ 行的第 $i$ 个单元格。‘.’ 表示该单元格是空地,机器人可以从四个相邻单元格之一移动到此处。‘#’ 表示该单元格被填满,阻碍机器人移动到此处。‘S’ 表示该单元格是入口,‘G’ 表示该单元格是出口。当然,这些单元格都是空地。

已知存在一个能引导机器人到达出口的程序。

输出格式

输出的第一行应包含程序的行数。随后是程序行中的命令,每行一个,按行号顺序排列。当命令带有参数时,在命令名称和参数之间仅输出一个空格。

如果存在多个行数最少的合适程序,则任何一个均可。

命令 描述
GOTO $l$ 将 $l$ 设置为 pc。命令参数 $l$ 是一个小于或等于程序行数的正整数。
IF-OPEN $l$ 如果当前方向上有相邻的空地,则将 $l$ 设置为 pc;否则(即面对被填满的单元格或网格边界),将 pc 加 1。命令参数 $l$ 是一个小于或等于程序行数的正整数。
FORWARD 如果当前方向上有相邻的空地,则移动到那里;否则,停留在当前单元格。无论哪种情况,都将 pc 加 1。
LEFT 向左转 90 度而不改变位置,并将 pc 加 1。
RIGHT 向右转 90 度而不改变位置,并将 pc 加 1。

样例

样例输入 1

2 2
.S
G#

样例输出 1

2
FORWARD
LEFT

样例输入 2

5 2
S.
..
..
..
.G

样例输出 2

3
IF-OPEN 3
LEFT
FORWARD

样例输入 3

2 6
..S...
..#.G#

样例输出 3

4
RIGHT
RIGHT
FORWARD
GOTO 2

样例输入 4

10 10
.##S...##.
..#...#...
..#...#...
.###...##.
..........
..........
.##....##.
.#.#..#...
.##...#...
.#.....G#.

样例输出 4

5
LEFT
FORWARD
RIGHT
FORWARD
IF-OPEN 4

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.