一个正则表达式,用于匹配三个连续整数,前提是第三个整数是前两个整数的和


27

当且仅当最后一个整数是前两个整数的和时,编写一个正则表达式,该表达式与给定的字符串匹配,该字符串由三个非负号,空格分隔的整数组成。答案可能是小数在2到10之间的任何数字系统的整数。

测试用例

这些应该失败:

0 1 2
10 20 1000

这些应该匹配:

10 20 30
28657 46368 75025
0 0 0

规则

您的答案应该由一个正则表达式组成,没有任何其他代码(可选地,使您的解决方案起作用所需的正则表达式修饰符列表除外)。您不得使用语言的正则表达式风格的功能来允许您以托管语言调用代码(例如Perl的e修饰符)。

请在回答中指定您的正则表达式风格。

这是正则表达式高尔夫,因此以字节为单位的最短正则表达式获胜。如果您的语言需要使用分隔符(通常是/.../)来表示正则表达式,请不要计算分隔符本身。如果您的解决方案需要修饰符,请为每个修饰符添加一个字节。

学分马丁·安德jaytea的正则表达式,高尔夫规则。


我有理由相信基于Martin Ender的解决方案可以使用regex查找和递增整数


1
您可以使用在此挑战之前存在的任何正则表达式样式,此规则不能反映当前的共识,该规则表示在发布挑战后创建或更新的语言(以及因此的正则表达式样式)仍然可以竞争。
Erik the Outgolfer '17

1
有关。(我怀疑对此的答案似乎与jimmy的.NET答案类似。)
Martin Ender

@EriktheOutgolfer确实存在共识,即挑战后创建的语言可以竞争吗?那完全是胡说八道
edc65 '17


Perl 5的/e修饰符仅适用于替代,不是运行外部代码的唯一方法。同样,这也完全取消了Perl 6的资格,因为正则表达式只是带有其他语法的方法。(原因是它使正则表达式更易于读写)因此,就像您只放入Perl 6代码一样,不需要(或不包含)旧式正则表达式所需的所有功能。(大概意思是不可能做到这一点的挑战,如果你只是限制在特定的正则表达式代码)/^(\d+)**3%' '$ <?{$0[2]==[+] $0[0,1]}>//^(\d+)' '(\d+)' '(\d+)$ <?{$2==$0+$1}>//^(\d+)' '(\d+){}" {$0+$1}"$/
吉尔伯特b2gills

Answers:


15

Perl / PCRE:2,685字节

^(?!(?! 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] | 9 \ 10 [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 \ 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])| 8 \ 23(?: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] | 9 \ 24 [6])| 7 \ 23(?: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 ])| 8 \ 23(?: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} $))。+

在线尝试!

正则表达式中断后,我一直在艰难的挑战中徘徊,而刚好碰巧遇到了这种麻烦。验证添加(使用Perl / PCRE)是我以前考虑过的事情,但是由于不可能或超出我的能力范围而被迅速驳回。但是,我现在又进行了一次破解,很高兴地说我确实做到了!

除了写短算法和整体匹配技术外,我并没有真正打过高尔夫。我真的很高兴我完成了:D

如果人们感兴趣,我可以添加评论并解释其工作原理。

编辑:我在我的博客上对此做了详细的发布,并附有解释和评论:)欣赏:http : //www.drregex.com/2018/09/a-regex-i-submitted-to-reddit-climbed.html


4
对某些解释绝对感兴趣!
etene 18/09/25

2
@etene我编辑了这篇文章,并提供了一篇详尽文章的链接:D
jaytea

1
谢谢,这将是一个有趣的阅读!
etene 18/09/09

6

.NET风味,139 111 106 + 1 = 107个字节

需要RightToLeft修饰符r。以二进制输入。

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

在线尝试!(使用视网膜。)

是的,要平衡团体。稍后再解释...

十进制版本,340 243 + 1 = 244个字节的

(?(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}))+$

在线尝试!


3
“我稍后再解释”。
Οurous

3
事实证明,@@很久以后了。
Martin Ender '18

1

.NET,96个字节

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

旗: r

在线尝试!

十进制版本,238个字节

^\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}))+$

旗: r

在线尝试!

类似于马丁的答案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.