PPCG Старший приман


19

Ми скоро закінчимо повний сайт, і перед випускним залишилося лише одне: витягнути старший прикол! Я думаю, що нам слід змінити класичний кнопок «наповнити передпокій чашками води».

Виклик

Ваша програма прочитає текст та виведе цей текст, накритий чашками води. Чашка з водою вгору виглядає так: /~\
Ці чашки можна розміщувати лише в пробілі на вході, і розміщувати їх можна лише так, щоб усі три символи чашки знаходилися прямо над символом, який не пробігає (інакше вода б розлилася поза!). Чашки не можна складати поверх інших чашок. Чашки повинні бути розміщені у кожному доступному отворі, і передбачається, що кожен вхід оточений нескінченним полем пробілів.

Ви можете припустити, що вхід підкладається до прямокутника з пробілами.

Нам потрібно швидко зняти пустощі і без того, щоб хтось помітив, тому виграє найменше байтів на кожній мові.

Випробування

Вхід:

     ____________________________________________
    /   ___    /   ___    /   ______/   ________/
   /   /__/   /   /__/   /   /     /   /_______
  /   _______/   _______/   /     /   //__    /
 /   /      /   /      /   /_____/   /___/   /
/___/      /___/      /_________/___________/

Вихід:

     /~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\
     ____________________________________________
    /   ___    /   ___    /   ______/   ________/
   /   /__//~\/   /__//~\/   /     /   /_______
  /   _______/   _______/   //~\  /   //__    /
 //~\/      //~\/      //~\/_____//~\/___//~\/
/___/      /___/      /_________/___________/

Вхід:

 L
LOL  ROFL:ROFL:LOL:ROFL:ROFL
 L\\        ____I____
    ========    |  |[\
            \___O==___)
            ___I_I__/

Вихід:

 L   /~\/~\/~\/~\/~\/~\/~\
LOL  ROFL:ROFL:LOL:ROFL:ROFL
 L\\/~\/~\  ____I____
    ========/~\ |  |[\
            \___O==___)
            ___I_I__/

1
Це час, щоб воскресити деякі з цих 2D-
образних

Відповіді:


10

Сітківка , 41 байт

Кількість байтів передбачає кодування ISO 8859-1.

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

Зауважте, що перший рядок має три пробіли.

Потрібен вклад до прямокутника.

Спробуйте в Інтернеті!

Пояснення

Це досить стандартне вертикальне узгодження:

(?<=(.)*)

Це підраховує символів, що передують матчу, захоплюючи стільки символів у групу 1.

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

Це перевіряє, що в наступному рядку на одному і тому ж положенні є три непробільних символи. Це робиться, вискакуючи з групи 1до її спорожнення (?<-1>.)*та не допускаючи зворотного відстеження з атомною групою (?>...).

Нарешті ми узгоджуємо фактичні простори. Вони просто замінюються буквальним рядком /~\. Зручно, що зустрічі зустрічаються зліва направо і не можуть перетинатися.


3

JavaScript (ES6), 163 байти

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`
`

Швидко взломане рішення, безумовно, можна переграти. Додає порожній рядок вище, знаходить потрійні пробіли та замінює чашку, якщо наступний рядок не містить пробілів. Робить дозволене припущення, що вхід буде прямокутним. Будь-які зворотні простори вхідних даних потребують втечі (як можна було б очікувати при JS).


Я думаю, що це повертає неправильний вихід a test.
Ніл

1

JavaScript (ES6), 109 байт

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

Крім того, що вимагає прямокутного введення, також передбачається, що перший рядок закінчується новим рядком, навіть якщо це єдиний рядок введення. Використовує динамічно генерований заголовок, щоб переконатися, що він знайде три пробіли «над» трьома непробілами, щоб не плутати дірки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.