热身:正则表达式,纸张,剪刀
这是我最初想要发布的挑战,然后才意识到存在一些非常简短的解决方案。尽管如此,思考以下实际挑战仍可能是一个有趣的问题。
编写三个正则表达式R,P和S,使它们以循环的Rock,Paper和Scissors方式彼此匹配。特别地,[R匹配小号,小号匹配P和P相匹配- [R ,但ř 不匹配P,小号 不匹配- [R和P不匹配小号。这是一个方便的桌子:
Regex Matches Doesn't match
R S P
P R S
S P R
R,P和S对任何其他输入(包括它们自己)执行的操作无关紧要。
在这里,match只是意味着输入的某些(可能为空)子字符串已匹配。匹配不需要覆盖整个输入。
挑战:正则表达式,纸张,剪刀,蜥蜴,Spock
对于这个挑战,您将基于RPS变体Rock,Paper,剪刀,蜥蜴,Spock(由The Big Bang Theory推广)解决上述问题的更严格的版本。在RPSLV中,有五个不同的符号,它们在两个周期内相互跳动:
- 岩石→剪刀→蜥蜴→纸→麻雀→岩石
- 岩石→蜥蜴→麻雀→剪刀→纸→岩石
您应该编写五个正则表达式R,P,S,L和V,当它们彼此作为输入时,它们模仿该结构。这是对应的表:
Regex Matches Doesn't match
R L, S V, P
L V, P S, R
V S, R P, L
S P, L R, V
P R, V L, S
只是要清楚,你应该不匹配的字符串R
,P
等等,但其他的正则表达式。例如,如果您的正则表达式R是^\w$
,则P和V必须匹配字符串^\w$
,而S和L不应该匹配。
同样,match仅表示输入的至少一个(可能为空)子字符串被匹配。匹配不需要覆盖整个输入。例如,\b
(单词边界)匹配hello
(在开头和结尾),但是不匹配(^,^)
。
您可以使用任何正则表达式调味剂,但请在答案中说明选择的范围,并在可能的情况下提供指向所选调味剂的在线测试仪的链接。您可能无法使用任何正则表达式功能来让您以风味的宿主语言(例如Perl风味的e
修饰符)调用代码。
/regex/
当作为分隔符的输入时,分隔符(如)不包含在正则表达式中,并且您不能使用不在正则表达式之外的修饰符。有些口味仍然允许您使用带有内联语法的修饰符,例如(?s)
。
您的分数是五个正则表达式的长度总和(以字节为单位)。越低越好。
事实证明,找到一个可行的解决方案比起初看起来要容易得多,但我希望找到最佳解决方案非常棘手。
\b
(单词边界)匹配hello
(在开头和结尾),但是不匹配(^,^)
。”