Prenez un tableau non imbriqué en entrée. Transformez-le en matrice en utilisant la méthode suivante:
Disons que mon tableau est [1, 2, 3, 4, 5]
Tout d'abord, je répète ce tableau 5 fois: (la longueur)
[[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]]
Ensuite, je l'ai lu le long des diagonales:
[[1],
[2, 1],
[3, 2, 1],
[4, 3, 2, 1],
[5, 4, 3, 2, 1],
[5, 4, 3, 2],
[5, 4, 3],
[5, 4],
[5]]
J'aplatis ce tableau et le divise en morceaux de cinq (la longueur):
[[1, 2, 1, 3, 2],
[1, 4, 3, 2, 1],
[5, 4, 3, 2, 1],
[5, 4, 3, 2, 5],
[4, 3, 5, 4, 5]]
C'est le golf de code. Le moins d'octets gagne.
code-golf
array-manipulation
matrix
Gryphon
la source
la source
Réponses:
05AB1E, 13 octets
Essayez-le en ligne!
Explication:
la source
Gelée , 11 octets
Essayez-le en ligne!
Explication
la source
L
ça a fait des trucs bizarres, donc j'ai utilisé le registre: / Je viens de l'essayer à nouveau et ça fonctionne ... en gros le même donc je suppose que je vais juste supprimer le mienPython 2,
10596 octets-1 et -4 et -4 octets grâce à Flp.Tkc
La boucle for ajoute les éléments comme dans la description, la vraie magie opère dans le zip qui est d' ici
la source
JavaScript (ES6) 100
101 105Moins golfé
Tester
la source
return
. Vous devriez publier un conseil à ce sujet dans le fil de la pointe ES6.eval
est en effet encore meilleur cette fois :(MATL , 17 octets
Essayez-le en ligne!
Comment ça fonctionne
L'explication suivante utilise l'entrée
[1 2 3 4 5]
comme exemple. Pour visualiser les résultats intermédiaires, insérez%
(symbole de commentaire) après toute instruction dans le code.Notez que
;
c'est le séparateur de lignes pour les matrices. Il en[1 2]
est de même d'un vecteur ligne, d'[1; 2]
un vecteur colonne et de[1 0; 0 1]
la matrice d'identité 2 × 2.la source
JavaScript (ES6), 116 octets
Eh bien, c'est un début ...
la source
R, 84 octets
Lit l'entrée de stdin et génère / renvoie une matrice R.
Expliqué
L'aspect le plus intéressant de cette réponse est la façon dont les diagonales sont récupérées. En général, un objet peut être divisé en utilisant la
split
fonction si un objet contenant des facteurs sur lequel l'objet est divisé est fourni. Pour créer ces facteurs, nous pouvons utilisercol
etrow
qui renvoient une matrice contenant respectivement les indices de colonne et de ligne. En prenant les différences:row(m)-col(m)
on obtient une matrice comme:dans lequel chaque diagonale est identifiée de manière unique. Nous pouvons maintenant diviser en fonction de cette matrice et la transformer en une liste irrégulière en appliquant
split
:(Notez comment le nom de chaque vecteur correspond aux valeurs diagonales dans la matrice ci-dessus).
La dernière étape consiste simplement à l'aplatir et à la transformer en une matrice de la forme:
la source
Mathematica 93 octets
Voici comment j'écrirais habituellement ce code (109 octets):
Ce graphique matriciel donne une bonne idée de la structure en raison d'un vecteur d'entrée croissant de manière séquentielle.
Voici le graphique matriciel avec un vecteur d'entrée aléatoire. De toute évidence, une certaine structure existe toujours.
la source
Mathematica, 92 octets
Fonction sans nom prenant une liste comme argument. Il pourrait y avoir d'autres structures pour une telle fonction, mais j'espère que j'ai bien joué cette structure ...
La première partie
n=NestList[#2,(r=Reverse)@#,(l=Length@#)-1]&
définit une fonctionn
de deux arguments: la première est une liste de longueurl
, et la seconde est une fonction à appliquer aux listes.n
applique cette fonctionl-1
à la liste des arguments inversés, en enregistrant tous les résultats dans sa liste de sortie. (Définirr
et enl
cours de route ne fait que jouer au golf.)n
est appelé deux fois sur la liste d'origine, une fois avec la fonction étantRest
(supprimer le premier élément de la liste) et une fois avec la fonction étantMost
(supprimer le dernier élément). Cela produit toutes les sous-listes souhaitées, mais toute la liste est là deux fois (d'où l'extraMost
) et la première moitié est là dans l'ordre inverse (d'où ler[...]
). Enfin,~ArrayReshape~{l,l}
oublie la structure de liste actuelle et la force à être un tableaul
xl
.la source
Mathematica, 85 octets
Effectuer littéralement les étapes suggérées:
Mon instinct dit qu'il devrait y avoir un moyen intelligent d'utiliser
Part
pour faire cela plus court, mais chaque tentative que j'ai faite a été plus longue que 85 octets.la source
Rubis (110 octets)
le
sort
opération n'est peut-être pas nécessaire, mais le document pour Enumerable # group_by ne garantit pas l'ordre des valeurs dans les valeurs de hachage (qui sont des tableaux), mais les versions actuelles de Ruby fournissent l'ordre auquel on s'attendrait et l'ordre dont j'aurais besoin sisort
c'était supprimé de mon code.Les étapes sont les suivantes.
Enfin,
f.to_a
retourne le tableau ci-dessus.la source