Zachtronics游戏Infinifactory大致激发了这一挑战。
您将获得由表示的矩形输送机网格的俯视图>v<^。可能有一些没有传送带的小室,以空格表示。这是一个例子:
> <vv    <
 v ^ >v v 
  >v^^>vv^
    ^>^ v 
>  v<v  >>
  >v v<^  
此设置隐含无限数量的空格。
此外,还给出了矩形货物的尺寸,该货物放在网格左上角的传送带上。您的任务是弄清楚货物是否曾经停下来,或者最终是否会成环运动。
当然,货物可能会一次覆盖多个输送机,因此以下是在每个步骤中确定货物方向的规则:
- 对面的传送带互相抵消。因此,如果3x2货物覆盖以下任何补丁(为清晰起见,用连字符和管道勾勒出轮廓),结果将是相同的: - +---+ +---+ +---+ |>>^| | ^| |v^^| |^<<| |^ | |^^v| +---+ +---+ +---+- 这些也是一样: - +---+ +---+ +---+ |v^<| | | |><>| |>>>| |>> | |>><| +---+ +---+ +---+- 由于输送机在货物下方的确切位置无关紧要,因此取消哪对对都没有关系。 - 此取消在其他规则之前应用。因此,对于其他规则,最多只能有两个方向的传送带。 
- 如果货物根本没有覆盖任何输送机(要么是因为所有输送机都取消了,或者是因为它只覆盖了空间,要么是因为它完全脱离了网格),所以货物就停了下来。
- 如果货物在一个方向上覆盖的输送机多于另一方向,则货物在该方向上移动。例如,如果3x2的货物覆盖了以下补丁 - >> ^>^- 它会向右移动,因为有更多的 - >比- ^。另一方面,如果涵盖了- >>^ ^- 该规则将不适用,因为 - >和之间有联系- ^。
- 这仅保留相邻方向之间有平局(相反方向之间的平局将被取消)的情况。在这种情况下,货物将继续沿其已经进入的轴移动。例如,如果向右移动或向左移动的3x2货物现在覆盖了补丁 - >>^ ^- 它会向右移动。如果到达此补丁时它向上或向下移动,则现在将向上移动。如果在模拟的第一步就发生了这种冲突,则假定货物已经向右移动。 
详细的例子
考虑顶部的传送带网格和3x2的货物。以下是该过程的分步可视化。每个步骤都由网格组成,网格以货物表示#,一个小框显示了被货物覆盖的输送机,另一个框是取消后的输送机,以及确定货物移动位置的规则:
 ###vv    <    > <vv    <    > <vv    <    > <vv    <    > <vv    <    > <vv    <
 ###^ >v v     ###^ >v v      v ^ >v v      v ^ >v v      v ^ >v v      v ^ >v v 
   >v^^>vv^    ###v^^>vv^    ###v^^>vv^     ###^^>vv^      ###^>vv^      >###>vv^
     ^>^ v         ^>^ v     ### ^>^ v      ###^>^ v       ###>^ v        ###^ v 
 >  v<v  >>    >  v<v  >>    >  v<v  >>    >  v<v  >>    >  v<v  >>    >  v<v  >>
   >v v<^        >v v<^        >v v<^        >v v<^        >v v<^        >v v<^  
+---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+
|> <|  |   |  | v |  | v |  |  >|  |  >|  | >v|  | >v|  |>v^|  |> ^|  |v^^|  | ^^|
| v |  | v |  |  >|  |  >|  |   |  |   |  |   |  |   |  |  ^|  |   |  | ^>|  |  >|
+---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+  +---+
   Rule 3        Rule 4        Rule 3        Rule 4        Rule 4        Rule 3
 ================================================================================
 > <vv    <    > <###   <    > <vv    <
  v ###v v      v ###v v      v ###v v 
   >###>vv^      >v^^>vv^      >###>vv^
     ^>^ v         ^>^ v         ^>^ v 
 >  v<v  >>    >  v<v  >>    >  v<v  >>
   >v v<^        >v v<^        >v v<^  
+---+  +---+  +---+  +---+  +---+  +---+
|^ >|  |  >|  |vv |  | v |  |^ >|  |  >|
|v^^|  | ^^|  |^ >|  |  >|  |v^^|  | ^^|
+---+  +---+  +---+  +---+  +---+  +---+
   Rule 3        Rule 4        Rule 3
