Die Herausforderung
Gegeben eine n x m
Matrix mit n > 1
und m > 1
mit ganzen Zahlen gefüllt
1 2 3 4 5 6
und eine Liste von ganzen Zahlen mit genau so vielen Werten wie 2x2
Blöcke in der Matrix ( (n-1)*(m-1)
wenn Sie die genaue Zahl benötigen)
[1, 2]
Geben Sie die Matrix mit jedem 2x2
Block aus, der um den aktuellen Wert in der Liste in der angegebenen Reihenfolge gedreht wird. Das obige Beispiel würde ergeben
4 6 2 5 3 1
Der erste Block wird einmal nach rechts und der zweite Block zwei Mal nach rechts gedreht.
Anmerkungen
- Eine positive Ganzzahl bedeutet, dass Sie sich um so viele Schritte nach rechts drehen.
- Eine negative Ganzzahl bedeutet, dass Sie sich um so viele Schritte nach links drehen.
- Eine Null bedeutet, dass Sie nicht drehen.
- Sie drehen die Blöcke zeilenweise. Das heißt, Sie beginnen in der ersten Reihe und gehen nach rechts. Sobald Sie jeden Block in dieser Reihe gedreht haben, fahren Sie mit dem nächsten fort. Am Ende wurde jeder Block genau einmal gedreht.
- Beachten Sie, dass sich die Blöcke überlappen. Die erste Matrix oben hat die Blöcke
[[1,2],[4,5]]
und[[2,3],[5,6]]
zum Beispiel. - Jede Drehung eines Blocks wirkt sich auf die Drehung der benachbarten Blöcke aus. Aus diesem Grund müssen Sie die Rotationen in dem oben beschriebenen Muster ausführen.
Regeln
- Sie können die Eingabe im bequemsten Format vornehmen. Bitte geben Sie in Ihrer Antwort an, welche Sie verwenden. Dies erlaubt Ihnen jedoch nicht , die Matrix blockweise zu lesen.
- Funktion oder volles Programm erlaubt.
- Standardregeln für die Eingabe / Ausgabe.
- Es gelten Standardlücken .
- Dies ist Code-Golf , also gewinnt die niedrigste Byte-Anzahl. Tiebreaker ist eine frühere Einreichung.
Testfälle
Das Eingabeformat ist hier eine Liste von Listen für die Matrix und eine normale Liste für die Werte.
[[1,2], [3,4]], [-3] -> [[4,1], [3,2]] [[1,1,1], [1,1,1]], [-333, 666] -> [[1,1,1], [1,1,1]] [[1,2,3], [4,5,6]], [1,2] -> [[4,6,2], [5,3,1]] [[1,2,3], [4,5,6], [7,8,9]], [4,0,12, -20] -> [[1,2,3], [4, 5,6], [7,8,9]] [[1,2,3,4,5], [5,4,3,2,1], [1,2,3,4,5]], [2, -3,4,1,6, 24,21, -5] -> [[4,1,5,2,4], [2,1,3,5,5], [3,2,4,3,1]]
Viel Spaß beim Codieren!
quelle
4,=
richtige Modulo verwenden (es sei denn, Ihr Block muss mindestens einmal ausgeführt werden?).zW%
der Rotation?CJam,
65636055 BytesEs muss einen besseren Weg geben, dies zu tun ...
Dies ist eine unbenannte Funktion, die die Anweisungen und die Matrix (in dieser Reihenfolge) auf dem Stapel erwartet und die resultierende Matrix an ihrer Stelle belässt.
Testen Sie es hier.
Erläuterung
Ich habe momentan keine Lust, die vollständige Aufschlüsselung für den Code zu schreiben. Hier ist eine grobe Übersicht:
N
.k
in dem Array abgerollt ändert vier Indizes:k <- k+1
,k+1 <- k+1+N
,k+N <- k
,k+1+N <- k+1
. Für jeden Indexk
entlang der Anweisungsliste berechne ich eine entsprechende Permutation und wende sie auf das nicht gerollte Eingabearray an.quelle
Python 2 ,
166159 BytesProbieren Sie es online aus!
quelle