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, Pvb, 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 edeğ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 (^,^). "