Isınma: Regex, Kağıt, Makas
Bu, çok kısa bir çözümün varolduğunu fark etmeden önce asılda göndermek istediğim zorluk. Bununla birlikte, aşağıdaki asıl sorun için hazırlık aşamasında düşünmek ilginç bir problem olabilir.
Üç regex R , P ve S yazıp birbirlerini döngüsel bir Rock, Paper, Scissors tarzında eşleştirecek şekilde yazın. Özellikle, R ' ile eşleşen S , S eşleşen P ve P ile eşleşen R , ancak R' değildir eşleşen P , S değildir eşleşen R ve p eşleşmeyen S . İşte kullanışlı bir masa:
Regex Matches Doesn't match
R S P
P R S
S P R
R , P ve S'nin kendileri de dahil olmak üzere diğer girdilerde ne yaptığı önemli değildir .
Burada eşleşme , girişin bazı (muhtemelen boş) alt dizgilerinin eşleşmesi anlamına gelir. Eşleşmenin tüm girişi kapsaması gerekmez.
Zorluk: Regex, Kağıt, Makas, Kertenkele, Spock
Bu zorluk için, RPS varyantı Kaya, Kağıt, Makas, Kertenkele, Spock ( The Big Bang Theory tarafından popüler hale getirilen ) temeline dayanarak yukarıdaki sorunun daha sert bir versiyonunu çözeceksiniz . RPSLV'de, iki döngüde birbirini geçen beş farklı sembol vardır:
- Kaya → Makas → Kertenkele → Kağıt → Spock → Kaya
- Kaya → Kertenkele → Spock → Makas → Kağıt → Kaya
Birbirlerine girdi olarak verildiğinde bu yapıyı taklit eden beş R , P , S , L ve V regex yazmalısınız . İşte ilgili tablo:
Regex Matches Doesn't match
R L, S V, P
L V, P S, R
V S, R P, L
S P, L R, V
P R, V L, S
Daha açıkçası, sen gerektiğini değil dizeyle eşleşen R
, P
vb, ancak diğer regexes. Örneğin eğer regex'iniz R ise ^\w$
, P ve V'nin dizeyle eşleşmesi gerekir ^\w$
, oysa S ve L'nin yapmaması gerekir.
Yine, eşleşme , girişin en az bir (muhtemelen boş) alt dizesinin eşleştiği anlamına gelir. Eşleşmenin tüm girişi kapsaması gerekmez. Örneğin \b
(kelime sınırı) hello
(başlangıçta ve sonunda) eşleşir, ancak eşleşmez (^,^)
.
Herhangi bir regex aroması kullanabilirsiniz, ancak lütfen cevabınızdaki seçimi belirtin ve mümkünse, seçilen lezzet için çevrimiçi bir test cihazına bir bağlantı verin. Flavour'un ana dilinde (Perl flavour'un e
değiştiricisi gibi) kod çağırmanıza izin veren herhangi bir regex özelliği kullanamazsınız .
Sınırlayıcılar (gibi /regex/
) diğerine girdi olarak verildiğinde regex'e dahil edilmez ve regex'in dışındaki değiştiricileri kullanamazsınız. Bazı tatlar hala satır içi sözdizimi benzeri değiştiricileri kullanmanızı sağlar (?s)
.
Puanınız beş regex'in bayt cinsinden uzunluğunun toplamıdır. Alçak daha iyi.
Bu soruna çalışan bir çözüm bulmak için ilk bakışta göründüğünden çok daha basit olduğu ortaya çıkıyor , ancak en uygun çözümü bulmanın oldukça zor olduğunu umuyorum.
\b
(sözcük sınırı) eşleşmeler hello
(başlangıçta ve sonunda), ancak eşleşmiyor (^,^)
. "