Skip to content

Commit 97523bb

Browse files
committed
add snippets
1 parent 5a1a932 commit 97523bb

File tree

10 files changed

+167
-0
lines changed

10 files changed

+167
-0
lines changed

week6/snippets/0_rec_basic.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Calculates 1 + 2 + ... + n, recursively
2+
def sum_of_first(n: int):
3+
# Base Case
4+
if n == 0:
5+
return 0
6+
7+
# Recursive Step
8+
return n + sum_of_first(n-1)
9+
10+
print(sum_of_first(4))
11+
12+
# Try 7, 0, -1, 100, 10000
13+
# Replace + with *, Try 4
14+
# Fix?

week6/snippets/1_fib_rec.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
def fib(n: int) -> int:
2+
if n < 0:
3+
raise ValueError("Not Defined")
4+
if n == 0 or n == 1:
5+
return n
6+
7+
return fib(n-1) + fib(n-2)
8+
9+
print(fib(4))
10+
print(fib(20))
11+
print(fib(50)) # Why?

week6/snippets/2_fib_lin.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
def fib_linear(n: int) -> int:
2+
if n < 0:
3+
raise ValueError("Not Defined")
4+
if n in [0, 1]:
5+
return n
6+
7+
prev = 0
8+
curr = 1
9+
for _ in range(n-1):
10+
new = prev + curr
11+
prev = curr
12+
curr = new
13+
return curr
14+
15+
print(fib_linear(50))
16+
print(fib_linear(100))

week6/snippets/3_fib_dict.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
seen = {}
2+
3+
def fib_dict(n: int) -> int:
4+
if n <= 1:
5+
return n
6+
7+
# Lookup or recurse
8+
prev1 = seen[n-1] if n-1 in seen else fib_dict(n-1)
9+
prev2 = seen[n-2] if n-2 in seen else fib_dict(n-2)
10+
11+
# Add to lookup when found
12+
seen[n] = prev1 + prev2
13+
return seen[n]
14+
15+
print(fib_dict(50))
16+
print(fib_dict(100))

week6/snippets/4_fib_cache.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from functools import cache
2+
3+
@cache
4+
def fib_cache(n: int) -> int:
5+
if n <= 1:
6+
return n
7+
return fib_cache(n-1) + fib_cache(n-2)
8+
9+
print(fib_cache(50))
10+
print(fib_cache(100))

week6/snippets/5_game.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Guessing game
2+
from random import randint
3+
from time import sleep
4+
5+
answer = randint(1, 1000) # My random number
6+
7+
attempts = 0
8+
guess = 0
9+
while True:
10+
sleep(0.2)
11+
12+
guess = input("Guess a number between 1 and 1000: ")
13+
if not guess.isdigit() or int(guess) < 1 or int(guess) > 1000:
14+
continue
15+
16+
attempts += 1
17+
if int(guess) > answer:
18+
print(f"{guess} is too high...")
19+
elif int(guess) < answer:
20+
print(f"{guess} is too low...")
21+
else:
22+
break
23+
24+
print(f"Correct! The number was {guess}.")
25+
print(f"This took you {attempts} attempts.")

week6/snippets/6_bin_search.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
def find(items, target) -> bool:
2+
return search(items, target, 0, len(items) - 1)
3+
4+
def search(items, target, low, high) -> bool:
5+
if low > high: # Guessed everywhere possible
6+
return False
7+
8+
mid = (low + high) // 2 # Make a guess in the middle
9+
10+
if items[mid] > target: # Guess too high
11+
return search(items, target, low, mid - 1)
12+
elif items[mid] < target: # Guess too low
13+
return search(items, target, mid + 1, high)
14+
else: # Got it!
15+
return True
16+
17+
# Only works on lists in order (in this case, alphabetical).
18+
fruits = ["Apple", "Banana", "Cherry", "Durian", "Fig", "Grapefruit", "Orange", "Peach", "Pear", "Pineapple"]
19+
20+
print(find(fruits, "Pear"))
21+
print(find(fruits, "Chocolate"))
22+
print(find(fruits, "Z"))

week6/snippets/7_big_o.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# The size of nums affects the time things take to run.
2+
nums = [75, -63, 39, -88, 83, -7, 12, -99, 83, 29, -43, -33, -74, -76, -21, -100, 26, 97, 37, -61]
3+
target = 14
4+
found = False
5+
6+
# Determines if any two distinct numbers in the list add up to the target
7+
for i in range(len(nums)):
8+
for j in range(len(nums)):
9+
if nums[i] + nums[j] == target and i != j:
10+
found = True
11+
12+
print(":)") if found else print(":(")
13+
14+
# In this case, len(nums) = 20. The inner loop executes 20^2 = 400 times.
15+
# Is this a good algorithm?

week6/snippets/8_sort_bubble.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
2+
def in_order(some_list):
3+
for i in range(len(some_list)-1):
4+
if some_list[i] > some_list[i+1]:
5+
return False
6+
return True
7+
8+
def bubble(some_list):
9+
flag = False
10+
while not flag:
11+
flag = True
12+
for i in range(len(some_list) - 1):
13+
# Not in order
14+
if some_list[i] > some_list[i+1]:
15+
flag = False
16+
# Swap the two elements
17+
temp = some_list[i]
18+
some_list[i] = some_list[i+1]
19+
some_list[i+1] = temp
20+
21+
nums = [2, 3, 4, 10, 6, 1, 8, 9, 5, 11, 12, 7]
22+
bubble(nums)
23+
print(nums)

week6/snippets/9_sort_bogo.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from random import shuffle
2+
3+
def in_order(some_list):
4+
for i in range(len(some_list)-1):
5+
if some_list[i] > some_list[i+1]:
6+
return False
7+
return True
8+
9+
def bogosort(some_list):
10+
while not in_order(some_list):
11+
shuffle(some_list)
12+
13+
nums = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1]
14+
bogosort(nums)
15+
print(nums)

0 commit comments

Comments
 (0)