feat: kata finished. Now correctly finds next bigger number. test: added test cases

This commit is contained in:
Sandro Zimmermann 2026-03-11 23:41:59 +01:00
parent fbe9f4bf02
commit 9df3b783fb
2 changed files with 25 additions and 9 deletions

View File

@ -1,22 +1,34 @@
def next_bigger(n):
# get number as digits in list
digits = [int(x) for x in list(str(n))]
# find index of pivot. return -1 if there is no pivot, meaning number is alreadig biggest
pivot = -1
for i in range(1, len(digits)):
if digits[-1] > digits[-2 * i]:
pivot = -2 * i
if digits[-i] > digits[-i - 1]:
pivot = -i - 1
break
if pivot == -1:
return -1
# find the smallest digit to the right that is bigger than the pivot
right = digits[pivot + 1 :]
swamp = right.index(min(right))
print(digits)
digits[pivot], digits[len(digits) - len(right) + swamp] = (
right[swamp],
swap = right.index(min([x for x in right if x > digits[pivot]]))
# swap pivot with found digit
digits[pivot], digits[len(digits) - len(right) + swap] = (
right[swap],
digits[pivot],
)
return digits
# sort right side of new swapped pivot and replace it at the end
right = digits[pivot + 1 :]
right.sort()
digits[pivot + 1 :] = right
# return number
return int("".join([str(x) for x in digits]))
print(next_bigger(534976))
print(next_bigger(5113455566888))

View File

@ -8,4 +8,8 @@ def test_next_bigger():
assert next_bigger(2017) == 2071
assert next_bigger(414) == 441
assert next_bigger(144) == 414
assert next_bigger(84876644310) == 86013446784
assert next_bigger(1234567890) == 1234567908
assert next_bigger(59884848459853) == 59884848483559
assert next_bigger(7600201336) == 7600201363
assert next_bigger(5113455566888) == 5113455568688
assert next_bigger(4769560370633) == 4769560373036