Kami akan segera lulus ke situs penuh, dan hanya ada satu hal yang harus dilakukan sebelum lulus: tarik lelucon senior! Saya pikir kita harus melakukan variasi pada lelucon "mengisi lorong dengan cangkir air" klasik.
Tantangan
Program Anda akan membaca dalam teks dan menampilkan teks itu, tercakup dalam cangkir air terbalik. /~\
Gelas air terbalik terlihat seperti ini: Gelas ini hanya dapat ditempatkan di ruang putih di input, dan hanya dapat ditempatkan sehingga ketiga karakter cangkir langsung di atas karakter non-ruang putih (jika tidak air akan tumpah di luar!). Cangkir tidak dapat ditumpuk di atas gelas lainnya. Piala harus ditempatkan di setiap celah yang tersedia, dan diasumsikan bahwa setiap input dikelilingi oleh bidang spasi putih yang tak terbatas.
Anda dapat mengasumsikan bahwa input diisi ke sebuah persegi panjang dengan spasi.
Kita perlu melakukan prank dengan cepat dan tanpa ada yang memperhatikan, sehingga byte paling sedikit di setiap bahasa menang.
Uji Kasus
Memasukkan:
____________________________________________
/ ___ / ___ / ______/ ________/
/ /__/ / /__/ / / / /_______
/ _______/ _______/ / / //__ /
/ / / / / /_____/ /___/ /
/___/ /___/ /_________/___________/
Keluaran:
/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\/~\
____________________________________________
/ ___ / ___ / ______/ ________/
/ /__//~\/ /__//~\/ / / /_______
/ _______/ _______/ //~\ / //__ /
//~\/ //~\/ //~\/_____//~\/___//~\/
/___/ /___/ /_________/___________/
Memasukkan:
L
LOL ROFL:ROFL:LOL:ROFL:ROFL
L\\ ____I____
======== | |[\
\___O==___)
___I_I__/
Keluaran:
L /~\/~\/~\/~\/~\/~\/~\
LOL ROFL:ROFL:LOL:ROFL:ROFL
L\\/~\/~\ ____I____
========/~\ | |[\
\___O==___)
___I_I__/
Jawaban:
Retina , 41 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Perhatikan bahwa baris pertama memiliki tiga spasi tambahan.
Membutuhkan input untuk diisi ke persegi panjang.
Cobalah online!
Penjelasan
Ini adalah pencocokan vertikal standar:
Ini menghitung karakter sebelum pertandingan dengan menangkap banyak karakter ke dalam grup
1
.Ini memeriksa bahwa ada tiga karakter non-spasi di pada posisi yang sama di baris berikutnya. Ini dilakukan dengan muncul dari grup
1
hingga kosong dengan(?<-1>.)*
dan mencegah backtracking dengan grup atom(?>...)
.Akhirnya kami mencocokkan ruang yang sebenarnya. Itu hanya diganti dengan string literal
/~\
. Mudahnya, pertandingan ditemukan dari kiri ke kanan dan tidak bisa tumpang tindih.sumber
JavaScript (ES6), 163 byte
Solusi yang diretas bersama dengan cepat, pasti dapat diturunkan. Menambahkan baris kosong di atas, menemukan tiga spasi, dan mengganti dengan piala jika baris berikutnya tidak mengandung spasi. Membuat asumsi yang dibolehkan bahwa input akan berbentuk persegi panjang. Setiap backspace dalam input harus keluar (seperti yang diharapkan dengan JS).
sumber
a test
.JavaScript (ES6), 109 byte
Serta membutuhkan input persegi panjang, juga mengasumsikan baris pertama berakhir dengan baris baru, bahkan jika itu adalah satu-satunya jalur input. Menggunakan lookahead yang dihasilkan secara dinamis untuk memastikan bahwa ia menemukan tiga spasi "di atas" tiga non-spasi, agar tidak bingung oleh lubang.
sumber