Pola ASCII wyglądają tak:
++ +---+ +------+ +---+ +---+
++ | | | | | | | |
| | | | | | | |
+-+ | | | | | | | |
+-+ | | | | | | +---+
+---+ | | | |
+--+ | | | | ++
| | | | | | ||
| | +------+ | | ||
+--+ | | ||
+---+ ||
||
+-----+ ||
+------------+ | | ++
| | | |
| | | |
+------------+ +-----+
Oto kilka przykładów tych samych pól ASCII, implodowanych:
++ +- -+ +- -+ +- -+ +- -+
++ | - | | - - | | - | | - |
| | | -- | | | | |
+-+ | | | | " | - |
+-+ | - | || | | +- -+
+- -+ | | | |
+--+ | -- | | | ++
| | | - - | " ||
| | +- -+ | | ||
+--+ | - | | |
+- -+ | |
-- ||
- - +- -+ ||
+- - - -+ | - - | ++
| -- -- | | = |
| -- -- | | - - |
+- - - -+ +- -+
- -
--
Oto link do wszystkich tych skrzynek testowych w łatwiejszym do kopiowania formacie. Kolejność obejmuje wszystkie dane wejściowe, a następnie wszystkie dane wyjściowe w tej samej kolejności.
Twoim celem jest wzięcie pola ASCII jako danych wejściowych i zwrócenie pola implodowanego. Zasady implozji są następujące:
- „+” nigdy się nie zmienia; ani „-”, ani „|” bezpośrednio przylegające do „+”
- Zaczynając od narożników, „-” i „|” przesuń się do środka o jedno pole więcej niż ta sama postać bliżej rogu. Jeśli „-” i „|” nigdy nie ruszyłby się w to samo miejsce, żaden ruch.
- Jeśli „-” i „-” przesuną się w to samo miejsce, wstaw „=” w tym miejscu. Jeśli „|” i „|” przesuń się w to samo miejsce, umieść „w tym miejscu. Liczą się one jako dwie ich postacie w tym samym miejscu poruszające się w przeciwnych kierunkach.
- Dwa „-” lub dwa „|” mogą przechodzić obok siebie, jak pokazano w lewym dolnym przykładzie.
- Jeśli pudełko jest wystarczająco chude, zacznie się rozszerzać na zewnątrz w ten sam sposób, zawsze odsuwając się od strony, z której zaczął.
- Wynik powinien być symetryczny wzdłuż linii środkowej w obu kierunkach xi y (ignorując znaki nowej linii); obejmuje to spacje, więc wynik może wymagać wypełnienia spacjami, aby to spełnić.
Szczegóły reguły:
- To jest golf golfowy, więc wygrywa najkrótszy program w bajtach.
- Obowiązują standardowe luki.
- Możesz założyć, że każda linia kończy się znakiem nowej linii.
- Jedynymi znakami w ciągu wejściowym będą „+”, „-”, „|”, „” i „\ n” (nowa linia), a ciąg wyjściowy powinien podlegać tym samym regułom, z dodaniem „=” i „jako możliwe znaki.
- Opcjonalnie możesz mieć jeden końcowy znak nowej linii na końcu ostatniego wiersza.
- Najmniejsze pole ASCII, które musisz obsłużyć, to lewy górny przykład. Każde pudełko ASCII będzie miało dokładnie 4 „+”, dokładnie w rogach.
- Będziesz musiał obsługiwać pola wielkości
m x n
dla dowolnych liczb całkowitych,m,n
takich jak2<=m,n<256
(największy możliwy rozmiar ciągu255*(255+1)
) - Możesz założyć, że zawsze dostaniesz jedno ważne pole ASCII jako dane wejściowe.
||
w tym przykładzie musi być"
kimś ..."
choć trochę ?"
Wydaje mi się, że pojawia się tylko na 3 lub więcej?"
poszedł? Po lewej czy po prawej stronie? Nie może to być jedno i drugie, ale nie może być tak samo, ponieważ wynik jest symetryczny.Odpowiedzi:
Python 2 ,
591555545527525496436351334333303 bajtówWypróbuj online!
EDYCJA : Moja stara metoda najpierw implodowała górę i dół, a następnie lewą i prawą. Zamiast tego możemy implodować górę, obrócić o 90 stopni i zrobić to 4 razy. Używałem również przyjaznego kodu, ten wymaga wprowadzenia danych w formie,
[['+', '-', '-', '-', '-', '-', '+'], ['|', ' ', ' ', ' ', ' ', ' ', '|'], ['|', ' ', ' ', ' ', ' ', ' ', '|'], ['|', ' ', ' ', ' ', ' ', ' ', '|'], ['+', '-', '-', '-', '-', '-', '+']]
która jest brzydka, ale krótsza dla programu: P (Podziękowania dla Phoenix za złapanie tego)Podziękowania dla Dziurawej Zakonnicy za kod nagłówka w łączu TIO używanym do konwersji danych czytelnych dla ludzi na dane czytelne dla komputera.
-85 bajtów dzięki Leaky Nun!
-17 bajtów poprzez zmianę z implozji od góry na implozję z lewej strony, co pozwala na przechowywanie całego wiersza w zmiennej i modyfikację. Dzięki Leaky Nun za sugestię!
-1 bajt, zmieniając rzeczy w celu usunięcia spacji.
-30 bajtów dzięki Leaky Nun!
źródło
s[0]
iS[0]
do zmiennych, aby zaoszczędzić kilka bajtówp=s[0]
iP=S[0]
zp=z(s[0])
iP=z(S[0])
, odpowiednio, a następnie zastąpić wszystkie wystąpieniaz(p)
zp
i wszystkoz(P)
zP
aby zapisać 18 bajtów.(z(s)-1)/2-p
sięz(s)/2-.5-p
i(p-1)/2-z(s)
zep/2-.5-z(s)
zaoszczędzić 2 kolejne bajty.C (clang) , 693 bajty
Dodano nowe wiersze dla czytelności. Pierwsze dwa są wymagane, ale pozostałe nie.
Dzięki za wielkie wyzwanie! To było dość trudne, ale nadal dobrze się bawiłem.
Pobiera to dane wejściowe jako argumenty wiersza poleceń i dane wyjściowe do STDOUT ciągu wielu wierszy implodowanego pola. Jak zawsze, wskazówki dotyczące gry w golfa są bardzo mile widziane.
Wypróbuj online!
źródło