Seekor ular melar terlihat seperti ini:
<||=|||:)~
Setiap urutan bar vertikal yang terpisah ( |
) dalam ular melar, yang dikenal sebagai bagian melar , dapat diperpanjang secara individual hingga dua kali lebarnya, dan digambar dengan garis miring bergantian ( /
, \
) setelah diperpanjang.
Ular tertentu di atas memiliki dua bagian melar seperti itu, memberikannya empat kemungkinan pose:
<||=|||:)~
</\/\=|||:)~
<||=/\/\/\:)~
</\/\=/\/\/\:)~
Bentuk umum ular melar dengan pose paling tidak melar ditentukan oleh regex ini :
<(\|+=)*\|+:\)~
Yang dapat dinyatakan dengan kata-kata sebagai:
<
, Diikuti oleh sejumlah urutan|
's bergabung dengan=
tanda-tanda, diikuti oleh:)~
.
Jadi <|:)~
dan <||:)~
dan <|=|:)~
dan <|=|=||=|||||=||:)~
adalah ular melar, tetapi <=:)~
dan <=|:)~
dan <||=:)~
dan <|==||:)~
tidak.
Ular melar juga bisa menghadap ke kiri, bukan ke kanan, misalnya ~(:|||=||>
. Bentuknya sama, hanya dicerminkan.
Tantangan
Tulis sebuah program yang mengambil satu baris string dari dua ular melar yang saling berhadapan, dengan beberapa ruang di antaranya. Kedua ular akan berada dalam posisi paling tidak melar (semua batang vertikal, tanpa garis miring). Tali akan mulai dengan ekor ular yang menghadap ke kanan dan diakhiri dengan ekor ular yang menghadap ke kiri (Anda dapat mengasumsikan ada juga baris baru yang tertinggal).
Misalnya, inilah input yang mungkin dengan lima spasi di antara ular:
<|=||:)~.....~(:||||>
Saya menggunakan titik ( .
) alih-alih karakter spasi aktual untuk kejelasan.
Tanpa spasi antar ular juga merupakan input yang valid:
<|=||:)~~(:||||>
Kami mengatakan ular-ular itu berciuman ketika lidah mereka bersentuhan seperti ini.
Program Anda perlu memperpanjang beberapa kombinasi bagian melar dari kedua ular sehingga ular memiliki jumlah ruang paling sedikit di antara mereka (tanpa tumpang tindih), yaitu sedemikian rupa sehingga ular sedekat mungkin dengan ciuman .
Kedua ekor ular itu tetap tetapi kepala dan tubuhnya dapat bergerak - tepat untuk ular yang menghadap ke kanan, kiri untuk ular yang menghadap ke kiri - sesuai dengan bagian melar yang telah diperpanjang.
Output dari program Anda adalah string garis tunggal (plus baris tambahan opsional) yang menunjukkan ular sedekat mungkin dengan ciuman, dengan garis miring berganti-ganti di tempat garis vertikal untuk bagian melar yang telah diperpanjang.
Misalnya, output untuk <|=||:)~.....~(:||||>
(dari atas) adalah:
</\=||:)~~(:/\/\/\/\>
Ini adalah satu - satunya solusi di sini karena dengan kombinasi lain dari bagian melar diperpanjang, ular akan tumpang tindih atau lebih jauh dari ciuman.
Jika ada beberapa solusi yang mungkin, hasilnya mungkin salah satunya.
Misalnya, jika inputnya
<|=||:)~.....~(:|||=|>
outputnya bisa
<|=/\/\:)~~(:/\/\/\=|>
atau
</\=||:)~~(:/\/\/\=/\>
Ingatlah bahwa ular tidak akan selalu bisa ciuman, tetapi Anda masih harus membuatnya sedekat mungkin.
Misalnya, jika inputnya
<||=||||:)~...~(:||>
outputnya bisa
</\/\=||||:)~.~(:||>
atau
<||=||||:)~.~(:/\/\>
Jika ular sudah berciuman, hasilnya akan sama dengan input. misalnya
<|=||:)~~(:||||>
Secara umum, output akan sama dengan input jika ekstensi dari setiap bagian melar akan membuat ular tumpang tindih. misalnya
<|||=|||:)~..~(:||||=|||||=||||||>
Catatan
- Mengambil input dari stdin atau baris perintah seperti biasa, atau menulis fungsi yang mengambil string. Cetak atau kembalikan hasilnya.
- Anda dapat menggunakan titik (
.
) pada input dan output sebagai ganti spasi () jika diinginkan.
- Ini hanya penting bahwa garis miring berganti dalam barisan vertikal yang mereka ganti. Pemesanan mereka pada ular pada umumnya atau apakah tebasan maju atau mundur datang pertama tidak masalah.
- Bagian melar tidak dapat memanjang sebagian - persis dua atau tidak ada ekstensi sama sekali.
Mencetak gol
Ini adalah kode-golf . Pengajuan terpendek dalam byte menang. Tiebreaker adalah jawaban sebelumnya.
>
tidak tidak akan menjadi <
, sama untuk untuk (
dan )
), tetapi ia juga mengatakan "Hanya penting bahwa garis miring berganti dalam urutan bilah vertikal yang mereka ganti. Pemesanan mereka di ular pada umumnya atau apakah tebasan maju atau mundur datang pertama tidak masalah. "