tangled
alpha
login
or
join now
thecoded.prof
/
CMU
0
fork
atom
CMU Coding Bootcamp
0
fork
atom
overview
issues
pulls
pipelines
feat: oct 3 level 1
thecoded.prof
5 months ago
929cf363
24475294
verified
This commit was signed with the committer's
known signature
.
thecoded.prof
SSH Key Fingerprint:
SHA256:ePn0u8NlJyz3J4Zl9MHOYW3f4XKoi5K1I4j53bwpG0U=
+152
5 changed files
expand all
collapse all
unified
split
python
oct3
level1
isPalindromicList.py
isRotation.py
median.py
missingValue.py
sortedEvens.py
+28
python/oct3/level1/isPalindromicList.py
···
1
1
+
from typing import Sequence
2
2
+
3
3
+
4
4
+
def isPalindromicList(L: Sequence) -> bool:
5
5
+
"""Check if a list is palindromic."""
6
6
+
for i in range(len(L) // 2):
7
7
+
if L[i] != L[-i - 1]:
8
8
+
return False
9
9
+
return True
10
10
+
11
11
+
12
12
+
print("Testing isPalindromicList()...", end="")
13
13
+
assert isPalindromicList([1, 2, 2, 1]) == True
14
14
+
assert isPalindromicList([1, 2, 3, 1]) == False
15
15
+
assert isPalindromicList([1]) == True
16
16
+
assert isPalindromicList([5.0, -1, True, "hey", True, -1, 5.0]) == True
17
17
+
assert isPalindromicList([0, "hi", False, False, 4.0]) == False
18
18
+
assert isPalindromicList([]) == True
19
19
+
20
20
+
# Verify function is non-mutating
21
21
+
L = [1, 2, 1]
22
22
+
assert isPalindromicList(L) == True
23
23
+
assert L == [1, 2, 1]
24
24
+
25
25
+
L = [1, 9, 8]
26
26
+
assert isPalindromicList(L) == False
27
27
+
assert L == [1, 9, 8]
28
28
+
print("Passed!")
+24
python/oct3/level1/isRotation.py
···
1
1
+
from typing import Sequence
2
2
+
3
3
+
4
4
+
def isRotation(L: Sequence, M: Sequence) -> bool:
5
5
+
"""Check if M is a rotation of L."""
6
6
+
L = list(L)
7
7
+
M = list(M)
8
8
+
if not len(L) == len(M):
9
9
+
return False
10
10
+
if not L and not M:
11
11
+
return True
12
12
+
for i in range(len(L)):
13
13
+
if L[i:] + L[:i] == M:
14
14
+
return True
15
15
+
return False
16
16
+
17
17
+
18
18
+
print("Testing isRotation()...", end="")
19
19
+
assert isRotation([2, 3, 4, 5, 6], [4, 5, 6, 2, 3]) == True
20
20
+
assert isRotation([2, 3, 4, 5, 6], [2, 3, 4, 5, 6]) == True
21
21
+
assert isRotation([2, 3, 4, 5, 6], [2, 4, 3, 5, 6]) == False
22
22
+
assert isRotation([1], []) == False
23
23
+
assert isRotation([], []) == True
24
24
+
print("Passed!")
+34
python/oct3/level1/median.py
···
1
1
+
from typing import Sequence
2
2
+
3
3
+
4
4
+
def almostEqual(x, y):
5
5
+
return abs(x - y) < 10**-9
6
6
+
7
7
+
8
8
+
def median(L: Sequence[float]) -> float | None:
9
9
+
"""Return the median of a sequence of numbers."""
10
10
+
L = list(L)
11
11
+
if not len(L):
12
12
+
return None
13
13
+
L.sort()
14
14
+
mid = len(L) // 2
15
15
+
if len(L) % 2 == 1:
16
16
+
return L[mid]
17
17
+
else:
18
18
+
return (L[mid - 1] + L[mid]) / 2
19
19
+
20
20
+
21
21
+
print("Testing median()...", end="")
22
22
+
assert median([42]) == 42
23
23
+
assert almostEqual(median([1, 2]), 1.5)
24
24
+
assert median([-1.7, 3, -2, 4.2, 2]) == 2
25
25
+
assert median([2, 3, 2, 4, 2]) == 2
26
26
+
assert almostEqual(median([2, 3, 2, 4, 2, 3]), 2.5)
27
27
+
assert median([]) == None
28
28
+
29
29
+
# Verify function is non-mutating
30
30
+
L = [1, 3, 2]
31
31
+
assert median(L) == 2
32
32
+
assert L == [1, 3, 2]
33
33
+
34
34
+
print("Passed!")
+46
python/oct3/level1/missingValue.py
···
1
1
+
from typing import Sequence, TypeVar
2
2
+
3
3
+
4
4
+
T = TypeVar("T", bound=str | float)
5
5
+
6
6
+
7
7
+
def missingValue(L: Sequence[T], M: Sequence[T]) -> T | None:
8
8
+
"""Return the missing value from one of the two sorted sequences."""
9
9
+
if (not L) and M:
10
10
+
return M[0]
11
11
+
elif (not M) and L:
12
12
+
return L[0]
13
13
+
elif (not L) and (not M):
14
14
+
return None
15
15
+
L = sorted(L)
16
16
+
M = sorted(M)
17
17
+
larger = L if len(L) > len(M) else M
18
18
+
smaller = L if len(L) < len(M) else M
19
19
+
for i in range(len(larger)):
20
20
+
a = larger[i]
21
21
+
if i > (len(smaller) - 1):
22
22
+
return a
23
23
+
b = smaller[i]
24
24
+
if a != b:
25
25
+
return larger[i]
26
26
+
return None
27
27
+
28
28
+
29
29
+
print("Testing missingValue()...", end="")
30
30
+
assert missingValue([1, 2, 3], [3, 1]) == 2
31
31
+
assert missingValue([1, 2, 3], [2, 1]) == 3
32
32
+
assert missingValue(["A", "B", "A", "C"], ["C", "A", "B"]) == "A"
33
33
+
assert missingValue(["A", "B", "A", "C"], ["A", "A", "B"]) == "C"
34
34
+
assert missingValue(["A", "B", "A", "C"], ["A", "C", "A"]) == "B"
35
35
+
assert missingValue([2, 2], [2]) == 2
36
36
+
assert missingValue([2, 3], [2]) == 3
37
37
+
assert missingValue([2, 3], [3]) == 2
38
38
+
assert missingValue(["amazing"], []) == "amazing"
39
39
+
40
40
+
# Make sure the function is non-mutating
41
41
+
L = [1, 2, 3]
42
42
+
M = [3, 1]
43
43
+
assert missingValue(L, M) == 2
44
44
+
assert L == [1, 2, 3]
45
45
+
assert M == [3, 1]
46
46
+
print("Passed!")
+20
python/oct3/level1/sortedEvens.py
···
1
1
+
from typing import Sequence
2
2
+
3
3
+
4
4
+
def sortedEvens(L: Sequence[int]) -> Sequence[int]:
5
5
+
"""Return a sorted list of even numbers from the input sequence."""
6
6
+
return sorted([x for x in L if x % 2 == 0])
7
7
+
8
8
+
9
9
+
print("Testing sortedEvens()...", end="")
10
10
+
assert sortedEvens([1, 4, 3, 2, 5]) == [2, 4]
11
11
+
assert sortedEvens([1, 3, 2, 5]) == [2]
12
12
+
assert sortedEvens([6, 4, -2, 8, 4, 0, 9]) == [-2, 0, 4, 4, 6, 8]
13
13
+
assert sortedEvens([1, 3, 5]) == []
14
14
+
assert sortedEvens([]) == []
15
15
+
16
16
+
# confirm this is non-mutating:
17
17
+
L = [1, 4, 3, 2, 5]
18
18
+
assert sortedEvens([1, 4, 3, 2, 5]) == [2, 4]
19
19
+
assert L == [1, 4, 3, 2, 5]
20
20
+
print("Passed!")