Le défi
Étant donné une n x n
matrice d'entiers avecn >= 2
1 2 3 4
et une liste d'entiers avec exactement des 2n
éléments
[1,2, -3, -1]
sortie de la matrice tournée. Cette matrice est construite de la manière suivante:
- Prenez le premier entier de la liste et faites pivoter la première ligne vers la droite de cette valeur.
- Prenez l'entier suivant et faites pivoter la première colonne vers le bas de cette valeur.
- Prenez l'entier suivant et faites pivoter la deuxième ligne vers la droite de cette valeur, etc. jusqu'à ce que vous ayez fait pivoter une fois chaque ligne et colonne de la matrice.
La liste peut contenir des entiers négatifs, ce qui signifie que vous déplacez la ligne / colonne vers la gauche / vers le haut au lieu de la droite / vers le bas. Si l'entier est zéro, ne faites pas pivoter la ligne / colonne.
Exemple utilisant l'entrée ci-dessus
Élément de liste Matrice Explication -------------------------------------------------- ---------- 1 2 1 Tournez la 1ère rangée vers la droite de 1 3 4 2 2 1 Tournez la 1ère colonne vers le bas de 2 3 4 -3 2 1 Faire pivoter la 2e rangée vers la gauche de 3 4 3 -1 2 3 Faites pivoter la 2e colonne de 1 vers le haut 4 1
Règles
- Vous pouvez choisir le format d'entrée le plus convenable. Indiquez simplement lequel vous utilisez.
- Fonction ou programme complet autorisé.
- Règles par défaut pour les entrées / sorties.
- Des échappatoires standard s'appliquent.
- Il s'agit de code-golf , donc le nombre d'octets le plus bas l'emporte. Tiebreaker est une soumission antérieure.
Cas de test
Le format d'entrée est ici une liste de listes pour la matrice et une liste normale pour les entiers.
[[1,2], [3,4]], [1,2, -3, -1] -> [[2,3], [4,1]] [[1,2], [3,4]], [1,1,1,1] -> [[3,2], [4,1]] [[1,2], [3,4]], [0,0,0,0] -> [[1,2], [3,4]] [[1,2, -3], [- 4,5,6], [7, -8,0]], [1, -2,0, -1,3,4] -> [[7, 5,0], [- 3, -8,2], [- 4,1,6]] [[1,2, -3], [- 4,5,6], [7, -8,0]], [3,12, -3,0, -6, -3] -> [[1 , 2, -3], [- 4,5,6], [7, -8,0]]
Codage heureux!
Réponses:
CJam, 13 octets
Un bloc sans nom (fonction) qui prend la matrice et la liste en haut de la pile (dans cet ordre) et laisse la nouvelle matrice à leur place.
Exécutez tous les cas de test.
Même idée, même nombre d'octets, implémentations différentes:
Explication
Idéalement, nous voulons traiter chaque instruction de la liste de la même manière et l'utiliser pour faire pivoter la première ligne de la matrice. Cela peut être fait assez facilement en transformant un peu la matrice après chaque instruction et en s'assurant que toutes ces transformations supplémentaires s'annulent à la fin. Donc, après le traitement de chaque instruction, nous faisons pivoter toutes les lignes une vers le haut (de sorte que l'instruction suivante dans la même dimension traite la ligne suivante), puis transposons la matrice, de sorte que nous traitions en fait les colonnes suivantes. Ces transformations supplémentaires sont orthogonales aux instructions de la liste et ont une période d'exactement
2n
ce dont nous avons besoin.Quant au code:
la source
APL (Dyalog Extended) ,
17151413 octets-3 octets par Adám
Essayez-le en ligne!
Prend l'entrée comme une liste où le premier élément est la matrice et les éléments restants sont les quantités de rotation. Si ⌽ tournait vers la droite au lieu de la gauche, cela battrait CJam.
la source
{⍉1⊖⌽⍺⌽@(⍳1)⌽⍵}
→(⍉1⊖⌽@(⍳1)⍢⌽)
mais pouvez-vous m'expliquer pourquoi@1
ne fonctionnera pas à la place de@(⍳1)
ou@(,1)
? De plus, OP peut vous permettre de prendre une entrée en sens inverse.at
qui est derrière l'extension@
n'est pas une extension compatible. Cependant, vous pouvez utiliser le natif@
avec`@1
lequel vous enregistrez un octet@1 1
.Python 2, 96 octets
Les tests
f
renvoie une liste de tuples. Chaque ligne du corps de la fonction est mise en retrait avec 1 caractère de tabulation.la source
return zip(*m)
vous ferait-elle pas économiser 5 octets?m=zip(*m);return m
par justereturn zip(*m)
? Je ne peux pas faire ça parce que ça faitm=zip(*m)
partie de lafor
boucleStax , 12 octets
Exécuter et déboguer
la source