Question: 
Write a function to create the next bigger number by rearranging the digits of a given number.


Model's Code:
def rearrange_bigger(n):
    digits = list(str(n))
    length = len(digits)
    
    # Step 1: Find the rightmost ascent
    i = length - 2
    while i >= 0 and digits[i] >= digits[i + 1]:
        i -= 1
    
    if i == -1:
        return False  # No bigger number possible

    # Step 2: Find the smallest digit on right side of `i` which is larger than digits[i]
    j = length - 1
    while digits[j] <= digits[i]:
        j -= 1
    
    # Step 3: Swap digits[i] and digits[j]
    digits[i], digits[j] = digits[j], digits[i]

    # Step 4: Reverse the digits after index `i`
    digits = digits[:i + 1] + digits[i + 1:][::-1]
    
    return int(''.join(digits))



Sample Correct Code:
def rearrange_bigger(n):
    nums = list(str(n))
    for i in range(len(nums)-2,-1,-1):
        if nums[i] < nums[i+1]:
            z = nums[i:]
            y = min(filter(lambda x: x > z[0], z))
            z.remove(y)
            z.sort()
            nums[i:] = [y] + z
            return int("".join(nums))
    return False


Asserts:
assert rearrange_bigger(12)==21
assert rearrange_bigger(10)==False
assert rearrange_bigger(102)==120


Tests:
Test 1 of 3: PASS
Test 2 of 3: PASS
Test 3 of 3: PASS

Test 407 of 974: 295/407 (72.48157248157248%): success