Üçüncü tamsayı ardışık üç tamsayıya uyması için bir regex ilk iki toplamı


27

Yalnızca son tamsayı önceki iki toplamıysa, boşluk içermeyen üç negatif tamsayıdan oluşan belirli bir dize ile eşleşen düzenli bir ifade yazın. Cevaplar, 2 ila 10 arasında radix olan herhangi bir sayı sisteminin tamsayıları olabilir.

Test durumları

Bunlar başarısız olmalı:

0 1 2
10 20 1000

Bunlar eşleşmelidir:

10 20 30
28657 46368 75025
0 0 0

kurallar

Cevabınız, ek bir kod olmadan tek bir regex'ten oluşmalıdır (isteğe bağlı olarak, çözümünüzü çalışması için gereken regex değiştiricilerin bir listesi hariç). Dilinizin regex lezzetinin barındırma dilinde kod çağırmanıza izin veren özelliklerini kullanmamalısınız (örn. Perl e değiştirici).

Lütfen cevabınızdaki regex lezzetinizi belirtin.

Bu regex golf, yani bayt cinsinden en kısa regex kazanıyor. Diliniz düzenli ifadeleri belirtmek için sınırlayıcılar gerektiriyorsa (genellikle /.../), sınırlayıcıları kendileri saymayın. Çözümünüz değiştiriciler gerektiriyorsa, değiştirici başına bir bayt ekleyin.

Regex-golf kuralları için Martin Ender ve jaytea'ya teşekkür ederiz.


Martin Ender'in regex ile tamsayı bulma ve artırma çözümüne dayanmasının mümkün olduğuna inanmam için sebeplerim var .


1
Bu kuraldan önce var olan herhangi bir regex lezzetini kullanabilirsiniz, bu kural mevcut fikir birliğini yansıtmaz; bu, görev ilan edildikten sonra oluşturulan veya güncellenen dillerin (ve dolayısıyla regex lezzetlerinin) hala rekabet edebileceğini söyler.
Outgolfer Erik,

