Zawsze chciałem otoczyć tekst #
s, ale mam problem z ustaleniem, co otoczyłem, więc w tym wyzwaniu napiszesz program, który właśnie to robi
Przykłady
Wejścia / wyjścia są oddzielone znakiem nowej linii.
###
#a#
###
a
#
#a#
#
a
###
# a #
# b c #
#######
a
b c
ABCDHIJ
E####GK
F# M #L
# N#O
P####
M
N
###A###
#C#B#o#
#d###e#
# go#
###
C o
d e
go
Spec
#
są tym, co „otacza” blok tekstu#
zawsze będą przylegać do siebie (w tym po przekątnej)#
zawsze tworzy zamknięty kształt- Będzie tylko jeden
#
kształt - W przypadku wklęsłego kształtu otwory powinny być wypełnione spacjami.
- W danych wyjściowych należy zachować białe znaki
#
s i proszę bardzo ... a potem stało się ciężko.\n
po każdym wierszu danych wejściowych i przekazać jako parametr funkcji do mojego programu lub co?_M_\n___N
(użycie podkreślników zamiast spacji ze względu na problemy z formatowaniem), podczas gdy w przykładach abc i Codego dane wyjściowe obejmują również spacje, gdzie #s były na wejściu. Jeśli ma być wydrukowany tylko tekst otoczony #s, to wynik z przykładu abc powinien być_a_\n_b_c_
(zamiast__a_\n_b_c
), a wynik z przykładu Codego powinienCo\nde\n_go
(zamiastC___o\nd___e\n__go
).MN
przykład. ponieważ po M. nie powinno być dodatkowej przestrzeniOdpowiedzi:
Perl,
144138132129128127126124 bajtówObejmuje +2 za
-p0
Kod zakłada, że
\0
nie jest prawidłowym znakiem wejściowym (przynajmniej wewnątrz#
).Uruchom z wejściem na STDIN:
surround.pl
:Kod działa tak, jak jest, ale zastępuje
\0
i\n
przez ich dosłowne wersje dla żądanego wyniku. Zauważ, żena końcu linii jest spacja . Kod zapętla się zbyt wiele razy, więc może być konieczne poczekanie około 30 sekund na wyjście.
Wyjaśnienie
Zamierzam zrobić miejsce zalewowe z
\0
zatrzymaniem się#
z zewnątrz w kierunkach ortogonalnych. Następnie odetnę#
boki i zastąpię wszystko, co pozostało spacjami. Aby uniknąć konieczności obsługi wszystkich kierunków w zatopieniu, będę wielokrotnie obracać obszar docelowy i wypełniać tylko od prawej do lewejW tym momencie np
zostanie zastąpiony przez:
Zasadniczo wycięto wszystkie kolumny i wiersze, które nie graniczą bezpośrednio z wnętrzem. Wszelkie pozostałe znaki zewnętrzne zostały zastąpione przez \ 0. U góry i po prawej stronie znajduje się dodatkowa warstwa \ 0. Pozostało więc tylko czyszczenie:
źródło
#
odizolowanymi. proszę zweryfikuj moją sesję bash: codepad.org/YbCzB4O4JavaScript,
485 464 427 417 396390 bajtówTak. Próbowałem. I chociaż mam
485bajtów, wygrywam, ponieważ nikt inny nie miał ochoty odpowiadać na to pytanie. Hej!A także jestem świadomy, że mogłem grać w golfa przy takich obciążeniach, jestem w tej chwili po prostu zmęczony ... no cóż, teraz mam 396 Dzięki Conorowi za większość golfa ...: D
źródło
y=z=0