Napisz program, który dodaje lub usuwa białe znaki, aby ładnie sformatować kod. Reguły dotyczące tego, jak powinien wyglądać kod po zakończeniu:
- Żadna linia nie powinna zawierać więcej niż jednego z
{
i}
. {
Powinny zawsze być ostatnią rzeczą, na linii.}
Powinny zawsze być tylko rzeczą na linii (oprócz spacji, że jest przed nim).- Ilość białych znaków przed każdą linią powinna być stałą wielokrotnością bieżącej liczby zagnieżdżeń. (Możesz użyć dowolnej wcięcia, o ile się nie zmienia).
- Nie należy wstawiać ani usuwać białych znaków, które nie przyczyniają się do spełnienia jednej z tych zasad.
Liczba zagnieżdżeń w pierwszym wierszu wynosi 0. Liczba zagnieżdżeń w każdej innej linii to liczba zagnieżdżeń poprzedniej linii, plus jeden, jeśli poprzednia linia zawiera a {
, minus jeden, jeśli bieżąca linia zawiera a }
.
{
a }
wewnątrz literałów ciągowych i komentarzy nie liczą się powyższe reguły. Dosłowny ciąg znaków to tekst zawarty w pojedynczych lub podwójnych cudzysłowach, przy czym pojedyncze lub podwójne cudzysłowy z nieparzystą liczbą odwrotnych ukośników bezpośrednio przed nimi nie są interpretowane jako koniec literału ciągowego. Komentarz to tekst zawarty w /*
i */
lub tekst przechodzący od //
końca linii. W linii wielu znaczników początku komentarza liczy się tylko pierwszy. Komentarze nie są analizowane wewnątrz literałów łańcuchowych.
Przykłady
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
}
;
źródło
Odpowiedzi:
JavaScript (ES6),
376373378393 bajtówTo było ... całkiem wyzwanie ...
Pokaż fragment kodu
Daj mi znać, jeśli coś jest nie tak z wyjściem, chociaż nie
mogłem znaleźć niczego,nie mogę znaleźć niczego więcej.Wersja bez golfa
Kod napisałem do gry w golfa, więc zobaczmy, jak to idzie ...
Pokaż fragment kodu
źródło
JavaScript (ES6),
260259 bajtówAnalizuje wprowadzany znak po znaku. Wykorzystuje wcięcie 4 spacji.
Jest to nadal PWT i został zasadniczo przetestowany tylko na podanych przykładach. Jeśli znajdziesz jakiś błąd, daj mi znać w komentarzach.
Stan analizatora składni jest w pełni opisany przez następujące zmienne:
d
→ aktualna głębokość zagnieżdżeniai
→ flaga informująca, że znajdujemy się „wewnątrz” kodu (tj. Za wiodącymi spacjami wiersza)l
→ flaga literału łańcucha znakówc
→ blokuj flagę komentarzae
→ flaga komentarza liniowegoObowiązkowa wersja z wcięciem
Przypadki testowe
Pokaż fragment kodu
źródło