1
İlgili. (Buna cevapların Jimmy'nin .NET cevabına biraz benzeyeceğinden şüpheliyim.)
Martin Ender

@EriktheOutgolfer gerçekten, meydan okumadan sonra yaratılan dillerin YARIŞMASI konusunda fikir birliğine varıyor mu? Bu tamamen saçmalık
edc65


Perl 5'in /edeğiştiricisi yalnızca değiştirmeler için geçerlidir ve harici kodu çalıştırmanın tek yolu değildir. Ayrıca, Perl 6'yı tamamen diskalifiye eder, çünkü regex, ek sözdizimi olan sadece bir yöntemdir. (Bunun nedeni, regex'lerin okunmasını ve yazılmasını kolaylaştırmasıdır) Sonuç olarak, arkaik regex'lerde ihtiyaç duyulan tüm özelliklere ihtiyaç duyulmaz (veya dahil), sadece Perl 6 koduna girdiğiniz gibi. (yani, yalnızca belirli bir kodu düzenlemek için sınırlandırırsanız, bu zorluğun üstesinden gelemeyeceğiniz anlamına gelir) /^(\d+)**3%' '$ <?{$0[2]==[+] $0[0,1]}>/veya /^(\d+)' '(\d+)' '(\d+)$ <?{$2==$0+$1}>/veya/^(\d+)' '(\d+){}" {$0+$1}"$/
Brad Gilbert b2gills

Yanıtlar:


15

Perl / PCRE: 2,685 bayt

^ (?! (?! 0 * + (? = (\ D *?) ((?: ((? = \ D + 0 * + (\ d *?)) (\ D (? (4) \ 4)) 0) * (\ d *?) (\ d \ 6? +) $) \ d) +)) (? = (? (?! \ 1 (?: (? = \ d + 0 * \ 3 ((\ 7? +) \ d)) (? = \ d (\ d * 0 * \ 3 \ 8)) (? = 0 \ 9 [9] | 1 \ 9 [8] | 2 \ 9 [7] | 3 \ 9 [6] | 4 \ 9 [5] | 5 \ 9 [4] | 6 \ 9 [3] | 7 \ 9 [2] | 8 \ 9 [1] | 9 \ 9 [0]) \ d) * + (? = \ d (\ d * 0 * \ 3 \ 8? +)) (? = [5-9] \ 10 [5-9] | 1 \ 10 [9] | 2 \ 10 [89] | 3 \ 10 [7-9] | 4 \ 10 [6-9] | 6 \ 10 [4] | 7 \ 10 [34] | 8 \ 10 [2-4] | \ 10 9 [1-4]) ) (? = \ d + \ d + 0 * \ 1 \ 3 \ 6 $) | (? (?!. * + \ 3) \ d +) (? = \ d * (\ 2 | \ 4) (. *? 0 * +) \ d + $) (? (? = 9 * \ 11) (?: 9 (? = \ D * \ 12 [1] (\ 13? +0)))) *? (? = \ 11) \ 11 \ 12 [1] \ 13 + \ 6 $ |? (:? (\ d) (= \ d * \ 12 (\ 15 + \ 14))) * (= \ d (\ d *? \ 12 \ 15 +)) (= 0 \ 16 [1] |? 1 \ 16 [2] | 2 \ 16 [3] | 3 \ 16 [4] | 4 \ 16 [5] | 5 \ 16 [ 6] | 6 \ 16 [7] | 7 \ 16 [8] | 8 \ 16 [9]) \ d (:? 9 (= \ d * \ 12 \ 15 + \ d (\ 17 + 0? ))) *? \ 11 \ 12 \ 15? + \ D \ 17? + \ 6 $))) \ 1 (?: (? = (\ D) \ d * 0 * + \ 3 ((\ 19? +) \ d) \ d * 0 * + \ 5 ((\ 21? +) \ d)) (? = \ d (\ d * 0 * + \ 3 \ 20) \ d (\ d * 0 * + \ 5 \ 22)) (? (?! \ 18 (?:(? = \ d + 0 * + \ 3 \ 19 ((\ 25? +) \ d)) (? = \ d (\ d * 0 * + \ 3 \ 19 \ 26)) (? = 0 \ 27 [ 9] | 1 \ 27 [8] | 2 \ 27 [7] | 3 \ 27 [6] | 4 \ 27 [5] | 5 \ 27 [4] | 6 \ 27 [3] | 7 \ 27 [2 ] | 8 \ 27 [1] | 9 \ 27 [0]) \ d) * + (? = \ D (\ d * 0 * + \ 3 \ 19 \ 26? +)) (? = [5-9 ] \ 28 [5-9] | 1 \ 28 [9] | 2 \ 28 [89] | 3 \ 28 [7-9] | 4 \ 28 [6-9] | 6 \ 28 [4] | 7 \ 28 [34] | 8 \ 28 [2-4] | 9 \ 28 [1-4])) (= 1 \ 23 (: 1 p \ 24 [2] | 2 \ 24 [3] | 3 \ 24 [4] | 4 \ 24 [5] | 5 \ 24 [6] | 6 \ 24 [7] | 7 \ 24 [8] | 8 \ 24 [9] | 9 \ 24 [0]) | 2 \ 23 (: 1 \ 24 [3] | 2 \ 24 [4] | 3 \ 24 [5] | 4 \ 24 [6] | 5 \ 24 [7] | 6 \ 24 [8] | 7 \ 24 [9 ] | 8 \ 24 [0] | 9 \ 24 [1]) | 3 \ 23 (: 1 \ 24 [4] | 2 \ 24 [5] | 3 \ 24 [6] | 4 \ 24 [7] | 5 \ 24 [8] | 6 \ 24 [9] | 7 \ 24 [0] | 8 \ 24 [1] | 9 \ 24 [2]) | 4 \ 23 (: 1 \ 24 [5] | 2 \ 24 [6] | 3 \ 24 [7] | 4 \ 24 [8] | 5 \ 24 [9] | 6 \ 24 [0] | 7 \ 24 [1] | 8 \ 24 [2] | 9 \ 24 [3]) | 5 \ 23 (: 1 \ 24 [6] | 2 \ 24 [7] | 3 \ 24 [8] | 4 \ 24 [9] | 5 \ 24 [0] | 6 \ 24 [1] | 7 \ 24 [2] | 8 \ 24 [3] | 9 \ 24 [4]) '| 6 \ 23 (: 1 \ 24 [7] | 2 \ 24 [8] | 3 \ 24 [9] | 4 \ 24 [0] | 5 \ 24 [1] | 6 \ 24 [2] | 7 \ 24 [3] | 8 \ 24 [4] | 9 \ 24 [5]) | 7 \ 23 (: 1 \ 24 [8] | 2 \ 24 [9] | 3 \ 24 [0] | 4 \ 24 [1] | 5 \ 24 [2] | 6 \ 24 [3] | 7 \ 24 [4 ] | 8 \ 24 [5] | 9 \ 24 [6]) | \ 23 8 (?:1 \ 24 [9] | 2 \ 24 [0] | 3 \ 24 [1] | 4 \ 24 [2] | 5 \ 24 [3] | 6 \ 24 [4] | 7 \ 24 [5] | 8 \ 24 [6] | 9 \ 24 [7]) | 9 \ 23 (: 1 \ 24 [0] | 2 \ 24 [1] | 3 \ 24 [2] | 4 \ 24 [3] | 5 \ 24 [4] | 6 \ 24 [5] | 7 \ 24 [6] | 8 \ 24 [7] | 9 \ 24 [8]) | 0 \ 23 (\ d) \ 24 \ 29 | (\ d) \ 23 [0] \ 24 \ 30) | (= 1 \ 23 (:? 0 \ 24 [2] 1 | \ 24 [3] | 2 \ 24 [4] | 3 \ 24 [5] | 4 \ 24 [6] | 5 \ 24 [7] | 6 \ 24 [8] | 7 \ 24 [9] | 8 \ 24 [0] | 9 \ 24 [1]) | 2 \ 23 (0 \ 24? [3] 1 | \ 24 [4] | 2 \ 24 [5] | 3 \ 24 [6] | 4 \ 24 [7] | 5 \ 24 [8] | 6 \ 24 [9] | 7 \ 24 [ 0] | 8 \ 24 [1] | 9 \ 24 [2]) | 3 \ 23 (: 0 \ 24 [4] 1 | \ 24 [5] | 2 \ 24 [6] | 3 \ 24 [7 ] | 4 \ 24 [8] | 5 \ 24 [9] | 6 \ 24 [0] | 7 \ 24 [1] | 8 \ 24 [2] | 9 \ 24 [3]) | 4 \ 23 (? 0 \ 24 [5] 1 | \ 24 [6] | 2 \ 24 [7] | 3 \ 24 [8] | 4 \ 24 [9] | 5 \ 24 [0] | 6 \ 24 [1] | 7 \ 24 [2] | 8 \ 24 [3] | 9 \ 24 [4]) '| 5 \ 23 (: 0 \ 24 [6] | 1 \ 24 [7] | 2 \ 24 [8] | 3 \ 24 [9] | 4 \ 24 [0] | 5 \ 24 [1] | 6 \ 24 [2] | 7 \ 24 [3] | 8 \ 24 [4] | 9 \ 24 [5]) | 6 \ 23 (0 \ 24 [7] | 1 \ 24 [8] | 2 \ 24 [9] | 3 \ 24 [0] | 4 \ 24 [1] | 5 \ 24 [2] | 6 \ 24? [3] | 7 \ 24 [4] | 8 \ 24 [5] | 7 \ 23 (| \ 24 [6]) 9: 0 \ 24 [8] | 1 \ 24 [9] | 2 \ 24 [ 0] | 3 \ 24 [1] | 4 \ 24 [2] | 5 \ 24 [3] | 6 \ 24 [4] | 7 \ 24 [5] | 8 \ 24 [6] | 9 \ 24 [7 ]) | \ 23 8 (?:0 \ 24 [9] | 1 \ 24 [0] | 2 \ 24 [1] | 3 \ 24 [2] | 4 \ 24 [3] | 5 \ 24 [4] | 6 \ 24 [5] | 7 \ 24 [6] | 8 \ 24 [7] | 9 \ 24 [8]) | 9 \ 23 (: 0 \ 24 [0] | 1 \ 24 [1] | 2 \ 24 [2] | 3 \ 24 [3] | 4 \ 24 [4] | 5 \ 24 [5] | 6 \ 24 [6] | 7 \ 24 [7] | 8 \ 24 [8] | 9 \ 24 [9]) | 0 \ 23 (0 \ 24 [1] | 1 \ 24 [2] | 2 \ 24 [3] | 3 \ 24 [4] | 4 \ 24 [5] | 5 \ 24 [6] | 6 \ 24 [? 7] | 7 \ 24 [8] | 8 \ 24 [9] | 9 \ 24 [0]))) \ d) + \ | ^ 0 + \ 0 * (\ d +) \ 0 * \ g {-1 } $ | ^ 0 * (\ d +) \ 0+ \ 0 * \ g {-1} $)) +

