Einführung
XOR ist ein digitales Logikgatter, das ein exklusives oder implementiert. Meistens wird dies als angezeigt ^
. Die vier möglichen Ergebnisse in binärer Form:
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
Dies kann auch als Addition modulo 2 in binär angesehen werden. In dezimal, müssen wir das Dezimalsystem um binäre, konvertieren 35 = 100011
und 25 = 11001
.Um berechnen den XOR Wert legen wir sie auf der jeweils anderen:
100011
11001 ^
--------
111010 = 58 in decimal
Die Aufgabe : Wenn ein ganzzahliger Wert N größer als 1 ist, wird eine XOR-Tabelle mit der Größe N + 1 ausgegeben. Beispiel: N = 5:
0 1 2 3 4 5
1 0 3 2 5 4
2 3 0 1 6 7
3 2 1 0 7 6
4 5 6 7 0 1
5 4 7 6 1 0
Sie können sehen, dass vor jeder Zahl ein Leerzeichen steht, da der höchste Betrag in der Tabelle die Länge 1 hat. Wenn wir jedoch N = 9 nehmen, erhalten wir das folgende Raster:
0 1 2 3 4 5 6 7 8 9
1 0 3 2 5 4 7 6 9 8
2 3 0 1 6 7 4 5 10 11
3 2 1 0 7 6 5 4 11 10
4 5 6 7 0 1 2 3 12 13
5 4 7 6 1 0 3 2 13 12
6 7 4 5 2 3 0 1 14 15
7 6 5 4 3 2 1 0 15 14
8 9 10 11 12 13 14 15 0 1
9 8 11 10 13 12 15 14 1 0
Der höchste Wert hat die Länge 2, daher ist der Wert rechtsbündig mit der Länge 3 (höchste Länge + 1).
Regeln:
- Führende Leerzeichen sind nicht obligatorisch, nur wenn sie konsistent verwendet werden (oder nicht)
- Sie müssen eine Tabelle in der oben gezeigten Form ausgeben.
- Der Abstand zwischen den Spalten sollte so gering wie möglich sein
- Das ist Code-Golf , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!
output an XOR table with the size N+1
Antworten:
MATL , 10 Bytes
Der Compiler (und insbesondere dieses Programm) scheint jetzt in Octave zu funktionieren, obwohl noch einige Verbesserungen erforderlich sind. Sie können dieses GitHub-Commit vorläufig verwenden .
Bearbeiten (30. März 16) : Online ausprobieren!
Beispiel
Erläuterung
quelle
Bash + BSD-Utensilien, 45
Ich habe lange darauf gewartet, eine Verwendung für zu finden
rs
. Das scheint gut zu sein.rs
muss möglicherweise auf Linux-Systemen installiert werden. Unter OS X läuft es jedoch sofort.$1
expandiert zu N undecho \$[{0..$1}^{0..$1}]
expandiert somit zuecho $[{0..N}^{0..N}]
eval
ed:$[0^0] $[0^1] $[0^2] ... $[0^N] ... $[N^N]
rs
(umformen) formt diese Linie in N + 1 Zeilen um.-j
right rechtfertigt und-g1
gibt eine Bundbreite von 1 an. Dadurch wird sichergestellt, dass die endgültige Ausgabetabelle nur eine minimale Breite zwischen den Spalten aufweist.Ich habe bis zu N = 1000 getestet, was 3,8 Sekunden gedauert hat. Ein großes N ist theoretisch möglich, obwohl bash irgendwann nicht mehr genügend Arbeitsspeicher hat, wenn (N + 1) ² Speicher der geschweiften Klammer verwendet wird.
quelle
JavaScript (ES6) 120
122Bearbeite 2 Bytes, die dank ETHproductions gespeichert wurden
Eine anonyme Funktion. Hinweis: Die Zahl in der Tabelle ist auf 7 Stellen begrenzt, was angesichts der Gesamtgröße einer Tabelle, die größere Zahlen zulässt, mehr als angemessen ist
Jetzt sollte ich einen kürzeren Weg finden, um die maximale Spaltengröße zu erhalten und Logarithmen zu vermeiden
Prüfung
quelle
~m
, um einen zusätzlichen Raum einzufangen. Durch die Verwendung eines Template-Strings können zwei Bytes gespart werden:(z,j)=>`(7 spaces)${i^j}`.slice(~m)
(ignore this padding) ``abc`def`` (ignore this too)
:abc`def
C 114
128 152Bearbeiten Vereinfachtes Zählen des Platzes, inspiriert von der Arbeit von Khaled A Khunaifer
AC-Funktion, die den Spezifikationen folgt.
Versuchen Sie , n als Eingabe einzufügen, Standard 9
Weniger golfen
quelle
C 103 Bytes
quelle
Gelee, nicht konkurrierend
7 Bytes Diese Antwort ist nicht konkurrierend, da sie Funktionen verwendet, die die Herausforderung nachholen.
Probieren Sie es online!
Wie es funktioniert
quelle
R, 38 Bytes
Normalerweise benötigt R viele Bytes, um die Ausgabe zu formatieren. In diesem Fall ist es genau umgekehrt.
outer
Dies bezieht sich normalerweise auf das äußere Produkt von zwei Arrays. Wenn eine Funktion geliefert wird, kann sie dies über die Ränder der Vektoren hinweg ausführen. In diesem Fall wenden wir die bitweise XOR-Funktion anbitwXor
.quelle
CJam,
2927 BytesTeste es hier.
Erläuterung
quelle
MathCAD, 187 Bytes
In MathCAD lassen sich problemlos Tabellen erstellen - es gibt jedoch absolut kein bitweises Xor, keine Konverter von Dezimal zu Binär oder von Binär zu Dezimal. Die for-Funktionen durchlaufen die möglichen Werte. Die Plätze i, a2, Xa und Xb gelten. Die while-Schleife wandelt sich aktiv in binär um und führt beim Umwandeln in binär auch die xor-Funktion aus (das kleine Kreuz mit dem Kreis darum). Es speichert die Binärzahl in einer Basis-10-Zahl, die aus Nullen und Einsen besteht. Diese wird dann konvertiert, bevor sie über die Summationsfunktion in der M-Matrix gespeichert wird.
Dies kann leicht heruntergespielt werden (wenn auch nur durch Austauschen der Platzhalter gegen kürzere), aber ich dachte, ich würde es veröffentlichen und sehen, ob jemand mehr als alles andere den Binär-zu-Dezimal-Konverter heruntergolfen kann.
quelle
k4, 50 Bytes
Z.B:
quelle
C 149 Bytes
Detailliert
quelle
11..1
zu dem signifikanten Wert im Eingabewertn
. Er kann durchgeführt werden, indem zuerst die nächste Potenz von 2 ermittelt wird und dann mit der vorherigen Zahl xor.0001 xor 1110 = 1111
for(k=1;k<=n;)k*=2;k--;
. Jetzt sehe ich, dass das viel kürzer ist als mein C-Versuch, um dasselbe (meiner ist besser für die Leistung, aber die Leistung spielt bei dieser Herausforderung keine Rolle)2^k xor 2^k -1
fürmax{2^k<=n}
oder2^k -1
fürmin{2^k>=n}
. um alles11..1
daPython 3,
133131 Bytesquelle
Mathematica, 108 Bytes
Ignorieren Sie den Fehler, es ist nur
Thread
nicht zu wissen, was es tut.quelle
Emacs Lisp, 193 Bytes
Ungolfed:
Die Ausgabe wird in dem gesendeten
*Message*
Puffer, der sein würde ,stdout
wennx
in einem Skript verwendet werden sollte.quelle
Python 2, 114 Bytes
Es dauerte einige Zeit, bis man einen Weg gefunden hatte, um das Auffüllen mit variabler Breite
.format()
(einige, nicht viele) durchzuführen und es richtig einzustellen, aber ich denke, ich muss jetzt alles spezifizieren. Könnte aber mehr Golf in dieser Breitenberechnung gebrauchen.quelle
Caché ObjectScript , 127 Byte
Detailliert:
quelle
Pyke, 8 Bytes (nicht konkurrierend)
Erläuterung:
Probieren Sie es hier aus
quelle
Python 2, 77 Bytes
quelle
J , 10 Bytes
Probieren Sie es online!
quelle
Excel VBA, 95 Bytes
Anonyme VBE-Direktfensterfunktion, die Eingaben aus dem Bereich
[A1]
und Ausgaben an die Konsole weiterleitet.quelle
Kleines Basic , 499 Bytes
Ein Skript, das Eingaben vom
TextWindow
Objekt entgegennimmt und an dasselbe ausgibtProbieren Sie es bei SmallBasic.com aus. Verwendet Silverlight und muss daher in IE oder Edge ausgeführt werden
Wählen Sie die schwarze Konsole aus, geben Sie eine Ganzzahl ein und drücken Sie Enter.
quelle