Sorun
Bazı kod kullanmanız gereken düzenli ifadeler bir demet var, ama regex desteklemeyen bir programlama dili kullanıyorum! Neyse ki, test dizesinin maksimum uzunluğa sahip olacağını ve sadece yazdırılabilir ASCII'den oluşacağını biliyorum.
Meydan okuma
Girmelisiniz regex ve bir sayı n
ve çıkış yazdırılabilir ASCII (ASCII kodları 32 dahil 126 kadar oluşan her dize için
~
daha az ya da eşit uzunlukta, hiçbir sekme veya yeni satırlar) n
regex o maçları. Sen olabilir değil yerleşik kullanmak normal ifadeler veya regex eşleştirme fonksiyonları kodunuzda hiç. Normal ifadeler aşağıdakilerle sınırlı olacaktır:
- Değişmez karakterler (ve bir karakteri değişmez olmaya zorlayan kaçar, yani
\.
değişmezdir.
,\n
değişmezdirn
(sadece ile eşdeğerdirn
) ve\w
eşdeğerdirw
. Kaçış dizilerini desteklemenize gerek yoktur.) .
- joker karakter (herhangi bir karakter)- Karakter sınıfları,
[abc]
"a veya b veya c"[d-f]
anlamına gelir ve d'den f'ye kadar olan herhangi bir şey anlamına gelir (yani, d veya e veya f). Bir karakter sınıfında özel anlamı olan tek karakterler[
ve]
(her zaman\
kaçacak , bu yüzden endişelenmeyin), (tabii ki kaçış karakteri),^
karakter sınıfının başında (bu bir olumsuzlamadır) ) ve-
(bu bir aralıktır). |
- VEYA operatörü, dönüşüm.foo|bar
araca yafoo
yabar
, ve(ab|cd)e
maçları yaabe
yacde
.*
- önceki jetonu sıfır veya daha fazla kez tekrarlayın, açgözlü (mümkün olduğunca çok kez tekrarlamaya çalışır)+
- bir veya daha fazla kez tekrarlandı, açgözlü?
- sıfır veya bir kez- Grup belirteçleri, parantez ile gruplandırma
|
,*
.+
veya?
Giriş regex her zaman geçerli olacak (yani sizin gibi girdi işlemek gerekmiyor ?abc
ya (foo
ya da herhangi bir geçersiz giriş). Dizeleri istediğiniz sırada verebilirsiniz, ancak her dize yalnızca bir kez görünmelidir (yinelenen çıktılar almayın).
Test Durumları
Girdi: .*
, 1
Çıktı: (boş dize), ,
!
, "
, ..., }
,~
Girdi: w\w+
, 3
Çıktı: ww
,www
Girdi: [abx-z][^ -}][\\]
, 3
Çıktı: a~\
, b~\
, x~\
, y~\
,z~\
Girdi: ab*a|c[de]*
, 3
Çıktı: c
, cd
, ce
, aa
, cde
, ced
, cdd
, cee
,aba
Girdi: (foo)+(bar)?!?
, 6
Çıktı: foo
, foo!
, foofoo
,foobar
Girdi: (a+|b*c)d
, 4
Çıktı: ad
, cd
, aad
, bcd
, aaad
,bbcd
Girdi: p+cg
, 4
Çıktı: pcg
,ppcg
Girdi: a{3}
, 4
Çıktı:a{3}
Kazanan
Bu kod golf , bu yüzden bayt içindeki en kısa kod kazanacak!
|
çok az mantıklı. İç içe gruplarla ilgilenmiyor gibi görünüyor a|b|c
. Birleştirmenin ve alternatifin ne kadar güçlü bir şekilde bağlandığına ilişkin standart açıklamaları kullanmanın yanlışlığı nedir? (Ve sen sandbox'ı kullanmamak için hiçbir bahane)