CMU Coding Bootcamp

feat: oct 3 level 1

thecoded.prof 929cf363 24475294

verified
+152
+28
python/oct3/level1/isPalindromicList.py
··· 1 + from typing import Sequence 2 + 3 + 4 + def isPalindromicList(L: Sequence) -> bool: 5 + """Check if a list is palindromic.""" 6 + for i in range(len(L) // 2): 7 + if L[i] != L[-i - 1]: 8 + return False 9 + return True 10 + 11 + 12 + print("Testing isPalindromicList()...", end="") 13 + assert isPalindromicList([1, 2, 2, 1]) == True 14 + assert isPalindromicList([1, 2, 3, 1]) == False 15 + assert isPalindromicList([1]) == True 16 + assert isPalindromicList([5.0, -1, True, "hey", True, -1, 5.0]) == True 17 + assert isPalindromicList([0, "hi", False, False, 4.0]) == False 18 + assert isPalindromicList([]) == True 19 + 20 + # Verify function is non-mutating 21 + L = [1, 2, 1] 22 + assert isPalindromicList(L) == True 23 + assert L == [1, 2, 1] 24 + 25 + L = [1, 9, 8] 26 + assert isPalindromicList(L) == False 27 + assert L == [1, 9, 8] 28 + print("Passed!")
+24
python/oct3/level1/isRotation.py
··· 1 + from typing import Sequence 2 + 3 + 4 + def isRotation(L: Sequence, M: Sequence) -> bool: 5 + """Check if M is a rotation of L.""" 6 + L = list(L) 7 + M = list(M) 8 + if not len(L) == len(M): 9 + return False 10 + if not L and not M: 11 + return True 12 + for i in range(len(L)): 13 + if L[i:] + L[:i] == M: 14 + return True 15 + return False 16 + 17 + 18 + print("Testing isRotation()...", end="") 19 + assert isRotation([2, 3, 4, 5, 6], [4, 5, 6, 2, 3]) == True 20 + assert isRotation([2, 3, 4, 5, 6], [2, 3, 4, 5, 6]) == True 21 + assert isRotation([2, 3, 4, 5, 6], [2, 4, 3, 5, 6]) == False 22 + assert isRotation([1], []) == False 23 + assert isRotation([], []) == True 24 + print("Passed!")
+34
python/oct3/level1/median.py
··· 1 + from typing import Sequence 2 + 3 + 4 + def almostEqual(x, y): 5 + return abs(x - y) < 10**-9 6 + 7 + 8 + def median(L: Sequence[float]) -> float | None: 9 + """Return the median of a sequence of numbers.""" 10 + L = list(L) 11 + if not len(L): 12 + return None 13 + L.sort() 14 + mid = len(L) // 2 15 + if len(L) % 2 == 1: 16 + return L[mid] 17 + else: 18 + return (L[mid - 1] + L[mid]) / 2 19 + 20 + 21 + print("Testing median()...", end="") 22 + assert median([42]) == 42 23 + assert almostEqual(median([1, 2]), 1.5) 24 + assert median([-1.7, 3, -2, 4.2, 2]) == 2 25 + assert median([2, 3, 2, 4, 2]) == 2 26 + assert almostEqual(median([2, 3, 2, 4, 2, 3]), 2.5) 27 + assert median([]) == None 28 + 29 + # Verify function is non-mutating 30 + L = [1, 3, 2] 31 + assert median(L) == 2 32 + assert L == [1, 3, 2] 33 + 34 + print("Passed!")
+46
python/oct3/level1/missingValue.py
··· 1 + from typing import Sequence, TypeVar 2 + 3 + 4 + T = TypeVar("T", bound=str | float) 5 + 6 + 7 + def missingValue(L: Sequence[T], M: Sequence[T]) -> T | None: 8 + """Return the missing value from one of the two sorted sequences.""" 9 + if (not L) and M: 10 + return M[0] 11 + elif (not M) and L: 12 + return L[0] 13 + elif (not L) and (not M): 14 + return None 15 + L = sorted(L) 16 + M = sorted(M) 17 + larger = L if len(L) > len(M) else M 18 + smaller = L if len(L) < len(M) else M 19 + for i in range(len(larger)): 20 + a = larger[i] 21 + if i > (len(smaller) - 1): 22 + return a 23 + b = smaller[i] 24 + if a != b: 25 + return larger[i] 26 + return None 27 + 28 + 29 + print("Testing missingValue()...", end="") 30 + assert missingValue([1, 2, 3], [3, 1]) == 2 31 + assert missingValue([1, 2, 3], [2, 1]) == 3 32 + assert missingValue(["A", "B", "A", "C"], ["C", "A", "B"]) == "A" 33 + assert missingValue(["A", "B", "A", "C"], ["A", "A", "B"]) == "C" 34 + assert missingValue(["A", "B", "A", "C"], ["A", "C", "A"]) == "B" 35 + assert missingValue([2, 2], [2]) == 2 36 + assert missingValue([2, 3], [2]) == 3 37 + assert missingValue([2, 3], [3]) == 2 38 + assert missingValue(["amazing"], []) == "amazing" 39 + 40 + # Make sure the function is non-mutating 41 + L = [1, 2, 3] 42 + M = [3, 1] 43 + assert missingValue(L, M) == 2 44 + assert L == [1, 2, 3] 45 + assert M == [3, 1] 46 + print("Passed!")
+20
python/oct3/level1/sortedEvens.py
··· 1 + from typing import Sequence 2 + 3 + 4 + def sortedEvens(L: Sequence[int]) -> Sequence[int]: 5 + """Return a sorted list of even numbers from the input sequence.""" 6 + return sorted([x for x in L if x % 2 == 0]) 7 + 8 + 9 + print("Testing sortedEvens()...", end="") 10 + assert sortedEvens([1, 4, 3, 2, 5]) == [2, 4] 11 + assert sortedEvens([1, 3, 2, 5]) == [2] 12 + assert sortedEvens([6, 4, -2, 8, 4, 0, 9]) == [-2, 0, 4, 4, 6, 8] 13 + assert sortedEvens([1, 3, 5]) == [] 14 + assert sortedEvens([]) == [] 15 + 16 + # confirm this is non-mutating: 17 + L = [1, 4, 3, 2, 5] 18 + assert sortedEvens([1, 4, 3, 2, 5]) == [2, 4] 19 + assert L == [1, 4, 3, 2, 5] 20 + print("Passed!")