设置
考虑一个包含29个编号单元格的奇怪形状的盒子,如下图1所示。
在此2D盒子内有两种正方形动物:粗毛和臭鼬。图1(a)用蓝色显示了一些粗枝,用红色显示了一些臭味。每个生物恰好占据一个网格单元。该盒子可能包含0到26个粗线之间的任何位置,但始终只包含两个臭鼬。
在重力作用下,碎片和臭气坐在盒子的底部,堆积在它们下面的任何物体的顶部。这两个物种都非常懒惰,并且永远静止不动。
该框还包含一个圆点,用黑色正方形表示,恰好占据一个网格单元。该STOT是不受到重力。
如图所示,该盒子具有位于单元28底部的一个开口。
为了以文字形式表示框中的粗线,阴茎和茎的配置,我们使用29个字符的字符串(每个网格单元一个字符),按枚举顺序.
表示,表示一个空单元格,o
表示一条粗线,x
表示一个污点,并@
代表矮胖。例如,图1(a)的配置由字符串表示.........@...o....ooo..xox...
。
操作方式
盒子可以旋转 90°的任意倍数。当盒子旋转时,叶屑和臭虫在它们的网格内保持静止。旋转完成后,它们会直接向下掉落,直到i)它们被下面的墙壁堵住;ii)它们被下面的小树枝,sm茎或草梗堵住;或者iii)它们掉落到单元格28的孔中并退出框。矮脚不会掉下来;即使生物停留在其当前细胞上,它也保持固定在其当前细胞中。
在生物掉落并达到新的稳定状态之前,不能再次旋转盒子。
从字面上看,框旋转表示+
为顺时针旋转90°,旋转|
180°和-
逆时针旋转90°。
此外,可以在四个罗盘方向上以一个网格单元为增量移动笔杆。举动可能不会:i)引起桩与生物之间的碰撞(即,目标网格单元必须为空),ii)导致桩与壁之间的碰撞,或者iii)导致桩通过以下方式离开箱子单元格28中的孔。
另外,如果小脚上有任何生物(相对于当前重力),小脚也可能不会移动。
以文字,STOT移动被记<
左,>
右,^
对了,v
对了。总是相对于图中所示的“标准”(非旋转)框架指定点移动。也就是说,如果该笔杆位于单元格10中,则移动^
将始终将其移动到单元格5中,并且该移动>
将始终将其移动到单元格11中。框的方向不会影响移动的方向。
使用从左到右的字符串对操作序列进行编码。例如,字符串+<<^-
表示盒子顺时针旋转90°,然后针杆左移两次并向上移动一次(相对于标准框架),然后盒子逆时针旋转90°回到其原始方向。
挑战
出于非常好的原因(我无法透露),我们希望从包装盒中拔出所有胡扯,而又不拔出一个sm子。为此,我们可以使用上面具体描述的操作。
在解决此问题之前,我们应该模拟一下各种操作将如何影响包装盒的内容,这是此挑战的重点。
您必须编写一个程序,该程序接受来自stdin
(或等效)的两个参数:
- 描述盒子初始状态的字符串
- 一系列的操作
您可以假设这两个参数在语法上都是有效的,该框以标准方向开始,并且该框的初始状态是稳定且合法的。
程序必须输出到stdout
(或等效的)以下之一:
(情况1)如果移动顺序合法(不违反短杆移动规则)并且不导致任何臭味离开盒子,盒子的最终状态,用字符串表示。盒子的最终方向并不重要。
(案例2)单个感叹号
!
,如果移动顺序不合法或导致任何臭味离开盒子
计分
获胜的程序是按字节数计算的最短程序,它受制于一些非常有利可图的奖金乘数:
如果不是为情况1打印编码的输出,则声明为0.65的乘数,程序将使用包装字符,臭味,臭脚和空单元格的规范字符,以最终状态和方向输出盒子的ASCII图片,而不是输出情况1的编码输出,并放置一个
*
单元格中位于孔28外部的单元格中。前导和尾随空格将被忽略。例如,如果将图1(a)旋转90°,则输出为
. . ..... .o... xo.@. *ooo.. x .
如果不是为情况1打印编码的输出,则程序要求输出0.22的乘数,该程序将输出图像文件或显示GUI窗口,并以最终状态和方向显示框的图片。图片应采用图1(a)的样式,并使用彩色框显示网格单元,墙壁和生物/脚架。
如果不是为情况1打印编码输出,则程序声明0.15的乘数,该程序将输出动画的.gif或动画的GUI窗口,以1秒的间隔显示模拟中的所有中间状态。适用与0.22乘数相同的图像规则。动画的第一帧应描绘模拟的初始状态。此外,动画应显示“隐藏”的中间状态,即
旋转后,每动画帧中的小球/ mols进入稳定配置的状态
盒子在180°旋转的中间90°旋转状态
如果程序产生上述样式的动画.gif或动画GUI窗口,但以20 fps的速度运行并显示,则声明乘数为0.12
盒子旋转的平滑连续动画
平滑,连续地动画显示小脚移动,以及滑倒的小草/臭虫处于稳定状态
穿过盒子28孔掉落的碎片应显示为从盒子中出来,并且应该完全消失在外面。您可以为动画选择自己的时间,只要执行不超过1次/秒即可。
总分是floor( base score * multiplier )
。只能要求一个乘数。
毕竟这是一个愚蠢的世界。;)