Di ruang obrolan dengan beberapa orang, sebuah topik muncul di antara saya dan mereka tentang berapa banyak string yang mungkin cocok dengan regex.
Tugas Anda adalah membangun sebuah program yang dapat menjawab pertanyaan itu.
Program Anda akan menerima, sebagai input, setiap ekspresi reguler seperti yang didefinisikan dalam dokumen ini sebagai "ekspresi reguler yang diperluas", seperti:
^[A-Za-z0-9]{8}$
dan output jumlah total string yang mungkin cocok dengan ungkapan itu, menghasilkan infinity
jika ada banyak sekali:
218340105584896
Program Anda juga dapat menampilkan too many
jika ada lebih dari 2 63 -1 string yang mungkin cocok dengan regex; namun, itu tidak boleh di-output infinity
kecuali sebenarnya ada banyak string.
Program terpendek untuk melakukan hal di atas menang.
^[A-Za-z0-9]{8}$
? Kalau tidak, jawabannya adalahinfinity
.Jawaban:
Python 3370
Saya mendapatkan ini sekitar fungsional yang saya bisa, dan bahkan mendapat pergantian untuk bekerja (dengan pengecekan penghitungan ganda yang benar!). Sejauh yang saya tahu ini bekerja untuk semuanya kecuali lookarounds (karena itu akan gila).
Bagi siapa pun yang menulis solusi mereka sendiri, jangan ragu untuk menggunakan / meningkatkan metode saya sebanyak yang Anda suka.
Kode:
Tidak Terkumpul:
Berikut adalah beberapa kasus uji yang relevan yang telah saya konfirmasi:
* Ini sebenarnya berbeda di golf dan ungolfed karena perbedaan satu karakter dalam apa yang didefinisikan sebagai ascii yang valid. Saya percaya golf adalah yang lebih tepat.
Untuk mengkonfirmasi keakuratannya, tes lebih lanjut dapat dilakukan, harap beri tahu saya jika ada kesalahan (sejujurnya saya tidak akan terkejut jika ada beberapa).
sumber
<!-- language: lang-code -->
(untuk satu bagian dari kode) atau<!-- language-all: lang-code -->
(untuk semua kode dalam satu posting), di manalang-code
adalah kode bahasa dari bahasa Anda. Pastikan formatnya sama persis (dengan spasi, dll). Daftar kode bahasa dapat ditemukan di sini . (Anda harus sedikit gulir ke bawah.) Saya tidak yakin apakah menggunakan tag akan berhasil, jadi tetaplah pada kode bahasa. :)