Konvertieren Sie eine klassische Verzeichnisstruktur wie folgt:
config.yml
drafts
begin-with-the-crazy-ideas.textile
on-simplicity-in-technology.markdown
includes
footer.html
header.html
Das mögen
.
├── config.yml
├── drafts
| ├── begin-with-the-crazy-ideas.textile
| └── on-simplicity-in-technology.markdown
└── includes
├── footer.html
└── header.html
- Vier Leerzeichen geben einen verschachtelten Ordner oder eine verschachtelte Datei des obigen Verzeichnisses an.
- Die zulässigen Ebenen für verschachtelte Kategorien können variieren.
Aktualisieren
- Dateinamen : gültig Linux Dateinamen ohne Leerzeichen und Zeilenumbrüche: alle Byte außer
NUL
,/
undspaces
,linefeeds
- Zeichen zeichnen:
- | vertikale Linie (U + 007C)
- ─ Boxzeichnungen leuchten horizontal (U + 2500)
- ├ Box Zeichnungen Licht vertikal und rechts (U + 251C)
Gewinner : Der kürzeste Code in Bytes gewinnt!
Antworten:
Netzhaut , 88 Bytes
Probieren Sie es online aus!
Ich nehme an, ich könnte dies technisch als ein Byte pro Zeichen zählen, indem ich einige Zeichen austausche, die Quelle als ISO 8859-1 lese und dann eine Einzelbyte-Codierung für die Ausgabe finde, die
├
und enthält└
, aber ich kann nicht arbeiten jetzt die Details heraus. (Für den Datensatz wären das 72 Bytes.)Erläuterung
Stufe 1: Substitution
Wir beginnen mit dem Abgleichen der Einrückung in jeder Zeile und dem Einfügen
├──
.Stufe 2: Substitution
Als nächstes passen wir jede Gruppe von 4 Feldern an und ersetzen das erste durch ein
|
. Jetzt muss nur noch|
das behoben werden, was am Ende der Ausgabe steht, und├
das sollte auch so sein└
. Beide Fälle können erkannt werden, indem Sie den Charakter direkt unter dem betrachten, den wir möglicherweise ändern möchten.Stufe 3: Transliteration
Die
(?<=(.)*)
Anzahl der Zeichen, die der Übereinstimmung in der aktuellen Zeile vorausgehen, um die horizontale Position zu messen. Dann werden die Look - Ahead springt in die nächste Zeile mit.+¶
, Streichhölzer so viele Zeichen wie wir in der Gruppe aufgenommen haben1
mit(?>(?<-1>.)*)
(zu vorher auf die gleiche horizontale Position) und dann überprüft , ob das nächste Zeichen (dh die unter dem eigentlichen Spiel) ist eine der|├└
. Wenn dies der Fall ist, schlägt das Match fehl und in allen anderen Fällen ist es erfolgreich und die Bühne ersetzt Leerzeichen für|
und└
für├
.Dadurch werden nicht alle Zeichen in einem Durchgang behoben. Daher wenden wir diese Phase wiederholt mit der
+
Option an, bis sich die Ausgabe nicht mehr ändert.Stufe 4: Substitution
Alles, was übrig bleibt, ist die erste Zeile, also passen wir einfach den Anfang der Zeichenfolge an und stellen einen
.
und einen Zeilenvorschub voran.quelle
+`(?<=(.*))\|(?!.+¶\1[|├])
(Raum) zu verwenden+`(?<=(.*))├(?!.+¶\1[│├└])
└
?m`^ *
$&└──
T+` └`|├`(?<=(.*)).(?=.+¶\1[|└])
JavaScript (ES6),
237128 ByteWobei
\n
das wörtliche Zeilenumbruchzeichen steht. Erläuterung: Wirdr
erstellt,s
indem die.
Zeile vorangestellt und└──
am Ende des Einzugs jeder Zeile eingefügt wird. Dies ist jetzt für die letzte Zeile der Eingabe korrekt, aber jede└
muss so weit wie möglich nach oben "erweitert" werden. Dies ist die Aufgabe vonq
, die nach a sucht└
und die Leerzeichen direkt darüber rekursiv durch|
s ersetzt, es sei denn, es erreicht ein anderes└
, in das├
stattdessen verwandelt wird. Die Rekursion endet, wenn keine weiteren Ersetzungen vorgenommen werden können. Beachten Sie, dass wenn das Zeichen über dem└
ein Leerzeichen oder ein Leerzeichen└
ist, der Text links von└
immer immer der gleiche ist wie der in der vorherigen Zeile, sodass ich ihn einfach verwenden kann\1
um zu testen, ob das eine Zeichen über dem anderen liegt.quelle