沙盒发布在这里。
创建一个“弹跳”字符串的函数或程序。
- 输入将是Stdin中的String或最接近的替代
- 输入将仅包含可打印的ASCII和/或空格
- 输出将输出到Stdout或最接近的输出
- 可以使用尾随的换行符和空格
如何弹奏字符串
- 根据需要将字符串格式化为尽可能多的ASCII弹簧圈
- 用空间填充线圈,直到最近的线圈
- 跟随线圈周围的弹簧,读出字符
这是一个ASCII弹簧圈:
#
# ####
# #
# ####
#
其中#s是字符串的字符
这是一个例子:
abcdefghijklmnopqrstuvwxyz
变成
a
b cdef
g h
i jklm
n
o
p qrst
u v
w xyz.
.
其中.s替换了可见性的空格。
然后,该字符串被读回,继ASCII春天向下,周围的循环,命中g和u两次:
1| a <-3
V b cdef
g h
4| i jklm
V n 2->
...
...给予:
abgjklmhfedcginopuxyz vtsrquw (带有尾随空格)
测试用例
(添加引号以突出显示尾随空格-请忽略IO)
I: "abcdefghijklmnopqrstuvwxyz"
O: "abgjklmhfedcginopuxyz vtsrquw "
I: "!@#"
O: "!@ # "
I: ""
O: ""
I: "12345 67890"
O: "12690 7 54368 "
I: " "
O: " "
请注意,输出长度始终是15的倍数,即弹簧圈的长度
这是代码高尔夫球,因此最短的答案以字节为单位。

主循环从右向左开始执行,环绕到游戏场的右侧。这是我们从stdin读取第一个字符的地方,如果它是EOF,则终止。
下一节将确保使用公式将所有EOF字符转换为空格
字符的副本将保存到临时存储器中,然后在第四行(
)的表上查找当前索引,以确定是否应输出字符。
如果需要输出字符,则转到左侧分支。这里执行交换以取消下一步将要发生的交换,然后将零推入以强制分支正确。
如果没有输出字符,我们将其向下交换到索引计数器下方的堆栈中(这是在左分支中被取消的交换)。在这两种情况下,我们都将字符存储在当前索引偏移处的内存中,增加索引,并检查它是否大于13。
如果不是,则从stdin中读取下一个字符并重复内部循环。
如果是这样,我们将完成一组14个字符的输出,其中7个已输出(