3番目の整数が最初の2つの合計である場合、3つの連続した整数に一致する正規表現


27

最後の整数が前の2つの合計である場合にのみ、3つの非負のスペース区切り整数で構成される特定の文字列に一致する正規表現を記述します。答えは、基数が2〜10の任意の数字システムの整数に対するものです。

テストケース

これらは失敗するはずです:

0 1 2
10 20 1000

これらは一致する必要があります。

10 20 30
28657 46368 75025
0 0 0

ルール

答えは、追加のコードを含まない単一の正規表現で構成する必要があります(オプションで、ソリューションを機能させるために必要な正規表現修飾子のリストを除く)。ホスティング言語でコードを呼び出すことができる言語の正規表現フレーバーの機能(Perlのe修飾子など)を使用しないでください。

答えに正規表現のフレーバーを指定してください。

これは正規表現のゴルフであるため、バイト単位の最短正規表現が優先されます。言語に正規表現を示すために区切り文字(通常は/.../)が必要な場合は、区切り文字自体をカウントしないでください。ソリューションで修飾子が必要な場合は、修飾子ごとに1バイトを追加します。

クレジットマーティンエンダーjaytea正規表現ゴルフのルールについて。


Martin Enderのソリューションに基づいて、regexで整数を見つけて増分することが可能であると信じる理由があります


1
このチャレンジの前に存在していた正規表現フレーバーを使用できますが、このルールは現在のコンセンサスを反映していません。つまり、チャレンジの投稿後に作成または更新された言語(したがって正規表現フレーバー)は競合できます。
エリックアウトゴルファー

1
関連。(これに対する回答は、そこでのジミーの.NETの回答に多少似ていると思われます。)
マーティンエンダー

@EriktheOutgolferは、チャレンジ後に作成された言語が競合できるというコンセンサスは本当にありますか?それはまったくナンセンスだ
edc65


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

回答:


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
間違いなくいくつかの説明に興味があります!
エテン

2
@etene私は徹底的な記事へのリンクで投稿を編集しました:D
jaytea

1
ありがとう、それは面白い読み物になるでしょう!
エテン

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

オンラインでお試しください!Retinaを使用します。)

グループのバランス調整に賛成です。これについては後で説明します...

10進数バージョン、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
「これについては後で説明します」あとどれくらいですか?
18

3
それが判明した後、@ laterurous。
マーティンエンダー

1

.NET、96バイト

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

フラグ: r

オンラインでお試しください!

10進数バージョン、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

オンラインでお試しください!

マーティンの答えに似ています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.