#
def get_length(input):
counter = 0
for s in input:
counter +=1
return counter
get_length('catdog')
def reverse_string(input):
my_stack = []
reversed_input = ''
for s in input:
my_stack.append(s)
while len(my_stack) > 0:
reversed_input += my_stack.pop()
return reversed_input
reverse_string('hello')
'hello'[::-1]
# O(NxN)
import unittest
def rotate_matrix(matrix):
'''rotates a matrix 90 degrees clockwise'''
n = len(matrix)
for layer in range(n // 2):
first, last = layer, n - layer - 1
for i in range(first, last):
# save top
top = matrix[layer][i]
# left -> top
matrix[layer][i] = matrix[-i - 1][layer]
# bottom -> left
matrix[-i - 1][layer] = matrix[-layer - 1][-i - 1]
# right -> bottom
matrix[-layer - 1][-i - 1] = matrix[i][- layer - 1]
# top -> right
matrix[i][- layer - 1] = top
return matrix
class Test(unittest.TestCase):
'''Test Cases'''
data = [
([
[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25]
], [
[21, 16, 11, 6, 1],
[22, 17, 12, 7, 2],
[23, 18, 13, 8, 3],
[24, 19, 14, 9, 4],
[25, 20, 15, 10, 5]
])
]
def test_rotate_matrix(self):
for [test_matrix, expected] in self.data:
actual = rotate_matrix(test_matrix)
self.assertEqual(actual, expected)
unittest.main(argv=[''], verbosity=2, exit=False)
## ==================================
## BRUTE FORCE
## ==================================
def find_missing_number(array):
for i, num in enumerate(array):
if i != num:
return i
class Test(unittest.TestCase):
'''Test Cases'''
data = [([0,1,2,3,4,6,7,8,9,10], 5)]
def test_find_missing_number(self):
for [test_array, expected] in self.data:
actual = find_missing_number(test_array)
self.assertEqual(actual, expected)
unittest.main(argv=[''], verbosity=2, exit=False)
## ==================================
## WITH BINARY SEARCH
## ==================================
def find_missing_number(array):
start = 0
end = len(array)
midpoint = (start+end/2)
print(array[midpoint])
class Test(unittest.TestCase):
'''Test Cases'''
data = [([0,1,3,4,5,6,7,8,9,10], 2)]
def test_find_missing_number(self):
for [test_array, expected] in self.data:
actual = find_missing_number(test_array)
self.assertEqual(actual, expected)
unittest.main(argv=[''], verbosity=2, exit=False)
def find_missing_number(array):
start = 0
end = len(array)
midpoint = int((start+end/2)) if (len(array)%2!=0) else int(((start+end+1)/2))
print('MIDPOINT:', midpoint)
print('NUMBER AT MIDPOINT:', array[midpoint])
test_array = [0,1,3,4,5,6,7,8,9,10]
find_missing_number(test_array)
def find_missing_number(array):
start = 0
end = len(array)
midpoint = int((start+end/2)) if (len(array)%2!=0) else int(((start+end+1)/2))
print('MIDPOINT:', midpoint)
print('NUMBER AT MIDPOINT:', array[midpoint])
print('START:', start )
print('END:', end)
test_array = [0,1,3,4,5,6,7]
find_missing_number(test_array)
def find_missing_number(array):
start = 0
end = len(array)
midpoint = int((start+end/2)) if (len(array)%2!=0) else int(((start+end+1)/2))
print('MIDPOINT:', midpoint)
print('NUMBER AT MIDPOINT:', array[midpoint])
print('START:', start )
print('END:', end)
test_array = [0,1,3,4]
find_missing_number(test_array)
def find_missing_number(array):
start = 0
end = len(array)
midpoint = int((start+end/2)) if (len(array)%2!=0) else int(((start+end+1)/2))
print('MIDPOINT:', midpoint)
print('NUMBER AT MIDPOINT:', array[midpoint])
print('START:', start )
print('END:', end)
test_array = [0,1,3]
find_missing_number(test_array)
def find_missing_number(array):
start = 0
end = len(array)
midpoint = int((start+end/2)) if (len(array)%2!=0) else int(((start+end+1)/2))
print('MIDPOINT:', midpoint)
print('NUMBER AT MIDPOINT:', array[midpoint])
print('START:', start )
print('END:', end)
test_array = [1,3]
find_missing_number(test_array)
array = [0,1,3,4,5,6,7,8,9,10]
start = 0
end = len(array)
midpoint = (start+end/2) if (len(array)%2==0) else (start+end+1/2)
midpoint
def find_missing_number(array):
start = 0
end = len(array)
while (end - start) > 2:
midpoint = int((start+end/2)) if (len(array)%2!=0) else int(((start+end+1)/2))
if midpoint == array[midpoint]:
start = midpoint
print('START', start)
if midpoint < array[midpoint]:
end = midpoint
print('END', end)
if end == len(array):
return start + 1
return end
# test_array = [0,1,3,4,5,6,7,8,9,10]
test_array = [0,1,2,3,4,5,6,7,8,10]
# test_array = [0,1,3,4,5]
find_missing_number(test_array)