螺旋,得分: 61921 5127 4715 4655 4191
4.X~>v+^#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
X * X X X X X X X X X X X X X X X X X X X X X X X X X
! > h y t f V b n j u [ ( 1 3 2 ) ] U J N B F T Y H G
0;vgv*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*vvv****v+^v+^v+^v+^*v++4
X X X X X X X X X X X X X X X X X X X X X X X X X X
v v v v v v v v v v v v v v v v v v v v v v v v v v
Y y J F V u t U [ G H B n 3 N 2 j ) h g f ] ( 1 b T
可以在这里找到翻译。
说明:
P.X~ZZ*v+^#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
X X X X X X X X X X X X X X X X X X X X X X X X X X
! h y t f V b n j u r d c m k i e s x l o w a z p q
0;vgv*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*****************************************************************vP
X X X X X X X X X X X X X X X X X X X X X X X X X X
v v v v v v v v v v v v v v v v v v v v v v v v v v
z y x w V u t s r q p o n m l k j i h g f e d c b a
程序从0
第四行的字符开始。运行的第一段代码是0;vg
。;
将数字作为输入并将其放置在堆栈中。v
将寄存器中的内容(零)放入堆栈。它将用作计数器。g
是一个标签,到达该标签时,控件跳至g
代码中字母的另一处。
所以这是控件现在所在的位置:
X
v
g
由于在所有其他方向上都有空格,因此指令指针开始向上移动。
v
将零放入堆栈,然后X
立即将其从堆栈中弹出。因为弹出的值为零,所以指令指针移至X
(否则它将视为空白)。
默认情况下,控制流处于向右转模式,因此现在到达控制点时,指令指针将向右转。v
再次将0压入堆栈,*
将寄存器加1。
v*v*v
X
v
g
下一个v
将寄存器(编号1)中的内容放入堆栈中,指令指针尝试向右转到,击中next X
。刚添加到堆栈中的值被弹出并放置在寄存器中。由于它为非零值,X
因此不会被输入,并且IP会转到*
右侧的下一个地址,再次增加寄存器中的值。
v*v*v*v*v
X X X X X
v v v v v
i h g f e
这一次又一次地发生,直到我们到达该部分的结尾并且*
s 的行开始。到目前为止,寄存器中的值为6,即ASCII字母g
减去ASCII字母a
。因此,以97 *
s 为一行,我们将寄存器中的值增加到103,这与g
我们要打印的字母匹配。v
将其压入堆栈,P
是命中时的另一个标签,我们P
在代码的第一行跳至另一个标签。
在这里.
从堆栈中弹出值并将其打印为字符。之后,X
从堆栈中弹出无关的零,然后~
比较堆栈中的两个剩余值(这些值是计数器和输入值)。如果值相同,则运算符将零放在堆栈中(否则为-1或1)。再次,控件尝试向右转。X
如果比较的值为零,则从堆栈中弹出比较的值X
,然后在!
输入之后,终止程序。
P.X~ZZ*v+^
X
!
否则,IP继续到Z
,这是一个标签,在这种情况下,该标签仅向右跳一步。这样做的原因是,跳转会将寄存器中的值设置回零。*
递增寄存器并将v
结果1放入堆栈。+
弹出堆栈的两个顶部元素(1和计数器),将它们相加,然后将结果放入堆栈中(实际上这会使计数器加1)。^
将结果从堆栈复制到寄存器,而不将其从堆栈中删除。
#
将寄存器中的值减一,v
将减后的值压入堆栈,IP尝试向右移,然后X
从堆栈中弹出该值。如果该值不为零,则IP继续向东移动,递减寄存器中的值,直到其达到零为止,然后IP进入X
分支。
#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
X X X X X X X X X X X X X X X X X X X X X X X X X
h y t f V b n j u r d c m k i e s x l o w a z p q
分支指向对应于计数器值的标签。击中标签后,控件将跳转到我们从标签开始的部分中标签的g
另一次出现,开始另一个迭代。与一样g
,寄存器中的值递增到我们需要打印的字母的ASCII值。然后打印字符,计数器增加,选择另一个标签。直到最后一次迭代后计数器等于输入,程序终止。
编辑:
P.X~Zv+^
X *
! Z
实现与
P.X~ZZ*v+^
X
!
但空白较少。
编辑2:
vv****v+^v+^v+^v+^*v++P
可以代替:
*****************************************************************vP