Sebuah counterstring adalah semacam data uji self-describing yang digunakan dalam pengujian perangkat lunak. Tidak yakin itu sebenarnya diciptakan oleh James Bach , tapi saya tahu itu dari sana.
Idenya adalah sebagai berikut: data uji berisi banyak asterisk ( *
). Angka di depan tanda bintang memberi tahu Anda berapa lama data uji pada titik itu. Jika Anda perlu mengetahui posisi dalam data uji yang bukan tanda bintang, cari tanda bintang terakhir, lihat nomor sebelumnya dan tambahkan jumlah digit yang mengikuti.
Urutannya dimulai seperti ini:
2*4*6*8*11*14*17*20*23*
^
Seperti yang Anda lihat, tanda bintang yang ditandai ada di posisi 14.
Jika suatu file terpotong sebagai berikut
[...]2045*20
maka Anda dapat memperoleh bahwa ada batas 2047 karakter di suatu tempat (2045 di mana tanda bintang plus 2 untuk 2
dan 0
).
Adalah tugas Anda untuk membuat program terpendek (ini adalah kode-golf ) yang menampilkan (std :: out atau file atau apa pun) string uji panjang sewenang-wenang dari format itu. Panjang karakter diberikan sebagai argumen. Program harus mendukung hingga 2 GB data uji (nilai input 2147483647 karakter).
Posisi "Berbahaya" dalam file 2 GB:
8*11*
98*102*
998*1003*
9998*10004*
99998*100005*
999995*1000003*
9999995*10000004*
99999995*100000005*
999999995*1000000006*
Ini harus menjawab pertanyaan @Leaky Nun jika ada keputusan untuk membuat antara 995 * 999 * dan 995 * 1000 * atau serupa: tidak.
Akhir dari file 2 GB dengan nilai input 2147483647 adalah:
2147483640*2147483
995*999*
dan 995*1000*
atau sesuatu seperti itu?