La ubicua pantalla numérica de 7 segmentos puede mostrar inequívocamente los 16 dígitos hexadecimales como se muestra en esta wikipedia .gif
Las entradas para este desafío crearán un diagrama de circuito utilizando puertas lógicas NAND que transforman los cuatro bits de un dígito hexadecimal en las entradas para los siete segmentos. Las entradas para la pantalla de 7 segmentos generalmente se etiquetan de la siguiente manera: (DP (punto decimal) se ignora para este desafío)
Por lo tanto, su circuito deberá ajustarse a la siguiente tabla de verdad:
Hex | Hex Input Bit | Output to Segment line:
digit | 3 2 1 0 | A B C D E F G
------+---------------+-----------------------
0 | 0 0 0 0 | 1 1 1 1 1 1 0
1 | 0 0 0 1 | 0 1 1 0 0 0 0
2 | 0 0 1 0 | 1 1 0 1 1 0 1
3 | 0 0 1 1 | 1 1 1 1 0 0 1
4 | 0 1 0 0 | 0 1 1 0 0 1 1
5 | 0 1 0 1 | 1 0 1 1 0 1 1
6 | 0 1 1 0 | 1 0 1 1 1 1 1
7 | 0 1 1 1 | 1 1 1 0 0 0 0
8 | 1 0 0 0 | 1 1 1 1 1 1 1
9 | 1 0 0 1 | 1 1 1 1 0 1 1
A | 1 0 1 0 | 1 1 1 0 1 1 1
b | 1 0 1 1 | 0 0 1 1 1 1 1
C | 1 1 0 0 | 1 0 0 1 1 1 0
d | 1 1 0 1 | 0 1 1 1 1 0 1
E | 1 1 1 0 | 1 0 0 1 1 1 1
F | 1 1 1 1 | 1 0 0 0 1 1 1
Creo que esta tabla es precisa, pero avíseme si detecta algún error.
Su puntaje está determinado por la cantidad de compuertas NAND de 2 entradas que utiliza (1 punto por compuerta). Para simplificar las cosas, puede usar las compuertas AND, OR, NOT y XOR en su diagrama, con los siguientes puntajes correspondientes:
NOT: 1
AND: 2
OR: 3
XOR: 4
fuente
Respuestas:
Dominó - Puntaje total: 243 NANDs
OR utilizados: 61 (3 NAND cada uno -> 183 NAND)
NO utilizados: 60 (1 NAND cada uno -> 60 NAND)
Esta solución está en fichas de dominó y requería una colección de piezas de software que escribí al responder las dos preguntas relacionadas con Domino de Martin Büttner para producir ( Golfing for Domino Day y Domino Circuits ).
Al modificar mi solucionador Domino Circuit , pude producir un circuito domino (este archivo también contiene la salida del solucionador y el esqueleto del circuito) que consta de OR e IFNOT donde la primera entrada siempre es VERDADERA (por lo que es esencialmente un NO). Debido a que no hay mucho que va a encajar en esta respuesta, presento las soluciones OR y NOT a la tabla de verdad:
Tenga en cuenta que las únicas operaciones binarias utilizadas son OR e IFNOT, donde cuento cada IFNOT como NOT para fines de puntuación
Agregué una pantalla de 7 segmentos al final del circuito y la introduje en un simulador de dominó / generador de gif. El gif resultante (que muestra la visualización de 'A') tardó aproximadamente 2 horas en generarse. Como el circuito final tiene un tamaño de 1141 * 517, cada "celda" está representada por un solo píxel. Una celda negra está vacía, una celda gris tiene un dominó de pie y una celda blanca tiene un dominó caído. Esto significa que realmente no se puede saber lo que está sucediendo, y no ayudará si se está aplastando en absoluto. Sparr amablemente proporcionó una versión mucho más pequeña de mi gif original (650kB), ¡así que aquí está!
A continuación se muestra el último cuadro de la animación para la entrada 1010 ('A') como arriba. Puede ver las entradas en el extremo izquierdo, la línea eléctrica en la parte superior, la centralita ocupando la mayor parte del espacio, las 7 piezas lógicas individuales (estas son representaciones de dominó de las funciones anteriores) a la izquierda de la centralita y el extremo derecho es la pantalla de 7 segmentos en sí. Cuando esto se ejecuta, los segmentos individuales se iluminan aproximadamente al mismo tiempo, por lo que no se puede mirar durante demasiado tiempo con algunos segmentos iluminados esperando que otros se iluminen.
Vea la animación en toda su gloria aquí (36MB) o aquí (650kB, cortesía de Sparr) (la copia más pequeña es mucho más pequeña, pero a mi navegador le gustaba saltar cuadros que estropeaban la belleza, así que dejé el original así)
El detalle de la pantalla de 7 segmentos se puede ver aquí (se muestra '1')
fuente
30 NANDs
Estoy bastante seguro de que no hay soluciones más simples para este problema, excepto quizás cambiando los símbolos en la pantalla, pero ese sería otro problema diferente.
Dado que esto es realmente algo útil que hacer, por ejemplo, al programar un FPGA para mostrar la salida, proporciono el código Verilog.
En cuanto al minimalismo: por supuesto, fue difícil de hacer. No es comprensible, ya que una pantalla de 7 segmentos es solo una forma bastante aleatoria de que los humanos muestren números, lo que resulta en un circuito que también es bastante aleatorio. Y como es típico en estos circuitos mínimos, su profundidad lógica es algo mayor que para soluciones cercanas. Supongo que esto se debe a que el serial es más simple que el paralelo.
El retraso de la transmisión se indica mediante la posición hacia abajo de cada compuerta NAND en la hoja.
Código Verilog:
Kim Øyhus
fuente
Usando ~ para NOT y N para NAND, una búsqueda por computadora (sin compartir términos entre salidas) encuentra una solución con 82 NAND sin compartir. La búsqueda manual de términos de uso compartido lo reduce a 54 NAND, y una búsqueda por computadora que incluye el uso compartido lo reduce aún más a 37 NAND. El mínimo podría ser incluso más bajo, ya que el método ciertamente no es exhaustivo.
Aquí está el programa que recrea la tabla anterior. Cada línea está etiquetada con las NANDS para esa salida.
Y aquí está el resultado:
Y aquí están las ecuaciones equivalentes, compartiendo términos que lo reducen a 54 NAND:
Y aquí está la solución 37 NAND:
fuente
197 NANDs
Dado que este es mi primer desafío de puertas lógicas. no se juega mucho al golf y puede que no sea la solución más pequeña. No estoy usando circuito dividido aquí.
Si tengo razón, mi puntaje es 197 .
Durante este desafío, hice un código JavaScript simple para probar mi puerta.
Copie y modifique gate, y péguelo en la consola de su navegador o Node.js REPL.
fuente