📜  门| GATE-IT-2004 |第37章(1)

📅  最后修改于: 2023-12-03 14:58:32.617000             🧑  作者: Mango

门(GATE) IT 2004 第37章简介

GATE-IT-2004是印度进行筛选技术岗位求职者的全国性考试。它涵盖了计算机科学、信息技术以及其他一些工科领域。

本文聚焦于2004年的GATE IT考试中的第37章题目,该题目是关于计算机科学中的“门”(GATE)的应用。

参考
任务

这个任务要求你编写一个程序,能够模拟“门”(即逻辑电路)。

实现一个可以组合连通参数,Gate A和Gate B共用1值,共享1 | 作为Input,将输出设置为C和D的电路。

具体地说,模拟以下逻辑电路:

+-------+
|       |
+>1--+--|   AND   |---->
     |  +-------+     |
+----|---------------+
|    |
+>1--+--|  OR   |------> C
     |  +-------+     |
+----|---------------+
|    |
+>1--+--| XOR   |---->
     |  +-------+     |
+----|---------------+
     |
+----+---------------+
|    |  +-------+     |
+>1--+--|  NOT  |----> D
     |  +-------+     |
+-----|--------------+
      |
      +---------------+

其中:

  • 左侧(蓝色部分)是两个有共同输入的AND门
  • 中间(黄色部分)是一个OR门
  • 右侧(红色部分)是一个XOR门,以及一个只输入C输出D的NOT门

所有门都有两个输入和一个输出,并且可以看作是这样的简单函数:

| 门类型 | 函数 | |---------|--------| | AND | A ∧ B | | OR | A ∨ B | | XOR | A ⊕ B | | NOT | ¬A |

其中 ∧, ∨, ⊕ 是布尔运算的符号。所有输入 A, B 和输出的值 C, D 均为 0 或 1。 AND, OR 和 XOR 门的行为符合它们的名称:AND 仅在两个输入都为 1 时输出为 1,OR 在任一输入为 1 时输出为 1,XOR 仅在两个输入不同时输出为 1。NOT 门则总是反转输入。

我们将逻辑电路的输入表示为文字 I,输出表示为文字 O。在此问题中,存在以下约束:

  • 所有链接(箭头)由东向西
  • 入门必须在其输出的下面放置
  • 门与门之间直接相通(即没有电线连接它们)

给定参数并绘画电路。

示例

考虑以下输入:

1 1

一个有效的解决方案是:

+-------+    +-------+    +--------+    +--------+
|       |    |       |    |        |    |        |
+>1----|---| AND  |---|----| OR   |----| C      |
| A     |    |共享1|    | 共享1 |    |        |
+>1----|---| AND  |           |共享1小|    |        |
| B     |    |1值    |    +---| XOR  |--|----> D  |
+-------+    +-------+    |   +--------+ | NOT   |
                          |              | 共享1 |
                          +--------------+ 小     |
                                          +--------+

输出为 C=1, D=0

需求

实现一个程序,读取来自标准输入的输入和输出值,以及将要测试的电路。输出表明是否可以将输入转换为给定的输出,忽略输出的顺序。

请注意,您可以为测试用例编写任意数量的程序。我们将运行多个测试程序以评估它们的准确性和性能。

示例代码
# generate truth tables for logic gates
 
# NOT Gate
def not_gate(a):
    return int(not a)

 
# OR Gate
def or_gate(a, b):
    return int(a or b)
 
 
# AND Gate
def and_gate(a, b):
    return int(a and b)
 
 
# XOR Gate
def xor_gate(a, b):
    return int(a ^ b)
 
 
# define a gate
def gate(out, *inp):
    pass  # to be implemented by the student
 
 
# run tests on the design
def test_gate():
    pass  # to be implemented by the student