問題
いくつかのコードで使用する必要がある正規表現がたくさんありますが、正規表現をサポートしていないプログラミング言語を使用しています!幸いなことに、テスト文字列は最大長であり、印刷可能なASCIIのみで構成されることがわかっています。
チャレンジ
入力する必要があり、正規表現と数n
、及び出力の印刷可能なASCII文字(ASCIIコード32包括的な126、から構成されるすべての文字列に対して
~
未満又は等しい長さの、ないタブや改行)n
正規表現ものと一致します。コードで組み込みの正規表現または正規表現一致関数を使用することは一切できません。正規表現は次のものに制限されます。
- リテラル文字(およびエスケープ、文字を強制的にリテラルにするため
\.
、リテラル.
、\n
はリテラルn
(ちょうどに相当n
)、および\w
に相当しw
ます。エスケープシーケンスをサポートする必要はありません。) .
-ワイルドカード(任意の文字)- 文字クラスは、
[abc]
「aまたはbまたはc」を[d-f]
意味し、dからfまでのすべてを意味します(so、dまたはeまたはf)。文字クラスで特別な意味を持つ唯一の文字は[
、および]
(常にエスケープされるため、それらを心配しないでください)、\
(エスケープ文字、もちろん)、^
文字クラスの先頭(否定です) )、および-
(範囲です)。 |
-OR演算子、交互。foo|bar
手段のいずれかfoo
またはbar
、そして(ab|cd)e
試合のいずれかabe
またはcde
。*
-貪欲に0回以上繰り返された前のトークンに一致します(可能な限り何度も繰り返します)+
-貪欲な1回以上の繰り返し?
-0回または1回- のトークンをグループ化するために
|
、括弧でグループ化します*
。+
、または?
入力正規表現は常に有効になります(つまり、あなたは次のように入力を処理する必要はありません?abc
か、(foo
または無効な入力)。任意の順序で文字列を出力できますが、各文字列は一度だけ表示する必要があります(重複を出力しないでください)。
テストケース
入力:.*
、1
出力:(空の文字列)、 、、 、...、 、
!
"
}
~
入力:w\w+
、3
出力:ww
、www
入力:[abx-z][^ -}][\\]
、3
出力:a~\
、b~\
、x~\
、y~\
、z~\
入力:ab*a|c[de]*
、3
出力:c
、cd
、ce
、aa
、cde
、ced
、cdd
、cee
、aba
入力:(foo)+(bar)?!?
、6
出力:foo
、foo!
、foofoo
、foobar
入力:(a+|b*c)d
、4
出力:ad
、cd
、aad
、bcd
、aaad
、bbcd
入力:p+cg
、4
出力:pcg
、ppcg
入力:a{3}
、4
出力:a{3}
勝者
これはcode-golfなので、バイト単位の最短コードが勝ちます!
|
ほとんど意味がありません。ネストされたグループやを処理していないようですa|b|c
。連結と交替のバインドの強さに関して標準的な説明を使用することの何が問題になっていますか?(そして、あなたはサンドボックスを使用していないための言い訳を持っていません)