introduction
Supposons que vous ayez une liste de listes d'entiers (ou n'importe quel objet vraiment, mais restons sur des entiers pour plus de simplicité). Les listes peuvent être de différentes longueurs et certaines peuvent être vides. Écrivons les listes sous forme de tableau:
[[ 1, 2, 3, 4, 5],
[ 6, 7],
[ 8, 9, 10, 11],
[],
[12, 13, 14],
[15, 16, 17, 18]]
Ce tableau a 5 colonnes verticales, contenant les nombres 1, 6, 8, 12, 15
, 2, 7, 9, 13, 16
, 3, 10, 14, 17
, 4, 11, 18
et 5
. Si on inverse chaque colonne, on obtient les listes 15, 12, 8, 6, 1
, 16, 13, 9, 7, 2
, 17, 14, 10, 3
, 18, 11, 4
et 5
. Reprenons ces numéros dans les colonnes du tableau tout en conservant la même longueur que précédemment:
[[15, 16, 17, 18, 5],
[12, 13],
[ 8, 9, 14, 11],
[],
[ 6, 7, 10],
[ 1, 2, 3, 4]]
Votre tâche consiste à implémenter cette opération.
Entrée et sortie
Votre entrée est une liste de listes d'entiers non négatifs, représentant les lignes. Les lignes peuvent avoir des longueurs différentes et certaines d'entre elles peuvent être vides. Il y aura toujours au moins une ligne. Votre sortie est le résultat de l'inversion de chaque colonne, comme détaillé ci-dessus. L'entrée et la sortie peuvent être dans n'importe quel format raisonnable.
Le nombre d'octets le plus bas dans chaque langue gagne. Les règles de code-golf standard s'appliquent.
Cas de test
[[]] -> [[]]
[[],[]] -> [[],[]]
[[8,5,1]] -> [[8,5,1]]
[[1,200],[0,3]] -> [[0,3],[1,200]]
[[],[3,9],[1],[]] -> [[],[1,9],[3],[]]
[[],[5,8,7],[0,6,5,7,1]] -> [[],[0,6,5],[5,8,7,7,1]]
[[1,8,5],[7,5,4],[],[1]] -> [[1,5,4],[7,8,5],[],[1]]
[[],[],[2],[],[31],[],[5],[],[],[],[7]] -> [[],[],[7],[],[5],[],[31],[],[],[],[2]]
[[1,10,100,1000],[2,20,200],[3,30],[4],[5,50,500],[6,60],[7]] -> [[7,60,500,1000],[6,50,200],[5,30],[4],[3,20,100],[2,10],[1]]
[[8,4],[3,0,4,8,1],[8],[0,8],[9,7,1,6],[3,8,1,9,5]] -> [[3,8],[9,7,1,9,5],[0],[8,8],[3,0,1,6],[8,4,4,8,1]]
[[3,9,3],[5],[1],[3,5],[9,0,6,2],[1,3],[4,9,2],[6,6,7,8,7]] -> [[6,6,7],[4],[1],[9,9],[3,3,2,8],[1,0],[5,5,6],[3,9,3,2,7]]
[[8,5,6],[3,5,2,4,9],[4,3,8,3,7],[6,1,1],[1,8,9,9],[9,1,2],[8,7]] -> [[8,7,2],[9,1,9,9,7],[1,8,1,3,9],[6,1,8],[4,3,2,4],[3,5,6],[8,5]]
[[2,4],[1,4],[0,8,7,3],[4,9,2,5],[2,8,0],[0,8,3],[7,3,1],[],[3,3,7,8]] -> [[3,3],[7,3],[0,8,7,8],[2,8,1,5],[4,9,3],[0,8,0],[1,4,2],[],[2,4,7,3]]
[[1,9],[3],[2,4,5]] -> [[2,4],[3,null],[1,9,5]]
)Réponses:
Gelée , 16 octets
Essayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça fonctionne
la source
ṣ
ligne du haut est très intelligente! (ḟṚṁṣj
Ne⁸ḟ⁹Ṛṁ⁸ṣ⁹¤j⁹
pas?) Sinon j'avais ce pour un octetJapt ,
1513 octetséconomisé 2 octets grâce à @Shaggy
Testez-le en ligne!
La deuxième ligne peut être supprimée si nous sommes autorisés à remplir les lignes avec des valeurs nulles, économisant 4 octets.
Explication
la source
l;
parÊ
etmf_Ä
par®fÄ
.mf
semble juste fonctionner pour la deuxième ligne.mf
permettrait de se débarrasser de tous les zéros dans le résultat, malheureusement ...APL (Dyalog Unicode) ,
201916 octets SBCS-4 grâce à ngn.
Programme complet. Demande l'entrée de STDIN.
Essayez-le en ligne!
Explication avec un exemple de procédure pas à pas
⎕
invite pour l'entrée évaluée[[1,8,5],[7,5,4],[],[1]]
*
élever e à la puissance de cela ( e n qui garantit qu'il n'y aura pas de zéros)[[2.7,2981,148.4],[1096.6,148.4,54.6],[],[2.7]]
↑
mélanger les listes dans une seule matrice, avec des zéros:┌ ┐
│2.7E0 3.0E3 1.5E2│
│1.1E3 1.5E2 5.5E1│
│0.0E0 0.0E0 0.0E0│
│2.7E0 0.0E0 0.0E0│
└ ┘
⍉
transposer┌ ┐
│2.7E0 1.1E3 0.0E0 2.7E0│
│3.0E3 1.5E2 0.0E0 0.0E0│
│1.5E2 5.5E1 0.0E0 0.0E0│
└ ┘
⌽@×⍤1
inverser les éléments positifs de chaque ligne┌ ┐
│2.7E0 1.1E3 0.0E0 2.7E0│
│1.5E2 3.0E3 0.0E0 0.0E0│
│5.5E1 1.5E2 0.0E0 0.0E0│
└ ┘
⍉
transposer┌ ┐
│2.7E0 1.5E2 5.5E1│
│1.1E3 3.0E3 1.5E2│
│0.0E0 0.0E0 0.0E0│
│2.7E0 0.0E0 0.0E0│
└ ┘
↓
diviser la matrice en une liste de listes[[2.7,148.4,54.6],[1096.6,2981,148.4],[0,0,0],[2.7,0,0]]
0~¨⍨
supprimer les zéros de chaque liste[[2.7,148.4,54.6],[1096.6,2981,148.4],[],[2.7]]
⍟
un algorithme naturel[[1,5,4],[7,8,5],[],[1]]
la source
K4 , 36 octets
Solution:
Exemples:
Explication:
Celui-ci a été une douleur, et je travaille toujours à simplifier l'indexation élidé.
Au lieu d'indexer dans, par exemple,
x[0]
qui retournerait la première ligne , nous voulons prendre la première colonne , ce qui peut être fait en utilisantx[;0]
.Cependant la variable qui passe
y
dans lax[;]
traite comme faisantx[y]
pasx[;y]
bousculade d' où le::
là:x[::;]
.Cela équivaut à retourner la liste des listes, mais pour retourner, toutes les listes doivent être de longueur égale!
la source
Haskell , 174 octets
Essayez-le en ligne!
Non golfé / Explication
L'idée est d'envelopper tous les éléments
[]
et de remplir les lignes avec[]
(s'est avéré être plus court que le remplissage avec un entier négatif, cela permet également des entrées négatives, ce qui est bien), puis transposer, inverser toutes les lignes et transposer à nouveau et aplatir chaque ligne :* Cette fonction de transposition (
h
) renvoie simplement la liste s'il n'y a aucun élément.La fonction inverse doit ignorer les
[]
éléments (par exemple[[],[1],[],[3],[4]]
->[[],[4],[],[3],[1]]
), elle le fait en recevant deux arguments: le premier est les éléments dans l'ordre inverse (par exemple[4,3,1]
) et le second la ligne d'origine.la source
Python 2 ,
11110592 octetsEssayez-le en ligne!
la source
print
au lieu dereturn
pour enregistrer un octet.JavaScript (ES6),
7976 octetsEdit: sauvé 3 octets grâce à @ETHproductions.
la source
APL (Dyalog Unicode) , 27 octets SBCS
Essayez-le en ligne!
la source
@
mais je ne l'ai pas.Clojure, 123 octets
je m'attendais à
(+ nil)
à lever une exception, mais elle évalue ànil
: oCela fonctionne sans remplissage, au lieu de cela, il compte combien de lignes précédentes sont au moins aussi longues que la ligne actuelle
R
.la source