De cette question stackoverflow
Étant donné un tableau 2D de taille , sortez les valeurs dans le sens inverse des aiguilles d'une montre. La sortie doit commencer de l'extérieur vers l'intérieur et le point initial sera toujours .
Exemple donné:
Les valeurs de front dans le sens antihoraire sont alors .
Maintenant, nous répétons le processus pour les valeurs intérieures. Cela se terminera par une matrice comme la suivante
Et les valeurs intérieures sont alors
Le résultat final sera alors
Règles
- Supposons une entrée non vide
- Supposons que les valeurs de la matrice sont des entiers positifs
- Les méthodes d'E / S standard s'appliquent
- Les règles de code-golf standard et les critères de victoire s'appliquent
Quelques cas de test
Input
[
[1, 2, 3, 4, 5, 6, 7],
[8, 9, 10,11,12,13,14],
[15,16,17,18,19,20,21]
]
Output
1,8,15,16,17,18,19,20,21,14,7,6,5,4,3,2,9,10,11,12,13
--------------------------------------------------------
Input
[
[1,2,3],
[3,2,1],
[4,5,6],
[6,5,4],
[7,8,9],
[9,8,7]
]
Output
1,3,4,6,7,9,8,7,9,4,6,1,3,2,2,5,5,8
-----------------------------------------------------
Input
[
[1]
]
Output
1
-----------------------------------
Input
[
[1, 2],
[2, 1]
]
Output
1,2,1,2
-----------------------------------------------------
Input
[
[1,2,3,6,7],
[2,4,3,2,1],
[3,2,4,5,6],
[6,5,6,5,4],
[10,4,7,8,9],
[12,4,9,8,7]
]
Output
1,2,3,6,10,12,4,9,8,7,9,4,6,1,7,6,3,2,4,2,5,4,7,8,5,5,2,3,4,6
Réponses:
R , 54 octets
Plusieurs octets enregistrés par @Giuseppe et @ J.Doe.
Essayez-le en ligne!
Supprimez récursivement la première colonne et inversez / transposez la ligne (faisant de la ligne du bas la nouvelle première colonne) le reste de la matrice jusqu'à ce que vous vous retrouviez avec une seule colonne. Version "traditionnelle" non golfée:
Il a été souligné que l'on
ncol(m)
pouvait jouer au golf poursum(m)
enregistrer un autre octet car nous sommes autorisés à supposer des valeurs de matrice entières positives. Mais je vais le laisser comme ça car il fonctionne pour toutes les matrices (même les matrices de chaînes!)la source
t()
empêche ledrop=TRUE
défaut`[`
de gâcher laif
condition!t()
de ne pas avoir à utiliser unis.null
test qui faisait partie de mes tentatives initiales.m
toute façon nul, vous pouvez donc modifier l'instruction if pour 54 octets . Semble fonctionner pour les cas de test.Python 2 , 52 octets
Essayez-le en ligne!
la source
Pyth , 9 octets
Essayez-le ici!
Comment?
la source
Stax , 7 octets
Exécuter et déboguer
Il prend un tableau de lignes sur une ligne et produit une sortie séparée par des sauts de ligne.
Déballé, non golfé et commenté, il ressemble à ceci.
Exécutez celui-ci
la source
Pyth, 20 octets
Essayez-le ici
Explication
la source
oK , 12 octets
Essayez-le en ligne!
Cela abuse du fait que l'oK ne semble pas trop se soucier de la forme de la transposition. En k ce serait 13 octets :
*:',/(1_+|:)\
.la source
Nettoyer , 69 octets
Essayez-le en ligne!
Déplace la ligne / colonne suivante en tête de la liste afin qu'elle puisse correspondre au modèle dans l'argument.
Pour le premier exemple du défi, cela ressemble à ceci:
la source
Julia 0,7 , 47 octets
Essayez-le en ligne!
Julia dispose d'une fonction intégrée pratique pour faire pivoter la matrice de 90 degrés, éliminant ainsi la nécessité d'opérations de transposition-inversion.
Comme vous pouvez le voir dans les avertissements du compilateur, il insiste sur le fait que tous les composants du conditionnel ternaire doivent être séparés par des espaces, et dans la version 1.0, cela a été effectivement appliqué.
Curieusement, dans cette situation, le moyen le plus court que j'ai trouvé pour sortir de la récursivité était d'utiliser un bloc try-catch:
Julia 1.0 , 50 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) , 89 octets
Essayez-le en ligne!
Prend la première colonne, transpose la colonne restante, puis inverse chaque ligne (= fait pivoter la matrice de 90 degrés CW), puis répète jusqu'à ce que le tableau n'ait plus d'entrées.
la source
APL (Dyalog) ,
2422 octetsEssayez-le en ligne!
Comment?
la source
05AB1E ,
131110 octets-2 octets grâce à @Emigna .
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Gelée , 9 octets
Essayez-le en ligne!
la source
Fusain , 25 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Faites pivoter l'entrée de 180 °. C'est pour deux raisons: a) la dernière ligne est la plus facile à supprimer, et b) il est plus facile de boucler si la ligne est supprimée à la fin de la boucle. (J'ai essayé de réfléchir et de produire dans le sens horaire, mais cela a pris un octet supplémentaire.)
Répétez jusqu'à ce que le tableau soit vide.
Faites pivoter le réseau de 90 °.
Supprimez la dernière ligne du tableau et imprimez l'élément sous forme de chaînes sur des lignes distinctes.
la source
Ruby , 65 octets
Essayez-le en ligne!
la source
PowerShell , 266 octets
Ouais .. PowerShell n'est pas le meilleur pour gérer les matrices. Mais, l'algorithme est fondamentalement le même que ci-dessus. Chaque ligne est représentée comme une chaîne séparée par des virgules, et nous faisons essentiellement une rotation et une transposition pour chaque couche. Je peux probablement me raser plus, mais ... je suis déjà en pyjama ...
Essayez-le en ligne!
la source