Haga un programa que simule las puertas lógicas básicas.
Entrada: una palabra en mayúsculas seguida de 2 números binarios de 1 dígito, separados por espacios, como OR 1 0
. Las puertas OR
, AND
, NOR
, NAND
, XOR
, y XNOR
son necesarios.
Salida: a la salida de la puerta lógica ingresada se le darían los dos números: 1 o 0.
Ejemplos:
AND 1 0
se 0
XOR 0 1
convierte 1
OR 1 1
se 1
NAND 1 1
convierte se convierte en se convierte0
Este es codegolf, por lo que gana el código más corto.
code-golf
logic-gates
hashing
code-golf
code-golf
number
array-manipulation
integer
code-golf
string
unicode
text-processing
cops-and-robbers
boggle
cops-and-robbers
boggle
code-golf
ascii-art
code-golf
word-puzzle
king-of-the-hill
python
code-golf
sequence
kolmogorov-complexity
code-golf
source-layout
code-golf
string
kolmogorov-complexity
math
number
code-golf
date
code-golf
combinatorics
recursion
game
king-of-the-hill
javascript
code-golf
array-manipulation
code-golf
radiation-hardening
self-referential
code-golf
integer
code-golf
number
code-golf
set-theory
code-golf
sequence
code-golf
string
sorting
natural-language
code-golf
decision-problem
number-theory
primes
code-golf
code-golf
ascii-art
code-challenge
array-manipulation
sorting
rubiks-cube
regular-expression
code-golf
counting
file-system
recursion
code-golf
string
kolmogorov-complexity
color
code-golf
game
code-challenge
permutations
encode
restricted-time
decode
code-golf
math
decision-problem
matrix
integer
palindrome
code-golf
matrix
statistics
king-of-the-hill
king-of-the-hill
python
card-games
code-golf
string
natural-language
code-golf
sequence
number-theory
qazwsx
fuente
fuente
Respuestas:
Jalea ,
1310 bytesPruébalo en línea!
La respuesta del puerto de Peter Taylor.
fuente
*256%339%2
) .Python 2 , 38 bytes
Pruébalo en línea!
Se aplicó una buena cadena de módulos a la suma de los valores ASCII de la cadena de entrada, lo que constituye una solución que simplemente se sobreajusta. El valor ASCII total es distinto para cada entrada posible, excepto que aquellos con
0 1
y1 0
dan el mismo resultado, lo que funciona porque todas las puertas lógicas utilizadas son simétricas.El
*3
separa los valores adyacentes para entradas que difieren solo en los bits, ya que dificultan la división de la cadena de modulación. La longitud y el tamaño de los números en la cadena de modulación crean aproximadamente la cantidad correcta de entropía para ajustarse a 18 salidas binarias.Seguramente es posible usar una solución más corta con
hash(s)
oid(s)
, pero los evité porque dependen del sistema.Python 2 , 50 bytes
Pruébalo en línea!
Una solución un poco más basada en principios. Cada puerta lógica proporciona un resultado diferente para cada recuento de ceros en la entrada, codificable como un número de tres bits del 1 al 6. Cada puerta lógica posible se asigna al número correspondiente mediante la toma
(s*9)[35]
, que son todas distintas. PorqueOR
, esto termina leyendo uno de los bits para que el personaje pueda ser0
o1
, pero resulta que funciona para verificar si es así0
, y a de todos modos1
dará un1
resultado correcto .fuente
*a%b%c%d%e%2
, nada realmente inteligente. Lo único interesante fue poner un*
antes de las modificaciones; No probé otros formatos.JavaScript (ES6), 39 bytes
Pruébalo en línea!
¿Cómo?
No podemos analizar espacios con
parseInt()
ninguna base con la que estemos trabajando. Entonces, inyectamos una representación en base 64 de la cadena de entrada. Esto puede generar=
caracteres de relleno (que tampoco se pueden analizarparseInt()
), pero se garantiza que estos se ubicarán al final de la cadena y se pueden ignorar de forma segura.Analizamos como base34 y aplicamos un módulo 86 , seguido de un módulo 23 , que da los siguientes resultados. Esto incluye imprecisiones debido a la pérdida de precisión. El resultado final está en [ 0..19 ] , con el índice de verdad más alto en 18 años , lo que lleva a una máscara de bits de búsqueda de 19 bits.
fuente
NOR
?NOR
. Ahora arreglado.CJam (13 bytes)
Asume que la entrada es sin una nueva línea final.
Conjunto de pruebas en línea
Este es solo un hash simple que mapea las 24 entradas posibles en 17 valores distintos pero consistentes y luego las busca en una tabla comprimida.
Python 2 (36 bytes)
Este es solo un puerto de la respuesta CJam anterior. Conjunto de pruebas usando marco de pruebas de XNOR.
fuente
05AB1E ,
1312108 bytesEl cálculo alternativo del puerto de @mazzy mencionado en el comentario sobre su respuesta Powershell (en
*256%339%2
lugar de*108%143%2
).Pruébalo en línea o verifique todos los casos de prueba .
Explicación:
Ver este consejo 05AB1E mío (sección Cómo comprimir grandes números enteros? ) Para entender por qué
Ƶï
es339
.fuente
Carbón , 32 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación: La cadena comprimida se expande a una lista de las operaciones admitidas para que el índice de la operación dada se desplace a la derecha de acuerdo con las entradas y el bit así extraído se convierta en el resultado.
La versión de 74 bytes funciona para las 16 operaciones binarias, que he nombrado arbitrariamente de la siguiente manera: CERO Y MENOS SEGUNDO MAYOR PRIMERO XOR O NOR XNOR NFIRST NGREATER NSECOND NLESS NAND NZERO.
Pruébalo en línea! El enlace es a la versión detallada del código.
fuente
Mathematica, 55 bytes
Pura función. Toma una cadena como entrada y devuelve
True
oFalse
como salida. Dado queOr
,And
,Nor
,Nand
,Xor
, yXnor
todos somos muebles empotrados, se utilizaToCamelCase
para cambiar el operador para el caso de Pascal, convertirlo en el símbolo equivalente, y aplicarlo a los dos argumentos.fuente
J , 21 bytes
Pruébalo en línea!
Puerto de la solución Python 2 de xnor .
J , 30 bytes
Pruébalo en línea!
Algunos poco de diversión con eval
".
biblioteca y estándar (que ya incluye correctaAND
,OR
,XOR
).J , 41 bytes
Pruébalo en línea!
Más enfoque estilo J.
Cómo funciona
Aquí se esconde un truco J muy general. A menudo, la función deseada tiene la estructura "Hacer F en una entrada, hacer H en la otra y luego hacer G en ambos resultados". Entonces debería funcionar como
(F x) G H y
. En forma tácita, es equivalente a(G~F)~H
:Si
G
es una primitiva asimétrica, simplemente intercambie los argumentos izquierdo y derecho de la función de destino, y podemos guardar un byte.Ahora a la respuesta anterior:
fuente
Powershell,
3634 bytesInspirado por xnor , pero la secuencia
*108%143%2
es más corta que la original*3%61%37%9%7%2
Script de prueba:
Salida:
fuente
*16%95%7%2
falla para losXNOR
casos. Usted podría utilizar @ nedla2004 's*6%68%41%9%2
, que es de 2 bytes más corto que @xnor ' s uno, sin embargo.xnor
. Creo que*108%143
es más atractivo :) Además, hay un buen par*256%339
. Este par es aún mejor para los idiomas que saben cómo trabajar con bits y bytes.*256%339
.Perl 6 , 20 bytes
Pruébalo en línea!
Un enfoque de puerto de maddy . Alternativamente,
*256%339%2
también funciona.Perl 6 , 24 bytes
Pruébalo en línea!
Un puerto de la respuesta de xnor . Intentaré encontrar uno más corto, pero creo que probablemente sea lo mejor que hay.
fuente
JavaScript (Node.js) ,
10694 bytesPruébalo en línea!
Enlace al código y los 24 casos.
+9 por olvidar mapear el caso XNOR.
fuente
console.log(f("AND", 1, 1));
Java 10,
3028 bytesPuerto de la respuesta Powershell de @mazzy .
Pruébalo en línea.
fuente
JavaScript (Node.js) , 45 bytes
Solo un puerto de la excelente respuesta de Python 2 de xnor publicada con el consentimiento, por favor, da esa respuesta en lugar de esto.
Pruébalo en línea!
fuente
Adjunto , 55 bytes
Pruébalo en línea!
Una solución bastante brutal. Convierte la entrada en el comando Attache relevante y lo evalúa. (Attache tiene incorporados para cada una de las 6 puertas lógicas).
fuente
Rubí , 20 bytes.
Pruébalo en línea!
Cómo funciona:
Básicamente lo mismo que la respuesta de Peter Taylor, pero Ruby lo hace más fácil. El número mágico es diferente pero la idea era la misma.
fuente