介绍
西西弗斯(Sisyphus)最近在工作中遇到了一些麻烦。看来他只是什么都做不完,他很想找到解决这个问题的办法。
他目前的工作需要在山上滚石。他通常会做好工作,但是每次他靠近山顶时,都会再次滚落。
他的工作真的很沮丧,他想通过计算机模拟岩石滚下山坡来科学地解决问题。
碰巧西西弗斯不是特别擅长编程,所以也许您可以帮助他?
挑战
经过这个愚蠢的介绍之后,我们开始做生意。您的程序将收到一个山丘和岩石的插图,其外观类似于此:
#o
##
###
######
########
其中#
代表山的一部分,o
代表岩石。
现在,您必须实现一个程序,将岩石向下移动1层。例如,上面的输出应为:
#
##o
###
######
########
如果有一个水平的区域,那么小山就只是水平滚动,所以...
o
########
...这只会使石头向侧面滚动。
o
########
如果有垂直区域,岩石会掉下一步,所以...
#o
#
#
#####
...会产量...
#
#o
#
#####
您还将在图像上方的一行中分别接收图像的宽度和高度。因此,总的来说,我们的示例输入如下所示:
10 5
#o
##
###
######
#########
(请注意,这里的空格是空格。选择文本并查看我的意思。)
一些细节
- 当运行程序时岩石已经在最后一行时,您可以选择终止程序或输出未更改的输入
- 这座山只有下山了
您的程序应将输出的格式设置为与输入(包括尺寸)完全相同的格式,因此,如果将程序的输出通过管道传递给自身,则它将计算下一步。
您可以假设总有一条通向底部的道路,因此路径被“阻塞”的输入可能会导致未定义的行为
您可以假设最后一行始终有一个空格。岩石应该“停在”那里,因此,在几次调用该程序之后,始终将其输出通过管道传递到自身中,您应该最后将岩石放在最后一行,放置以前的空间。
您可以接受任何喜欢的格式的输入(stdin,file等)。您必须发布WHOLE程序(因此所有预初始化的变量都计为代码)。
这些行以终止
\n
。您可以在此处获得一些示例输入(确保正确复制空格!)
这是code-golf,因此使用最少字节的工作提交将获胜。
优胜者将在2014年7月26日被选中。您可以在此之后发布解决方案,但您不能赢
如有任何疑问,请在评论中让我知道。
打高尔夫球快乐!
#
s,所以末尾只有一个空格,因为宽度为10。在这种情况下(经过几次迭代),岩石将放置在空格所在的位置(因此位于底部) -右上角)。