PPCG Senior Prank

19

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__/
Mike Bufardeci
źródło
1
To może być czas, aby wskrzesić niektóre z tych języków dopasowywania wzorów 2D ...
mbomb007

Odpowiedzi:

10

Siatkówka , 41 bajtów

Liczba bajtów zakłada kodowanie ISO 8859-1.

(?<=(.)*)(?=.*¶(?>(?<-1>.)*)\S{3})   
/~\

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.

(?=.*¶(?>(?<-1>.)*)\S{3})

To sprawdza, czy w następnym wierszu znajdują się trzy znaki spacji na tej samej pozycji. Odbywa się to poprzez wyskakiwanie z grupy 1aż 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ć.

Martin Ender
źródło
3

JavaScript (ES6), 163 bajty

a=>(z=a.split`
`,z.unshift(z[0].replace(/./g,' ')),z).map((b,i)=>b.replace(/   /g, (c,j)=>(!z[i+1]||!z[i+1][j+2]||/ /.test(z[i+1].slice(j,j+3))?c:'/~\\'))).join`
`

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).

Mwr247
źródło
Myślę, że to zwraca niewłaściwe wyjście dla a test.
Neil,
1

JavaScript (ES6), 109 bajtów

s=>s.replace(/.*\n/,m=>(t=m).replace(/./g,' ')+m).replace(eval(`/   (?=[^]{${t.length-3}}[^ ]{3})/g`),"/~\\")

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.

Neil
źródło