您有一个带有四个距离传感器的小机器人。它知道房间的布局,但是除了能够锁定网格方向之外,它没有方向感。您希望能够根据读数找出机器人的位置,但是由于传感器有限,它可能会模棱两可。
挑战说明
您将获得一个房间布局和四个顺时针方向的距离读数,以获取您与墙之间的单元数量。房间的中间可能有墙壁,而网格的边缘也是墙壁。机器人不能放在墙上。
您的目标是列出机器人可能在房间内的所有位置,以给出给定的读数。请记住,机器人没有方向感(除了被锁定在网格上的90度角之外,即,机器人永远不会以对角线或其他倾斜角取向),因此读取[1、2、3,例如,[4]与读取[3、4、1、2]相同。
例子
对于这些示例,单元格坐标将从左上角的单元格以0索引(x,y)对给出。读数将在方括号中的列表中按顺时针顺序给出。布局将在墙壁上使用井号,并使用其他字符(通常是点)来表示空单元格。
情况1
. . . .
. . . .
. . # .
. . . .
- [1、0、2、3] ==>(1、0),(3、1)
- [0,0,3,3] ==>(0,0),(3,0),(0,3),(3,3)
- [2,1,1,0] ==>(0,2),(2,1)
- [1,1,2,2] ==>(1,1)
情况二
# a . # a .
a # . . # a
. . # . . #
# . . # . .
a # . . # a
. a # . a #
- [0,0,1,1] ==>网格上每个点的位置
- [1,0,0,0] ==>网格上的所有a
情况3
.
- [0,0,0,0] ==>(0,0)
案例4
. # #
. . .
- [1,2,0,0] ==>(0,1)
- [0,1,2,0] ==>(0,1)
- [0,0,1,0] ==>(0,0)
- [1,0,1,0] ==>(1,1)
- [0,1,0,1] ==>(1,1)
案例5
. # . .
. . . .
. . # .
. . . .
- [2,1,1,0] ==>(0,2),(2,1)
- [0,2,2,1] ==>(1,1)
- [1,0,2,2] ==>(1,1)
- [0,3,0,0] ==>(0,0)
- [1,0,1,1] ==>(1,2)
其他规定
- 输入可以采用任何方便的格式。输入是墙壁和空间的网格以及按顺时针顺序列出的四个距离。
- 输出可以是所有满足读数的单元格的列表,也可以是显示哪些单元格满足读数的网格的修改版本。只要是合理且一致的,输出的确切格式就无关紧要。有效的输出格式包括但不限于:
- 将每个单元格坐标的一行打印为有序对
- 分别用
.
,#
和打印!
空格,墙壁和可能位置的网格。 - 返回有序对的列表
- 返回索引列表
- 使用不同的空间,墙壁和可能的位置值返回列表列表
- 返回/打印一个0s和1s的矩阵,使用1s表示将发生读取的单元格。(没有必要包括墙壁)
- 再一次,此列表并不详尽,因此其他表示形式只要是一致的就有效,并且在网格或列表中显示每个可能的有效位置。如果不确定,请发表评论,我很乐意澄清。
- 您可以假定读数至少对应于网格上的一个位置。
- 您可以假定输入网格的大小至少为1x1,并且至少有一个空白空间。
- 您可以假定输入网格在每个维度中均不大于256个像元。
- 您可以假设输入网格始终是一个完美的矩形并且没有锯齿。
- 如果您的程序碰巧为无效输入提供了合理的输出,则不会有任何惩罚或加分。
- 这是代码高尔夫,所以最短的代码获胜。
@TFeld谢谢。固定。
—
Beefster,
@Arnauld对我来说似乎很合理。我将其添加到已经不详尽的列表中。
—
Beefster '19
Case 5
似乎不太正确。我得到的(0,2),(2,1)
,(1,3)
,(1,3)
,和nothing
。