Le défi
Étant donné une n x m
matrice avec n > 1
et m > 1
rempli d'entiers
1 2 3 4 5 6
et une liste d'entiers avec exactement autant de valeurs que de 2x2
blocs dans la matrice ( (n-1)*(m-1)
si vous avez besoin du nombre exact)
[1, 2]
Sortez la matrice avec chaque 2x2
bloc tourné par la valeur actuelle dans la liste dans l'ordre donné. L'exemple ci-dessus donnerait
4 6 2 5 3 1
Le premier bloc est tourné une fois vers la droite et le deuxième bloc est tourné deux fois vers la droite.
Remarques
- Un entier positif signifie que vous tournez à droite de ce nombre d'étapes.
- Un entier négatif signifie que vous tournez à gauche de ce nombre d'étapes.
- Un zéro signifie que vous ne tournez pas.
- Vous faites pivoter les blocs en ligne. Cela signifie que vous commencez dans la première rangée et allez à droite. Une fois que vous avez fait pivoter chaque bloc de cette ligne, vous passez au suivant. À la fin, chaque bloc a été tourné exactement une fois.
- Gardez à l'esprit que les blocs se chevauchent. La première matrice ci-dessus a les blocs
[[1,2],[4,5]]
et[[2,3],[5,6]]
par exemple. - Chaque rotation d'un bloc affecte la rotation sur les blocs adjacents. C'est pourquoi vous devez effectuer les rotations dans le modèle décrit ci-dessus.
Règles
- Vous pouvez prendre l'entrée dans le format le plus pratique. Veuillez préciser dans votre réponse celle que vous utilisez. Cela ne vous permet cependant pas de lire la matrice par blocs.
- 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 valeurs.
[[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]]
Codage heureux!
4,=
pour modulo correct (sauf si votre bloc doit être exécuté au moins une fois?).zW%
de la rotation?CJam,
65636055 octetsIl doit y avoir une meilleure façon de le faire ...
Il s'agit d'une fonction sans nom qui attend les instructions et la matrice (dans cet ordre) sur la pile et laisse la matrice résultante à leur place.
Testez-le ici.
Explication
Je n'ai pas envie d'écrire la ventilation complète du code en ce moment, alors voici un aperçu approximatif:
N
.k
dans la matrice déroulée change quatre indices:k <- k+1
,k+1 <- k+1+N
,k+N <- k
,k+1+N <- k+1
. Pour chaque index lek
long de la liste d'instructions, je calcule une permutation correspondant à cela et l'applique au tableau d'entrée déroulé.la source
Python 2 ,
166159 octetsEssayez-le en ligne!
la source