首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二进制-十进制转换器

二进制-十进制转换器
EN

Code Golf用户
提问于 2016-12-05 19:37:45
回答 38查看 9.1K关注 0票数 44

二进制到十进制转换器

据我所见,我们没有简单的从二进制到十进制转换的挑战。

编写一个程序或函数,该程序或函数接受正二进制整数并输出其十进制值。

您不允许使用任何内置基转换函数。整数到十进制函数(例如,将101010转换为[1, 0, 1, 0, 1, 0]"101010"的函数)不受这一规则的约束,因此被允许。

规则:

  • 代码必须支持二进制数字,直到语言支持的最高数值(默认情况下)。
  • 您可以选择在二进制表示中有前导零。
  • 十进制输出可能没有前导零。
  • 输入和输出格式是可选的,但是在数字之间不能有任何分隔符。(1,0,1,0,1,0,1,0)不是有效的输入格式,但10101010(["10101010"])都是。
    • 你必须按照“正常”的方向输入。111014而不是7

测试用例:

代码语言:javascript
复制
1
1

10
2

101010
42

1101111111010101100101110111001110001000110100110011100000111
2016120520371234567

这个挑战与其他一些挑战有关,例如

EN

回答 38

Code Golf用户

回答已采纳

发布于 2016-12-05 22:33:33

果冻,5字节

代码语言:javascript
复制
DḤ+¥/

在网上试试!

解释

The cast

  • D是一个monad (单参数函数):数字,将1234转换为[1, 2, 3, 4]
  • 是一个使其单个参数加倍的单曲。
  • +是一个dyad (两个参数函数),它添加它的左参数和右参数。

从那以后,就有点棘手了。

这里是解析时发生的事情,

  • 读取D+。这条链子看起来像[D, Ḥ, +]
  • 接下来的两个字符是quick,它们的作用就像我们到目前为止所读到的链接(函数)上的解析时后缀操作符。
  • 当读取¥时,最后两个链接被弹出并替换为一个链接,该链接的作用类似于组成它们所形成的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作为最终工作值,该值将被返回。

,因此整个表达式的计算结果为:

代码语言:javascript
复制
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
票数 63
EN

Code Golf用户

发布于 2021-03-15 14:51:36

图灵机代码,232个字节

(与往常一样,使用morphett.info规则表语法)

虽然仅比现有解决方案短40个字节,但该解决方案使用12种状态,而此解决方案只使用4种:

代码语言:javascript
复制
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中发生。这种状态使二进制数逐个递减,每次增加一个十进制计数器.

由于数字基字母表的命名冲突,我在转换过程中使用了OI。状态1,2,3只负责清理磁带,转换符号O → 0I → 1,最后停机。

票数 11
EN

Code Golf用户

发布于 2016-12-05 19:49:23

Retina,15字节

将二进制转换为一元,然后将一元转换为十进制。

代码语言:javascript
复制
1
01
+`10
011
1

在网上试试

票数 7
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/102219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档