Parfois, j'ai des listes de matrices constantes dans mon code:
[ [[1, 0],
[0, 1]],
[[1, 0],
[0,-1]],
[[0, 1],
[1, 0]],
[[0,-1],
[1, 0]] ]
C'est une terrible utilisation de l'écran immobilier. Je préfère de loin les écrire côte à côte:
[ [[1, 0], [[1, 0], [[0, 1], [[0,-1],
[0, 1]], [0,-1]], [1, 0]], [1, 0]] ]
Vous constaterez qu'il s'agit toujours d'une liste imbriquée syntaxiquement valide, qu'elle n'est tout simplement plus rectangulaire et qu'elle a une structure très différente (en particulier, elle s'approfondit à chaque fois que j'ajoute une matrice plus grande que 1x1). Cependant, il est toujours possible de reconstruire la liste initiale des matrices à partir de cette nouvelle liste.
Pour pouvoir utiliser cette syntaxe à l'avenir, j'ai besoin que vous écriviez du code qui convertit les tableaux qui ont été écrits dans un arrangement horizontal en liste de matrices qu'ils représentent.
Pour vous assurer que les réponses n'effectuent pas de correspondance de motifs 2D sur la mise en page dans le code source, l'entrée sera donnée soit uniquement comme l'objet tableau, soit si vous prenez une représentation sous forme de chaîne, elle ne contiendra aucun espace indiquant comment littéral a été écrit dans le code. Vous obtiendrez donc une entrée comme celle-ci:
[[[1, 0], [[1, 0], [[0, 1], [[0,-1], [0, 1]], [0,-1]], [1, 0]], [1, 0]]]
Et la sortie doit être le tableau suivant ou sa représentation sous forme de chaîne (encore une fois, aucune autre disposition n'est nécessaire):
[[[1, 0], [0, 1]], [[1, 0], [0,-1]], [[0, 1], [1, 0]], [[0,-1], [1, 0]]]
Il s'agit de la première et plus facile partie d'un défi en deux parties. Dans celui-ci, vous pouvez supposer que toutes les matrices sont carrées et ont les mêmes dimensions et qu'elles sont correctement alignées les unes à côté des autres. Dans la deuxième partie, nous assouplirons ces hypothèses.
Règles
L'entrée sera une liste imbriquée ou sa représentation sous forme de chaîne canonique (dans la langue de votre choix), et vous devez sortir le résultat dans le même format. Le résultat contiendra toujours au moins une matrice, et les matrices peuvent être aussi petites que 1x1. Les matrices ne contiendront que des entiers (signés) avec une valeur absolue inférieure à 128.
Vous pouvez écrire un programme ou une fonction et utiliser l'une des méthodes standard de réception d'entrée et de sortie.
Vous pouvez utiliser n'importe quel langage de programmation , mais notez que ces failles sont interdites par défaut.
Il s'agit de code-golf , donc la réponse valide la plus courte - mesurée en octets - l'emporte.
Cas de test
Chaque cas de test a) les matrices de liste disposées bien à côté de l'autre comme ils le seraient dans le code (ce qui est pas votre entrée), b) la liste non formatée sans les espaces blancs étrangers ( c'est votre entrée), c) production attendue.
Pretty: [ [[0]] ]
Input: [[[0]]]
Output: [[[0]]]
Pretty: [ [[-1]], [[0]], [[1]] ]
Input: [[[-1]],[[0]],[[1]]]
Output: [[[-1]],[[0]],[[1]]]
Pretty: [ [[1, 0], [[1, 0], [[0, 1], [[0,-1],
[0, 1]], [0,-1]], [1, 0]], [1, 0]] ]
Input: [[[1,0],[[1,0],[[0,1],[[0,-1],[0,1]],[0,-1]],[1,0]],[1,0]]]
Output: [[[1,0],[0,1]],[[1,0],[0,-1]],[[0,1],[1,0]],[[0,-1],[1,0]]]
Pretty: [ [[1, 0, 0], [[ 127, 63, 31], [[1, 0, 0], [[0, 0, 0],
[0, 1, 0], [ 15, 0, -15], [0, 0, 1], [0, 0, 0],
[0, 0, 1]], [ -31, -63, -127]], [0, 1, 0]], [0, 0, 0]] ]
Input: [[[1,0,0],[[127,63,31],[[1,0,0],[[0,0,0],[0,1,0],[15,0,-15],[0,0,1],[0,0,0],[0,0,1]],[-31,-63,-127]],[0,1,0]],[0,0,0]]]
Output: [[[1,0,0],[0,1,0],[0,0,1]],[[127,63,31],[15,0,-15],[-31,-63,-127]],[[1,0,0],[0,0,1],[0,1,0]],[[0,0,0],[0,0,0],[0,0,0]]]
la source
[([1, 0], [0, 1]), ([1, 0], [0, -1]), ([0, 1], [1, 0]), ([0, -1], [1, 0])]
sortie est-elle valide pour le troisième testcase? C'est une liste mixte et un tuple.[([1,0], ([1, 0}, ...
et cela vous donnerait des informations supplémentaires.Réponses:
Gelée ,
20151311 octetsEssayez-le en ligne!
Contexte
Comme la plupart des choses, ce défi est assez simple une fois que vous avez compris ce que vous devez faire. Et je l'ai finalement fait, après trois suppressions et un retour en arrière ...
Tout d'abord, nous devons déterminer les dimensions des matrices. C'est plus facile à faire que dit: le premier élément du premier élément est la première ligne de la première matrice de sortie, donc sa longueur est égale au nombre de colonnes des matrices de sortie carrées.
Par exemple, si l'entrée est
le premier élément du premier élément est
[1, 0, 0]
, dont la longueur est ℓ = 3 .Si nous aplatissons l'entrée et la divisons en morceaux de cette longueur, nous obtenons toutes les lignes des matrices de sortie, bien que dans le mauvais ordre. Pour notre exemple d'entrée, cela donne
Pour obtenir la sortie finale, nous devons d'abord diviser le tableau de lignes en ℓ morceaux de longueur égale. Pour notre exemple d'entrée, cela donne
Chaque colonne est maintenant l'une des matrices de sortie, donc il ne reste plus qu'à transposer la matrice de tableaux résultante. Pour notre exemple d'entrée, cela donne
comme voulu.
Comment ça marche
la source
Pyth , 12 octets
Ceci est un port de ma réponse Jelly.
Essayez-le en ligne!
Comment ça marche
Pyth analyse le programme comme suit (pseudo-code).
Q est une variable qui contient l'entrée. J est une variable non définie.
J = l(h(h(Q)))
Enregistre d' abord la longueur de la tête (premier élément) de la tête de Q dans J .Ensuite,
.n(Q)
aplatit Q , etc(..., J)
divise le résultat en morceaux de longueur J .Ensuite,
c(J, ...)
divise le résultat en pièces J.Enfin,
C(...)
transpose le résultat.la source
Pyth , 29 octets
Suite de tests.
Comment ça marche
Algorithme
Travaillons sur l'entrée
[[[1,0],[[1,0],[[0,1],[[0,-1],[0,1]],[0,-1]],[1,0]],[1,0]]]
.Nous utiliserons ici des opérations de chaîne pure.
Tout d'abord, nous séparons l'entrée aux virgules qui ne font pas partie de la liste la plus profonde (cela se fait en divisant au niveau de l'expression régulière
\B,
):Ensuite, nous trouvons l'index de la première sous-chaîne qui ne commence pas par
[[
(cela se fait en vérifiant si le caractère à index1
est[
). Dans ce cas, c'est le cas,4
car la sous-chaîne à l'indice 4 est celle[0,1]]
qui ne commence pas par[[
.Ensuite, nous regroupons les sous-chaînes en groupes de 4, puis transposons:
Et puis nous les joignons avec des virgules:
la source
JavaScript (ES6),
132130 octetsIl y a quatre cas:
n
en même temps.n
e élément.la source
05AB1E , 11 octets
Un port de la réponse de Dennis . Code:
Utilise l' encodage CP-1252 . Essayez-le en ligne!
la source
Mathematica, 104 octets
Contribution
production
contribution
production
{{{0}}} et {{{-1}}, {{0}}, {{1}}} fonctionnent également
-11 octets grâce à Martin Ender
la source