首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >密集小数(DPD)到十进制(DPD)

密集小数(DPD)到十进制(DPD)
EN

Code Golf用户
提问于 2018-11-22 00:04:42
回答 2查看 3.8K关注 0票数 28

对于游戏迷:请尝试逻辑门中的DPD到十进制也!

背景

密密十进制(DPD)是一种有效地以二进制方式存储十进制数字的方法。它将三个十进制数字(000到999)存储在10位,这比朴素的BCD (以4位存储一位数字)要有效得多。

符号

  • 小写字母ai是复制到十进制表示形式的位。
  • 01是输入或输出位模式中的确切位。
  • 在转换过程中忽略x位。

转换表

下面是从10位DPD到三位十进制数字的转换表。每个十进制数字表示为4位二进制(BCD).两边都从最重要的数字到最小的数字从左到右。

代码语言:javascript
复制
Bits                 =>  Decimal         (Digit range)
a b c d e f 0 g h i  =>  0abc 0def 0ghi  (0-7) (0-7) (0-7)
a b c d e f 1 0 0 i  =>  0abc 0def 100i  (0–7) (0–7) (8–9)
a b c g h f 1 0 1 i  =>  0abc 100f 0ghi  (0–7) (8–9) (0–7)
g h c d e f 1 1 0 i  =>  100c 0def 0ghi  (8–9) (0–7) (0–7)
g h c 0 0 f 1 1 1 i  =>  100c 100f 0ghi  (8–9) (8–9) (0–7)
d e c 0 1 f 1 1 1 i  =>  100c 0def 100i  (8–9) (0–7) (8–9)
a b c 1 0 f 1 1 1 i  =>  0abc 100f 100i  (0–7) (8–9) (8–9)
x x c 1 1 f 1 1 1 i  =>  100c 100f 100i  (8–9) (8–9) (8–9)

任务

将DPD的10位转换为小数的3位。

测试用例

代码语言:javascript
复制
DPD           Decimal
0000000101    005
0001100011    063
0001111001    079
0000011010    090
0001011110    098
1010111010    592
0011001101    941
1100111111    879
1110001110    986
0011111111    999
1111111111    999  * Output is same regardless of the `x` bits

输入

默认的输入格式是10位的列表。比特应该遵循上面的确切顺序,或者相反的顺序。您可以选择使用等效的字符串或整数表示。与我的其他挑战不同,不允许重新排序或使用嵌套结构。

对于输入的[1, 1, 0, 0, 0, 1, 0, 1, 0, 0],允许使用以下格式:

  • 位列表:[1, 1, 0, 0, 0, 1, 0, 1, 0, 0]
  • 字符串:"1100010100"
  • 二进制整数:7880b1100010100
  • 十进制整数:1100010100
  • 反转:[0, 0, 1, 0, 1, 0, 0, 0, 1, 1],并以上述任何其他格式反转

不允许采用下列格式:

  • 位的任意重排序:[0, 0, 0, 0, 0, 1, 1, 1, 0, 1]
  • 嵌套结构:[[1, 1, 0], [0, 0, 1], [0, 1, 0, 0]][0b110, 0b001, 0b0100]

输出

默认输出格式是由3位小数组成的列表。每个数字应该表示为0到9,要么是整数,要么是字符。与输入一样,您可以选择字符串或整数表示形式。如果选择整数表示形式,则可以省略前导零。

评分与制胜标准

适用标准的密码-高尔夫规则。每种语言的最短程序或函数(以字节为单位)获胜。

EN

回答 2

Code Golf用户

发布于 2018-11-22 14:43:58

Python 2,157个字节

代码语言:javascript
复制
lambda a,b,c,d,e,f,g,h,i,j:[c+[a*4+b*2,8][g*h*~(d*~e*i)],f+[d*4+e*2,8,a*4+b*2][g*i+(d<e)*g*i*h],j+[h*4+i*2,[8,[a*4+b*2,d*4+e*2][h<i]][h^i or(h&i-(d|e))]][g]]

在网上试试!

票数 2
EN

Code Golf用户

发布于 2019-05-17 16:22:31

05AB1E,84字节

KimOyhus的回答港口到05AB1E。

代码语言:javascript
复制
•4’7þ2Ô€iΘEuĆΣk4Ѐ:ΘΛs‡CaΔʒì₁3¶rdiMß¡þи иø-˜)Â∍DY—WûQ@—Mā}Γ¤ÒÙ]p•44в2ôvÐyèP≠«}4ôC3.£

在网上试试!

粗略解释:

代码语言:javascript
复制
•yadayada•44в2ô   # encoded list of nand gates
v                 # for each gate
 ÐyèP≠            # compute the output of the gate
      «           # append it to the input
       }          # end of the loop
4ô                # split the list of bits in groups of 4
  C               # convert each from binary to decimal
   3.£            # keep the last 3 numbers
                  # implicit output
票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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