vrlril1-{)?\:',=4*?~r0[
i! '${U [0r/?*7̸0l{$
$ka6 ̹\!$,'/;? = ̹
' ̸
$
在线尝试!
尝试换位!
输入是空间分离的每个值和逗号分隔的每一行(换行是可选的),并支持两个字符串和(非零)的数字。由于输入会被空格和换行符自动打断,因此解析输入变得更加容易。因此,例如,输入:
1 2 3 , 4 5 6 , 7 8 9
将以嵌套数组形式表示为[[1,2,3],[4,5,6],[7,8,9]]
。对锯齿状数组的支持最少(仅最后一个可以短),但是由于预期输入为矩形,因此可以满足该要求。
输出以相同格式表示(换位版本输出带换行符,但其零字节不同,以代替空格)。普通版本具有尾随空格,转置版本具有尾随逗号和换行符(由于难以确定何时没有更多数据可打印)。
普通版本的确在怪异的位置(例如7̸0
)有修饰符,但这是由于在对源进行转置时需要将它们放在正确的位置,并且正常执行仅利用指令的最左列。
说明
转置源的说明将为非转置形式。箭头将代表各个块的入口和出口处的IP方向性。
→rlril1-{)?\:',≠4*?~r0[ Initial position. Read and parse input.
↓ Input loop exit and direction
读取输入,,
找到字符后,将推送新的子堆栈。这允许每个堆栈将每一行分别保存在内存中。从顶部进入下一部分。
↓
.. '${̹L [0r/?*7≠0l{̹$ When no more input:
↑ ↓
[0
(向左执行)设置一个空堆栈作为第一行和最后一行之间的边界,然后旋转到第一堆栈({̹
),开始打印元素和旋转堆栈。在i!
不执行,{̹L [0r
只执行一次。找到零大小的堆栈时,循环退出。
↑ ↓
$ka6 \!$,'/;? Row separation formatting
找到空堆栈后,,
将打印a 和换行符,并重新输入value循环。执行顺序(出于可读性而镜像).
是未执行的命令:\',$!.6ak$?....../
。更改ak
为'<space>
会打印空格而不是换行符。
当程序尝试从空堆栈进行写入时,执行将停止;这就是为什么只有最后一行的锯齿才能正确工作的原因,
,并且输出中会有尾随的原因:在程序知道没有更多数据之前,逗号已经被打印了。