Avec une liste ordonnée de chaînes de lettres de même casse (az XOR AZ) où chaque chaîne est précédée de 0 ou plusieurs caractères space (), affiche la même liste mais avec les chaînes triées à chaque niveau d'indentation. Les profondeurs d'indentation sous différents parents sont considérées comme des listes distinctes à des fins de tri.
Exemple
Si votre contribution est:
bdellium
fox
hound
alien
aisle
wasabi
elf
alien
horseradish
xeno
irk
wren
tsunami
djinn
zebra
votre sortie devrait être
aisle
horseradish
xeno
wasabi
alien
elf
bdellium
alien
fox
hound
djinn
zebra
irk
tsunami
wren
Si vous le souhaitez, considérez-le comme une liste de répertoires et vous devez trier les noms dans chaque répertoire.
Menus détails
- Un élément peut être mis en retrait par un nombre quelconque d'espaces. S'il est mis en retrait par le même nombre d'espaces que l'élément précédent, il appartient à la même hiérarchie de tri que l'élément précédent. S'il est mis en retrait par plus d'espaces, c'est le début d'une nouvelle sous-hiérarchie.
- Si une ligne est mise en retrait par moins d’ espaces que la ligne située au-dessus, elle est reliée au sous-groupe le plus proche situé au-dessus d’elle avec le même # ou moins d’espaces devant elle (comme le raifort dans l’exemple ci-dessus, qui est relié au groupe wasabi situé au-dessus d’elle, car le wasabi est le premier article au-dessus à ne pas avoir plus d’espace que le raifort)
- Vous devez conserver le niveau d'indentation de chaque élément d'entrée dans votre sortie.
- Les onglets dans la sortie sont interdits
- La première ligne de l'entrée ne sera jamais mise en retrait
- Votre programme doit gérer au moins une chaîne parmi les chaînes toutes majuscules et minuscules; il n'a pas à gérer les deux.
Notation
C'est un code-golf , donc la réponse qui utilise le moins d'octets gagne.
['a','..b', '.c', '..d']
, quelle devrait être la sortie?['a','..b', '.c', '..d']
ou['a','.c','..b', '..d']
ou quelque chose d'autre? (J'utilise'.'
au lieu de l'espace pour la clarté visuelle).Réponses:
Pyth , 23 octets
Essayez-le ici!
la source
Python 2 , 117 octets
Essayez-le en ligne!
Prend en entrée une liste de chaînes; et génère une liste de chaînes, triées selon les besoins.
L'idée est de transformer chaque élément en une liste contenant le "chemin absolu" sous forme de liste; puis laissez Python gérer le tri. Par exemple, si l'entrée est:
Ensuite, via
reduce()
, nous convertissons en une liste de listes:qui est trié comme:
puis affichez le dernier élément de chaque liste dans la liste de listes pour obtenir:
la source
APL (Dyalog Unicode) , 31 octets SBCS sur
Le préfixe anonyme lambda, prend et retourne la liste des chaînes.
Essayez-le en ligne!
{
…}
"Dfn";⍵
est l'argument⍵[
…]
Indexez l'argument avec les index suivants:' '(
…)¨⍵
Applique la fonction tacite suivante à chaque chaîne avec un espace comme argument de gauche:,
concaténer l'espace à la chaîne⊣=
Liste booléenne indiquant où l'espace est égal à chaque caractère qui,⊂⍨
utiliser cela pour partitionner (commencer partie où true) la concaténation d'espace et de chaîne↑
mélanger la liste des chaînes de caractères dans la matrice de chaînes{
…}⍀
Réduction verticale cumulative par ce "dfn";⍺
et⍵
sont les arguments supérieur et inférieur:≢⍵
la longueur de la ficelle inférieure1=
est-ce égal à 1? (c.-à-d. n'y a-t-il que l'espace unique?):⍺
si c'est le cas, retourne l'argument supérieur⋄⍵
sinon, retourne l'argument inférieur⍋
améliorer le niveau (trouver des indices qui vont trier cela)la source
Retina , 47 octets
Essayez-le en ligne! Remarque: plusieurs lignes comportent des espaces de fin. Explication:
La première étape consiste à insérer chaque mot dans les lignes suivantes à la même indentation. Par exemple, avec les lignes
aisle
,wasabi
etelf
les lignes résultantes sontaisle
,aisle wasabi
etaisle wasabi elf
. J'ai découvert cette expression régulière par essais et erreurs, de sorte qu'il peut y avoir des cas extrêmes.Nous pouvons maintenant trier les lignes sans distinction de casse.
Supprimer tous les mots insérés.
la source
Perl 6 ,
120 83 81 63 54 37 4742 octets-5 octets grâce à nwellnhof
Essayez-le en ligne!
Cette utilise la méthode de Chas Brown . Un bloc de code anonyme qui prend une liste de lignes et renvoie une liste de lignes.
Explication:
la source
{my@a;.sort:{@a[+.comb(' ')...*>@a]=$_;~@a}}
est nécessaire pour prendre en charge des niveaux d'indentation plus élevés.Propre ,
112101 octetsEssayez-le en ligne!
Fonction anonyme
:: [[Char]] -> [[Char]]
qui enveloppe$ :: [[Char]] -> [[[Char]]]
le bon format de sortie.$
regroupe les chaînes dans "plus d'espaces que" et "tout le reste après", revient sur chaque groupe et trie les éléments adjacents. A chaque étape, la liste en cours de tri se présente comme suit:Propre , 127 octets
Essayez-le en ligne!
Définit la fonction
$ :: [[Char]] -> [[Char]]
qui sépare les chaînes en tuples sous la forme(spaces, letters)
qui sont triées de manière récursive par la fonction d'assistance? :: [([Char],[Char])] -> [[([Char],[Char])]]
.A expliqué:
la source
JavaScript (Node.js) ,
1141009288 octetsEssayez-le en ligne!
Approche similaire à la réponse Python de Chas Brown, mais utilisant plutôt des expressions régulières.
Explication
la source
K4 , 51 octets
Solution:
Exemple:
Hypothèses:
une. Que chaque hiérarchie commence par le niveau le plus bas, c'est-à-dire que vous n'obtiendrez pas:
Explication:
la source
Perl 5, 166 octets
Ungolfed (en quelque sorte):
C'est une implémentation assez simple et récursive. Nous vérifions le niveau d'indentation en recherchant le premier caractère non espace (
/\S/
) et en obtenant son index ($-[0]
). Malheureusement, nous devons en fait déclarer une poignée de variables utilisées dans la récursion, sinon elles seront implicitement globales et la récursivité ne fonctionnera pas correctement.la source