Erstellen Sie ein Programm, das die grundlegenden Logikgatter simuliert.
Eingabe: Ein Wort mit Großbuchstaben, gefolgt von 2 1-stelligen Binärzahlen, die durch Leerzeichen wie z OR 1 0
. Die Tore OR
, AND
, NOR
, NAND
, XOR
, und XNOR
sind erforderlich.
Ausgang: Was der Ausgang des eingegebenen Logikgatters würde die beiden Zahlen gegeben: entweder 1 oder 0.
Beispiele:
AND 1 0
wird 0
XOR 0 1
wird 1
OR 1 1
wird 1
NAND 1 1
wird0
Das ist Codegolf, also gewinnt der kürzeste Code.
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
quelle
quelle
Antworten:
Jelly ,
1310 BytesProbieren Sie es online!
Port von Peter Taylors Antwort.
quelle
*256%339%2
) .Python 2 , 38 Bytes
Probieren Sie es online!
Eine gute alte Modulo-Kette, die auf die Summe der ASCII-Werte des Eingabe-Strings angewendet wird, was zu einer Lösung führt, die nur überpassend ist. Der gesamte ASCII-Wert ist für jede mögliche Eingabe unterschiedlich, mit der Ausnahme, dass diejenigen mit
0 1
und1 0
dasselbe Ergebnis liefern, was sich ergibt, weil alle verwendeten Logikgatter symmetrisch sind.Das
*3
trennt sonst benachbarte Werte für Eingänge, die sich nur in den Bits unterscheiden, da diese der Mod-Kette die Aufteilung erschweren. Die Länge und Größe der Zahlen in der Mod-Kette schafft ungefähr die richtige Menge an Entropie für 18 Binärausgänge.Eine kürzere Lösung ist mit
hash(s)
oder sicherlich möglichid(s)
, aber ich habe diese vermieden, weil sie systemabhängig sind.Python 2 , 50 Bytes
Probieren Sie es online!
Eine etwas prinzipiellere Lösung. Jedes Logikgatter liefert ein unterschiedliches Ergebnis für jede Anzahl von Nullen im Eingang, die als Drei-Bit-Zahl von 1 bis 6 codiert werden kann. Jedes mögliche Logikgatter wird durch Aufnehmen auf die entsprechende Zahl abgebildet
(s*9)[35]
, die alle verschieden sind. DennOR
dies führt dazu, dass eines der Bits gelesen wird, damit das Zeichen0
oder sein kann1
, aber es stellt sich heraus, dass es funktioniert, um zu überprüfen, ob es das ist0
, und a1
wird1
trotzdem ein korrektes Ergebnis liefern .quelle
*a%b%c%d%e%2
, nichts wirklich Schlaues . Das einzig interessante war,*
die Mods vorzustellen; Andere Formate habe ich nicht ausprobiert.JavaScript (ES6), 39 Byte
Probieren Sie es online!
Wie?
Wir können keine Leerzeichen analysieren
parseInt()
, egal auf welcher Basis wir arbeiten. Also fügen wir stattdessen eine Base-64-Darstellung der Eingabezeichenfolge ein. Dies kann=
Füllzeichen erzeugen (die auch nicht analysiert werdenparseInt()
können), aber diese befinden sich garantiert am Ende der Zeichenfolge und können ignoriert werden.Wir analysieren als Basis34 und wenden ein Modulo 86 , gefolgt von einem Modulo 23 , das die folgenden Ergebnisse liefert. Dies schließt Ungenauigkeiten aufgrund von Genauigkeitsverlusten ein. Das Endergebnis ist in [0..19] , wobei der höchste Wahrheitsindex bei 18 , was zu einer 19-Bit-Nachschlagebitmaske führt.
quelle
NOR
?NOR
. Jetzt behoben.CJam (13 Bytes)
Angenommen, die Eingabe enthält keine nachgestellte Zeile.
Online-Testsuite
Dies ist nur ein einfacher Hash, der die 24 möglichen Eingaben in 17 unterschiedliche, aber konsistente Werte abbildet und diese dann in einer komprimierten Tabelle nachschlägt.
Python 2 (36 Bytes)
Dies ist nur ein Teil der obigen CJam-Antwort. Testsuite mit dem Testframework von xnor.
quelle
05AB1E ,
1312108 BytesHafen von @mazzys alternativer Berechnung, die im Kommentar zu seiner Powershell-Antwort erwähnt wurde (
*256%339%2
anstelle von*108%143%2
).Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Sehen Sie sich meinen Tipp 05AB1E (Abschnitt Wie komprimiere ich große ganze Zahlen? ) An, um zu verstehen, warum dies so
Ƶï
ist339
.quelle
Holzkohle , 32 Bytes
Probieren Sie es online!Link ist eine ausführliche Version des Codes. Erläuterung: Die komprimierte Zeichenfolge wird zu einer Liste der unterstützten Operationen erweitert, sodass der Index der angegebenen Operation entsprechend den Eingaben nach rechts verschoben wird und das so extrahierte Bit zum Ergebnis wird.
Die 74-Byte-Version funktioniert für alle 16 Binäroperationen, die ich willkürlich wie folgt benannt habe: NULL UND WENIGER ZWEITER ERSTER XOR ODER NOR XNOR NICHT ERSTES NGREATER ZWEITER NLESS NAND NZERO.
Probieren Sie es online! Link ist eine ausführliche Version des Codes.
quelle
Mathematica, 55 Bytes
Funktion pur. Nimmt einen String als Eingabe und gibt ihn zurück
True
oderFalse
als Ausgabe. DaOr
,And
,Nor
,Nand
,Xor
, undXnor
sind alle Einbauten, verwenden wir ,ToCamelCase
um den Bediener zu Pascal Fall zu ändern, wandeln sie in dem entsprechenden Symbol, und es an die beiden Argumente gelten.quelle
J , 21 Bytes
Probieren Sie es online!
Port der Python 2-Lösung von xnor .
J , 30 Bytes
Probieren Sie es online!
Einige bisschen Spaß mit eval
".
und Standard - Bibliothek (die bereits korrekt enthältAND
,OR
,XOR
).J , 41 Bytes
Probieren Sie es online!
Mehr J-Style-Ansatz.
Wie es funktioniert
Ein sehr allgemeiner J-Trick ist hier verborgen. Häufig hat die gewünschte Funktion die Struktur "Do F für einen Eingang, do H für den anderen und do G für beide Ergebnisse." Dann sollte es so funktionieren
(F x) G H y
. In stillschweigender Form ist es gleichbedeutend mit(G~F)~H
:Wenn
G
es sich um ein asymmetrisches Grundelement handelt, tauschen Sie einfach das linke und das rechte Argument der Zielfunktion aus, und Sie können ein Byte speichern.Nun zur obigen Antwort:
quelle
Powershell,
3634 BytesInspiriert von xnor , aber die Sequenz
*108%143%2
ist kürzer als das Original*3%61%37%9%7%2
Testskript:
Ausgabe:
quelle
*16%95%7%2
scheitert jedoch für dieXNOR
Fälle. Sie könnten verwenden @ nedla2004 's*6%68%41%9%2
, die 2 Bytes kürzer als ist @xnor ist einer, though.xnor
. Ich finde das*108%143
attraktiver :) Außerdem gibt es ein schönes Paar*256%339
. Dieses Paar ist noch besser für Sprachen, die mit Bits und Bytes umgehen können.*256%339
.Perl 6 , 20 Bytes
Probieren Sie es online!
Ein Hafen von Mady's Ansatz . Alternativ
*256%339%2
funktioniert auch.Perl 6 , 24 Bytes
Probieren Sie es online!
Ein Hafen von Xnors Antwort . Ich werde versuchen, eine kürzere zu finden, aber ich denke, das ist wahrscheinlich die beste, die es gibt.
quelle
JavaScript (Node.js) ,
10694 BytesProbieren Sie es online!
Link zum Code und allen 24 Fällen.
+9 für vergessen, den XNOR-Fall abzubilden.
quelle
console.log(f("AND", 1, 1));
Java 10,
3028 BytesPort von @mazzy 's Powershell Antwort .
Probieren Sie es online aus.
quelle
JavaScript (Node.js) , 45 Byte
Nur eine Portierung der hervorragenden Python 2-Antwort von xnor, die nach Zustimmung veröffentlicht wurde. Geben Sie stattdessen diese Antwort-Upvotes.
Probieren Sie es online!
quelle
Attache , 55 Bytes
Probieren Sie es online!
Eine eher brutale Lösung. Konvertiert die Eingabe in den entsprechenden Attache-Befehl und wertet ihn aus. (Attache verfügt über integrierte Funktionen für jedes der 6 Logikgatter.)
quelle
Ruby , 20 Bytes
Probieren Sie es online!
Wie es funktioniert:
Grundsätzlich das gleiche wie Peter Taylors Antwort, aber Ruby macht es einfacher. Die magische Zahl ist anders, aber die Idee war dieselbe.
quelle