此时,货物进入最后两个帧之间的循环。
现在考虑使用2x3的货物:
 ##<vv    <    >##vv    <    > <vv    <    > <vv    <    > <vv    <    > <vv    <
 ## ^ >v v      ##^ >v v      ##^ >v v      v ^ >v v      v ^ >v v      v ^ >v v 
 ##>v^^>vv^     ##v^^>vv^     ##v^^>vv^     ##v^^>vv^      ##^^>vv^      >v^^>vv^
     ^>^ v         ^>^ v      ## ^>^ v      ## ^>^ v       ##^>^ v       ##^>^ v 
 >  v<v  >>    >  v<v  >>    >  v<v  >>    >##v<v  >>    > ##<v  >>    > ##<v  >>
   >v v<^        >v v<^        >v v<^        >v v<^        >v v<^        ## v<^  
 +--+  +--+    +--+  +--+    +--+  +--+    +--+  +--+    +--+  +--+    +--+  +--+
 |> |  |> |    | <|  |  |    |v |  |v |    | >|  | >|    |>v|  |>v|    |  |  |  |
 | v|  | v|    |v |  |v |    | >|  | >|    |  |  |  |    |  |  |  |    | v|  | v|
 |  |  |  |    | >|  |  |    |  |  |  |    |  |  |  |    | v|  | v|    |>v|  |>v|
 +--+  +--+    +--+  +--+    +--+  +--+    +--+  +--+    +--+  +--+    +--+  +--+
   Rule 4        Rule 3        Rule 4        Rule 3        Rule 3        Rule 3
 ================================================================================
 > <vv    <    > <vv    <    > <vv    <
  v ^ >v v      v ^ >v v      v ^ >v v 
   >v^^>vv^      >v^^>vv^      >v^^>vv^
     ^>^ v         ^>^ v         ^>^ v 
 > ##<v  >>    >  v<v  >>    >  v<v  >>
   ## v<^        ## v<^        >v v<^  
   ##            ##            ##
                 ##            ##
                               ##
 +--+  +--+    +--+  +--+    +--+  +--+
 | v|  | v|    |>v|  |>v|    |  |  |  |
 |>v|  |>v|    |  |  |  |    |  |  |  |
 |  |  |  |    |  |  |  |    |  |  |  |
 +--+  +--+    +--+  +--+    +--+  +--+
   Rule 3        Rule 4        Rule 2
在最后一步中,规则2适用,因为货物已经离开网格,所以它就静止了,不会出现回路。
规则与假设
您的输入将是如上所述的传送带网格以及货物的宽度和高度。您可以以任何方便的顺序和格式采用这三个参数。对于网格,这意味着您可以读取由换行符或其他字符分隔的行的单个字符串,也可以读取字符串数组或字符数组,只要单个网格单元格仍由字符>v<^和空格。
你应该输出truthy值,如果在至少两帧或A的循环设定结果falsy值,如果货物会来休息。
您可能会假设栅格将被填充为带有空格的矩形,并且货物最初将适合栅格。
您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行参数或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。
这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。
测试用例
测试用例按网格分组。
Grid (2x2):
>v
^<
Width  Height  Loop?
1      1       True
1      2       True
2      1       True
2      2       False
Grid (3x3):
> v
^ <
Width  Height  Loop?
1      1       False
1      2       False
1      3       False
2      1       False
2      2       True
2      3       True
3      1       False
3      2       True
3      3       False
Grid (4x3):
>^>v
v^v 
^ <<
Width  Height  Loop?
2      2       False
Grid (6x5):
>v>v>v
^v^v^v
^v^v^v
^>^>^v
^<<<<<
Width  Height  Loop?
1      1       True
1      2       False
2      1       True
2      2       True
2      4       True
2      5       False
3      1       False
3      2       True
3      3       True
3      5       True
6      2       False
6      3       True
6      5       False
Grid (10x6):
> <vv    <
 v ^ >v v 
  >v^^>vv^
    ^>^ v 
>  v<v  >>
  >v v<^  
Width  Height  Loop?
1      1       False
2      3       False
2      6       False
3      2       True
5      4       False
6      1       True
10     6       False
作为一组额外的测试用例,请考虑网格仅由空格组成的任何输入都必须产生虚假的结果。
我已经手动检查了所有测试用例,所以如果您认为我做错了,请告诉我。
[^^/v<]变为[[0,1] [0,1];[0,-1] [-1,0]]?还是您是说这取决于我们是STDIN,字符串输入,char数组输入等,但仍然必须采用^,v,>和<的形式?
                ><^v或空格表示。我会澄清这一点。