用蛇把迷宫填满(直到被卡住)。
蛇
蛇从给定的起点开始,指向EAST。它通过移动总是有墙壁或它的身体的一部分立即LEFT其头部(“的左手法则墙跟随 ”),直到它被卡住,因为它周围所有的头四个方向都被占用。(注意:卡住的蛇可能无法填满所有可到达的空间,但这不是目标!)
挑战
编写接受迷宫作为2D文本形式的输入的程序或函数:
- 输入可以采用任何合理的格式:例如,字符串列表,带换行符的单个字符串,文件。
- 迷宫有墙(“
#
”),空白处(“”)和正好一个起点(“
o
”)。 您可以选择
- 要么假设第一行和最后一行都是完整的墙;
- 或假设每个输入都具有隐式的外层墙
您可以假设起点在其正上方(北)具有一堵墙(或隐式墙),并且蛇可以在EAST或SOUTH方向上进行有效的起点移动。
- 您可以假定文本中没有其他字符(如果需要输入,则换行符除外)。
- 您可以假定所有行的长度都相同。
并打印/返回“填充的迷宫”作为输出,并附上蛇被卡住时的快照:
- 蛇的身体由
>v<^
指向其下一段的位置的字符表示 - 蛇的起点是其起点的方向(“
>
”,除非必须立即转弯)或一个o
字符(不需要保持一致) - 蛇的终点是一个
o
角色
计分
常规代码高尔夫:最短代码胜出
例
in:
#################################
# o #
# #
# ## ### ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ### ## #
# ## ##### ## #
# ## ##### ## #
# ## ### ## #
# ## ## #
# #
# #
#################################
out:
#################################
#>>>>>>>>>>>>>>>>>>>v>>>>>>>>>>v#
#^>>>>>>>>>>>>>>>>>v>>>>>>>>>>vv#
#^^ ##>>>>>>v###o>>>>>v## vv#
#^^ ##>^ ##>>>>^## >v## vv#
#^^ ##^ ## ## v## vv#
#^^ ##^ ## ## v## vv#
#^^ ##>^ ## ## >v## vv#
#^^ ##^< ### v<## vv#
#^^ ##^ ##### v## vv#
#^^ ##^ ##### v## vv#
#^^ ##^< ### v<## vv#
#^^ ##^<<<<<<<<<<<<<<<<## vv#
#^^<<<<<<<<<<<<<<<<<<<<<<<<<<<<v#
#^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<#
#################################
动画(出于说明目的):
编辑:请注意,如果有疑问,蛇应“保持其左手”在它已经在其上的墙壁上,跟随拐角,而不是跳到1个街区之外的墙壁上。
感谢乔纳森·艾伦(Jonathan Allan)提出来,感谢Draco18s提供上面的说明性快照。
其他例子
in:
####################
# o# #
# ###
# #
# ## #
# ###
####################
out:
####################
#>>>>>>>>>>>>>>vv# #
#^>>>>>>>>>>>>vvv###
#^^ v<<<o<<<<v>>v#
#^^<<<<##^<<<<<<v<<#
#^<<<<<<<<<<<<<<<###
####################
in:
####################
# o #####
# #####
# #
# ##
####################
out:
####################
# >>>>v#####
# v#####
# >>>>o#
# ##
####################
in:
################
#o #
# ########## #
# # # #
# # # #
# # # #
# # # # #
# # # #
# # # #
# # # #
# ############ #
# #
################
out:
################
#>>>>>>>>>>>>>v#
#>>v##########v#
#^#>>>>>>>>>v#v#
#^#>>>>>>>>vv#v#
#^#^>>>>>>vvv#v#
#^#^^# vvv#v#
#^#^^o<<<<<vv#v#
#^#^^<<<<<<<v#v#
#^#^<<<<<<<<<#v#
#^############v#
#^<<<<<<<<<<<<<#
################