You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否仅用正则判断A/B球序列是否符合天平差值不超3的获胜规则?

能否用正则表达式判断天平取球的获胜序列?

答案是可以,因为该问题对应的序列集合属于正则语言,能够用有限状态自动机(FSA)描述,而正则表达式与有限状态自动机是等价的,因此可以构造出对应的正则表达式来验证序列是否合法。

核心逻辑

游戏的关键约束是:遍历序列的每一个前缀时,A球累计数与B球累计数的差值绝对值始终不超过3。我们可以用当前差值d = count_A - count_B来表示状态,合法状态的差值范围是-3 ≤ d ≤ 3,共7种有限状态,加上一个失败状态(差值超出范围时进入)。有限的状态意味着可以用正则表达式来描述所有合法序列。

构造思路

我们可以通过状态间的转移关系推导正则表达式:

  • 定义Sd为当前差值为d的所有合法序列
  • 状态转移规则:
    • 若当前处于状态d,添加A球会转移到d+1(仅当d+1 ≤ 3)
    • 若当前处于状态d,添加B球会转移到d-1(仅当d-1 ≥ -3)

基于上述规则,可以推导出覆盖所有合法序列的正则表达式(虽然表达式较长,但符合正则语法):

^(?:(?:A(?:A(?:AB)*B)*B|B(?:B(?:BA)*A)*A)*)(?:|A(?:A(?:AB)*B)*|A(?:A(?:AB)*B)*A(?:AB)*|A(?:A(?:AB)*B)*A(?:AB)*A|B(?:B(?:BA)*A)*|B(?:B(?:BA)*A)*B(?:BA)*|B(?:B(?:BA)*A)*B(?:BA)*B)$

注意事项

虽然理论上可行,但实际开发中,这种正则表达式可读性差、维护成本高,不如用简单的代码逻辑(遍历序列跟踪当前差值,实时判断是否超出范围)更高效。但从正则表达式的能力边界来看,这个问题确实可以被正则表达式解决。

内容的提问来源于stack exchange,提问作者InSync

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:55:36