Alice jest stażystką w firmie, która używa Brainfuck jako podstawowego języka do programowania zarówno po stronie klienta, jak i serwera. Alice właśnie napisała swój pierwszy kod i trochę się denerwuje, przygotowując się do pierwszej recenzji kodu.
Alice chce, aby kod był odpowiednio sformatowany i wyglądał ładnie, ale nie ma czasu na zapoznanie się z 328-stronicowym przewodnikiem po stylu kodu firmy, więc postanowiła sformatować go jako idealny kwadrat . Niestety, długość kodu może być niewystarczająca do utworzenia kwadratu, więc postanowiła pozostawić prostokątną przerwę na środku. Luki muszą być idealnie wyśrodkowane i możliwie jak najbliżej kwadratu .
Przykłady
++++++ +++++ +++++ +++++ +++++ +++++
++++++ +++++ +++++ + ++ ++ ++ +++++
++++++ ++ ++ + + + ++ + +
++++++ +++++ +++++ +++++ ++ ++ +++++
++++++ +++++ +++++ +++++ +++++ +++++
Perfect OK Acceptable Unacceptable No way! Nope.
Napisz program lub funkcję, która pomoże Alice. Biorąc pod uwagę kod Alice jako ciąg wejściowy, w miarę możliwości wyślij poprawnie sformatowany kod, jak opisano poniżej. Jeśli formatowanie jest niemożliwe, wyjdź płaczącą emoji :~(
.
To jest golf golfowy, więc odpowiedzi są punktowane w bajtach, a celem jest mniejsza liczba bajtów.
Ograniczenia
- Twój program lub funkcja powinna przyjmować pojedynczy ciąg znaków jako dane wejściowe i wyprowadzać jeden lub więcej wierszy tekstu (lub zwracać ciąg wielu wierszy lub tablicę ciągów, jeśli zaimplementujesz funkcję).
- Łańcuch wejściowy może zawierać dowolne znaki ASCII, w tym spacje.
- Wszystkie białe znaki na wejściu należy zignorować. Nie powinny one liczyć się do długości kodu i nie powinny być używane w danych wyjściowych.
- Łańcuch wejściowy zawiera co najmniej jeden znak spacji.
- Sformatowany kod musi mieć te same znaki spacji w tej samej kolejności, co w kodzie wejściowym.
- Sformatowany kod musi być doskonałym kwadratem, tzn. Wszystkie linie powinny mieć tę samą długość, a liczba linii powinna być równa długości linii.
- Sformatowany kod może zawierać przerwę w środku.
- W odstępie można stosować tylko znaki spacji (kod ASCII 32).
- Przerwa (jeśli występuje) musi być prostokątna.
- Każdy wiersz sformatowanego kodu musi zawierać co najmniej jeden znak spacji, tzn. Szerokość przerwy musi być ściśle mniejsza niż szerokość kwadratu (przerwa 5x1 jest niedopuszczalna dla kwadratu 5x5).
- Odstęp powinien być poziomy, tzn. Szerokość odstępu powinna być większa lub równa wysokości odstępu.
- Luka musi być idealnie wyśrodkowana.
- W związku z tym parzystość szerokości i wysokości parzystości powinna być taka sama jak parzystość szerokości kwadratu (na przykład dla 5x5 odstępu kwadratowego może wynosić 1x1, 3x1 lub 3x3).
- Jeśli to możliwe, generuj kwadrat bez żadnej przerwy.
- W przypadku wielu rozwiązań wybierz jedno z odstępem najbliższym kwadratowi, tzn. Różnica między szerokością odstępu a wysokością odstępu jest minimalna (na przykład: odstęp 10x10 jest bardziej preferowany niż 8x6, a 8x6 jest bardziej korzystny niż 6x2).
- Jeśli nadal występuje remis, wybierz rozwiązanie o minimalnej powierzchni przerwy (na przykład przerwa 2x2 jest bardziej preferowana niż 4x4).
- Jeśli w ogóle nie można sformatować kodu, wyjdź
:~(
. - Nowa linia po ostatniej linii jest opcjonalna.
- [Nowość] Możesz bezpiecznie założyć, że każdy znak o kodzie poniżej 33 to biała spacja. Mam nadzieję, że pomoże ci to w grze w golfa.
Testy
Input Output Code length Comment
+++++++++ +++ 9 Alice is lucky,
+++ her code perfectly fits a square.
+++
++++++++ +++ 8 Though code length isn't enough for a square,
+ + a small gap fixes it.
+++
++++++ :~( 6 No luck, code cannot be formatted.
Hello, Hell 12 Input may contain any ASCII characters,
World! o , but whitespaces in input should be ignored.
W o
rld!
+++++ + +++++ +++++ 22 Gap is not required to be a square,
+++++ + +++++ +++++ it can be a rectangle.
+ +
+++++
+++++
+++ + +++ ++++++++ 28 There exists another solution:
+++ + +++ + + 6x6 square with 4x2 gap,
+++ + +++ + + but in Alice's opinion square gap
+++ + +++ + + makes code more readable.
+ +
+ +
+ +
++++++++
Trudne testy
This must be Thism 24 7x7 with 5x5 gap looks good,
5x5 with 1x1 ustbe but 5x5 with 1x1 gap is better,
gap. 5x 5w because gap area is smaller.
ith1x
1gap.
+++ +++ +++ :~( 18 In case you tried 5x5 square
+++ +++ +++ with 7x1 gap ;)
Zasoby
Aby zaoszczędzić miejsce, możesz znaleźć przykładowy kod i dodatkowe przypadki testowe na tio.run
[Nowość] Możesz rzucić okiem na tabelę przyjętych rozwiązań dla wprowadzania do 100 znaków . Zmieniłem szerokość i wysokość, ponieważ wydaje się to bardziej intuicyjne.
Inspirowany przez: Kwadrat tekstu
Zmiany
Dodano 2 testy, naprawiono błąd w przykładowym kodzie.
Dodano tabelę rozwiązań do 100, dodano wyjaśnienie białych znaków.