def rec(history, maxdepth, res):
if len(history)<maxdepth:
#print (history)
last=history[-1]
if res[last[0]] == 0 or res[last[0]] > 3+len(history):
res[last[0]] = 3+len(history)
if last[3][0] != 's' and last[1] > 0:
next=(last[1], last[0], 0, 's1')
rec(history + [next], maxdepth, res)
if last[2] > 0:
next=(last[2], last[0], 0, 's2')
rec(history + [next], maxdepth, res)
if last[0] % 2 == 0:
next=(int(last[0]/2), last[1]+int(last[0]/2), last[2]+int(last[0]/2), 'f')
rec(history + [next], maxdepth, res)
else:
print('stopped')
maxpower = 128
maxdepth = 17
power = 2
res = [0]*(maxpower+1)
while power <= maxpower:
rec([(power, 0, 0, '-')], maxdepth, res)
power *= 2
print('n 2n-1 => res')
for n in range(2, int(maxpower/2)+1):
print (n, 2*n-1, '=>', res[2*n-1])
ZGVmIHJlYyhoaXN0b3J5LCBtYXhkZXB0aCwgcmVzKToKICAgIGlmIGxlbihoaXN0b3J5KTxtYXhkZXB0aDoKICAgICAgICAjcHJpbnQgKGhpc3RvcnkpCiAgICAgICAgbGFzdD1oaXN0b3J5Wy0xXQogICAgICAgIGlmIHJlc1tsYXN0WzBdXSA9PSAwIG9yIHJlc1tsYXN0WzBdXSA+IDMrbGVuKGhpc3RvcnkpOgogICAgICAgICAgICByZXNbbGFzdFswXV0gPSAzK2xlbihoaXN0b3J5KQogICAgICAgIAogICAgICAgIGlmIGxhc3RbM11bMF0gIT0gJ3MnIGFuZCBsYXN0WzFdID4gMDoKICAgICAgICAgICAgbmV4dD0obGFzdFsxXSwgbGFzdFswXSwgMCwgJ3MxJykKICAgICAgICAgICAgcmVjKGhpc3RvcnkgKyBbbmV4dF0sIG1heGRlcHRoLCByZXMpCiAgICAgICAgaWYgbGFzdFsyXSA+IDA6CiAgICAgICAgICAgIG5leHQ9KGxhc3RbMl0sIGxhc3RbMF0sIDAsICdzMicpCiAgICAgICAgICAgIHJlYyhoaXN0b3J5ICsgW25leHRdLCBtYXhkZXB0aCwgcmVzKQogICAgICAgIGlmIGxhc3RbMF0gJSAyID09IDA6CiAgICAgICAgICAgIG5leHQ9KGludChsYXN0WzBdLzIpLCBsYXN0WzFdK2ludChsYXN0WzBdLzIpLCBsYXN0WzJdK2ludChsYXN0WzBdLzIpLCAnZicpCiAgICAgICAgICAgIHJlYyhoaXN0b3J5ICsgW25leHRdLCBtYXhkZXB0aCwgcmVzKQogICAgZWxzZToKICAgICAgICBwcmludCgnc3RvcHBlZCcpCgptYXhwb3dlciA9IDEyOAptYXhkZXB0aCA9IDE3CnBvd2VyID0gMgpyZXMgPSBbMF0qKG1heHBvd2VyKzEpCndoaWxlIHBvd2VyIDw9IG1heHBvd2VyOgogICAgcmVjKFsocG93ZXIsIDAsIDAsICctJyldLCBtYXhkZXB0aCwgcmVzKQogICAgcG93ZXIgKj0gMgoKcHJpbnQoJ24gMm4tMSA9PiByZXMnKQpmb3IgbiBpbiByYW5nZSgyLCBpbnQobWF4cG93ZXIvMikrMSk6CiAgICBwcmludCAobiwgMipuLTEsICc9PicsIHJlc1syKm4tMV0pCg==