Wkrótce przechodzimy na pełną stronę, a przed ukończeniem szkoły pozostaje tylko jedna rzecz: pociągnij starszy żart! Myślę, że powinniśmy zrobić wariację na temat klasycznego knebla „wypełnij korytarz filiżankami wody”.
Wyzwanie
Twój program wczyta tekst i wyświetli ten tekst, zalany odwróconymi filiżankami wody. Szklanka wody do góry nogami wygląda następująco: /~\
Te kubki można umieścić tylko w pustych miejscach na wejściu i można je umieścić tylko tak, aby wszystkie trzy znaki kubka znajdowały się bezpośrednio nad znakiem niebiałym (inaczej woda rozlewałaby się na zewnątrz!). Filiżanek nie można nakładać na inne kubki. Kubki muszą być umieszczone w każdym dostępnym otworze i zakłada się, że każdy wkład jest otoczony nieskończonym polem białych znaków.
Możesz założyć, że dane wejściowe są wypełnione prostokątem ze spacjami.
Musimy szybko usunąć dowcip i nikt tego nie zauważy, aby wygrać jak najmniej bajtów w każdym języku.
Przypadki testowe
Wejście:
____________________________________________
/ ___ / ___ / ______/ ________/
/ /__/ / /__/ / / / /_______
/ _______/ _______/ / / //__ /
/ / / / / /_____/ /___/ /
/___/ /___/ /_________/___________/
Wynik:
/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\
____________________________________________
/ ___ / ___ / ______/ ________/
/ /__//~\/ /__//~\/ / / /_______
/ _______/ _______/ //~\ / //__ /
//~\/ //~\/ //~\/_____//~\/___//~\/
/___/ /___/ /_________/___________/
Wejście:
L
LOL ROFL:ROFL:LOL:ROFL:ROFL
L\\ ____I____
======== | |[\
\___O==___)
___I_I__/
Wynik:
L /~\/~\/~\/~\/~\/~\/~\
LOL ROFL:ROFL:LOL:ROFL:ROFL
L\\/~\/~\ ____I____
========/~\ | |[\
\___O==___)
___I_I__/
Odpowiedzi:
Siatkówka , 41 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1.
Zauważ, że pierwszy wiersz ma trzy końcowe spacje.
Wymaga dopełnienia wejścia do prostokąta.
Wypróbuj online!
Wyjaśnienie
Jest to dość standardowe dopasowanie pionowe:
Zlicza się postacie poprzedzające dopasowanie, przechwytując tyle znaków do grupy
1
.To sprawdza, czy w następnym wierszu znajdują się trzy znaki spacji na tej samej pozycji. Odbywa się to poprzez wyskakiwanie z grupy
1
aż do jej opróżnienia(?<-1>.)*
i zapobieganie cofaniu się z grupą atomową(?>...)
.Wreszcie dopasowujemy rzeczywiste spacje. Są one po prostu zastąpione literalnym ciągiem znaków
/~\
. Dogodnie, dopasowania znajdują się od lewej do prawej i nie mogą się pokrywać.źródło
JavaScript (ES6), 163 bajty
Szybko zhakowane razem rozwiązanie, z pewnością można grać w golfa. Dodaje pustą linię powyżej, znajduje potrójne spacje i zastępuje filiżanką, jeśli następny wiersz nie zawiera żadnych spacji. Przyjmuje dozwolone założenie, że dane wejściowe będą prostokątne. Wszelkie odstępy w danych wejściowych wymagają ucieczki (jak można oczekiwać w przypadku JS).
źródło
a test
.JavaScript (ES6), 109 bajtów
Oprócz konieczności wprowadzania prostokątnego, zakłada również, że pierwsza linia kończy się nową linią, nawet jeśli jest to jedyna linia wejściowa. Używa dynamicznie generowanego podglądu, aby upewnić się, że znajdzie trzy spacje „powyżej” trzech spacji, aby nie pomylić się z dziurami.
źródło