Créez un programme qui simule les portes logiques de base.
Entrée: Un mot en majuscules suivi de 2 nombres binaires à 1 chiffre, séparés par des espaces, tels que OR 1 0
. Les portes OR
, AND
, NOR
, NAND
, XOR
etXNOR
sont nécessaires.
Production: ce que la sortie de la porte logique entrée recevrait les deux nombres: 1 ou 0.
Exemples:
AND 1 0
devient 0
XOR 0 1
devient 1
OR 1 1
devient 1
NAND 1 1
devient0
C'est codegolf, donc le code le plus court l'emporte.
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
la source
la source
Réponses:
Gelée ,
1310 octetsEssayez-le en ligne!
Port de réponse de Peter Taylor.
la source
*256%339%2
) .Python 2 , 38 octets
Essayez-le en ligne!
Une bonne vieille chaîne modulo appliquée à la somme des valeurs ASCII de la chaîne d'entrée, ce qui en fait une solution qui est tout simplement surajustée. La valeur ASCII totale est distincte pour chaque entrée possible, sauf que celles avec
0 1
et1 0
donnent le même résultat, ce qui fonctionne parce que toutes les portes logiques utilisées sont symétriques.Le
*3
sépare les valeurs autrement adjacentes pour les entrées qui ne diffèrent que par les bits, car cela rend difficile la séparation de la chaîne de mod. La longueur et la taille des nombres dans la chaîne de mod crée à peu près la bonne quantité d'entropie pour s'adapter à 18 sorties binaires.Une solution plus courte est sûrement possible en utilisant
hash(s)
ouid(s)
, mais je les ai évitées car elles dépendent du système.Python 2 , 50 octets
Essayez-le en ligne!
Une solution légèrement plus fondée sur des principes. Chaque porte logique donne un résultat différent pour chaque compte de zéros dans l'entrée, codable sous la forme d'un nombre à trois bits de 1 à 6. Chaque porte logique possible est mappée au nombre correspondant en prenant
(s*9)[35]
, qui sont tous distincts. PourOR
, cela finit par lire l'un des bits afin que le caractère puisse être0
ou1
, mais il s'avère que cela fonctionne pour vérifier si c'est le cas0
, et un1
donnera correctement un1
résultat de toute façon.la source
*a%b%c%d%e%2
, rien de vraiment intelligent. La seule chose intéressante était de mettre un*
avant les mods; Je n'ai pas essayé d'autres formats.JavaScript (ES6), 39 octets
Essayez-le en ligne!
Comment?
Nous ne pouvons pas analyser les espaces
parseInt()
, quelle que soit la base avec laquelle nous travaillons. Nous injectons donc à la place une représentation en base 64 de la chaîne d'entrée. Cela peut générer des=
caractères de remplissage (qui ne peuvent pas être analysés avecparseInt()
non plus), mais ceux-ci sont garantis situés à la fin de la chaîne et peuvent être ignorés en toute sécurité.Nous analysons la base34 et appliquons un modulo 86 , suivi d'un modulo 23 , qui donne les résultats suivants. Cela inclut les inexactitudes dues à la perte de précision. Le résultat final est dans [ 0..19 ] , avec l'indice de vérité le plus élevé étant à 18 , conduisant à un masque de bits de recherche de 19 bits.
la source
NOR
?NOR
. Maintenant corrigé.CJam (13 octets)
Suppose que l'entrée est sans retour à la ligne.
Suite de tests en ligne
Il s'agit simplement d'un hachage simple qui mappe les 24 entrées possibles en 17 valeurs distinctes mais cohérentes, puis les recherche dans une table compressée.
Python 2 (36 octets)
Ceci est juste un portage de la réponse CJam ci-dessus. Suite de tests utilisant le framework de test de xnor.
la source
05AB1E ,
1312108 octetsPort de calcul alternatif de @mazzy mentionné dans le commentaire sur sa réponse Powershell (
*256%339%2
au lieu de*108%143%2
).Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Voir cette astuce de mes 05AB1E (section Comment compresser les grands entiers? ) Pour comprendre pourquoi
Ƶï
est339
.la source
Fusain , 32 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication: la chaîne compressée se développe en une liste des opérations prises en charge de sorte que l'index de l'opération donnée est ensuite décalé vers la droite en fonction des entrées et le bit ainsi extrait devient le résultat.
La version 74 octets fonctionne pour les 16 opérations binaires, que j'ai arbitrairement nommées comme suit: ZERO ET MOINS SECOND PLUS GRAND PREMIER XOR OU NOR XNOR NFIRST NGREATER NSECOND NLESS NAND NAND NZERO.
Essayez-le en ligne! Le lien est vers la version détaillée du code.
la source
Mathematica, 55 octets
Fonction pure. Prend une chaîne en entrée et retourne
True
ouFalse
en sortie. DepuisOr
,And
,Nor
,Nand
,Xor
etXnor
sommes tous Encastrements, nous utilisonsToCamelCase
pour changer l'opérateur à l'autre Pascal, le convertir en symbole équivalent, et l' appliquer aux deux arguments.la source
J , 21 octets
Essayez-le en ligne!
Port de la solution Python 2 de xnor .
J , 30 octets
Essayez-le en ligne!
Certains peu de plaisir avec eval
".
bibliothèque et standard (qui comprend déjà correctAND
,OR
,XOR
).J , 41 octets
Essayez-le en ligne!
Plus d'approche de type J.
Comment ça fonctionne
Un truc J très général est caché ici. Souvent, la fonction souhaitée a la structure "Do F sur une entrée, do H sur l'autre, puis G sur les deux résultats". Ensuite, il devrait fonctionner comme
(F x) G H y
. Sous forme tacite, il équivaut à(G~F)~H
:Si
G
est une primitive asymétrique, il suffit d'échanger les arguments gauche et droit de la fonction cible, et nous pouvons enregistrer un octet.Passons maintenant à la réponse ci-dessus:
la source
Powershell,
3634 octetsInspiré par xnor , mais la séquence
*108%143%2
est plus courte qu'originale*3%61%37%9%7%2
Script de test:
Production:
la source
*16%95%7%2
échec pour lesXNOR
cas, cependant. Vous pouvez utiliser @ nedla2004 's*6%68%41%9%2
, qui est de 2 octets plus courte que @xnor est un, cependant.xnor
. Je pense que*108%143
c'est plus attractif :) En plus, il y a une jolie paire*256%339
. Cette paire est encore meilleure pour les langages qui savent travailler avec des bits et des octets.*256%339
.Perl 6 , 20 octets
Essayez-le en ligne!
Un port d' approche de maddy . Alternativement,
*256%339%2
fonctionne également.Perl 6 , 24 octets
Essayez-le en ligne!
Un port de la réponse de xnor . Je vais essayer d'en trouver un plus court, mais je pense que c'est probablement le meilleur qui soit.
la source
JavaScript (Node.js) ,
10694 octetsEssayez-le en ligne!
Lien vers le code et les 24 cas.
+9 pour avoir oublié de cartographier le boîtier XNOR.
la source
console.log(f("AND", 1, 1));
Java 10,
3028 octetsRéponse de Powershell de @mazzy .
Essayez-le en ligne.
la source
JavaScript (Node.js) , 45 octets
Juste un portage de la superbe réponse Python 2 de xnor publiée sur consentement, veuillez donner des réponses positives à cette réponse au lieu de cela.
Essayez-le en ligne!
la source
Attaché , 55 octets
Essayez-le en ligne!
Une solution plutôt brutale. Convertit l'entrée en la commande Attache appropriée et l'évalue. (Attache a des fonctions intégrées pour chacune des 6 portes logiques.)
la source
Rubis , 20 octets
Essayez-le en ligne!
Comment ça fonctionne:
Fondamentalement, la même chose que la réponse de Peter Taylor, mais Ruby facilite les choses. Le nombre magique est différent mais l'idée était la même.
la source