Étant donné une matrice, affichez une représentation de la matrice où l'élément en haut à gauche est en haut, l'anti-diagonale est la ligne centrale et l'élément en bas à droite est en bas.
Par exemple, considérez la matrice suivante:
1 2 3
4 5 6
7 8 9
La version diamant de cette matrice est:
1
4 2
7 5 3
8 6
9
Entrées et sorties
Une matrice d'entrée sera donnée comme une liste de listes (ou quelque chose de similaire dans la langue de votre choix). La sortie doit également être une liste de listes.
Les matrices ne contiendront que des entiers positifs.
La matrice d'entrée ne sera pas nécessairement carrée.
La matrice d'entrée sera au moins 1 × 1.
Cas de test
Input: [[1]]
Output: [[1]]
Input: [[1,2],[3,4]]
Output: [[1],[3,2],[4]]
Input: [[1,2,3],[4,5,6]]
Output: [[1],[4,2],[5,3],[6]]
Input: [[11,2,5],[3,99,3],[4,8,15],[16,23,42]]
Output: [[11],[3,2],[4,99,5],[16,8,3],[23,15],[42]]
Notation
Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte.
code-golf
array-manipulation
matrix
Fatalize
la source
la source
Réponses:
J, 7 octets
Il s'agit d'un verbe monadique sans nom qui prend une matrice et renvoie une liste d'antidiagonales:
Testez-le ici.
Explication
/.
est intégré à J pour appliquer une fonction à chaque anti-diagonale. Malheureusement, ces anti-diagonales sont données dans l'ordre inverse de ce que nous voulons ici.<@|.
, nous appliquons d'abord|.
ce qui inverse l'anti-diagonale, puis la<
mettre en boîte (ce qui est le seul moyen de renvoyer un tableau irrégulier en J, car les tableaux normaux sont toujours rectangulaires, de sorte que les antidiagonales seraient remplies de zéros).la source
Python, 91 octets
Testez-le sur Ideone .
Python + NumPy, 69 octets
Attend un tableau NumPy 2D en entrée et renvoie une liste de tableaux NumPy. Testez-le sur Ideone .
la source
Gelée, 7 octets
Essayez-le en ligne!
Explication
la source
Mathematica,
5856 octetsFonction anonyme, prend des tableaux imbriqués.
la source
Length[#]
où
est\[Transpose]
. Et probablement un autre de l'aliasLength
.Length@#&@@#
pour ASCII uniquement avec le même nombre d'octets.CJam, 17 octets
Un bloc sans nom (fonction) qui attend la matrice sur la pile et la remplace par ses antidiagonales.
Testez-le ici.
Cela (trouvé par Sp3000) fonctionne pour le même nombre d'octets:
Explication
Ceci est mieux expliqué avec un exemple. Considérez l'entrée:
la source
Python 2,
8887 octetsAjoutez 0, zippez, puis supprimez les éléments falsifiés. Renvoie une liste de tuples. Cela permet
map(None,...)
d'effectuerzip_longest
(rembourrer les points manquants avecNone
) etfilter(None,...)
d'éliminer les éléments falsifiés.De façon ennuyeuse, nous devons ajouter une
[]
ligne supplémentaire àmap
pour garantir qu'une liste de tuples est retournée, carmap(None,*[[1]])
retourne[1]
plutôt que[(1,)]
pour une matrice 1x1. La rangée supplémentaire est alors suppriméefilter
.(Merci à @Dennis pour -1 octet)
la source
Rubis,
6866 octetsFonction anonyme.
la source
Mathematica, 60 octets
où
est un caractère Unicode que Mathematica lit comme l'\[Transpose]
opérateur de suffixe .C'est un peu plus long que l'autre solution Mathematica, mais j'ai pensé que je la posterais car elle n'utilise pas la fonction
Diagonals
intégrée et utilise une approche complètement différente.Explication
Cela transpose d'abord la matrice (de telle sorte que les antidiagonales apparaissent dans le bon ordre si la matrice a été aplatie). Ensuite, nous cartographions
List
les cellules de la matrice avec l'indice, ce qui transforme chaque élément de la matricei
en{i, {x, y}}
oùx
ety
sont les coordonnées de l'élément dans la matrice.Cela aplatit la dimension la plus externe, de sorte que nous avons maintenant une liste plate des éléments de la matrice (avec leurs coordonnées) dans l'ordre des colonnes principales.
Cela regroupe ces éléments par la somme de leurs coordonnées. Notez que les antidiagonales sont des lignes de constante
x+y
, donc cela fait exactement le regroupement que nous voulons. L'ordre au sein de chaque groupe est préservé. Il ne nous reste plus qu'à nous débarrasser des coordonnées. Cela se fait via le plutôt cryptique:Ceci mappe la fonction
#&@@@#&
sur chaque groupe, qui s'applique lui-même#&
à chaque élément du groupe, et#
est simplement le premier argument, c'est-à-dire l'élément de matrice d'origine.la source
est lu comme\[transpose]
?T
: reference.wolfram.com/language/ref/character/Transpose.html ...\[Transpose]
n'est que la translittération ASCII de ce caractère Unicode. La copie du caractère Unicode ou de la translittération dans Mathematica fonctionnera.Octave, 77 octets
Avec un petit abus de la
accumarray
fonction:Cela définit une fonction anonyme. Pour l'utiliser, attribuez à une variable ou utilisez
ans
.L'entrée est la matrice avec
:
comme séparateur de ligne. La sortie est un tableau de cellules contenant un tableau pour chaque ligne (l'équivalent d'Octave aux tableaux irréguliers). Ceci est affiché par Octave montrant les indices du réseau de cellules et le contenu de chaque cellule. Essayez-le ici .Pour afficher le résultat séparé par des espaces et des sauts de ligne uniquement: 83 octets
Vous pouvez également l' essayer ici .
la source
JavaScript (Firefox),
8675 octetsEnregistré 11 octets grâce à @Neil!
Fonctionne dans Firefox 30+. Prend un tableau de tableaux.
la source
a.concat(a[0]).slice(1)
pour obtenir un tableau de la bonne longueur. En outre,[for(of)]
n'est pas ES6; Je l'écris normalement sous (Firefox 30+) ou quelque chose comme ça.concat
etslice
. Merci!Octave,
6362 octetsSuppression d'un octet grâce à
@DonMue ...@LuisMendo!J'ai emprunté la route ennuyeuse et ai croisé les antidiagonales.
Exemple de run sur ideone .
la source
'uni'
à'un'
Haskell,
8382 octetsnimi a enregistré un octet. Merci!
la source
Python, 128 octets (numpy)
la source
lambda
juste un lambda que vous pouvez utiliser comme soumission.lambda A:[[A[U][I-U]for U in range(max(I-len(A)+1,0),min(len(A[0])-1,I)+1)]for I in range(len(A+A[0])-1)]
(comme dans votre révision d'origine) serait un peu plus court. En outre, vous devez changerA[U][I-U]
pourA[I-U][U]
obtenir l' orientation de la question.Pyth ,
4117 octetsEssayez-le en ligne!
Inspiré par la solution de @ Doorknob à un autre problème .
Comment ça fonctionne:
Tentative précédente:
Essayez-le en ligne!
Comment ça fonctionne:
la source
Groovy,
777375Prend un tableau de tableaux en entrée et renvoie un tableau de tableaux.
Essayez-le
EDIT: J'ai oublié de sortir la réponse, après avoir ajouté le score monte à 75.
la source