Bei einem binären 3D-Array drehen Sie für jede Ebene zyklisch jede ihrer Spalten um so viele Schritte nach oben, wie durch die Binärcodierung der Spalten der darüber liegenden Ebene angegeben, und drehen Sie dann zyklisch jede ihrer Zeilen um so viele Schritte nach links, wie durch angegeben die binäre Kodierung der Zeilen der darunter liegenden Ebene.
Es wird immer mindestens drei Schichten geben. Die Spalten der obersten Ebene und die Zeilen der untersten Ebene sollten nicht gedreht werden.
Begehbar
Beginnen wir mit dem kleinen Array mit 4 Ebenen, 2 Zeilen und 3 Spalten:
[[[1,0,1],
[1,0,0]],
[[1,0,1],
[0,1,1]],
[[0,1,1],
[1,1,1]],
[[1,1,0],
[1,1,1]]]
Der erste Schritt besteht darin, die Zahlen auszuwerten, die in den Spalten und Zeilen jeder Ebene binär codiert sind:
3 0 2
5 [[[1,0,1],
4 [1,0,0]],
2 1 3
5 [[1,0,1],
3 [0,1,1]],
1 3 3
3 [[0,1,1],
7 [1,1,1]],
3 3 1
6 [[1,1,0],
7 [1,1,1]]]
Die [[1,0,1],[1,0,0]]
Spalten der ersten Ebene werden nicht gedreht, die Zeilen werden jedoch zyklisch um 5 Schritte bzw. 3 Schritte nach links gedreht [[1,1,0],[1,0,0]]
.
Bei der zweiten Ebene [[1,0,1],[0,1,1]]
werden die Spalten zyklisch um 3, 0 bzw. 2 Schritte nach oben [[0,0,1],[1,1,1]]
gedreht. Anschließend werden die Zeilen zyklisch um 3 bzw. 7 Schritte nach links gedreht, ohne dass eine Änderung erkennbar ist.
Die dritte Ebene, die [[0,1,1],[1,1,1]]
um 2, 1 und 3 Schritte nach oben gedreht wurde, bleibt unverändert, und die Schritte 6 und 7 nach links drehen hat keine Auswirkungen.
Schließlich wird die vierte Ebene [[1,1,0],[1,1,1]]
um 1, 3 und 3 Schritte nach oben gedreht [[1,1,1],[1,1,0]]
, aber ihre Reihen werden danach nicht gedreht, da es sich um die letzte Ebene handelt.
Wenn Sie alle Ebenen erneut zusammenfügen, erhalten Sie das binäre, selbst gedrehte 3D-Array:
[[[1,1,0],
[1,0,0]],
[[0,0,1],
[1,1,1]],
[[0,1,1],
[1,1,1]],
[[1,1,1],
[1,1,0]]]
Beispielfälle:
[[[1,0,1],[1,0,0]],[[1,0,1],[0,1,1]],[[0,1,1],[1,1,1]],[[1,1,0],[1,1,1]]]
gibt
[[[1,1,0],[1,0,0]],[[0,0,1],[1,1,1]],[[0,1,1],[1,1,1]],[[1,1,1],[1,1,0]]]
[[[1]],[[1]],[[0]]]
gibt
[[[1]],[[1]],[[0]]]
[[[1,0,1],[1,0,1],[1,0,1]],[[0,0,1],[0,0,1],[0,0,1]],[[1,0,0],[1,0,1],[0,0,1]]]
gibt
[[[0,1,1],[0,1,1],[0,1,1]],[[0,1,0],[1,0,0],[0,1,0]],[[1,0,1],[1,0,1],[0,0,0]]]
None
während des Schneidens für die Rotation sorgen, glaube ich, dass beide davon werden['0']
können[[]]
.APL + WIN,
5339 BytesVielen Dank an Adám für die Einsparung von 14 Bytes
Probieren Sie es online! Mit freundlicher Genehmigung von Dyalog Classic
Fordert zur Eingabe eines 3D-Arrays des Formulars auf:
was ergibt:
Erläuterung:
quelle
¨
das Array einzuschließen und zu verwenden , verarbeiten Sie es einfach auf einmal. Probieren Sie es online!R ,
226216205 Bytes-21 Bytes dank digEmAll
Probieren Sie es online!
quelle
05AB1E ,
4139 BytesDas fühlt sich viel zu lang an. Kann definitiv noch mehr golfen werden.
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Wolfram Language (Mathematica) ,
138131125123 BytesProbieren Sie es online!
Map[Thread]
ist äquivalent zuTranspose[a, {1,3,2}]
, was die Spalten und Zeilen transponiert.Fold[#+##&]
ist kürzer alsIntegerDigits[#,2]
für die Konvertierung von binär.quelle