这个问题的灵感来自凯文·克鲁伊森的问题。
现在地毯已经铺好了,我们要卷起来。您的任务是编写一个程序,该程序接受一个字符串并返回由该字符串制成的螺旋线(代表从侧面看的卷起的地毯)。
滚动地毯的一个步骤如下。有一个例子可以说明我的意思。请注意,该示例以部分卷起的地毯开始,以更好地理解:
ac
rpet
- 将“头”与地毯的“尾巴”分开:头是到目前为止已经滚过的东西,尾巴是还有待滚过的东西。
Head: ac Tail:
rp et
- 将头顺时针旋转90°。
Rotated head: ra Tail (unchanged):
pc et
- 如果新头的宽度(在此
2
)小于或等于尾巴的长度(在2
)- 然后把它放在尾巴上
- 否则,地毯(如该步骤开始时一样)被卷起
New carpet: ra
pc
et
根据需要重复该过程多次。
两个示例显示了地毯滚动的所有步骤:
carpet
c
arpet
ac
rpet
ra
pc
et
0123456789
0
123456789
10
23456789
21
30
456789
432
501
6789
一些精度:
- 您不需要显示所有中间步骤,而仅显示卷起的地毯(例如,如果您找到一种非迭代的方法来计算结果,那是完美的)。另外,您不需要打印任何前导空格,在上面的示例中,我仅显示它们以对齐内容。
- 输入是一个字符串,一个字符列表/数组
- 输出被打印到标准输出或文件中。
- 输入是好的:长度至少为1个字符,并且最大为一个足够小的常量,这样它就不会引起问题,但是您不能在程序中使用该常量。字符串的内容只是漂亮的字符([a-zA-Z0-9]),可根据您的喜好进行编码。
- 这是代码高尔夫球,因此最短答案以字节为单位。不要让代码高尔夫球语言阻止您使用非代码高尔夫球语言发布答案。尝试针对“任何”编程语言提出尽可能简短的答案。
- 默认漏洞是禁止的。
- 如果可能的话,请添加一个带有测试代码的链接。
- 另外,如果您认为有必要,请为您的答案添加说明。
ProgrammingPuzzlesAndCodeGolf
-最终的尾巴长度大于1时使我绊倒。
print
在内使用lambda
。