编写一个与任何有效的数独解决方案匹配且与任何无效的数独解决方案都不匹配的正则表达式。输入是数独的展开版本,即没有行定界符。例如下面的板:
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
到的数字,9
精确到一次。 - 九个3x3子网格中的每一个都包含从
1
到9
恰好一次的数字。
规则
您的答案应该由一个正则表达式组成,没有任何其他代码(可选地,使您的解决方案起作用所需的正则表达式修饰符列表除外)。您不得使用允许您以托管语言调用代码的语言正则表达式功能(例如Perl的e
修饰符)。
您可以使用在挑战之前存在的任何正则表达式风味,但请指定风味。
不要假定正则表达式是隐式锚定的。例如,如果您使用的是Python,则假定您的regex与一起使用re.search
,而不与一起使用re.match
。您的正则表达式不需要匹配整个字符串。对于有效的解决方案,它只需要匹配至少一个子字符串(可能为空),而对于无效的解决方案,则不产生任何匹配。
您可以假设输入将始终是一个由81个正数组成的字符串。
这是正则表达式高尔夫,因此以字节为单位的最短正则表达式获胜。如果您的语言需要分隔符(通常是/.../
)来表示正则表达式,请不要计算分隔符本身。如果您的解决方案需要修饰符,请为每个修饰符添加一个字节。
测试用例
有效板卡:
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
对于无效的板,应打印有效的解决方案,对于有效的板,应打印一些正整数。要一次运行所有测试用例,请使用此模板并将正则表达式插入第二行。如果需要正则表达式修饰符,请`
在正则表达式前加上a 并将标准修饰符放在其前面。
valid boards
?