背景
这项挑战是为了纪念Apsiller,他们凭借自己的挑战赢得了2016年PPCG最佳影片中的“ 看起来并不那么简单”类别的奖,我的4音符音乐盒可以播放那首歌吗? 恭喜你!
在他们的“关于我”页面上,该用户有一个非常精美的模拟器,用于“ 生命游戏”蜂窝自动机。(严重,请检查一下。)另一方面,单词aspillera在西班牙语中代表“ arrowslit”。鉴于这些事实,这一挑战是关于“人生游戏”中的箭眼。
生命游戏arrowlits
在GoL中,我们将用滑翔机代表一个箭头,并用一系列方块代表一堵墙。一架滑翔机从上方接近墙壁,并试图飞过墙壁的缝隙(箭头所示)。您的任务是检查滑翔机是否穿过箭孔或撞到墙上。
输入项
您的输入是位网格,代表GoL配置。您可以采用任何合理的格式(任意两个可离散打印的ASCII字符的多行字符串,字符串列表,2D整数数组,2D布尔数组等)。为了清楚起见,下面将使用字符的多行字符串.#
。
确保输入具有多个属性。首先,它的高度是2N一些Ñ≥6 ,其宽度至少是2N + 2。输入将全部为.
s,除了在最上面的三行中的某个位置是滑翔机,而在中间的两行中是一堵墙。滑翔机将向西南或东南方向移动,其位置应确保如果移除了墙,则滑翔器在到达底部边缘之前不会穿过侧边缘(但可能会到达网格的某个角)。滑翔机最初与左边缘和右边缘分开至少.
s 步长。它可以处于任何阶段。
墙由块组成,这些块由一列.
s 隔开,但在一个地方,它们之间至少由两列.
s 隔开。像滑翔机一样,最左边和最右边的块也与边缘分开.
s 一步。左边缘上总是至少有一个块,而右边缘上总是有一个块。
这是有效输入网格的示例:
....#......................
..#.#......................
...##......................
...........................
...........................
...........................
.##.##............##.##.##.
.##.##............##.##.##.
...........................
...........................
...........................
...........................
...........................
...........................
输出量
如前所述,您的任务是确定滑翔机是否撞入墙壁或使其滑到南边。出于此挑战的目的,如果配置不再由单个滑翔机和木块墙组成,则会发生崩溃,无论以后在仿真中发生什么。下图显示了东南滑翔机在两个不同的阶段中不会崩溃的最小间隙(西南滑翔机的条件是对称的)。
...#...........
.#.#...........
..##...........
...............
...............
##...........##
##...........##
...#...........
....#..........
..###..........
...............
...............
##...........##
##...........##
如果滑翔机飞过墙壁,则应输出真实值,否则输出虚假值。对于上面的示例,正确的输出是虚假的,因为滑行器会撞到墙壁的左侧。
出于此挑战的目的,您可以假设,如果您在输入上模拟GoL 2 *(高度-3)步,则滑行器位于预期位置的最下面一行,并且壁完整,那么输出是真实的。
规则和计分
您可以编写完整的程序或函数。最低字节数获胜。
测试用例
我已经将测试用例收集到GitHub存储库中,因为它们很大。以下是各个文件的链接: