Koronkorko adalah kata dalam bahasa Finlandia untuk bunga majemuk . Kami tidak ingin bunga majemuk dalam string kami, jadi mari kita cari persamaan reguler sesingkat mungkin untuk mengecualikannya.
Diberikan string yang hanya terdiri dari karakter alfabet huruf besar AZ, tentukan persamaan reguler sesingkat mungkin yang cocok dengan string jika tidak mengandung substring KORONKORKO
. String apa pun yang berisi KORONKORKO
sebagai substring tidak boleh dicocokkan dengan regex.
Hanya karakter A
- Z
, [
, ]
, -
, ^
, ,
?
, *
, +
, |
, (
, dan )
harus digunakan dalam ekspresi.
Saya pikir ini bisa dilakukan dengan 118 karakter dalam ekspresi. Bisakah Anda membuatnya lebih pendek?
Catatan: Tantangan ini dari Ohjelmointiputka (dalam bahasa Finlandia).
!
karakter yang diizinkan, Anda bisa melakukannya^((?!KORONKORO).)*$
selama 19 byte.!
tidak diizinkan.-
dan^
dalam (jadi^
tidak dapat digunakan sebagai jangkar), dan kecocokan hanya dihitung jika seluruh string dicocokkan oleh regex (yaitu sekitar implisit^$
, seperti menentang "regex" normal yang menganggap string cocok dengan jika ada bagian yang cocok dengan regex)Jawaban:
204 karakter
Dihasilkan dengan mengubah
.*KORONKORKO.*
menjadi mesin kondisi terbatas, membalikkan mesin kondisi terbatas, dan mengubahnya kembali menjadi regex.sumber
Python,
777997118 byteSunting 3: Tulis ulang. Menggunakan lookaheads bersarang
Regex 101
Edit 2: Ditambahkan '$ |' di seluruh regex. Sekarang, jika awalan KORONKORKO telah dicocokkan, item berikutnya yang cocok adalah end-of-string, karakter yang mengakhiri awalan, atau karakter yang memperluas awalan jika diikuti oleh sesuatu yang mengakhiri awalan.
Regex ini berfungsi dengan
re.fullmatch()
, yang ditambahkan dengan Python 3.4. Untuk digunakan denganre.match()
,^
dan$
perlu ditambahkan ke awal dan akhir pola, masing-masing, untuk 2 byte lebih.Tautan Regex101
Solusi yang salah sebelumnya (lihat komentar):
Edit: Menambahkan single K
sumber
K
.KKORONKORKO
^
dan akhir$
tidak perlu. Juga,=
dan$
tidak diizinkan.