今天,我尝试在Esolangs.org Wiki esoteric programming languages上建立帐户。我之前曾为一些Wiki作过贡献,并且我想贡献一两个小的页面编辑。
...也就是说,直到我看到用来创建新帐户的验证码谜题为止。
对于CAPTCHA使用晦涩的语言很可能是在开玩笑。但是,我花了将近半小时来尝试理解该语言,因此我可以创建一个新帐户。
最终,我放弃并使用了online Befunge interpreter,它给了我答案52256370
。
我不理解的是为什么9332682811>\#+:#*9-#\_$.@
的输出是52256370
。
我看到一些评论表明这是从10到9的转换。但是,当我尝试通过用online base converter转换9332682811
进行验证时,得到了26072072027
的结果。
最佳答案
该程序将332682811
解析为一个低位序的base-9整数,并以base-10打印。
Befunge使用可在二维空间自由移动的指令指针来解释2D网格(或圆环,具体取决于版本)上的指令。该程序是单行程序,因此指令指针只能向前和向后移动。9332682811
将这些数字分别压入Befunge的值堆栈,然后以下指令执行一个简单的循环。在循环的正常迭代中,事情看起来像这样:
Instructions Meaning Top stack values
9332682811>\#+:#*9-#\_$.@
> Set the instruction pointer to travel a b
to the right.
\ Swap the top 2 values on the stack. b a
#+ Nothing, since # means b a
skip the next instruction.
: Duplicate the top value on the stack. b a a
9 Push 9. b a a 9
- Pop two values and push their difference. b a (a-9)
_ Pop the top value and set the instruction b a
pointer traveling right if the value is 0
or left otherwise.
\ Swap the top 2 values. a b
9 Push 9. a b 9
* Pop two values and push their product. a (b*9)
+ Pop two values and push their sum. (b*9 + a)
> Set the instruction pointer traveling
right again.
因此,除非在迭代开始时堆栈上的第二个值是9,否则迭代会弹出两个值
b
和a
并压入b*9 + a
。如果第二个值是9,则循环终止并显示最高值:
Instructions Meaning Top stack values
9332682811>\#+:#*9-#\_$.@
_ Pop the top value and set the instruction b a
pointer traveling right if the value is 0
or left otherwise.
$ Discard the top value. b
. Pop and print the top value.
@
因此,总而言之,该程序会插入一堆数字,并用
a
反复替换b
和b*9+a
,直到达到9,即停止信号。这是基数为9的转换器。如果您尝试使用another base converter进行验证,请确保正确设置了字节序。
332682811
是Little-endian,因此您可能需要将其反转。关于befunge - 为什么Befunge代码9332682811>\#+ :#*9-#\_$. @输出52256370?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45223117/