Tulis regex yang berfungsi dalam setidaknya 2 rasa regex (atau versi), dan cocokkan dengan string yang berbeda di setiap rasa (atau versi) yang digunakan.
String yang harus dicocokkan dalam tantangan ini adalah kata-kata pertama dari nama kode Ubuntu, yang tercantum di bawah ini. Regex Anda harus cocok dari atas daftar. Artinya, jika regex Anda bekerja dalam 3 rasa, itu harus cocok Warty
Hoary
dan Breezy
, dan bukan yang lain.
Warty
Hoary
Breezy
Dapper
Edgy
Feisty
Gutsy
Hardy
Intrepid
Jaunty
Karmic
Lucid
Maverick
Natty
Oneiric
Precise
Quantal
Raring
Saucy
Trusty
Utopic
Vivid
Wily
Xenial
Yakkety
Zesty
17.10
18.04
18.10
19.04
19.10
...
Jika regex Anda berfungsi dalam lebih dari 26 rasa, Anda dapat mencocokkan nomor versi Ubuntu. Mulai dari 17,10, untuk setiap rasa baru, ubah angka kedua menjadi 10 jika angka 04, dan tambah angka pertama dan ubah angka kedua menjadi 04.
Dalam setiap rasa, regex Anda harus cocok hanya dengan string yang seharusnya dan tidak ada yang lain (tidak terbatas pada nama kode). Mengejar baris baru tidak masalah. Itu berarti regex Anda hanya bisa mencocokkan string tanpa baris baru, mencocokkan hanya string dengan baris baru, atau cocok dengan keduanya. Dan itu tidak harus konsisten dalam rasa yang berbeda. Anda dapat berasumsi bahwa input tersebut dalam ASCII yang dapat dicetak (kecuali untuk baris baru yang tertinggal, jika ada).
Skor Anda adalah (panjang kode Anda + 10) / ((jumlah rasa) ^ 2). Skor terendah menang.
sumber
Jawaban:
87 byte, 5 rasa, (87 + 10) / 25 = 3.88
Saya telah menggunakan uji rasa yang mudah untuk saat ini, yaitu:
Struktur umum adalah
^((...)y|...)$
, yaitu memfaktorkan keluar trailingy
dan menambahkan jangkar.Warty (PCRE)
Dalam PCRE dan Ruby,
[[:word:]]
adalah kelas karakter POSIX yang cocok dengan karakter kata - dalam rasa lain Anda mendapatkan[[:word:]
kelas karakter kemudian literal&&]
, yang gagal(?=W)
menegaskan. Untuk membuat Ruby gagal,&&
digunakan untuk memotong kelas POSIX dengan tidak ada, sedangkan di PCRE&&
tidak memiliki arti khusus.Hoary (Javascript)
Untuk alasan apa pun, Javascript adalah satu-satunya citarasa dari kelompok yang
\a
merupakan literala
- dalam citarasa lain itu cocok dengan karakter bel (ASCII 7).Breezy (Python)
Dalam Python dan Javascript,
\z
adalah literalz
- dalam arti lain itu setara dengan$
akhir jangkar string. Untuk membuat Javascript gagal, kita menggunakan kelas char[]e]
, yang merupakan kelas char kosong[]
lalu literale]
dalam Javascript, dan kelas dua-char[]e]
dengan Python.Dapper (.NET)
In
.NET
,[D-[E]]
adalah perbedaan set, menghapus set[E]
dari[D]
. Dalam PCRE, Javascript dan Python, kita memiliki kelas[D-[E]
lalu literal]
. Ruby sedikit berbeda, tetapi karena suatu alasan ia mem-parsing sebagai kelas[D-[E]]
yang hanya cocokE
, dan saya belum mengetahui mengapa ...Edgy (Ruby)
Ruby memungkinkan kelas char di dalam kelas char, jadi
[[d]]
sebenarnya setara dengan[d]
, atau adild
. Dalam rasa lain, kita memiliki[[d]
literal]
.sumber