Saya mendengar di suatu tempat bahwa satu hal yang teknologi belum bisa lakukan adalah melipat handuk 1 . Jadi sekarang tugas Anda untuk membuktikan pernyataan itu salah!
Diberikan string sebagai input, terdiri dari persegi panjang (handuk), seperti yang berikut, lipat setiap handuk menjadi dua kali dua. Sebagai contoh:
+------+ +------+ +--+
| | | | | |
| | | | | |
| | -> +------+ -> +--+
| |
| |
| |
+------+
Perhatikan bahwa ketika handuk dilipat, pertama kali dilipat, kemudian dari kiri ke kanan. Program Anda juga harus meniru perilaku ini. Juga perhatikan bahwa dalam kasus uji, handuk tetap berada di tempat yang sama, tetapi dilipat.
Aturan:
- Metode input / output standar.
- Celah standar berlaku.
- Input dan output harus berupa string.
- Keluaran apa pun yang tertinggal tidak apa-apa, asalkan handuk berada di tempat yang tepat relatif satu sama lain.
- Anda dapat mengasumsikan bahwa panjang setiap sisi handuk akan selalu habis dibagi 2.
- Handuk yang dilewatkan sebagai input akan selalu berbentuk persegi panjang.
Handuk akan selalu dipisahkan - namun, mereka dapat dipisahkan dengan jumlah yang bervariasi.
kode-golf , jadi kode terpendek menang!
Kasus uji:
Input:
+------+
| |
| |
| |
| |
| |
| |
+------+
Output:
+--+
| |
| |
+--+
Input:
+--+ +--+ +--+
| | | | | |
| | | | | |
+--+ +--+ +--+
Output:
++ ++ ++
++ ++ ++
Input:
+----+
| |
| |
| |
| | ++
+----+ ++
Output:
+-+
| |
+-+
+
Input:
+--+
+--+ ++
||
||
++
Output:
++
+
+
1: Ini telah dibantah oleh Geobits dan Laikoni. Namun, saya memang pernah mendengarnya di suatu tempat.
Jawaban:
Retina , 245 byte
Cobalah online!
Catatan: beberapa garis berakhir dengan spasi. Penjelasan:
Hapus setiap garis lain dari setiap handuk (ini berfungsi karena semua handuk memiliki ketinggian lebih),
geser semua potongan handuk yang terlepas ke atas,
dan perbaiki bagian bawah handuk, secara efektif melipatnya.
Lipat handuk lebar 2 ke kanan.
Lipat handuk yang tersisa ke kanan.
sumber
<-2>
adalah kelompok penyeimbang .NET?(?<-2>.)*
muncul tangkapan setiap kali, jadi tidak dapat mengulangi lebih banyak dari yang(.)*
dilakukan, sementara(?(2)(?!))
memeriksa bahwa tidak ada tangkapan yang tersisa, sehingga ia mengulangi jumlah yang sama kali.Paket Oktaf dengan Gambar ,
277272 byteInput dan output adalah array char 2D.
Cobalah online! Atau verifikasi semua kasus uji: 1 , 2 , 3 , 4 . (Perhatikan bahwa
endfunction
dalam kasus uji hanya diperlukan untuk memisahkan fungsi dari kode berikutnya. Tidak perlu jika fungsi disimpan dalam file sendiri.)Versi dan penjelasan yang mudah dibaca
sumber