In [3]:
import collections
import sys
import random


# @include
def even_odd(A):
    next_even, next_odd = 0, len(A) - 1
    while next_even < next_odd:
        if A[next_even] % 2 == 0:
            next_even += 1
        else:
            A[next_even], A[next_odd] = A[next_odd], A[next_even]
            next_odd -= 1
# @exclude


def test(A):
    even = collections.Counter(a for a in A if a % 2 == 0)
    odd = collections.Counter(a for a in A if a % 2 == 1)
    even_odd(A)
    in_odd = False
    for a in A:
        if a % 2 == 0:
            even[a] -= 1
            assert not in_odd
        else:
            odd[a] -= 1
            in_odd = True
    assert len(list(even.elements())) == 0 and len(list(odd.elements())) == 0


def main():
    for _ in range(10000):
        n = int(sys.argv[1]) if len(sys.argv) == 2 else random.randint(1, 20)
        A = [random.randint(0, 20) for _ in range(n)]
        test(A)


if __name__ == '__main__':
    main()

In [4]:
import sys
import random


# @include
def plus_one(A):
    A[-1] += 1
    for i in reversed(range(1, len(A))):
        if A[i] != 10:
            break
        A[i] = 0
        A[i - 1] += 1
    if A[0] == 10:
        # Need additional digit as the most significant digit (i.e., A[0]) has a
        # carry-out.
        A[0] = 0
        A.insert(0, 1)
    return A
# @exclude


def rand_vector(length):
    if not length:
        return [0]
    return [random.randint(1, 9)] + [random.randint(0, 9)
                                     for _ in range(length - 1)]


def small_test():
    result = plus_one([9, 9])
    assert result == [1, 0, 0]
    result = plus_one([3, 1, 4])
    assert result == [3, 1, 5]


def main():
    small_test()
    n = int(sys.argv[1]) if len(sys.argv) == 2 else random.randint(0, 1000)
    A = rand_vector(n)
    print(*A, sep='')
    result = plus_one(A)
    print(*result, sep='')
    print()


if __name__ == '__main__':
    main()


2445808784627117347515501115833119775556452483942942241297148274120188431250408817294157829203172361628731085767474722836260524105327224755874994491649837712566495461166829736434454365045468237643349986695959304710573556986852216438901860077478457921466642542285028865077813744197961378493352584901612243941348803848649563751564177869784773231910789031438830823720699083259537189842920607152450261627852280790006263334470418269216204319392599546357580092686605181931007604697
2445808784627117347515501115833119775556452483942942241297148274120188431250408817294157829203172361628731085767474722836260524105327224755874994491649837712566495461166829736434454365045468237643349986695959304710573556986852216438901860077478457921466642542285028865077813744197961378493352584901612243941348803848649563751564177869784773231910789031438830823720699083259537189842920607152450261627852280790006263334470418269216204319392599546357580092686605181931007604698


In [5]:
def pairSumMain(n):
    sum = 0
    for i in range(n):
        print(i)
        print (i+1)
        sum += pairSum(i, i + 1)

    return sum

def pairSum(a, b):
    return a + b

pairSumMain(2)


0
1
1
2
Out[5]:
4

In [ ]:
def F(n):
    if n <= 1::
        return 1
    return F(n-1) + F(n-2)