Memisahkan string menjadi potongan dengan panjang yang sama n
Seperti dalam kebanyakan bahasa "normal" TMTOWTDI (ada lebih dari satu cara untuk melakukannya). Saya berasumsi di sini bahwa input tidak mengandung umpan baris, dan bahwa "pemisahan" berarti membaginya menjadi garis. Tetapi ada dua tujuan yang sangat berbeda: jika panjang string bukan kelipatan panjang chunk, apakah Anda ingin menyimpan chunk trailing yang tidak lengkap atau Anda ingin membuangnya?
Menyimpan potongan trailing yang tidak lengkap
Secara umum, ada tiga cara untuk melakukan pemisahan di Retina. Saya menghadirkan ketiga pendekatan di sini, karena mereka mungkin membuat perbedaan yang lebih besar ketika Anda mencoba menyesuaikannya dengan masalah yang terkait. Anda dapat menggunakan pengganti dan menambahkan umpan baris ke setiap pertandingan:
.{n}
$&¶
Itu 8 byte (atau sedikit kurang jika n = 2atau n = 3karena Anda dapat menggunakan ..atau ...masing - masing). Ini memiliki satu masalah: menambahkan baris baris tambahan jika panjang string adalah kelipatan dari panjang chunk.
Anda juga dapat menggunakan tahap pemisahan, dan memanfaatkan fakta bahwa tangkapan dipertahankan dalam pemisahan:
S_`(.{n})
The _pilihan menghilangkan garis-garis kosong yang dinyatakan akan dihasilkan dari meliputi seluruh string dengan pertandingan. Ini adalah 9 byte, tetapi tidak menambahkan linefeed tambahan. Untuk n = 3itu 8 byte dan untuk n = 2itu 7 byte. Perhatikan bahwa Anda dapat menyimpan satu byte secara keseluruhan jika baris kosong tidak masalah (mis. Karena Anda hanya akan memproses baris non-kosong dan menghilangkan baris baris nanti): maka Anda dapat menghapus _.
Opsi ketiga adalah menggunakan korek api. Dengan !opsi tersebut kita dapat mencetak semua kecocokan. Namun, untuk memasukkan bilah trailing, kami perlu mengizinkan panjang kecocokan variabel:
M!`.{1,n}
Ini juga 9 byte, dan juga tidak akan termasuk linefeed baris tambahan. Ini juga menjadi 8 byte untuk n = 3dilakukan ..?.?. Namun perhatikan bahwa itu berkurang menjadi 6 byte n = 2karena sekarang kita hanya perlu ..?. Perhatikan juga bahwa Mini dapat dihapus jika ini adalah tahap terakhir dalam program Anda, menghemat satu byte dalam hal apa pun.
Membuang potongan trailing yang tidak lengkap
Ini menjadi sangat lama jika Anda mencoba melakukannya dengan pengganti, karena Anda perlu mengganti bilah trailing dengan apa-apa (jika ada) dan juga dengan split. Jadi kita bisa dengan aman mengabaikannya. Menariknya, untuk pendekatan pertandingan justru sebaliknya: semakin pendek:
M!`.{n}
Itu 7 byte, atau kurang untuk n = 2, n = 3. Sekali lagi, perhatikan bahwa Anda dapat menghilangkan Mjika ini adalah tahap terakhir dalam kode.
Jika Anda ingin mengikuti garis makan di sini, Anda bisa mendapatkannya dengan menambahkan |$ke regex.
Bonus: potongan yang tumpang tindih
Ingatlah bahwa Mmemiliki &opsi yang mengembalikan kecocokan yang tumpang tindih (yang biasanya tidak dimungkinkan dengan regex). Ini memungkinkan Anda untuk mendapatkan semua potongan (substring) yang tumpang tindih dari string dengan panjang tertentu:
M!&`.{n}