前書き
私はここで多くの正規表現の挑戦を見ていませんので、いくつかの正規表現のフレーバーを使用していくつかの方法で行うことができるこの一見単純なものを提供したいと思います。正規表現愛好家にちょっとしたゴルフの時間を提供してくれることを願っています。
チャレンジ
挑戦は、私が「平等主義」シリーズと非常に大まかに言ったものと一致させることです:異なるキャラクターの等しい数のシリーズ。これについては、例を挙げて説明するのが最適です。
一致:
aaabbbccc
xyz
iillppddff
ggggggoooooollllllffffff
abc
banana
一致しない:
aabc
xxxyyzzz
iilllpppddff
ggggggoooooollllllfff
aaaaaabbbccc
aaabbbc
abbaa
aabbbc
一般化するために、我々は、(フォームの件名を一致させたい任意の文字のリストについては、に、すべてのためにc1)n(c2)n(c3)n...(ck)n
c1
ck
ci != ci+1
i, k > 1, and n > 0.
明確化:
入力は空になりません。
文字は文字列の後半で繰り返される場合があります(例: "banana")
k > 1
、したがって、文字列には常に少なくとも2つの異なる文字があります。ASCII文字のみが入力として渡され、文字が行末記号になることはないと想定できます。
ルール
(この非常に明快な規則のブロックについてMartin Enderに感謝します)
答えは、追加のコードを含まない単一の正規表現で構成する必要があります(オプションで、ソリューションを機能させるために必要な正規表現修飾子のリストを除く)。ホスティング言語でコードを呼び出すことができる言語の正規表現フレーバーの機能(Perlのe
修飾子など)を使用しないでください。
このチャレンジの前に存在していた正規表現フレーバーを使用できますが、フレーバーを指定してください。
たとえば、Pythonを使用している場合、正規表現がre.matchではなくre.searchで使用されていると想定してください。正規表現は、有効な平等主義の文字列の文字列全体と一致し、無効な文字列の一致を生成しない必要があります。必要な数のキャプチャグループを使用できます。
入力は常に、ラインターミネータを含まない2つ以上のASCII文字の文字列であると想定できます。
これは正規表現のゴルフであるため、バイト単位の最短正規表現が優先されます。言語で/.../
正規表現を表すために区切り文字(通常は)が必要な場合は、区切り文字自体をカウントしないでください。ソリューションで修飾子が必要な場合は、修飾子ごとに1バイトを追加します。
基準
これは昔ながらのゴルフですから、効率を忘れて、正規表現をできるだけ小さくしてください。
使用した正規表現フレーバーに言及し、可能であれば、実際の表現のオンラインデモを示すリンクを含めてください。
banana
。それは平等主義です。