CMU Coding Bootcamp
1from typing import Sequence, TypeVar
2
3
4T = TypeVar("T", bound=str | float)
5
6
7def 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
29print("Testing missingValue()...", end="")
30assert missingValue([1, 2, 3], [3, 1]) == 2
31assert missingValue([1, 2, 3], [2, 1]) == 3
32assert missingValue(["A", "B", "A", "C"], ["C", "A", "B"]) == "A"
33assert missingValue(["A", "B", "A", "C"], ["A", "A", "B"]) == "C"
34assert missingValue(["A", "B", "A", "C"], ["A", "C", "A"]) == "B"
35assert missingValue([2, 2], [2]) == 2
36assert missingValue([2, 3], [2]) == 3
37assert missingValue([2, 3], [3]) == 2
38assert missingValue(["amazing"], []) == "amazing"
39
40# Make sure the function is non-mutating
41L = [1, 2, 3]
42M = [3, 1]
43assert missingValue(L, M) == 2
44assert L == [1, 2, 3]
45assert M == [3, 1]
46print("Passed!")