Disons que j'ai la matrice (2D) suivante:
[[1, 2, 3, 4 ],
[5, 6, 7, 8 ],
[9, 10, 11, 12],
[13, 14, 15, 16]]
Faites pivoter la matrice dans le sens antihoraire R
(pas par incréments de 90 degrés, juste d'un chiffre à chaque fois),
1 2 3 4 2 3 4 8 3 4 8 12
5 6 7 8 --> 1 7 11 12 --> 2 11 10 16
9 10 11 12 5 6 10 16 1 7 6 15
13 14 15 16 9 13 14 15 5 9 13 14
Exemple complété:
Contribution:
2
[[1, 2, 3, 4 ],
[5, 6, 7, 8 ],
[9, 10, 11, 12],
[13, 14, 15, 16]]
Sortie:
[[3, 4, 8, 12],
[2, 11, 10, 16],
[1, 7, 6, 15],
[5, 9, 13, 14]]
(les espaces étranges sont pour aligner les nombres dans de belles colonnes)
L '«anneau» extérieur de la matrice tourne de 2 dans le sens antihoraire, et l'intérieur de droite tourne également de 2. Dans cette matrice, il n'y a que deux anneaux.
Un exemple avec 1 "anneau":
2
[[1, 2],
[3, 4],
[5, 6]]
Devrait produire:
[[4, 6],
[2, 5],
[1, 3]]
Votre défi est de prendre une matrice et un entier R
, et de sortir la version traduite après les R
rotations.
La rotation d'une matrice 4x5 est représentée par la figure suivante:
Contraintes:
2 ≤ M, N ≤ 100
, où M et N sont les dimensions de la matrice. Il est garanti que le minimum de M et N sera pair.1 ≤ R ≤ 80
, où r est le nombre de rotations.- La matrice ne contiendra que des nombres entiers positifs.
- Les valeurs ne sont pas toujours distinctes.
- L'entrée doit toujours être sous forme de tableau 2D (si vous ne pouvez pas prendre l'entrée d'exécution en tant que tableau 2D, il vous suffit de trouver un autre moyen d'obtenir l'entrée).
Un autre cas de test, avec des valeurs non distinctes:
1
[[1, 1],
[2, 2],
[3, 3]]
Les sorties:
[[1, 2],
[1, 3],
[2, 3]]
Il s'agit de code-golf , donc la réponse la plus courte l'emporte!
[[3, 4, 8, 12], [2, 11, 10, 16], [1, 7, 6, 16], [5, 9, 13, 14]]
le 16 est soudainement dupliqué je suppose que ça devrait être[[3, 4, 8, 12], [2, 11, 10, 16], [1, 7, 6, 15], [5, 9, 13, 14]]
:?Réponses:
Gelée ,
39383635 octetsEssayez-le en ligne!
la source
Octave, 210 octets
Essayez-le sur Octave Online!
Version non golfée:
Explication:
Une fonction qui obtient un nombre et génère une plage ordonnée et centrée pour l'entrée 4 (paire) génère
-2 -1 1 2
pour l'entrée 5 (impaire) génère
-2.5 -1.5 0 1 2
uniquement elle doit être ordonnée et centrée
une matrice complexe générée à partir de plages
Convertissez les coordonnées rectangulaires en coordonnées polaires et retournez les angles de sorte que pour chaque anneau, les angles soient triés dans le sens inverse des aiguilles d'une montre
La matrice suivante a généré
Calcule la transformation de distance de B en utilisant la distance de l'échiquier pour générer des indices d'anneau
pour une matrice 6 * 7 nous aurons la matrice suivante
tri lexicographique basé d'abord sur l'index de l'anneau puis par ordre d'angle (index des éléments triés retournés)
et enfin un décalage circulaire de chaque anneau.
la source
Python 3,
292288 octetsPrend l'entrée avec les nouvelles lignes supprimées, mais en laissant un espace après le nombre d'incréments pour le faire pivoter.
Explication:
Au lieu de modéliser la matrice comme une série d'anneaux concentriques selon la suggestion de l'OP, on peut plutôt la diviser en quatre régions où les éléments se déplacent vers le haut, le bas, la droite ou la gauche pendant une seule rotation. C'est le but de la longue chaîne évaluée
f
: pour déterminer dans quelle région chaquei,j
combinaison se trouve. Ensuite, le résultat est recherché deux foisl
, ce qui donne l'élément qui doit tourner en positioni,j
à l'étape suivante. La fonctiong
qui fait tout cela et forme la nouvelle matrice après une seule étape est ensuite appelée à plusieurs reprises en évaluant une chaîne générée contenant la représentation d'un appel de fonction imbriquée.Lorsque j'ai fait cela à l'origine, j'ai accidentellement fait pivoter la matrice dans le sens horaire plutôt que dans le sens antihoraire. Plutôt que de faire une correction correcte, j'ai ajouté deux copies stratégiquement placées de
[::-1]
pour inverser la matrice avant et après la rotation. Ceux-ci pourraient probablement être limités à ~280276 octets, mais je suis trop paresseux pour le faire.En outre, il s'agit d'un port non testé rapide d'un programme Python 2 légèrement plus long, alors pardonnez-moi si cela ne fonctionne pas tout à fait correctement. Voici le code Python 2, de toute façon:
EDIT: Golfed off 4 octets en remplaçant
or
par|
deux.and
ne peut pas être aidé, malheureusement.la source
Perl,
330328 octetsEssayez-le sur Ideone .
Non golfé:
la source