Python 减少软件版本的算法?

Python 减少软件版本的算法?,python,algorithm,Python,Algorithm,在过去的几个小时里,我一直在努力解决这个问题,自己也找不出解决办法。问题很简单: In: 'subtract('1.1.5', 4)' Out: '1.1.1' In: 'subtract('1.1.5', 6)' Out: '1.0.9' In: 'subtract('1.0.0', 1)' Out: '0.9.9' In: 'subtract('1.14.5', 8)' Out: '1.13.7' In: 'subtract('1.10.10', 20)' Out: '1.9.0'

在过去的几个小时里,我一直在努力解决这个问题,自己也找不出解决办法。问题很简单:

In: 'subtract('1.1.5', 4)'
Out: '1.1.1'

In: 'subtract('1.1.5', 6)'
Out: '1.0.9'

In: 'subtract('1.0.0', 1)'
Out: '0.9.9'

In: 'subtract('1.14.5', 8)'
Out: '1.13.7'

In: 'subtract('1.10.10', 20)'
Out: '1.9.0'
我为一个复杂的问题想出了两个非常复杂的算法,这个问题看起来很容易解决,有什么想法吗

这是我迄今为止尝试过的(并非适用于所有情况):

def减法(版本,子版本):
arrV=version.split(“.”)
索引=len(arrV)-1
sub=-abs(sub)
而(sub<0和index>=0):
vLen=len(arrV[索引])
m=10**(vLen-1)
i=int(arrV[索引])
如果(i+sub<0):
arrV[指数]=str(m-(abs(sub)%m))
sub=int(sub/m)
其他:
arrV[index]=str(i+sub)
sub=0
索引-=1
打印(arrV)
返回“.”。加入(arrV)
打印(减去('1.10.10',5)='1.10.5')
打印(减去('1.10.10',12)='1.9.8')
打印(减去('1.10.10',10)='1.10.0')
打印(减去('1.10.10',1010)='1.0.0')

在一般情况下-这是不可能的,即使您的示例彼此矛盾,为什么
1.1.5
-
6
应该是
1.0.9
而不是
1.0.10
?我认为您不理解语义版本控制是如何工作的。例如,在
1.9
之后是
1.10
,而不是
2.0
。因此,不可能说出在
1.1.5
之前的6个步骤。另外,由于可能有不同的分支,所以甚至还有另一个维度的歧义。显然这里使用的是base-11数字。像这样的版本控制不是一个线性过程。如果是的话,你只需要一个数字就可以了。通常,主/次/面片可以单独碰撞(碰撞时除外,将所有东西重置为右侧),并且没有最大值。但可能您有一些奇怪的版本控制规则集,但除了可能暗示base 11之外,您还没有指定它
def subtract(version, sub):
  arrV = version.split('.')
  index = len(arrV) - 1
  sub = -abs(sub)

  while(sub < 0 and index >= 0):

    vLen = len(arrV[index])
    m = 10 ** (vLen - 1)
    i = int(arrV[index])

    if (i + sub < 0):
      arrV[index] = str(m - (abs(sub) % m))
      sub = int(sub / m)
    else:
      arrV[index] = str(i + sub)
      sub = 0

    index -= 1


  print(arrV)
  return '.'.join(arrV)



print(subtract('1.10.10', 5) == '1.10.5')
print(subtract('1.10.10', 12) == '1.9.8')
print(subtract('1.10.10', 10) == '1.10.0')
print(subtract('1.10.10', 1010) == '1.0.0')