from collections import Counter
n, m = input().split()
def nearest(sa, sb):
if sa == "":
return ""
if len(sb) < len(sa):
return ''.join(sorted(sb, reverse=True))
elif len(sb) > len(sa):
d = len(sb) - len(sa)
sc = ''.join(sorted(sb)).lstrip('0')
if len(sc) > len(sa):
return sc
num_zeroes = sb.count('0')
delta = num_zeroes - d
tmp = ''.join(sorted(sb))[d:]
print(delta, tmp)
if delta > 0:
return nearest(sa, tmp)
else:
return ''.join(sorted(sb)).lstrip('0')
else:
cnt = Counter(sb)
m = min(abs(ord(k) - ord(sa[0])) for k in cnt.keys())
cnds = [k for k in cnt.keys() if abs(ord(k) - ord(sa[0])) in (m - 1, m, m + 1)]
strs = []
for key in cnds:
dct = {k: cnt[k] if k != key else cnt[k] - 1 for k in cnt}
if key > sa[0]:
strs.append(key + ''.join(sorted([v * k for k, v in dct.items()])))
elif key < sa[0]:
strs.append(key + ''.join(sorted([v * k for k, v in dct.items()], reverse=True)))
else:
s = ''.join(sorted([v * k for k, v in dct.items()]))
strs.extend([key + nearest(sa[1:], s)])
strs.append(key + ''.join(sorted([v * k for k, v in dct.items()], reverse=key < sa[0])))
return min(strs, key=lambda x: (abs(int(sa) - int(x)), x))
print(nearest(n, m))
To embed this program on your website, copy the following code and paste it into your website's HTML: