Normal ifade çokgenini oluşturun


19

En az 2 regex aromasında (veya versiyonlarında) çalışan bir regex yazın ve içinde çalıştığı her aromada (veya versiyonda) farklı bir dize eşleştirin.

Bu sınamada eşlenecek dizeler, aşağıda listelenen Ubuntu kod adlarının ilk sözcükleridir. Normal ifadeniz listenin en üstünden eşleşmelidir. Yani, regex'iniz 3 tatta çalışıyorsa, diğerleri ile eşleşmeli Warty Hoaryve eşleşmelidir Breezy.

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
...

Normal ifadeniz 26'dan fazla aromada çalışıyorsa, bunun yerine Ubuntu sürüm numaralarıyla eşleştirebilirsiniz. Her yeni lezzet için 17.10'dan başlayarak, eğer 04 ise ikinci sayıyı 10 olarak değiştirin ve ilk sayıyı artırın ve ikincisini aksi takdirde 04 olarak değiştirin.

Her lezzette, normal ifadeniz yalnızca varsayılan dizeyle ve başka hiçbir şeyle eşleşmemelidir (kod adları ile sınırlı değildir). Yeni satır takip etmek önemli değil. Bu, normal ifadenizin ya sondaki yeni satır olmadan yalnızca dizeyle eşleşebileceği, yalnızca sondaki yeni satırla dizeyle eşleşebileceği veya her ikisiyle eşleşebileceği anlamına gelir. Ve farklı tatlarda tutarlı olması gerekmez. Girişin yazdırılabilir ASCII'de olduğunu varsayabilirsiniz (varsa son satırsonu hariç).

Puanınız (kodunuzun uzunluğu + 10) / ((lezzet sayısı) ^ 2). En düşük puan kazanır.


1
Sadece kontrol etmek için - "Her lezzette, normal ifadeniz yalnızca varsayılan dize ve başka hiçbir şeyle eşleşmemelidir" anlamına gelir. name dizeleri veya yukarıdaki listede bir sürüm adı olmasa da normal ifadenin yalnızca tam dizeyle eşleşebileceği ve başka dizelerle eşleşemeyeceği anlamına mı geliyor?
Sp3000

@ Sp3000 Bu tam dizeyle eşleşmeli ve başka dizelerle eşleşmemelidir.
jimmy23013

Yanıtlar:


24

87 bayt, 5 lezzet, (87 + 10) / 25 = 3.88

^(((?=W)[[:word:]&&]art|Ho(?=a)\ar|Bre(?=ez)[]e]\z|E(?=dg)[[d]]g)y|(?=Da)[D-[E]]apper)$

Şimdilik test edilmesi kolay tatlarla gittim, bunlar:

Genel yapı ^((...)y|...)$, yani arka kısımları çarpanlara ayırmak yve ankrajlar eklemektir.

Siğil (PCRE)

(?=W)[[:word:]&&]art

PCRE ve Ruby'de, [[:word:]]bir kelime karakteriyle eşleşen bir POSIX karakter sınıfıdır - diğer lezzetlerde bir [[:word:]karakter sınıfından sonra değişmezden &&]başarısız olur (?=W). Ruby'yi başarısız kılmak &&için POSIX sınıfını hiçbir şeyle kesişmek için kullanılırken PCRE'de &&özel bir anlamı yoktur.

Hoary (Javascript)

Ho(?=a)\ar

Hangi nedenle olursa olsun, Javascript, \akelimenin tam anlamıyla bulunduğu gruptan tek lezzettir a- diğer lezzetlerde çan karakteriyle eşleşir (ASCII 7).

Breezy (Python)

Bre(?=ez)[]e]\z

Python ve Javascript'te \zbir değişmezdir z- diğer tatlarda $dize çapasının sonuna eşdeğerdir . Javascript'i başarısız kılmak []e]için boş bir char sınıfı, []ardından e]Javascript'te değişmez olan ve []e]Python'da iki karakterlik bir sınıf olan char sınıfını kullanıyoruz .

Dapper (.NET)

(?=Da)[D-[E]]apper

Olarak .NET, [D-[E]]bir dizi kaldırma bir dizi fark [E]ile ilgili [D]. PCRE, Javascript ve Python'da, [D-[E]o zaman bir değişmez sınıf var ]. Ruby biraz farklı, ama bir nedenden ötürü [D-[E]]sadece eşleşen bir sınıf olarak ayrılıyor ve nedenini Ehenüz çözemedim ...

Sinirli (Yakut)

E(?=dg)[[d]]g

Ruby, char sınıflarındaki char sınıflarına izin verir, bu yüzden [[d]]aslında [d]veya sadece eşdeğerdir d. Diğer tatlarda, [[d]o zaman bir değişmez var ].

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.