Ausgehend von einer geordneten Liste von Buchstabenfolgen in Groß- und Kleinschreibung (az XOR AZ), vor denen jeder Zeichenfolge 0 oder mehr Leerzeichen () vorangestellt sind, geben Sie dieselbe Liste aus, wobei die Zeichenfolgen auf jeder Einrückungsstufe sortiert sind. Einrückungstiefen unter verschiedenen übergeordneten Elementen werden zu Sortierzwecken als separate Listen gezählt.
Beispiel
Wenn Ihre Eingabe lautet:
bdellium
fox
hound
alien
aisle
wasabi
elf
alien
horseradish
xeno
irk
wren
tsunami
djinn
zebra
Ihre Ausgabe sollte sein
aisle
horseradish
xeno
wasabi
alien
elf
bdellium
alien
fox
hound
djinn
zebra
irk
tsunami
wren
Wenn Sie möchten, stellen Sie es sich wie eine Verzeichnisliste vor, und Sie müssen die Namen in jedem Verzeichnis sortieren.
Minutiae
- Ein Element kann durch eine beliebige Anzahl von Leerzeichen eingerückt werden. Wenn es mit derselben Anzahl von Leerzeichen eingerückt ist wie das vorherige Element, gehört es in dieselbe Sortierhierarchie wie das vorherige Element. Wenn es durch mehr Leerzeichen eingerückt wird, beginnt eine neue Unterhierarchie.
- Wenn eine Zeile um weniger Leerzeichen eingerückt ist als die darüber liegende Zeile, wird eine Verknüpfung zur nächstgelegenen Untergruppe mit dem gleichen # oder weniger Leerzeichen davor hergestellt (wie im obigen Beispiel der Meerrettich, der auf die darüber liegende Wasabi-Gruppe verweist, weil Wasabi ist der erste Artikel darüber, der nicht mehr Leerzeichen als Meerrettich enthält.)
- Sie müssen die Einrückungsstufe jedes Eingabeelements in Ihrer Ausgabe beibehalten
- Tabulatoren in der Ausgabe sind nicht zulässig
- Die erste Zeile der Eingabe wird niemals eingerückt
- Ihr Programm muss mindestens eine Zeichenfolge aus Groß- und Kleinbuchstaben verarbeiten. es muss nicht beides bewältigen.
Wertung
Dies ist ein Code-Golf , also gewinnt die Antwort, die die wenigsten Bytes verwendet.
['a','..b', '.c', '..d']
, was soll der Ausgang sein?['a','..b', '.c', '..d']
oder['a','.c','..b', '..d']
oder was anderes? (Ich benutze'.'
anstelle von Raum für visuelle Klarheit).Antworten:
Pyth , 23 Bytes
Probieren Sie es hier aus!
quelle
Python 2 , 117 Bytes
Probieren Sie es online!
Nimmt als Eingabe eine Liste von Zeichenketten; und gibt eine Liste von Strings aus, die nach Bedarf sortiert sind.
Die Idee ist, jedes Element in eine Liste zu verwandeln, die den "absoluten Pfad" als Liste enthält. und lassen Sie dann Python die Sortierung übernehmen. ZB wenn die Eingabe ist:
Dann
reduce()
konvertieren wir über die in eine Liste von Listen:was sortiert wird als:
und dann das letzte Element jeder Liste in der Liste der Listen ausgeben, um Folgendes zu erhalten:
quelle
APL (Dyalog Unicode) , 31 Byte SBCS
Anonymes Präfix Lambda, nimmt eine Liste von Zeichenfolgen auf und gibt sie zurück.
Probieren Sie es online!
{
...}
"dfn";⍵
ist ein Argument⍵[
…]
Indexiere das Argument mit folgenden Indizes:' '(
…)¨⍵
Wende die folgende implizite Funktion auf jeden String mit Leerzeichen als linkem Argument an:,
Verketten Sie das Leerzeichen mit der Zeichenfolge⊣=
Boolesche Liste, die angibt, wo das Leerzeichen für jedes Zeichen gleich ist,⊂⍨
Verwenden Sie diese Option, um die Verkettung von Leerzeichen und Zeichenfolge zu partitionieren (wobei der Teil mit true beginnt)↑
mischen Sie Liste von Listen von Zeichenfolgen in Matrix von Zeichenfolgen{
…}⍀
Vertikale kumulative Reduktion um dieses "dfn";⍺
und⍵
sind obere und untere Argumente:≢⍵
die Länge der unteren Zeichenfolge1=
ist das gleich 1? (dh gibt es dort nichts als den einzelnen Raum?):⍺
Wenn ja, geben Sie das obere Argument zurück⋄⍵
Andernfalls geben Sie das untere Argument zurück⍋
grade up (finde Indizes, die das sortieren)quelle
Netzhaut , 47 Bytes
Probieren Sie es online! Hinweis: Mehrere Zeilen haben nachgestellte Leerzeichen. Erläuterung:
Der erste Schritt besteht darin, jedes Wort in die folgenden Zeilen mit demselben Einzug einzufügen. Zum Beispiel mit den Linien
aisle
,wasabi
undelf
die sich daraus ergebenden Linien sindaisle
,aisle wasabi
undaisle wasabi elf
. Ich habe diesen regulären Ausdruck durch Ausprobieren entdeckt, daher kann es zu Randfällen kommen.Wir können die Zeilen jetzt unabhängig von Groß- und Kleinschreibung sortieren.
Löschen Sie alle eingefügten Wörter.
quelle
Perl 6 ,
120 83 81 63 54 37 4742 Bytes-5 bytes dank nwellnhof
Probieren Sie es online!
Dies verwendet die Methode von Chas Brown . Ein anonymer Codeblock, der eine Liste von Zeilen aufnimmt und eine Liste von Zeilen zurückgibt.
Erläuterung:
quelle
{my@a;.sort:{@a[+.comb(' ')...*>@a]=$_;~@a}}
erforderlich, um höhere Einrückungsstufen zu unterstützen.Sauber ,
112101 BytesProbieren Sie es online!
Anonyme Funktion,
:: [[Char]] -> [[Char]]
die$ :: [[Char]] -> [[[Char]]]
in das richtige Ausgabeformat übergeht.$
gruppiert die Zeichenketten in "mehr Leerzeichen als" und "alles andere danach", rekursiert über jede Gruppe und sortiert sie, wenn sie benachbart sind. Bei jedem Schritt sieht die sortierte Liste folgendermaßen aus:Sauber , 127 Bytes
Probieren Sie es online!
Definiert die Funktion,
$ :: [[Char]] -> [[Char]]
die die Zeichenfolgen in Tupel(spaces, letters)
aufteilt, die von der Hilfsfunktion rekursiv sortiert werden? :: [([Char],[Char])] -> [[([Char],[Char])]]
.Erklärt:
quelle
JavaScript (Node.js) ,
1141009288 ByteProbieren Sie es online!
Ähnliches Vorgehen wie bei Chas Browns Python-Antwort, jedoch mit regulären Ausdrücken.
Erläuterung
quelle
K4 , 51 Bytes
Lösung:
Beispiel:
Annahmen:
ein. Dass jede Hierarchie mit der niedrigsten Ebene beginnt, dh Sie erhalten nicht:
Erläuterung:
quelle
Perl 5, 166 Bytes
Ungolfed (Art):
Es ist eine ziemlich einfache rekursive Implementierung. Wir überprüfen die Einrückungsstufe, indem wir nach dem ersten Nicht-Leerzeichen (
/\S/
) suchen und dessen Index ($-[0]
) abrufen . Leider müssen wir tatsächlich eine Handvoll Variablen deklarieren , die in der Rekursion verwendet werden, oder sie sind implizit global und die Rekursion funktioniert nicht richtig.quelle