Wenn Sie sich an Ihre Schulzeit erinnern, erinnern Sie sich vielleicht an das Lernen von Wahrheitstabellen . Sie schienen langweilig, aber sie sind Grundlage für Logik und (einige würden argumentieren) alle Computer ...
Problem
Wenn Sie dies akzeptieren möchten, besteht Ihre Mission darin, ein Programm, eine Funktion oder ein Widget aus Code zu schreiben, mit dem eine Wahrheitstabelle ausgegeben werden kann.
Eingang
Die Eingabe ist eine Zeichenfolge (wie eine Datenstruktur), die die logische Anweisung enthält, in die die Wahrheitstabelle umgewandelt werden soll. Beispielsweise:
p ∧ q
Dies bedeutet p and q
(logische Konjunktion) und gibt Folgendes aus:
p q p ∧ q
T T T
T F F
F T F
F F F
Beachten Sie den Abstand: Das Element der Spalte befindet sich in der Mitte der Überschrift
Zeichen
Punktzahl über Zeichen, nicht Bytes Die logischen Vergleichszeichen sind etwas Besonderes und nicht immer so, wie sie aussehen. Verwenden Sie diese Zeichen:
Logische Verknüpfung (AND): ∧
U + 2227
Logische Disjunktion (OR): ∨
U + 2228
Logische Negation (NOT) ~
oder ¬
U + 7e bzw. U + ac
Boni
Alle diese Boni sind optional, bringen aber Punkte aus Ihrer Punktzahl. Wählen Sie eine aus.
Logische Verneinung
Logische Negation ist ein unärer Operator in Wahrheitstabellen. Dies entspricht den !
meisten C-basierten Sprachen. Es macht false
=> true
und umgekehrt. Es ist mit einem ¬
oder gekennzeichnet ~
(Sie müssen beide unterstützen). Wenn Sie dies unterstützen, können Sie 10% Ihrer Punktzahl verlieren. Sie müssen jedoch eine zusätzliche Spalte hinzufügen, um die Ergebnisse anzuzeigen: Beispiel:
~p ∧ q
wird ausgeben:
p ~p q ~p ∧ q
T F T F
T F F F
F T T T
F T F F
Hübscher Druck
Die normale Tischnotation ist langweilig. Lass es uns hübsch machen! Hübsches Druckformat ist wie folgt für p ∧ q
ist wie folgt:
+---+---+-------+
| p | q | p ∧ q |
+---+---+-------+
| T | T | T |
+---+---+-------+
| T | F | F |
+---+---+-------+
| F | T | F |
+---+---+-------+
| F | F | F |
+---+---+-------+
Spezielle Details für hübsches Drucken:
- In jeder Zelle befindet sich ein Leerzeichen
- Zellwerte sind weiterhin zentriert
Wenn Sie Ihre Tabellen schön drucken, aus Ihrem Code und dann mit 0,6 multiplizieren. Nutzen Sie diese Funktion für diesen Bonus:
score = 0.6 * code
Beispiele
p ∧ q
:
p q p ∧ q
T T T
T F F
F T F
F F F
p ∨ q
:
p q p ∨ q
T T T
T F T
F T T
F F F
~p ∧ q
:
p ~p q ~p ∧ q
T F T F
T F F F
F T T T
F T F F
~p ∨ q
:
p ~p q ~p ∧ q
T F T T
T F F F
F T T T
F T F T
Regeln
- Es gelten Standardlücken
- Keine externen Ressourcen
- Wenn du die Regeln brechen willst, sei schlau;)
Kürzester Code (in Zeichen) gewinnt. Viel Glück!
quelle
p
undq
. Sofern sie nicht immer diese Namen haben, möchten Sie möglicherweise in den Testbeispielen einige verschiedene Optionen anzeigen. Sind sie immer ein einzelner Buchstabe?score = 0.6 * (code - 15)
=.6 * code - 9
p
q
undr
in einer Wahrheitstabelle sehen;)Antworten:
JavaScript (ES6), 141
Einfache Funktion, kein Bonus, 141 Zeichen. (140 uft8, 1 Unicode breit)
Komplexe Funktionsbearbeitung ~ oder ¬, 254 Zeichen (253 utf, 1 Unicode-Breite), Punktzahl 229
Könnte 6 Bytes speichern verwenden
alert
stattconsole.log
, sondernalert
ist besonders ungeeignet Anzeige Tabellen.Testen Sie die Ausführung des folgenden Snippets in einem EcmaScript 6-kompatiblen Browser (getestet mit Firefox. Funktioniert nicht in Chrome, da Chrome dies nicht unterstützt
...
. Außerdem verwendet die Bonusversion eine Erweiterungsplit
, die Firefox-spezifisch ist.).quelle
MediaWiki-Vorlage - 2347 Zeichen
MediaWiki verfügt über eine eingebaute Vorlagenfunktion
{{#expr}}
, die logische Ausdrücke verarbeiten kann. Dies muss die perfekte Herausforderung für MediaWiki-Vorlagen sein! Funktionen wie Variablen, Schleifen und eine lesbare Syntax hätten jedoch ein wenig geholfen. Auch die Tatsache, dass es keinen NOT-Operator für die expr-Funktion gibt, machte sie etwas komplexer.Prüfung:
Ergebnis:
Ich gehe von MediaWiki> = 1.18 aus, wo die ParserFunctions-Erweiterungen mit der Software mitgeliefert werden.
quelle
¬
/~
. Wenn Sie es hinzufügen, qualifizieren Sie sich für einen10%
Bonus.Python - 288 Zeichen (+10 Strafe, weil ich den Unicode nicht zum Laufen bringen konnte: c)
Keine Prämien. Dies ist meine allererste Codegolf-Antwort.
i
ist der Eingang.BEARBEITEN: Einige Leerzeichen wurden entfernt und es werden nun Funktionsargumente als Eingabe verwendet.
quelle
Dyalog APL ,
5848 ZeichenBenötigt
⎕IO←0
, was bei vielen Systemen Standard ist. Nimmt string als Argument.Keine Boni, aber auf der positiven Seite arbeitet jeder Bediener.
⍳4
erste vier Indizes (0 1 2 3)⌽
umgekehrt (3 2 1 0)2 2⊤
Zwei-Bit-Boolesche Tabelle↓
Aufteilung in Listen mit zwei Elementen (High-Bits, Low-Bits)p q←
speichern als p und q≢
teile sie mit (2) *9⍴
zyklisch umformen auf Länge 9 (2 2 2 2 2 2 2 2 2)324⊤⍨
Codiere also 324, dh als 12-Bit-Binär (1 0 1 0 0 0 1 0 0)\⍨
benutze das um zu erweitern (füge ein Leerzeichen für jede 0 ein) ...'FT '[
...]
der String "FT", indiziert von⍎⍵
das ausgeführte Argument (gültig, da p und q jetzt Werte haben)⍪
machen Sie das in eine Spaltenmatrixq,
Stellt eine Spalte voran, die aus q besteht (1 1 0 0)q,
Stellen Sie eine Spalte voran, die aus p besteht (1 0 1 0) besteht(
...)⍪
oben eine Zeile einfügen, bestehend aus⍵
das Argument'p q ',
vorangestellt mit der Zeichenfolge "p q"* Bitte markieren Sie diese Ausgabe, wenn Sie
≢
als≢
und nicht als sehen̸≡
.quelle
Julia, 161 Bytes
Keine Prämien.
Ungolfed:
quelle
Mathematica, 129 Bytes
Golf gespielt:
Ungolfed:
Kein Mathematica-Experte, aber ich fand das ziemlich elegant im Vergleich zum direkten Zeichenvergleich.
Ich hatte eine Lösung, die für die Verneinung funktionierte, aber es war länger, als die Punkteverringerung abheben würde.
Je nachdem, was für hübsches Drucken geeignet ist, könnte ich diesen Bonus versuchen. Ich bin der Meinung, dass die Ausgabe in ASCII in Mathematica viel zu teuer wäre, um die Punktzahlreduzierung zu kompensieren. Wenn die beiden Hauptmerkmale jedoch ein gepunkteter Rand und eine festgelegte Auffüllung in den Zellen sind, sind dies nur einige Optionen in Grid.
Bei schönem Druck sind 171 * 0,6 = 102,6 Bytes
quelle
Python3,
145139120119 BytesKein Bonus (mit Bonus am Ende)
Python3 für Unicode wird sofort benötigt.
Basierend auf dem Python-Code von DJgamer98 ist es nicht richtig, seinen Tisch herauszufinden.
Edit1: Aufteilen in verschiedene Variablen und Übernehmen der Operatorzeichenfolgenvariablen
Edit2: (ab) Verwenden von F und T als Variablen und Zeichenfolgen
Edit3: Einen Platz sparen dank NoOneIsHere
Mit Bonus 215 * 0,6 = 129
quelle
q in c:
.C / C ++ 302 Bytes
335 Zeichen weniger 10% für die Negation. Unvollständige Formatierung, aber Übermittlung, bevor ich sehe, wie sich die Fertigstellung auswirkt.
Als C / C ++ markiert, weil mein gcc und g ++ es mit -fpermissive akzeptieren und es für mich weitaus C-ähnlicher aussieht als C ++.
Ich bin sicher, es gibt wahrscheinlich ein paar Optimierungen, die angewendet werden könnten. In der Tat erhöht die Behandlung der Notizen den Bonus um mehr als 10%.
Dies setzt voraus, dass das Eingabeformat wie angegeben ist, dh 2 Eingabewerte (p und q), mit oder ohne das Nicht-Präfix und nichts anderes, und alle Token, die durch ein einzelnes Leerzeichen begrenzt sind.
Ungolfed:
und die tests:
quelle
Mathematica, 128 Zeichen
ist das ZeichenU+F3C7
für den privaten Gebrauch\[Transpose]
.Zum Glück für uns Mathematica-Golfer,
∧
und∨
schon vertretenAnd
undOr
, so alles , was wir tun müssen, ist die Eingabezeichenfolge in einen Mathematica - Ausdruck umwandeln und wir können auf ihn symbolische logische Operationen tun.Beachten Sie, dass diese Lösung auch
Not
(¬
),Implies
(
),Equivalent
(⧦
),Xor
(⊻
),Nand
(⊼
),Xor
(⊻
) undNor
(⊽
) behandelt, den Bonus jedoch nicht erhält, da~p
es sich in Mathematica um einen Syntaxfehler handelt. Meh.Erläuterung
Konvertiert die Eingabezeichenfolge in einen Mathematica-Ausdruck und speichert ihn in
b
.Dies ist eine Liste aller möglichen Unterausdrücke der Eingabe. Jeder erhält eine eigene Spalte.
Dies ist eine Liste aller Variablen, die in der Eingabe angezeigt werden.
Reine Funktion, die einen Eingabeausdruck verwendet
#
und eine Liste von Wahrheitswerten für alle möglichen Kombinationen von Wahrheitswerten für die Variablen zurückgibt.Stellt den Ausdruck selbst vor diese Liste.
Wendet diese Funktion auf jeden Unterausdruck der Eingabe an.
Ersetzen Sie dann true (
0<1
) durch "T" und false (0>1
) durch "F".Tauschen Sie Zeilen und Spalten aus.
Zeigen Sie das Ergebnis als an
Grid
.Konvertieren Sie die
Grid
Form in die traditionelle Form, sodass die ausgefallenen Symbole verwendet werden.quelle