task3 #2

Merged
schmidmarco merged 40 commits from task3 into main 2026-03-13 10:11:18 +01:00
2 changed files with 25 additions and 9 deletions
Showing only changes of commit 9df3b783fb - Show all commits

View File

@ -1,22 +1,34 @@
def next_bigger(n): def next_bigger(n):
# get number as digits in list
digits = [int(x) for x in list(str(n))] 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 pivot = -1
for i in range(1, len(digits)): for i in range(1, len(digits)):
if digits[-1] > digits[-2 * i]: if digits[-i] > digits[-i - 1]:
pivot = -2 * i pivot = -i - 1
break break
if pivot == -1: if pivot == -1:
return -1 return -1
# find the smallest digit to the right that is bigger than the pivot
right = digits[pivot + 1 :] right = digits[pivot + 1 :]
swamp = right.index(min(right)) swap = right.index(min([x for x in right if x > digits[pivot]]))
print(digits)
digits[pivot], digits[len(digits) - len(right) + swamp] = ( # swap pivot with found digit
right[swamp], digits[pivot], digits[len(digits) - len(right) + swap] = (
right[swap],
digits[pivot], 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(2017) == 2071
assert next_bigger(414) == 441 assert next_bigger(414) == 441
assert next_bigger(144) == 414 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