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()
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)
Out[5]:
In [ ]:
def F(n):
if n <= 1::
return 1
return F(n-1) + F(n-2)