Göreviniz, belirli bir dizenin geçerli bir normal ifade olup olmadığını belirleyen ve StackExchange ağındaki sitelerden kaynaklı kod parçacıklarını kullanıp kullanmadığını belirleyen bir program oluşturmaktır.
Bu meydan okuma amaçları doğrultusunda, düzenli ifade diyalekt meta karakterlerin bir aşağı sıyrılmış ve çoğunlukla asgari seti olacaktır: ()*?|\
. Bu nedenle, yerleşik regex ayrıştırıcılarını kullanamayacaksınız.
\
meta karakterlerden kaçmak için kullanılır. Bunu bir meta karakter izlemelidir.- Kaçan parantezler dengelenmelidir
*
ve?
öncesinde meta olmayan karakter, parantez içindeki grup veya çıkış karakterli meta karakter kullanılmalıdır.- Diğer tüm yazdırılabilir ASCII karakterleri ve yeni satır, sekme ve boşluk meta olmayan karakterler olarak desteklenmelidir. Diğer karakterleri içeren bir dizgide ne olduğu belirsizdir.
- Normal ifadenin gerçek anlamı bu zorluk için önemli değildir.
Örnekler
Truthy:
abc
a?
(a|)*
()
a|b*
\*
\\
\\*
a*b?(cd|e)
+
[
}
(123\))*
\|
(a(b(c|d)*e)*f)*
(|\)*)
(abc)+*
(abc)+
+abc
^ last test case is an actual newline
Falsy:
?abc
*
**
\
(
a*?
a?*
?
a)
(\)
(|\)*
\()
|*
(?:abc)
\\**
\n
puanlama
Genel puanınız StackExchange çevresindeki soru ve cevaplardan alınan snippet sayısıdır.
- Tekrarlanan snippet'ler kullanıldıkları kadar sayılır.
- Boşluk serbestçe eklenebilir ve kaldırılabilir (Python, Haskell ve boşluklara duyarlı diğer diller nedeniyle) ve snippet sayınıza dahil değildir.
- Kodunuz aslında Whitespace'de yazılmışsa istisna olur .
- Bu meydan okumadan daha eski sorular, yanıtlar ve yorumlardan geldiği sürece snippet'lere herhangi bir StackExchange sitesinden izin verilir (düzenleme süresi dahil - gerekirse eski düzeltmeleri kullanın). (24 Eyl 2019 @ 15:30 UTC)
- Parçacıklar, önceden biçimlendirilmiş bir kod bloğunda olsun ya da olmasın, soru, yanıt veya yorum gövdesinin herhangi bir yerinden gelebilir.
- Bir parçacığı diğerinin ortasına eklemek dış parçacığın iki parçacık olarak sayılmasına neden olur
En düşük puan kazanır!