Elastyczny wąż wygląda mniej więcej tak:
<||=|||:)~
Każdą oddzielną sekwencję pionowych pasków ( |
) w rozciągliwym wężu, znanym jako odcinek rozciągliwy , można indywidualnie rozciągać do dwukrotnej szerokości i rysować naprzemiennymi ukośnikami ( /
, \
) po rozciągnięciu.
Konkretny wąż powyżej ma dwie takie rozciągliwe części, co daje mu cztery możliwe pozy:
<||=|||:)~
</\/\=|||:)~
<||=/\/\/\:)~
</\/\=/\/\/\:)~
Ogólna forma rozciągliwego węża w jego najmniej rozciągniętej pozycji jest zdefiniowana przez ten regex :
<(\|+=)*\|+:\)~
Które można wyrazić słowami:
<
, Po czym przez dowolną liczbę sekwencji|
„S połączone z=
oznaczeń, a następnie:)~
.
Więc <|:)~
i <||:)~
i <|=|:)~
i <|=|=||=|||||=||:)~
są rozciągliwe węże, ale <=:)~
i <=|:)~
i <||=:)~
i <|==||:)~
nie są.
Elastyczne węże mogą również być skierowane w lewo zamiast w prawo, np ~(:|||=||>
. Formy są takie same, tylko odzwierciedlone.
Wyzwanie
Napisz program, który pobiera jeden ciąg linii dwóch rozciągliwych węży skierowanych do siebie, z pewną liczbą odstępów pomiędzy nimi. Oba węże będą w najmniej rozciągniętej pozycji (wszystkie pionowe kreski, bez ukośników). Sznurek zacznie się od ogona węża zwróconego w prawo, a skończy się ogonem węża skierowanego w lewo (możesz opcjonalnie założyć, że jest też nowa linia).
Na przykład, oto możliwe dane wejściowe z pięcioma spacjami między wężami:
<|=||:)~.....~(:||||>
.
Dla jasności używam kropek ( ) zamiast rzeczywistych znaków spacji.
Zero spacji między wężami jest również prawidłowym wejściem:
<|=||:)~~(:||||>
Mówimy, że węże całują się, gdy ich języki dotykają się w ten sposób.
Twój program musi rozszerzyć kombinację rozciągliwych części obu węży, tak aby węże miały możliwie najmniejszą liczbę odstępów między nimi (bez nakładania się), tj. Tak, aby węże były tak blisko pocałunku, jak to możliwe .
Oba ogony węży są nieruchome, ale ich głowy i ciała mogą się poruszać - w prawo w przypadku węża skierowanego w prawo, w lewo węża w lewo - w zależności od tego, jakie rozciągnięte części zostały rozciągnięte.
Dane wyjściowe twojego programu to ciąg pojedynczej linii (plus opcjonalny znak nowej linii), który pokazuje węże tak blisko pocałunku, jak to możliwe, z naprzemiennymi ukośnikami rysowanymi zamiast pionowych pasków dla rozciągniętych części, które zostały rozciągnięte.
Na przykład dane wyjściowe dla <|=||:)~.....~(:||||>
(z góry) to:
</\=||:)~~(:/\/\/\/\>
Jest to jedyne rozwiązanie tutaj, ponieważ przy każdej innej kombinacji rozciągniętych odcinków węże zachodzą na siebie lub są bardziej oddalone od całowania.
Jeśli możliwych jest wiele rozwiązań, wyjściem może być dowolne z nich.
Na przykład, jeśli dane wejściowe to
<|=||:)~.....~(:|||=|>
wyjście może być
<|=/\/\:)~~(:/\/\/\=|>
lub
</\=||:)~~(:/\/\/\=/\>
Pamiętaj, że nie zawsze będzie możliwe pocałowanie węży, ale nadal musisz zbliżyć je jak najbliżej.
Na przykład, jeśli dane wejściowe to
<||=||||:)~...~(:||>
wyjście może być
</\/\=||||:)~.~(:||>
lub
<||=||||:)~.~(:/\/\>
Jeśli węże już się całują, wyjście będzie takie samo jak wejście. na przykład
<|=||:)~~(:||||>
Ogólnie rzecz biorąc, wyjście będzie takie samo jak wejście, jeśli przedłużenie dowolnej rozciągliwej części sprawi, że węże będą się nakładać. na przykład
<|||=|||:)~..~(:||||=|||||=||||||>
Notatki
- Pobiera dane wejściowe ze standardowego wejścia lub wiersza poleceń jak zwykle lub zapisuje funkcję, która pobiera ciąg znaków. Wydrukuj lub zwróć wydruk.
- Możesz użyć kropek (
.
) na wejściu i wyjściu zamiast spacji (), jeśli wolisz.
- Ważne jest tylko, aby nacięcia były zmieniane naprzemiennie w sekwencji pionowych pasków, które zastąpiły. Ich kolejność w ogóle w wężu lub to, czy najpierw chodzi o cięcie do przodu, czy do tyłu, nie ma znaczenia.
- Rozciągliwe części nie mogą się częściowo rozciągać - są dokładnie podwójne lub w ogóle się nie rozciągają.
Punktacja
To jest golf golfowy . Najkrótsze przesłanie w bajtach wygrywa. Tiebreaker to wcześniejsza odpowiedź.
>
nie stałby się <
albo taki sam dla (
i )
), ale także powiedział: „Ważne jest tylko, aby przecinać naprzemiennie w sekwencji pionowych pasków, które zastąpiły. wąż na wolności lub to, czy najpierw nastąpi cięcie do przodu, czy do tyłu, nie ma znaczenia. ”