Contribution
Un tableau qui peut contenir des tableaux ou des entiers positifs, consécutifs et ascendants. Les tableaux peuvent avoir n'importe quel nombre de tableaux à l'intérieur d'eux, et ainsi de suite. Aucun tableau ne sera vide.
Sortie
Ce tableau simplifié
Comment simplifier un tableau
Nous utiliserons le tableau, [1, [2, 3], [[4]], [[[5, 6], 7, [[[8]]]], 9]]
comme exemple.
Tout d'abord, nous vérifions la profondeur d'imbrication des valeurs. Voici les profondeurs et les nombres à ces profondeurs:
0 1
1 2 3 9
2 4 7
3 5 6
5 8
Nous construisons le tableau de sortie en prenant les nombres dans le tableau d'origine, en les regroupant en fonction de leur profondeur d'imbrication, puis en imbriquant les groupes à la profondeur de la profondeur d'origine de leurs éléments. Disposez les nombres par ordre croissant et par profondeur croissante.
Donc, notre sortie est [1, [2, 3, 9], [[4, 7]], [[[5, 6]]], [[[[[8]]]]]]
Exemples
[1, [2, 3], [[4]], [[[5, 6], 7, [[[8]]]], 9]] -> [1, [2, 3, 9], [[4, 7]], [[[5, 6]]], [[[[[8]]]]]]
[[[1]], [2, [3]], 4, [5, [6, [7, [8], [9, [[10]]]]]]] -> [4, [2, 5], [[1, 3, 6]], [[[7]]], [[[[8, 9]]]], [[[[[[10]]]]]]]
[1] -> [1]
[1, [2], [[3]], [[[4]]], [[[[5]]]]] -> [1, [2], [[3]], [[[4]]], [[[[5]]]]]
[1, [[[[2], 3]]] [[4]]] -> [1, [[4]], [[[3]]], [[[[2]]]]]
la source
8
de la ligneSo, our output is.....
. Cependant, vous l'avez corrigé dans l'extrait d'exemples.[1, [2, 3, 9], [[4, 7]], [[[5, 6]]], [[[[]]]], [[[[[8]]]]]]
?Réponses:
Gelée , 8 octets
La sortie est d'un niveau par ligne, avec des lignes vides pour les niveaux sans éléments. Essayez-le en ligne!
Comment ça marche
la source
JavaScript (ES6),
139109 octetsExplication à l'aide de l'exemple d'entrée:
v
est une méthode d'assistance qui renvoie les tableaux (avec paramètre1
) ou les valeurs (sans paramètre). Commençons para = [1, [2, 3], [[4]], [[[5, 6], 7, [[[8]]]], 9]]
ce qui n'est pas vide. Nous filtrons les tableaux, donnant[1]
. Nous nous appelons alors récursivement sur les tableaux concaténés ensemble, ce qui est[2, 3, [4], [[5, 6], 7, [[[8]]]], 9]
, le résultat étant[2, 3, 9, [4, 7], [[5, 6]], [[[[8]]]]]
. Nous filtrons à nouveau les tableaux, ce qui nous donne le deuxième terme de notre sortie[2, 3, 9]
, mais nous devons faire attention à ne pas insérer de tableau vide ici. Il leur reste pour envelopper les tableaux à l'[4, 7], [[5, 6]], [[[[8]]]]
intérieur des tableaux et les ajouter à la sortie, résultant en[1, [2, 3, 9], [[4, 7]], [[[5, 6]]], [[[[[8]]]]]]
.la source
filter
. Peut-être commencer parF=(x,y)=>x.filter(y)
[].concat(...v(1))
avecv(1)
pour économiser 14 octets. Il y a probablement quelques autres choses aussi, mais j'ai du mal à garder une trace des parenthèses imbriquées dans ma tête.[].concat(...v(1))
est une bête très différentev(1)
, sinon je ne le ferais pas! Pour un exemple simple, considéreza = [2, [3], [[4]]]
alorsv(1) = [[3], [[4]]]
mais[].concat(...v(1)) = [3, [4]]
.05AB1E ,
27262521 octetsEssayez-le en ligne! (légèrement modifié car il
.g
n'est pas encore sur TIO)Explication
La stratégie principale consiste à parcourir chaque niveau possible du tableau imbriqué et à imprimer tous les chiffres sur une ligne, tout en conservant les non-chiffres (listes) dans une liste un niveau de moins imbriqué.
la source
Perl, 52 octets
Juste un sous-programme récursif. (inhabituel pour une réponse Perl, je sais ..)
Appelez ça comme ça:
Chaque ligne de la sortie correspond à un niveau de profondeur du tableau (d'où la ligne vide dans l'exemple ci-dessus).
Il peut être transformé en un programme complet pour quelques octets de plus: ajoutez un
-n
indicateur et uneval
(à l'intérieur@{ }
pour transformer l'entrée en tableau et non un tableauref) pour transformer l'entrée en tableau Perl:Mon approche précédente était légèrement plus longue (65 octets), mais toujours intéressante, alors je vais la laisser ici:
la source
JavaScript (ES6) 121
144 152modifier beaucoup révisé, 1 octet enregistré thx Patrick Roberts, et 21 autres en examinant simplement le code
Fonction récursive travaillant sur les tableaux en entrée et en sortie. Je ne suis pas comme la demande d'avoir des éléments en profondeur 1 comme éléments individuels dans le réseau de sortie (tandis que des niveaux plus élevés sont regroupés en un élément)
[l1,l1, [l2...], [[l3...]] ]
. Bien que ce soit plus direct:[ [l1...], [[l2...]], [[[l3...]]] ]
Ajout d'une nouvelle ligne pour plus de lisibilité.
Quelques remarques: la ligne 2 est évaluée encore et encore à chaque appel récursif, mais seule la dernière itération en fin de récursivité est utile.
Le traitement spécial
d==0
en ligne 2 s'occupe de l'anomalie pour les éléments de niveau 1.La
n
fonction récursive gère l'imbrication du tableau en sortieTester
la source
v[0]
place dev.map
. Enregistre 1 octet.JavaScript (ES6) 168 octets
Démo
la source
PHP, 145 octets
Panne
la source
Pyth,
1916 octetsEssayez-le en ligne. Suite de tests.
Notez l'espace de tête. Affiche les niveaux sur des lignes comme la réponse Perl.
Explication
Q
.f
ilter les articlesT
deQ
:s
um estI
sur la dentitéT
.p
rintT
plus un espace+
…d
.s
euh les articles. Cela supprime une couche de tableaux de chaque élément. S'il n'en reste plus, les rendements0
.=
le résultat àQ
.W
hile le résultat n'est pas vide, imprimez la chaîne videk
et une nouvelle ligne.la source
Haskell,
124123 octetsComme Haskell ne prend pas en charge les listes mixtes (entiers et liste d'entiers) par défaut, je définis un type de liste personnalisé
L
. Exemple d'utilisation:Remarque: l'exécution prend un certain temps, car elle parcourt tous les Ints positifs (32 ou 64 bits) pour rechercher un niveau d'imbrication aussi profond. Aussi: le type de liste personnalisé ne peut pas être imprimé par défaut, donc si vous voulez voir le résultat comme dans l'exemple ci-dessus, vous devez ajouter
deriving Show
à ladata
déclaration (->data L=I Int|R[L] deriving Show
). Parce qu'il n'est pas nécessaire pour renvoyer une liste L à partir d'une fonction, je ne compte pas les octets.Comment ça marche:
Modifier @BlackCap enregistré un octet en passant d'
>>=
à lado
notation. Merci!la source
h l=R$do d<-[1..];[i|(e,i)<-0#l,d==e]!d
JavaScript (ES6),
127137134 octetsPrend un tableau en entrée et renvoie une chaîne.
Cas de test
Afficher l'extrait de code
la source