MsgBox gen(1050, 2400)

gen(a, b, q := '') {
  if !q {
    if a > b
      t := a, a := b, b := a
    a := String(Integer(a))
    b := String(Integer(b))
  }
  la := StrLen(a), lb := StrLen(b), s := ''
  if (la < lb) {
    loop (t := '', la)
      t .= '9'
    return gen(a, t, q) '|' gen('' t + 1, b, q)
  } else if (la == 1)
    return q (a == b ? a : a = '0' && b = '9' ? '\d' : '[' a '-' b ']')
  else {
    sa := SubStr(a, 1, 1) + 0, sb := SubStr(b, 1, 1) + 0
    ua := SubStr(a, 2) + 0 ? sa + 1 : sa
    if (sa == sb)
      return gen(SubStr(a, 2), SubStr(b, 2), q sa)
    else if (ua < sb) {
      if ua && !(a ~= '^[1-9]0*$')
        s := gen(a, Format('{:0' la 'd}', ua * (10 ** (la - 1)) - 1), q)
      if (b ~= '^9+$')
        s .= '|' q (ua = 9 ? '9' : '[' ua '-9]') (lb > 2 ? '\d{' (lb - 1) '}' : '\d')
      else {
        db := sb - 1
        s .= '|' q (db == ua ? ua : ua = '0' && db = '9' ? '\d' : '[' ua '-' db ']') '\d' (lb > 2 ? '{' (lb - 1) '}' : '')
        s .= SubStr(b, 2) + 0 ? '|' gen(Format('{:0' lb 'd}', sb * (10 ** (lb - 1))), b, q) : '|' q b
      }
    } else {
      if ua
        s .= '|' gen(a, Format('{:0' la 'd}', ua * (10 ** (la - 1)) - 1), q)
      s .= SubStr(b, 2) + 0 ? '|' gen(Format('{:0' lb 'd}', sb * (10 ** (lb - 1))), b, q) : '|' q b
    }
  }
  return LTrim(s, '|')
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。