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

评论(0)