Heilige Kriege wurden um Leerzeichen und Tabulatoren geführt. (Und natürlich haben Räume gewonnen, die objektiv überlegen sind.) - Alex A.
S ome peo p le noch weigern , zu einem ccept dass WHI c h cl e arly s upreme. Sie haben gerade erhalten eine Datei mit dem incor re ct, b Anzeige und inf e rior Form von WHI t espace, und jetzt t er cont e nts der Datei ein r e verdorben und ruiniert.
Sie können der Person, die die Datei an Sie gesendet hat, auch zeigen, wie falsch sie ist - und zwar mit Gewalt.
Beschreibung
Wie der Titel schon sagt, besteht Ihre Herausforderung darin, eine Datei zu erstellen, die eine oder mehrere Registerkarten enthält:
this is an evil tab onoes
und sie rücksichtslos in Stücke zerschmettern:
this is an evil tab
o
n
o
e
s
Beachten Sie, dass die Stack Exchange-Software Literal-Registerkarten in vier Leerzeichen umwandelt (weil es richtig ist), sodass Registerkarten in diesem Beitrag als vier Leerzeichen angezeigt werden. Die Eingabe in Ihr Programm enthält jedoch die eigentlichen Registerkarten.
Herausforderung
Die Lösung sollte eine einzelne Zeichenfolge als Eingabe verwenden, die druckbare ASCII-Zeichen, Zeilenumbrüche und Tabulatoren enthalten kann. In der Eingabe ist immer mindestens ein Tab enthalten.
Die Ausgabe sollte dieselbe Zeichenfolge sein und die folgenden Regeln enthalten:
Starten Sie den Cursor bei Koordinaten (0,0) und mit einer Richtung nach rechts. Die Koordinaten sind (Spalte, Zeile), mit einem Index von Null, und in welche Richtung soll der Cursor nach dem Drucken eines Zeichens bewegt werden.
Für jedes Zeichen in der Zeichenfolge:
Wenn es sich um eine neue Zeile handelt, gehen Sie zu den Koordinaten (0, n), wobei n die Anzahl der neuen Zeilen in der Zeichenfolge ist (einschließlich dieser), und setzen Sie die Richtung nach rechts zurück.
Wenn es sich um eine Registerkarte handelt, geben Sie zwei Leerzeichen aus, drehen Sie den Cursor um 90 Grad im Uhrzeigersinn und geben Sie zwei weitere Leerzeichen aus, wodurch die Registerkarte in zwei Hälften geteilt wird. Hier ist ein visuelles Beispiel, in dem eine Registerkarte als
--->
und Leerzeichen als dargestellt wird·
:foo--->bar--->baz
wird
foo··· · b a r · · zab··
Ansonsten geben Sie einfach das Zeichen am Cursor aus und bewegen den Cursor einen Schritt in die aktuelle Richtung.
Da Sie die Zeichenfolge von Anfang bis Ende lesen, müssen Sie möglicherweise "über" vorhandene Zeichen schreiben. Dies ist in Ordnung. Zum Beispiel die Eingabe
foo--->bar
spaces are superior
sollte zu einer Ausgabe von führen
foo
b
spaces are superior
r
Sie können wählen, ob "kaputte Tabulatoren" andere Zeichen überschreiben sollen - die ursprüngliche Absicht war, dass sie dies nicht tun, aber die Spezifikation war nicht eindeutig. Dies ist also Ihre Entscheidung.
Nachdem Sie diese Regeln angewendet haben, können Sie dies auch tun
Fügen Sie so viele Leerzeichen hinzu oder entfernen Sie sie, wie Sie möchten.
Fügen Sie maximal eine einzelne nachgestellte Zeile hinzu.
Die Eingabe enthält niemals nachgestellte Leerzeichen. Es wird auch niemals führende oder nachfolgende Zeilenumbrüche enthalten. Sie können auch immer davon ausgehen, dass Sie niemals in eine Spalte oder Zeile schreiben müssen, die kleiner als 0 ist (dh außerhalb des Bildschirms).
Testfall
Tabs werden in diesem Testfall so dargestellt, --->
weil sie sonst von SE verschlungen werden.
Eingang:
Test case. Here's a tab--->there's a tab--->everywhere a tab--->tab--->this is some more text
blah
blah
blah blah blah blah blah blah--->blaah--->blaah--->blah--->blaaaaah--->blah--->blah--->blah--->blah--->blah
Ausgabe:
Test case. Here's a tab
blah
blah t
blah blah blah blah blah blah
blaablah
r b
e l b
h 'h a l
a sa a a
l l h h
this is some mobe tbxt
haalhalb
b a
a b
t
bat a erehwyreve
Ausgefallene Animation:
Regeln
- Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
(0,0)
müssen wir dann zuerst die Konsole leeren, oder meinen Sie damit nur die Standardposition des Cursors?