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 .