有効な数独ソリューションに一致し、無効な数独ソリューションに一致しない正規表現を記述します。入力は、数独の展開バージョンです。つまり、行区切り記号はありません。たとえば、次のボード:
7 2 5 8 9 3 4 6 1
8 4 1 6 5 7 3 9 2
3 9 6 1 4 2 7 5 8
4 7 3 5 1 6 8 2 9
1 6 8 4 2 9 5 3 7
9 5 2 3 7 8 1 4 6
2 3 4 7 6 1 9 8 5
6 8 7 9 3 5 2 1 4
5 1 9 2 8 4 6 7 3
次のように与えられます:
725893461841657392396142758473516829168429537952378146234761985687935214519284673
規則はおそらく今では一般的な知識ですが、念のため...数独ボードは次の場合にのみ有効です:
- 各行にはから
1
までの数字が9
1回だけ含まれています。 - 各列にはから
1
までの数字が9
1回だけ含まれています。 - 9個の3x3サブグリッドのそれぞれには、から
1
までの数字が9
1回だけ含まれています。
ルール
答えは、追加のコードを含まない単一の正規表現で構成する必要があります(オプションで、ソリューションを機能させるために必要な正規表現修飾子のリストを除く)。ホスティング言語でコードを呼び出すことができる言語の正規表現フレーバーの機能(Perlのe
修飾子など)を使用しないでください。
このチャレンジの前に存在していた正規表現フレーバーを使用できますが、フレーバーを指定してください。
正規表現が暗黙的にアンカーされていると想定しないでください。たとえば、Pythonを使用している場合、正規表現はで使用しre.search
、ではなく使用すると仮定しますre.match
。正規表現は、文字列全体と一致する必要はありません。有効なソリューションの場合は少なくとも1つのサブストリング(空の場合もある)と一致する必要があり、無効なソリューションの場合は一致しません。
入力は常に81の正の数字の文字列であると仮定できます。
これは正規表現のゴルフであるため、バイト単位の最短正規表現が優先されます。言語で/.../
正規表現を表すために区切り文字(通常は)が必要な場合は、区切り文字自体をカウントしないでください。ソリューションで修飾子が必要な場合は、修飾子ごとに1バイトを追加します。
テストケース
有効なボード:
123456789456789123789123456231564897564897231897231564312645978645978312978312645
725893461841657392396142758473516829168429537952378146234761985687935214519284673
395412678824376591671589243156928437249735186738641925983164752412857369567293814
679543182158926473432817659567381294914265738283479561345792816896154327721638945
867539142324167859159482736275398614936241587481756923592873461743615298618924375
954217683861453729372968145516832497249675318783149256437581962695324871128796534
271459386435168927986273541518734269769821435342596178194387652657942813823615794
237541896186927345495386721743269158569178432812435679378652914924813567651794283
168279435459863271273415986821354769734692518596781342615947823387526194942138657
863459712415273869279168354526387941947615238138942576781596423354821697692734185
768593142423176859951428736184765923572389614639214587816942375295837461347651298
243561789819327456657489132374192865926845317581673294162758943735914628498236571
243156789519847326687392145361475892724918653895263471152684937436729518978531264
498236571735914628162758943581673294926845317374192865657489132819327456243561789
978531264436729518152684937895263471724918653361475892687392145519847326243156789
341572689257698143986413275862341957495726831173985426519234768734869512628157394
無効なボード:
519284673725893461841657392396142758473516829168429537952378146234761985687935214
839541267182437659367158924715692843624973518573864192298316475941285736456729381
679543182158926473432817659567381294914256738283479561345792816896154327721638945
867539142324167859159482736275398684936241517481756923592873461743615298618924375
754219683861453729372968145516832497249675318983147256437581962695324871128796534
271459386435168927986273541518734269769828435342596178194387652657942813823615794
237541896186927345378652914743269158569178432812435679495386721924813567651794283
168759432459613278273165984821594763734982516596821347615437829387246195942378651
869887283619214453457338664548525781275424668379969727517385163319223917621449519
894158578962859187461322315913849812241742157275462973384219294849882291119423759
123456789456789123564897231231564897789123456897231564312645978645978312978312645
145278369256389147364197258478512693589623471697431582712845936823956714931764825
243561789829317456657489132374192865916845327581673294162758943735924618498236571
243156789529847316687392145361475892714928653895263471152684937436719528978531264
498236571735924618162758943581673294916845327374192865657489132829317456243561789
978531264436719528152684937895263471714928653361475892687392145529847316243156789
342571689257698143986413275861342957495726831173985426519234768734869512628157394
345678192627319458892451673468793521713524986951862347179246835534187269286935714
341572689257698143986413275862341957495726831173985426519234768734869512628517394
さらにテストケースを行うには、このCJamスクリプトを使用して、有効なボードを入力としてランダムにシャッフルして、新しい有効なボードを提供します(数字とオプションの空白のみが含まれている限り、入力形式は無関係です)。
正規表現が.NETフレーバーと互換性がある場合、Retinaを使用してオンラインでテストできます。有効なソリューションは0
、無効なボードに対しては印刷し、有効なボードに対しては正の整数を印刷する必要があります。すべてのテストケースを一度に実行するには、このテンプレートを使用して、2行目に正規表現を挿入します。正規表現修飾子が必要な場合は`
、正規表現の先頭にa を付けて、標準修飾子文字をその前に置きます。
valid boards
か?