据我所见,我们没有简单的从二进制到十进制转换的挑战。
编写一个程序或函数,该程序或函数接受正二进制整数并输出其十进制值。
您不允许使用任何内置基转换函数。整数到十进制函数(例如,将101010转换为[1, 0, 1, 0, 1, 0]或"101010"的函数)不受这一规则的约束,因此被允许。
规则:
(1,0,1,0,1,0,1,0)不是有效的输入格式,但10101010和(["10101010"])都是。1110是14而不是7。测试用例:
1
1
10
2
101010
42
1101111111010101100101110111001110001000110100110011100000111
2016120520371234567发布于 2016-12-05 22:33:33
DḤ+¥/在网上试试!

D是一个monad (单参数函数):数字,将1234转换为[1, 2, 3, 4]。Ḥ是一个使其单个参数加倍的单曲。+是一个dyad (两个参数函数),它添加它的左参数和右参数。从那以后,就有点棘手了。
D、Ḥ和+。这条链子看起来像[D, Ḥ, +]。¥时,最后两个链接被弹出并替换为一个链接,该链接的作用类似于组成它们所形成的dyad。所以现在这条链看起来像[D, dyad(Ḥ+)]。/时,最后一个链接(应该是dyad)被弹出并替换为褶皱使用该dyad的单数(直观地:f/获取一个列表,用f替换其中的逗号,并计算结果)。[D, fold(dyad(Ḥ+))],两条单子。发生的情况
101010)。D,将工作值替换为其数字([1,0,1,0,1,0])。fold(dyad(Ḥ+)),将工作值替换为1∗0∗1∗0∗1∗0,其中∗是dyad Ḥ+。x∗y对什么进行评估?x。Ḥ将此值加倍。现在的工作值是2x。+ (加法)缺少一个正确的参数,所以这是一个钩子:一个特殊的句法模式,其中这个dyad的正确参数被注入+。这将生成2x + y作为最终工作值,该值将被返回。1∗0∗1∗0∗1∗0 = 2×(2×(2×(2×(2×1+0)+1)+0)+1)+0
= 32×1 + 16×0 + 8×1 + 4×0 + 2×1 + 1×0
= 42发布于 2021-03-15 14:51:36
(与往常一样,使用morphett.info规则表语法)
虽然仅比现有解决方案短40个字节,但该解决方案使用12种状态,而此解决方案只使用4种:
0 1 0 l 0
0 0 . r 0
0 . 1 l 0
0 _ I r 1
0 I 2 r 0
0 2 3 r 0
0 3 4 r 0
0 4 5 r 0
0 5 6 r 0
0 6 7 r 0
0 7 8 r 0
0 8 9 r 0
0 9 X l 0
0 X O r 0
0 O I r 0
1 _ _ l 2
1 * * * 0
2 * _ l 3
3 O 0 l 3
3 I 1 l 3
3 . _ l 3
3 _ * * halt
3 * * l 3有趣的计算(基本转换)实际上只在状态0中发生。这种状态使二进制数逐个递减,每次增加一个十进制计数器.
由于数字基字母表的命名冲突,我在转换过程中使用了O和I。状态1,2,3只负责清理磁带,转换符号O → 0和I → 1,最后停机。
发布于 2016-12-05 19:49:23
将二进制转换为一元,然后将一元转换为十进制。
1
01
+`10
011
1在网上试试
https://codegolf.stackexchange.com/questions/102219
复制相似问题