首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数得像巴比伦人

数得像巴比伦人
EN

Code Golf用户
提问于 2018-08-13 09:45:17
回答 12查看 7.2K关注 0票数 41

挑战

给定一个巴比伦数字的ASCII表示作为输入,输出该数字的西方阿拉伯数字。

巴比伦数系

巴比伦人是怎么计算的?有趣的是,他们使用了一个Base 60系统和一个基本10系统的一个元素。让我们首先考虑系统的单元列:

巴比伦人只有三个符号:T (或者,如果你能呈现它:),代表1;< (或者,如果你能呈现它:),代表10;\ (或者,如果你呈现它:)代表零。

注:从技术上讲,\ (或)不是零(因为巴比伦人没有‘零’的概念)。‘'Zero’是后来发明的,因此\是后来添加的占位符符号,以防止歧义。然而,就这个挑战而言,将\视为零就足够了

因此,在每一列中,您只需将符号的值相加,例如:

代码语言:javascript
复制
<<< = 30
<<<

在每一列中,永远不会有超过五个<或超过九个T。\将始终单独出现在列中。

现在,我们需要将其扩展到添加更多的列。这与任何其他基数60完全一样,其中最右边列的值乘以$60^0,左边的值乘以$60^1,左边的值乘以$60^2,诸如此类。然后,将每个值相加,得到数字的值。

列将用空格分隔,以防止歧义。

下面是一些例子:

代码语言:javascript
复制
<< 

规则

  • 您可以自由地接受ASCII输入(T<\)或Unicode输入()
  • 输入的数字总是在$10^7以下。
  • 在每一列中,<s总是位于Ts的左边。
  • \总是单独出现在列中

以字节为单位的最短代码获胜。

EN

回答 12

Code Golf用户

发布于 2018-08-13 10:33:55

JavaScript (ES6),44字节

将输入作为ASCII字符的数组。

代码语言:javascript
复制
a=>a.map(c=>k+=c<1?k*59:c<'?'?10:c<{},k=0)|k

在网上试试!

怎么做?

巴比伦数字系统可以被看作是一种四指令语言,用一个寄存器工作--让我们称它为累加器。

从\$k=0\$开始,输入数组中的每个字符\$c\$ a\\$修改累加器\$k\$如下:

  • space:乘以\$k\ \$60\$ (实现为:添加\$59k\\到\$k\\$)
  • <:将$10\$添加到\$k\$
  • T:增量\$k\$
  • \:什么都不做;这是这种语言的NOP指令(实现为: add \$0\$ to \$k\$)
票数 39
EN

Code Golf用户

发布于 2018-08-13 10:11:51

Perl 6,39字节

-3字节,感谢nwellnhof

代码语言:javascript
复制
{:60[.words>>.&{sum .ords X%151 X%27}]}

在网上试试!

使用楔形文字。

解释:

代码语言:javascript
复制
{                                     }   # Anonymous code block
     .words  # Split input on spaces
           >>.&{                    }  # Convert each value to
                sum   # The sum of:
                    .ords # The codepoints
                          X%151 X%27   # Converted to 0,1 and 10 through modulo
 :60[                                ]  # Convert the list of values to base 60
票数 11
EN

Code Golf用户

发布于 2018-08-13 12:25:17

05AB1E,13字节

代码语言:javascript
复制
8740|Ç%4/O60β

在网上试试!

为了弥补多懒啊的不足,我一直在回答我的果冻问题,下面是05AB1E xD中的一篇文章。

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

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

复制
相关文章

相似问题

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