Skip to content

Commit 9ff8b2c

Browse files
committed
Merge branch 'master' of https://github.com/ben-xD/leet
2 parents bebe175 + 3252699 commit 9ff8b2c

File tree

3 files changed

+76
-3
lines changed

3 files changed

+76
-3
lines changed

README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@
1111
| 5 | [Bit Manipulation](chapter_5) | 8 | 8 | |
1212
| 6 | [Math and Logic Puzzles](chapter_6) | 10 | 10 | 4 |
1313
| 7 | [OO Design](chapter_7) | 0 | 12 | |
14-
| 8 | [Recursion and DP](chapter_8) | 12 | 14 | |
14+
| 8 | [Recursion and DP](chapter_8) | 14 | 14 | |
1515
| 9 | [System Design](chapter_9) | 0 | 8 | |
1616
| 10 | [Sorting and Searching](chapter_10) | 9 | 11 | 1 |
1717
| 11 | [Testing](chapter_11) | 4 | 6 | 4 |
1818
| 12 | [C/C++](chapter_12) | 11 | 11 | 11 |
1919
| 13 | [Java](chapter_13) | 0 | 8 | |
2020
| 14 | [Databases](chapter_14) | 0 | 7 | |
2121
| 15 | [Threads and Locks](chapter_15) | 0 | 7 | |
22-
| 16 | [Moderate](chapter_16) | 21 | 26 | 1 |
23-
| 17 | [Hard](chapter_17) | 20 | 26 | |
22+
| 16 | [Moderate](chapter_16) | 26 | 26 | 1 |
23+
| 17 | [Hard](chapter_17) | 26 | 26 | |
2424

2525

2626
### Schedule

chapter_8/p8_14.py

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
from functools import lru_cache, partial
2+
from typing import List
3+
4+
5+
@lru_cache(None)
6+
def count_eval(form: str, result: bool):
7+
if len(form) == 1:
8+
literal = int(form)
9+
return 1 if bool(literal) == result else 0
10+
11+
ways = 0
12+
for i in range(0, len(form)-1, 2):
13+
current_op = form[i+1]
14+
left_side = partial(count_eval, form[:i+1])
15+
right_side = partial(count_eval, form[i+2:])
16+
17+
if current_op == "&":
18+
if result == True:
19+
ways += left_side(True) * right_side(True)
20+
else:
21+
ways += left_side(False) * right_side(True) \
22+
+ left_side(True) * right_side(False) \
23+
+ left_side(False) * right_side(False)
24+
elif current_op == "^":
25+
if result == False:
26+
ways += left_side(False) * right_side(False) \
27+
+ left_side(True) * right_side(True)
28+
else:
29+
ways += left_side(True) * right_side(False) \
30+
+ left_side(False) * right_side(True)
31+
elif current_op == "|":
32+
if result == False:
33+
ways += left_side(False) * right_side(False)
34+
else:
35+
ways += left_side(True) * right_side(True) \
36+
+ left_side(False) * right_side(True) \
37+
+ left_side(True) * right_side(False)
38+
39+
# print(f"Looking to package {form} for {result}, ways for this {ways}")
40+
return ways
41+
42+
if __name__ == "__main__":
43+
exs = [
44+
("1^0", True),
45+
("1^0|0|1", False),
46+
("0&0&0&1^1|0", True)
47+
]
48+
49+
for formula, target in exs:
50+
print(f"Ways to partition {formula} for {target} are {count_eval(formula, target)}")

chapter_8/p8_4.py

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from typing import List
2+
3+
4+
def gen_subsets(set_elems: List[int], offset: int):
5+
if offset == len(set_elems) - 1:
6+
return [[set_elems[offset]], []]
7+
8+
wo_elem = gen_subsets(set_elems, offset+1)
9+
w_elem = [[set_elems[offset]] +
10+
subset for subset in gen_subsets(set_elems, offset+1)]
11+
return w_elem + wo_elem
12+
13+
14+
if __name__ == "__main__":
15+
exs = [
16+
[1, 2, 3],
17+
[1],
18+
[1, 2, 3, 4]
19+
]
20+
21+
for arr in exs:
22+
subsets = gen_subsets(arr, 0)
23+
print(f"Subsets of {arr} are size {len(subsets)}: {subsets}")

0 commit comments

Comments
 (0)