Étant donné une liste non plate d'entiers, affichez une liste de listes contenant les entiers dans chaque niveau d'imbrication, en commençant par le niveau le moins imbriqué, avec les valeurs dans leur ordre d'origine dans la liste d'entrée lors de la lecture de gauche à droite. Si deux ou plusieurs listes sont au même niveau d'imbrication dans la liste d'entrée, elles doivent être combinées en une seule liste dans la sortie. La sortie ne doit contenir aucune liste vide - les niveaux d'imbrication qui ne contiennent que des listes doivent être entièrement ignorés.
Vous pouvez supposer que les nombres entiers sont tous dans la plage (inclusive) [-100, 100]
. Il n'y a pas de longueur maximale ni de profondeur d'imbrication pour les listes. Il n'y aura pas de listes vides dans l'entrée - chaque niveau d'imbrication contiendra au moins un entier ou une liste.
L'entrée et la sortie doivent être dans la liste native / tableau / enumerable / iterable / etc de votre langue. format, ou dans tout format raisonnable et sans ambiguïté si votre langue n'a pas de type de séquence.
Exemples
[1, 2, [3, [4, 5], 6, [7, [8], 9]]] => [[1, 2], [3, 6], [4, 5, 7, 9], [8]]
[3, 1, [12, [14, [18], 2], 1], [[4]], 5] => [[3, 1, 5], [12, 1], [14, 2, 4], [18]]
[2, 1, [[5]], 6] => [[2, 1, 6], [5]]
[[54, [43, 76, [[[-19]]]], 20], 12] => [[12], [54, 20], [43, 76], [-19]]
[[[50]], [[50]]] => [[50, 50]]
Cases[#,_?AtomQ,{i}]~Table~{i,Depth@#}~DeleteCases~{}&
Cases[#,_?AtomQ,{i}]~Table~{i,Depth@#}/.{}->Nothing&
, 2 octets plus courtPython 2, 78 octets
la source
Rétine , 79
Je sais que les experts de la rétine joueront davantage au golf, mais voici un début:
Essayez-le en ligne.
la source
Mathematica
55 6462 octetsla source
JavaScript,
11280 octetsMerci Neil d'avoir aidé à raser 32 octets.
la source
!=null
denull
toute façon. Leb=
est également inutile. Après avoir supprimé cela, vous pouvez ensuite déplacer le.filter(a=>x)
vers le&&b
qui réduit ensuite la fonction externe à un appel à la fonction interne que vous pouvez ensuite incorporer. Je suis parti avec ceci:f=(a,b=[],c=0)=>a.map(d=>d[0]?f(d,b,c+1):b[c]=[...b[c]||[],d])&&b.filter(d=>d)
.d[0]?
évalueraitfalse
s'il était égal à0
, ce qui est dans la plage[-100,100]
. Et il en serait de mêmed=>d
d===+d
, car il enregistre 2 octets sur la vérification nulle.[...,[[...]]]
correctement le dernier cas (ou aucun cas avec )d=>d
est OK card
est toujours un tableau ou nul à ce point, mais un point juste concernantd[0]
, bien qu'il y ait toujoursd.map
ce qui sera vrai pour un tableau mais faux pour un nombre.Gelée, 24 octets
Essayez-le en ligne!
Si les listes séparées par des sauts de ligne étaient autorisées, cela pourrait être réduit à 14 octets .
Essayez-le en ligne!
la source
Python,
10899 octetsCela me semble un peu long, mais je ne pouvais pas raccourcir une ligne, et si j'essaie d'utiliser à la
or
place deif
, j'obtiens des listes vides dans les résultats.Essayez-le en ligne
Edit: 9 octets enregistrés grâce à Stack Overflow
la source
filter(None,o)
pour supprimer les listes vides qui se trouvent au niveau d'imbrication le plus à l'extérieur deo
.Python 3, 109 octets
Comme toujours, des fonctionnalités stupides de Python 2 comme comparer
int
s etlist
s signifient que Python 3 sort derrière. Tant pis...la source
Perl, 63 octets
Des entrées sont attendues en
@i
, des sorties produites en@o
. (J'espère que c'est acceptable).Exemple:
Sortie:
la source
Clojure, 119 octets
(116 avec seq? Et entrée sous forme de listes, une modification triviale)
Mieux destiné:
Lorsqu'il est appelé avec deux arguments (le niveau actuel et une collection), il crée une carte non ordonnée à un élément
{level: value}
ou appellef
manière récursive si un non-numéro (vraisemblablement une collection) est vu.Ces mini-cartes sont ensuite fusionnées en une seule
sorted-map
et les collisions clés sont traitées parconcat
fonction.vals
renvoie les valeurs de la carte du premier niveau au dernier.Si un nombre est le seul à son niveau, il reste un
vec
, d'autres sont convertis en listes parconcat
.Si l'entrée était un
list
au lieu devec
alorsnumber?
pourrait être remplacé parseq?
, curieusement le vecteur ne l'est passeq?
mais il l'estsequential?
. Mais je suis trop paresseux pour implémenter cette version, refaire des exemples, etc.la source
Raquette 259 octets
Non golfé:
Essai:
Sortie:
la source
MATL , 37 octets
Essayez-le en ligne!
Fonctionne avec la version actuelle (13.0.0) du langage / compilateur.
Cela produit la sortie sous forme de lignes de valeurs séparées par des espaces, où chaque ligne correspond au même niveau d'imbrication et différents niveaux d'imbrication sont séparés par des retours à la ligne.
la source