Schreiben Sie ein Programm, das Leerzeichen hinzufügt oder entfernt, um Code gut zu formatieren. Regeln, wie der Code aussehen soll, wenn Sie fertig sind:
- Keine Zeile sollte mehr als eine von
{
und enthalten}
. - A
{
sollte immer das Letzte in einer Zeile sein. - A
}
sollte immer das einzige in einer Zeile sein (außer Leerzeichen, die davor stehen). - Die Anzahl der Leerzeichen vor jeder Zeile sollte ein festes Vielfaches der aktuellen Verschachtelungszahl sein. (Sie können beliebig viele Einrückungen verwenden, solange sich dies nicht ändert.)
- Es sollten keine Leerzeichen eingefügt oder entfernt werden, die nicht zur Erfüllung einer dieser Regeln beitragen.
Die Verschachtelungsanzahl für die erste Zeile ist 0. Die Verschachtelungsanzahl einer anderen Zeile ist die Verschachtelungsanzahl der vorherigen Zeile plus eins, wenn die vorherige Zeile a enthält {
, minus eins, wenn die aktuelle Zeile a enthält }
.
{
und }
innerhalb von String-Literalen und Kommentaren zählen in den obigen Regeln nicht. Ein Zeichenfolgenliteral ist Text in einfachen oder doppelten Anführungszeichen, wobei einfache oder doppelte Anführungszeichen mit einer ungeraden Anzahl von Backslashes unmittelbar davor nicht als Ende des Zeichenfolgenliterals interpretiert werden. Ein Kommentar ist Text, der in /*
und eingeschlossen ist */
, oder Text, der //
bis zum Ende der Zeile reicht. In einer Zeile mit mehreren Kommentar-Startmarkierungen zählt nur die erste. Kommentare werden nicht in String-Literalen analysiert.
Beispiele
main() {printf("Hello!"); // I don't care about the world...
}
becomes:
main() {
printf("Hello!"); // I don't care about the world...
}
int main(){
puts("a");
puts("b");
}
becomes:
int main(){
puts("a");
puts("b");
}
main()
{ printf("{"); /* }
} */
printf("}//}"); ///*
}
becomes:
main()
{
printf("{"); /* }
} */
printf("}//}"); ///*
}
int test[] = {1, 2, 3};
becomes:
int test[] = {
1, 2, 3
}
;
quelle
Antworten:
JavaScript (ES6),
376373378393 ByteDas war ... eine ziemliche Herausforderung ...
Code-Snippet anzeigen
Lassen Sie mich wissen, wenn etwas mit der Ausgabe
nichtstimmt, obwohl ichnichts finden konnte,kann ich nichts mehr finden.Ungolfed Version
Ich habe den Code so gespielt, wie ich ihn geschrieben habe, also mal sehen, wie das geht ...
Code-Snippet anzeigen
quelle
JavaScript (ES6),
260259 ByteAnalysiert die Eingabe zeichenweise. Verwendet 4-Leerzeichen-Einrückung.
Dies ist immer noch ein WIP und wurde grundsätzlich nur anhand der bereitgestellten Beispiele getestet. Wenn Sie einen Fehler finden, lassen Sie es mich bitte in den Kommentaren wissen.
Der Status des Parsers wird vollständig durch die folgenden Variablen beschrieben:
d
→ aktuelle Verschachtelungstiefei
→ Flag, das angibt, dass wir uns 'innerhalb' des Codes befinden (dh nach den führenden Leerzeichen der Zeile)l
→ String-Literal-Flagc
→ Kommentar-Flag blockierene
→ Zeilenkommentar-FlagObligatorisch eingerückte Version
Testfälle
Code-Snippet anzeigen
quelle