Hier sind alle 2x2-Binärmatrizen
#0 #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
00 00 00 00 01 01 01 01 10 10 10 10 11 11 11 11
00 01 10 11 00 01 10 11 00 01 10 11 00 01 10 11
Zwei binäre Quadratmatrizen sind unter der Beziehung äquivalent, ~
wenn eine durch eine beliebige Anzahl von Reflexionen in der horizontalen oder vertikalen Achse auf die andere abgebildet werden kann .
#1 ~ #2
Unter Reflexion in der vertikalen Achse müssen wir also nur eine davon behalten (egal welche). Ebenso #3 ~ #12
, #6 ~ #9
und so weiter.
Das Ziel ist es, ein Programm zu erstellen, das eine einzige Eingabe benötigt N
und so viele N x N
Binärmatrizen ausgibt, dass alle Matrizen in der Ausgabe unter der obigen Beziehung voneinander verschieden sind.
Im Hand-Wave-Pseudocode wäre eine Lösung zulässig
define M[i] = N by N matrix with bit pattern equal to i
for i = 0 to (2^(N^2)) - 1
valid = true
for j = i+1 to (2^(N^2)) - 1
if (equivalent(M[i], M[j]))
valid = false
break
if (valid)
print (M[i])
Für die Eingabe wäre N=2
eine gültige Ausgabe
00 00 00 01 10 01 11
00 01 11 01 01 11 11
Durch Auswahl verschiedener Matrizen aus derselben Äquivalenzklasse wäre jedoch eine andere gültige Ausgabe möglich
00 10 11 11 11 10 01
00 00 00 10 11 10 10
Die Reihenfolge der Matrizen spielt keine Rolle, die Auswahl aus den entsprechenden Matrizen spielt keine Rolle, und Leerzeichen spielen keine Rolle. Geben Sie die Matrizen nach Belieben aus, solange sie für den Menschen lesbar sind.
Die Ausgabe muss vollständig sein.
Kürzester Code gewinnt.
BEARBEITEN: Dies ist mein erster Golfpost und ich habe meine Meinung zu den Gewinnkriterien geändert.
Kürzester Code in einer Sprache, die nicht speziell für Prägnanz- / Golfgewinne entwickelt wurde .
Ich hoffe, es ist keine schlechte Etikette, dieses Kriterium nachträglich zu ändern, aber ich denke, es ist viel interessanter , es in einer "normalen" Sprache zu machen .
Antworten:
J,
665653 BytesBrute-Force-Suche.
Verwendung
Erläuterung
quelle
Jelly , 19 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Pyth -
242321 BytesMöchten Sie nach einem besseren Weg suchen, um alle Reflexionen zu erhalten?Vielen Dank an @ Pietu1998 für das Golfen mit 2 Bytes!
Probieren Sie es hier online aus .
Warten Sie auf das Golfen, bevor Sie eine vollständige Erklärung
.g
abgeben , aber es werden im Wesentlichen alle möglichen binären Matrizen erstellt. Anschließend werden sie anhand der sortierten Liste aller möglichen Reflexionen gruppiert und es wird nur eine aus jeder Gruppe erstellt.quelle
3
fängt die Ausgabe an[['000', '000', '00'],
, die fehlende Null am Ende zu notieren.^2Q
stattQ^2
. Fix spart mir auch ein Byte: D_MM
anstattmC_Cd
.Haskell, 100 Bytes
Anwendungsbeispiel:
f 2
->[["00","00"],["00","01"],["00","11"],["01","01"],["01","10"],["01","11"],["11","11"]]
.Wie es funktioniert:
quelle
JavaScript (ES6), 195 Byte
Gibt Zeichenfolgen zurück, die alle verketteten Matrixeinträge darstellen, z. B.
111101111
eine 3 × 3-Matrix von1
s mit einem0
in der Mitte. Erläuterung:quelle
.map(f=(x=p++)=>x>1?f(x>>1)+x%2:"")
Mathematica, 94 Bytes
quelle
JavaScript (ES6), 184
Es stellte sich heraus, dass dies Neil sehr ähnlich war, aber insgesamt ist die Trickkiste in Javascript nicht so vielfältig.
Weniger golfen
Test Achtung, auch bei Eingang 4 ist die Laufzeit zu lang
quelle