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.