Perhatikan: Mengikuti permintaan populer, saya sedikit mengendurkan aturan:
- Ukuran regex maksimum tumbuh sebesar 1 byte setiap 5 jawaban . Jawaban N dapat menggunakan hingga 29 + ⌈N / 5⌉ byte.
- Nilai setiap jawaban adalah (M / (30 + N / 5)) N
Di golf regex, Anda diberikan dua set string, dan diminta untuk membuat regex terpendek yang cocok dengan semua string di set pertama, tetapi gagal pada semua string di set kedua.
Itulah yang akan kita lakukan, tetapi setiap kali seseorang menjawab, regex mereka sendiri akan ditambahkan ke salah satu dari dua rangkaian string (pilihan mereka sendiri). Karena itu, ada perintah ketat untuk menjawab dalam tantangan ini.
Mari kita lihat sebuah contoh:
- Katakan saya memulai ini dengan
abc
(yang tidak akan saya lakukan), dan memasukkannya ke dalam set pertandingan . - Maka jawaban kedua yang valid adalah
a
, karena cocok dengan yang di atas (dan tidak ada string yang perlu gagal). Katakan jawaban ini sesuai dengan set gagal . - Sekarang jawaban ketiga harus cocok
abc
tetapi gagala
. Karena itu jawaban ketiga yang mungkinb
. Mari kita letakkan ini di set pertandingan . - Jawaban keempat sekarang harus cocok
abc
danb
, tetapi gagala
. Kami akan melarang jawaban duplikat, jadi regex yang valid akan menjadic|b
.
Yang penting adalah bahwa jawaban Anda harus sesingkat mungkin. Ini mungkin sepele untuk beberapa jawaban pertama, tetapi begitu kita mendapatkan beberapa jawaban, itu akan menjadi semakin sulit untuk mendapatkan kecocokan yang diinginkan dalam karakter sesedikit mungkin.
Untuk tantangan sebenarnya, awalnya kumpulan pertandingan berisi PPCG
dan kumpulan gagal berisi [PPCG]
, dan saya telah memberikan jawaban pertama.
Menjawab
Hal utama yang perlu dipahami tentang tantangan ini adalah bahwa hanya satu orang yang dapat menjawab pada satu waktu dan setiap jawaban tergantung pada yang sebelumnya .
Seharusnya tidak ada dua jawaban dengan hal yang sama N
. Jika dua orang kebetulan menjawab beberapa orang secara bersamaan N
, orang yang menjawab kemudian (walaupun perbedaannya hanya beberapa detik) harus dengan ramah menghapus jawaban mereka.
Agar ini berjalan sedikit lebih lancar, cobalah untuk tetap pada langkah-langkah berikut saat memposting jawaban Anda:
- Pastikan seseorang telah memverifikasi secara independen kebenaran jawaban sebelumnya (dan meninggalkan komentar yang sesuai).
- Ambil dua set tes yang ditemukan di jawaban sebelumnya, dan tulis regex yang cocok dengan semua string dalam satu set dan tidak ada yang lain.
Posting jawaban Anda dalam format berikut:
# N. [regex flavour] - [regex size in bytes] [regex] [link to online regex tester] [notes, explanation, observations, whatever] ### The next answer has to match the following strings: [match set] ### And fail on these strings: [fail set]
di mana
N
nomor jawaban Anda. Silakan salin[match set]
dan[fail set]
dari jawaban sebelumnya, dan tambahkan regex Anda ke salah satu dari mereka.Ini sangat penting untuk tantangan! Saya telah menyediakan alat dasbor untuk tantangan untuk membantu pembukuan, dan itu bergantung pada templat di atas. (Lihat bagian bawah pos.)
- Pengguna lain sekarang harus meninjau kiriman Anda dan meninggalkan komentar "Kebenaran diverifikasi" jika jawaban Anda mengikuti semua aturan (lihat di bawah). Jika tidak, mereka harus meninggalkan komentar yang menunjukkan kekurangan. Anda punya waktu 15 menit untuk memperbaiki masalah itu. Jika tidak, jawaban Anda akan dianggap tidak valid, harus dihapus, dan orang lain dapat memposting jawaban tindak lanjut ke yang sebelumnya. (Jika ini terjadi, Anda bebas mengirimkan jawaban baru kapan saja.)
Peraturan ini mungkin tampak agak ketat, tetapi mereka perlu untuk menghindari jawaban yang tidak valid di suatu tempat di rantai.
Aturan
- Seorang pengguna hanya dapat mengirimkan satu jawaban per periode 4 jam. (Ini untuk mencegah pengguna terus menonton pertanyaan dan menjawab sebanyak mungkin.)
- Seorang pengguna tidak boleh mengirimkan dua jawaban berturut-turut. (mis. sejak saya mengirimkan jawaban 1, saya tidak bisa menjawab 2, tetapi saya bisa melakukannya 3.)
- Jangan edit jawaban yang telah diverifikasi. (Bahkan jika Anda menemukan cara untuk mempersingkatnya!)
- Jika kesalahan ditemukan sebelumnya dalam rantai (yaitu setelah jawaban tindak lanjut telah diposting), jawaban yang menyinggung harus dihapus dan akan dihapus dari serangkaian string dimana kiriman baru gagal. Namun , semua jawaban yang telah diposting sejak seharusnya tidak diubah untuk mencerminkan.
- Nyatakan dengan jelas satu rasa yang digunakan regex Anda. Anda dapat memilih rasa apa saja yang dapat diuji secara online secara gratis. Ada daftar penguji online yang bagus di StackOverflow . Secara khusus, Regex101 dan RegexPlanet harus bermanfaat, karena mendukung berbagai macam rasa. Harap sertakan tautan ke penguji yang Anda pilih dalam jawaban Anda. Dengan mengaktifkan pengubah
g
lobal danm
ultiline di tester, Anda dapat menguji semua string sekaligus, satu di setiap baris (pengubah ini tidak dihitung terhadap ukuran regex Anda, karena mereka tidak diperlukan pada string individu). - Regex Anda tidak boleh kosong.
- Regex Anda untuk jawaban N tidak boleh lebih dari 29 + ⌈N / 5⌉ byte. Yaitu jawaban 1 hingga 5 dapat menggunakan hingga 30 byte (inklusif), jawaban 6 hingga 10 dapat menggunakan hingga 31 byte ... jawaban 31 hingga 35 dapat menggunakan hingga 36 byte. Periksa dasbor untuk melihat berapa banyak karakter yang dapat digunakan jawaban berikutnya.
- Regex Anda tidak boleh identik dengan string apa pun di set tes mana pun.
- Jangan menyertakan pembatas dalam kiriman atau jumlah byte Anda, bahkan jika bahasa host yang relevan menggunakannya. Jika regex Anda menggunakan pengubah, tambahkan satu byte per pengubah ke ukuran regex. Misalnya
/foo/i
akan 4 byte.
Mencetak gol
Skor masing-masing jawaban dihitung sebagai (M / (30 + N / 5)) N , di mana M adalah ukuran regex dalam byte, dan N adalah jumlahnya. Skor setiap pengguna adalah produk dari semua jawaban mereka. Pengguna dengan skor keseluruhan terendah menang. Jika terjadi seri, pengguna dengan kiriman terbaru menang. Saya akan menerima jawaban terakhir pengguna itu.
Jika Anda lebih suka menjumlahkan skor, Anda dapat menghitung skor setiap jawaban sebagai N * (log (M) - log (30)) dan jumlahkan semua jawaban. Itu akan memberikan urutan leaderboard yang sama.
Tidak perlu untuk memasukkan skor jawaban di jawabannya, hanya melaporkan M . Dasbor tantangan di bagian bawah pertanyaan akan menghitung skor, dan jika ada dua skor yang sangat dekat, saya akan mengecek hasilnya menggunakan tipe presisi arbitrer.
Perhatikan bahwa skor setiap jawaban kurang dari 1, sehingga Anda dapat meningkatkan skor keseluruhan dengan memberikan jawaban baru. Namun, semakin pendek setiap kiriman Anda, semakin efisien Anda dapat menurunkan skor Anda. Selanjutnya, jawaban selanjutnya dapat mencapai skor yang lebih rendah meskipun lebih lama, karena eksponen yang meningkat.
Dasbor
Saya telah menulis alat Dashboard kecil, menggunakan Stack Snippets, berdasarkan pekerjaan Optimizer di sini . Saya harap ini akan membantu kita mengatur tantangan yang bergantung pada jawaban ini.
Ini akan menampilkan status tantangan saat ini - khususnya, jika ada jawaban yang bertentangan, jika jawaban perlu diverifikasi, atau jika jawaban berikutnya dapat diposting.
Ini juga menghasilkan daftar semua jawaban dengan skor, serta papan peringkat semua pengguna. Harap tetap menggunakan format tantangan di atas, sehingga dasbor dapat membaca string yang relevan dari jawaban Anda. Kalau tidak, Anda mungkin tidak termasuk dalam leaderboard.
Harap beri tahu saya ( idealnya dalam obrolan ) jika Anda menemukan bug atau memiliki ide bagaimana kegunaan alat ini dapat ditingkatkan.
sumber
Jawaban:
42. Rasa python - 38
Diuji pada Regex101
Kurangnya entropi dalam beberapa jawaban terakhir membuat saya ... (seharusnya melakukan ini lebih cepat)
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
28. Rasa python - 29
Diuji pada Regex101
Banyak bermain-main dilakukan - # 4 di set pass mungkin rasa sakit terbesar, karena itu adalah substring dari regex di set gagal, dan juga berbagi akhiran dengan regex lain di set gagal.
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
24 - Rasa python - 29
Diuji di sini
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
10. Rasa python - 19
Diuji pada Regex101 .
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
8. ECMAScript rasa - 14 byte
Demo
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
2. ECMAScript flavour - 6 byte
Uji di sini
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
9. Rasa python - 28
Diuji pada Regex101
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
23. PCRE rasa - 28
Diuji pada Regex101.
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
[^]
harus dilakukan]
sebagai elemen pertama dari kelas karakter (setelah negasi opsional), hanya]
di dalam kelas karakter dan tidak menutup (karena kelas karakter kosong sedikit tidak ada gunanya). Jadi[^]]
cocok dengan apa pun kecuali]
. Pengecualian penting adalah ECMAScript, yang memungkinkan kelas karakter kosong. Dalam hal[]
itu tidak cocok dengan apa pun, itu bertindak seperti(?!)
dan[^]
cocok dengan karakter apa pun, yang nyaman, karena ECMAScript tidak memilikis
pengubah, dan sulit[\s\S]
untuk mengetik membaca.11. Python - 29
► Tes di RegexPlanet
Hampir semua jawaban tidak valid memiliki panjang yang berbeda dari semua jawaban yang valid. Regex ini memanfaatkan itu.
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
29. PCRE flavor - 28
Diuji pada Regex101
Jawaban ini masih berfungsi ...
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
31. Citarasa Perl - 29
[?[CP(].[-<)|w]|^P|^[^C|\\]*$
Saya tidak tahu cara kerjanya, itu diproduksi oleh perampokan pertama saya ke dalam algoritma genetika . Ada output program yang menyebutkan jawabannya.
Jawaban selanjutnya harus sesuai:
dan gagal:
sumber
29
? Dengan cara ini tidak akan berakhir segera ... Saya pikir tantangan utamanya adalah menemukan yang terakhir, regex utama.32. PCRE - 30 byte
Diuji pada Regex101
Jawaban berikutnya harus cocok dengan string berikut :
Dan gagal pada string ini :
sumber
1. ECMAScript flavour - 2 byte
Uji di Regex101.
Set pencocokan awal adalah
PPCG
dan set gagal[PPCG]
. Oleh karena itu, regex ini hanya menguji bahwa string dimulai denganP
.Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
3. ECMAScript flavour - 6 byte
Uji di sini
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
7. Rasa python - 16
Diuji pada Regex101
Harus menambahkan \ ke daftar pertandingan :)
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
12. ECMAScript rasa - 17
Uji di sini .
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
22. PCRE Flavour - 29 byte
Karena # 22 asli tidak dimodifikasi selama 1 jam saya menganggap itu menjadi tidak valid.
Demo
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
26. Rasa python - 28
Tes pada Regex101
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
30. Rasa python - 28
Diuji pada Regex101
Saat ada surat wasiat ...
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
37. Citarasa Perl - 30
Pengajuan pada Regex101 .
Solusinya dihasilkan oleh program yang sama seperti sebelumnya. Program ini juga telah mencetak solusi 29-karakter
\?[^$w]*\$|[]^C]\w)$|w.]|\w.\
, saya tidak tahu mengapa, karena kelihatannya seperti regex rusak ...Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
40. PCRE - 33 byte
Diuji pada Regex101
Jawaban berikutnya harus cocok dengan string berikut :
Dan gagal pada string ini :
sumber
4. ECMAScript flavour - 5 byte
Uji di sini .
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
5. ECMAScript flavour - 6 byte
Diuji pada Regex101 .
Waktu untuk sedikit membumbui dengan set keberhasilan.
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
6. ECMAScript flavour - 9 byte
Diuji pada Regex101 .
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
14. Rasa PCRE - 25
Diuji pada Regex101
Ini mulai menjadi sangat sulit.
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
15. Rasa PCRE - 26
Diuji pada Regex101
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
16. Rasa PCRE - 21
Diuji pada Regex 101 .
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
PPCG
.25. PCRE rasa - 29
Diuji di sini. (Regex pengujian berisi tambahan
\n
untuk memastikan bahwa tidak ada kecocokan yang mencakup beberapa baris. Ini tidak perlu untuk mencocokkan setiap string individual.)Itu adalah buah yang menggantung rendah! :) Saya harus mengucapkan selamat kepada plannapus, regex ini luar biasa elegan untuk set tes saat ini. Jika Anda ingin memperbaiki jawaban ini, pastikan untuk membatalkan jawaban sebelumnya juga!
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber
35. PCRE - 35 byte
Diuji pada Regex101
Jawaban berikutnya harus cocok dengan string berikut :
Dan gagal pada string ini :
sumber
36. Rasa python - 32
Diuji pada Regex101
Saya memiliki tiga regex 32-byte yang siap, dan untungnya salah satunya masih berfungsi: D
Jawaban selanjutnya harus cocok dengan string berikut:
Dan gagal pada string ini:
sumber