受到nandgame最近在TNB上的普及以及我以前的挑战的启发。
背景
密集包装的十进制(DPD)是一种以二进制有效存储十进制数字的方法。它以10位存储三位十进制数字(000至999),这比朴素的BCD(以4位存储一位数字)的效率要高得多。
换算表
DPD旨在通过简单的从上到下的模式匹配在位和数字之间轻松转换。每个位模式定义数字有多少个高数字(8-9),它们在哪里以及如何移动这些位以形成小数表示。
以下是从DPD的10位到三位十进制数字的转换表。每个十进制数字都表示为4位二进制(BCD)。双方都从最高位到最低位从左到右书写。
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)
记号
- 小写字母
a
toi
是复制到十进制表示形式的位。 0
和1
是输入或输出位模式中的确切位。x
转换中忽略位。
任务
使用两输入与非门构建逻辑电路,以将10位DPD转换为12位BCD。
例子
强调的位是模式匹配位。
DPD Decimal BCD
0 0 0 0 0 0 0 1 0 1 005 0000 0000 0101
^
0 0 0 1 1 0 0 0 1 1 063 0000 0110 0011
^
0 0 0 1 1 1 1 0 0 1 079 0000 0111 1001
^ ^ ^
0 0 0 0 0 1 1 0 1 0 090 0000 1001 0000
^ ^ ^
0 0 0 1 0 1 1 1 1 0 098 0000 1001 1000
^ ^ ^ ^ ^
1 0 1 0 1 1 1 0 1 0 592 0101 1001 0010
^ ^ ^
0 0 1 1 0 0 1 1 0 1 941 1001 0100 0001
^ ^ ^
1 1 0 0 1 1 1 1 1 1 879 1000 0111 1001
^ ^ ^ ^ ^
1 1 1 0 0 0 1 1 1 0 986 1001 1000 0110
^ ^ ^ ^ ^
0 0 1 1 1 1 1 1 1 1 999 1001 1001 1001
^ ^ ^ ^ ^
1 1 1 1 1 1 1 1 1 1 999 1001 1001 1001
^ ^ ^ ^ ^
得分和获胜标准
分数是电路中使用的两输入与非门的数量。最低分获胜。
您可以根据双输入与非门定义小型组件,然后在最终构造中使用它们。如果一个组件X
包括N
两个输入与非门,则每次使用都会X
增加N
您的分数。对于基本逻辑门,这意味着:
- 不:+1
- 2输入AND:+2
- 2输入或:+3
- 2输入异或:+4
回滚Luis的编辑,因为“ 原子代码高尔夫”是一个获胜标准标签,而“ 代码挑战”是针对那些获胜标准没有被其他标签覆盖的问题。
—
彼得·泰勒
我仍然不清楚。我认为需要进一步说明字母
—
mbomb007 '18
a
的i
含义和转换过程。逐步执行步骤,而不是仅显示示例并希望我们从中了解。
@ mbomb007我试图阐明转换表的模式匹配性质。有帮助吗?
—
Bubbler
@Bubbler是的,这很有帮助
—
mbomb007 '18