m`^ *
$&├──
{4}
|
T+`|├` └`(?<=(.)*).(?!.+¶(?>(?<-1>.)*)[|├└])
^
.¶
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
m`^ *
$&├──
Wir beginnen mit dem Abgleichen der Einrückung in jeder Zeile und dem Einfügen ├──.
Stufe 2: Substitution
{4}
|
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
T+`|├` └`(?<=(.)*).(?!.+¶(?>(?<-1>.)*)[|├└])
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 haben 1mit (?>(?<-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.