Befunge- 37 x 5 = 185 38 x 3 = 114个字符
由于Befunge不支持浮点,因此只能使用整数。
&v /& _ #`&# "-"$# -#< v
>~:0`!#v_:" "`! #v_:","`#^_"*"`#v_&*>
^ ># $ .# @#< >&+
说明
Befunge最大的区别在于,它不是像大多数语言一样线性的指令集;它是单字符指令的二维网格,控制可以在任何方向流动。
第一个&
仅输入第一个数字。该v
和>
然后重定向到控制在第二行的主路径。
~:0`!#v_
这将输入一个字符(~
),将其复制(:
),将零压入堆栈(0
),弹出顶部的两个元素,并确定第二个元素是否大于第一个元素(`
我很惊讶您无法使用```来获取代码反引号(。),反转顶部元素(!
)的真实性,如果为零则向右,否则向下(#v_
)。
基本上,它检查输入是否-1
不再代表输入。
># $ .# @
如果输入为-1
原值,则丢弃重复的输入值($
),将堆栈的顶部作为整数(.
)输出,并暂停程序(@
)。
:" "`! #v_
否则,重复类似的过程以确定输入是否小于或等于空格。如果是空格,则控制权下降,否则控制权向右移动。
^ ># $ .# @#<
如果是空格,则将其向左重定向(<
); 使用跳过程序暂停(@
),输出(.
)和右重定向(>
)#
。但是将执行丢弃操作以从堆栈中删除空间。最后,将其重定向到下一个执行(^
)。
:","`#^_
如果它是不一样的过程来划分,如果它是在一个空间[+, *]
或[-, \]
在朝好的方向发展和同比分别。
>~ "*"`#v_&*>
^ >&+
因为[+, *]
它再次被拆分以确定它是a +
还是a *
。如果+
向下,则输入下一个数字&
(+
),然后将它们加在一起(),然后该控件回绕并重定向到下一个字符的主路径。如果是,*
则输入(&
)并乘以(*
),然后直接回绕。
/& _ #`&# "-"$# -#<
因为[-, \]
它从右边的标题开始。所述#
的跳过字符之后他们因此初始路径是"-"`_
它简单地确定是否是-
或/
。如果是,/
则继续输入(&
)并除以(/
)。如果是,-
则它向右移动,再次跳过字符,以使其执行,&"-"$-
结果是输入数字(&
)将该-
字符压入堆栈,然后丢弃("-"$
),然后计算减法(-
)。然后将控件重定向回主路径。