Einige Leute bestehen darauf, Leerzeichen für Tabellierung und Einrückung zu verwenden.
Für die Tabellierung ist das unbestreitbar falsch. Per Definition müssen Tabulatoren für die Tabellierung verwendet werden.
Auch beim Einrücken sind Tabulatoren objektiv überlegen:
In der Stack Exchange-Community besteht ein klarer Konsens .
Die Verwendung eines einzelnen Einrückungsbereichs ist visuell unangenehm. mehr als eine zu verwenden ist verschwenderisch.
Da alle Dorsch
e Golfers wissen, Programme sollten so kurz wie möglich sein. Dies spart nicht nur Festplattenspeicher, sondern auch Kompilierungszeiten, wenn weniger Bytes verarbeitet werden müssen.Durch Anpassen der Registerbreite 1 sieht dieselbe Datei auf jedem Computer anders aus, sodass jeder seine bevorzugte Einzugsbreite verwenden kann, ohne die eigentliche Datei zu ändern.
Alle guten Texteditoren verwenden standardmäßig Tabulatoren (und Definitionen).
Ich sage es und ich habe immer Recht!
Leider hört nicht jeder auf die Vernunft. Jemand hat Ihnen eine Datei geschickt, die es falsch macht TM und Sie müssen es reparieren. Du könntest es einfach manuell machen, aber es wird andere geben.
Es ist schon schlimm genug, dass Spacer Ihre kostbare Zeit verschwenden, und Sie entscheiden sich, das kürzestmögliche Programm zu schreiben, um das Problem zu beheben.
Aufgabe
Schreiben Sie ein Programm oder eine Funktion, die Folgendes bewirkt:
Lesen Sie eine einzelne Zeichenfolge entweder aus STDIN oder als Befehlszeilen- oder Funktionsargument.
Identifizieren Sie alle Stellen, an denen Leerzeichen für die Tabellierung oder Einrückung verwendet wurden.
Ein Leerzeichen ist ein Einzug, wenn er am Anfang einer Zeile steht.
Eine Folge von zwei oder mehr Leerzeichen ist eine Tabellierung, wenn es sich nicht um Einrückungen handelt.
Ein einzelnes Leerzeichen, das kein Einzug ist, wurde möglicherweise nicht für die Tabellierung verwendet. Wenn Sie dasselbe Zeichen für verschiedene Zwecke verwenden, gibt es erwartungsgemäß keine einfache Möglichkeit, dies zu erkennen. Deshalb werden wir sagen, dass der Raum für Verwirrung benutzt worden ist .
Bestimmen Sie die längste mögliche Tabulatorbreite 1, für die alle für Tabulatoren oder Einrückungen verwendeten Leerzeichen durch Tabulatoren ersetzt werden können, ohne das Erscheinungsbild der Datei zu ändern.
Wenn die Eingabe weder Tabulatoren noch Einrückungen enthält, kann die Tabulatorenbreite nicht bestimmt werden. Überspringen Sie in diesem Fall den nächsten Schritt.
Ersetzen Sie unter Verwendung der zuvor festgelegten Tabulatorbreite alle für die Tabellierung oder Einrückung verwendeten Leerzeichen durch Tabulatoren.
Ersetzen Sie außerdem, wann immer dies möglich ist, ohne das Erscheinungsbild der Datei zu ändern, alle Leerzeichen, die zur Verwechslung verwendet werden, durch Tabulatoren. (Wenn Sie Zweifel haben, entfernen Sie Leerzeichen.)
Geben Sie den geänderten String aus Ihrer Funktion zurück oder drucken Sie ihn an STDOUT.
Beispiele
Alle Räume von
a bc def ghij
sind tabellarisch.
Bei jedem Durchlauf von Leerzeichen wird die vorhergehende Zeichenfolge mit Nicht-Leerzeichen bis zu einer Breite von 5 aufgefüllt, sodass die richtige Tabulatorbreite 5 und die richtige Ausgabe 2 ist
a--->bc-->def->ghij
Die ersten beiden Räume von
ab cde f ghi jk lm
sind tabellarisch, die anderen verwirrt.
Die richtige Registerbreite ist 4, die richtige Ausgabe 2 also
ab->cde>f ghi>jk lm
Das letzte Leerzeichen bleibt unangetastet, da es als zwei Leerzeichen dargestellt wird, wenn es durch einen Tabulator ersetzt wird:
ab->cde>f ghi>jk->lm
Alle bis auf ein Leerzeichen
int main( ) { puts("TABS!"); }
sind Einrückung, der andere ist Verwirrung.
Die Einbuchtung Ebene 0, 4 und 8 Felder, so dass die korrekte Tabulatorbreite 4 ist und die korrekte Ausgabe 2 ist
int --->main( ) --->{ --->--->puts("TABS!"); --->}
Das Feld in
( )
würde als drei Felder dargestellt, wenn es durch einen Tabulator ersetzt würde. Es bleibt also unberührt.Die ersten beiden Räume von
x yz w
sind Einrückung, die anderen Verwirrung.
Die richtige Registerbreite ist 2 und die richtige Ausgabe 2 ist
->x>yz w
Das letzte Leerzeichen wird als zwei Leerzeichen dargestellt, wenn es durch einen Tabulator ersetzt wird. Es bleibt also unberührt.
Die ersten beiden Räume von
xy zw
sind Einrückungen, die anderen drei sind Tabellierungen.
Nur eine Tabulatorbreite von 1 erlaubt es, alle Leerzeichen zu entfernen, sodass die richtige Ausgabe 2 vorliegt
>>xy>>>zw
Alle Räume von
a b c d
sind Verwirrung.
Es gibt keine möglichst lange Tabulatorbreite, so dass die korrekte Ausgabe 2 ist
a b c d
Zusätzliche Regeln
Die Eingabe besteht ausschließlich aus druckbaren ASCII-Zeichen und Zeilenvorschüben.
Sie können davon ausgehen, dass maximal 100 Textzeilen und maximal 100 Zeichen pro Zeile vorhanden sind.
Wenn Sie STDOUT für die Ausgabe wählen, können Sie einen einzelnen nachgestellten Zeilenvorschub drucken.
Es gelten die Standardregeln für Code-Golf .
1 Die Tabulatorbreite ist definiert als der Abstand in Zeichen zwischen zwei aufeinander folgenden Tabulatoren unter Verwendung einer monospaced Schriftart.
2 Die ASCII-Kunstpfeile stellen die Tabulatoren dar, die Stack Exchange nicht ordnungsgemäß rendern kann, für die ich einen Fehlerbericht eingereicht habe. Die eigentliche Ausgabe muss eigentliche Tabulatoren enthalten.
programs should be as short as possible
Ich glaube, ich habe Arthur Whitneys längst verschollenen Bruder gefunden !!