Çevrimiçi deneyin!

Ben regex bir aradan sonra zorlu zorluklar için prowl oldum ve sadece bu doozy karşısında yanılmak oldu. Eklemeyi doğrulamak (Perl / PCRE ile) daha önce düşündüğüm bir şeydi, ancak kabiliyetimin ötesinde imkansız ya da yeteneğim dışında kaldı. Ancak, şimdi bir başka çatlak daha çektim ve gerçekten yaptığımı söylemek beni çok heyecanlandırdı!

Bunu yazdığımda kısa algoritmalar ve genel olarak eşleme tekniğini düşünmekten başka golf oynamam. Sadece gerçekten çok mutluyum, hallettim: D

İnsanlar ilgilenirse, yorum ekleyebilir ve nasıl çalıştığını açıklayabilirim.

Düzenleme: Blogumda bu konuda detaylı bir yazı yaptım, açıklamalar ve yorumlar :) zevk: http://www.drregex.com/2018/09/a-regex-i-submitted-to-reddit-climbed.html


4
Bazı açıklamalara kesinlikle ilgi!
etene

2
@etene Gönderiyi kapsamlı bir yazı içeren bir link ile düzenledim: D
jaytea

1
Teşekkürler, bu ilginç bir okuma olacak!
etene

6

.NET lezzet, 139 111 106 + 1 = 107 bayt

İhtiyaç RightToLeftdeğiştirici r. İkili giriş yapın.

(?(2)!)^\5 \7 ((?(2)()(?(2)!)(?<-2>){2})(0|(?<-2>1))(?<=(((0|(?<2>1)|\b)(?=.*(?<=(\5).*))?\7?) \d*){2}))+$

Çevrimiçi deneyin! ( Retina'yı kullanma .)

Dengeleme grupları için Yay. Bunu daha sonra açıklayacağım ...

Ondalık sürüm, 340 243 + 1 = 244 bayt

(?(2)!)^\5 \7 ((?(2)()(?(2)!)(?<-2>){10})(0|(?<-2>1|(?<-2>2|(?<-2>3|(?<-2>4|(?<-2>5|(?<-2>6|(?<-2>7|(?<-2>8|(?<-2>9))))))))))(?<=(((0|(?<2>1|(?<2>2|(?<2>3|(?<2>4|(?<2>5|(?<2>6|(?<2>7|(?<2>8|(?<2>9)))))))))|\b)(?=.*(?<=(\5).*))?\7?) \d*){2}))+$

Çevrimiçi deneyin!


3
"Bunu sonra açıklayacağım" Ne kadar sonra?
Büyük

3
@ Οurous daha sonra ortaya çıktı.
Martin Ender

1

.NET, 96 bayt

^\4 \6((?(2)()(?(2)^)(?<-2>){2}| ?)(0|(?<-2>1))(?<=((0|(?<2>1)|)\4?) .*((0|(?<2>1)|)\6?) .*))+$

Bayrak: r

Çevrimiçi deneyin!

Ondalık sürüm, 238 bayt

^\5 \6(?<-6>)((?(2)()(?(2)^)(?<-2>){10}| ?)((?<-2>[1469]|(?<-2>[27]))|[0358])(?([5-9])(?<-2>){5})(?([3489])(?<-2>){3})(?<=(((((?=[5-9](?<2>){5}|)(?=[3489](?<2>){3}|)((?<2>[1469]|(?<2>[27]))|.))?(?( .*)\6?(?<-6>)?|\5?(?<-5>)))) .*){2}))+$

Bayrak: r

Çevrimiçi deneyin!

Martin'in cevabına benzer.

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.