Skip to content

added type hints for backtracking/minimax.py #2313

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 57 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
3b12438
added type hints for backtracking/minimax.py
Abdujabbar Aug 15, 2020
9282106
added some simple test cases
Abdujabbar Aug 26, 2020
3616821
flake fix
Abdujabbar Aug 26, 2020
862545f
fixes doctests
Abdujabbar Aug 26, 2020
332c519
Merge branch 'master' of https://github.com/TheAlgorithms/Python
Abdujabbar Aug 30, 2020
80daa57
Fix bugs and add related tests (#2375)
Littlecowherd Aug 31, 2020
e92e433
Update CONTRIBUTING.md (#2378)
muskanvk Aug 31, 2020
a1d1a44
added idf-smooth (#2174)
ShubhamShaswat Sep 2, 2020
c38dec0
capitalize (#2389)
mohammadreza490 Sep 3, 2020
1385e47
Create hexadecimal_to_decimal (#2393)
mohammadreza490 Sep 4, 2020
3b1c4f7
changed a typo (#2396)
NEERAJAP2001 Sep 5, 2020
c0dcc55
Update triplet_sum.py (#2404)
NEERAJAP2001 Sep 6, 2020
25946e4
Update scoring_functions.py (#2291)
tanujdhiman Sep 9, 2020
4d0a8f2
Optimized recursive_bubble_sort (#2410)
realDuYuanChao Sep 10, 2020
696cd47
octal_to_decimal converter (#2399)
mohammadreza490 Sep 10, 2020
1b3fec3
binary_to_decimal converter (#2400)
mohammadreza490 Sep 11, 2020
a191f89
Fix Non Recursive Depth First Search (#2207)
marcoscannabrava Sep 11, 2020
c676956
lxmlCovidDataFetch (#2416)
santoshrajkumar Sep 11, 2020
2e790ce
file-transfer: writing tests and ensuring that all is going well (#2413)
meysam81 Sep 11, 2020
f754c0d
Jump search (#2415)
grochedix Sep 12, 2020
20e98fc
Fix some warnings from LGTM (#2420)
Hasenn Sep 13, 2020
d6bff5c
Renamed files and fixed Doctest (#2421)
realDuYuanChao Sep 13, 2020
44b8cb0
Updated Stack (#2414)
realDuYuanChao Sep 13, 2020
4e5b730
recaptchaVerification (#2417)
santoshrajkumar Sep 13, 2020
799fde4
Update linear_search.py (#2422)
Ashley-J-George Sep 14, 2020
10aa214
Docstrings and formatting improvements (#2418)
Hasenn Sep 14, 2020
cbbc43b
Updated problem_04 in project_euler (#2427)
realDuYuanChao Sep 14, 2020
1ac75f4
Create priority_queue_using_list.py (#2435)
Ashley-J-George Sep 16, 2020
86fb299
Corrected filename and include static types (#2440)
Sep 17, 2020
2de2267
Updated problem_06 in Project Euler (#2439)
realDuYuanChao Sep 17, 2020
0dea049
Added static type checking to polynom-for-points.py towards issue #21…
avych Sep 18, 2020
dc415ec
Added double linear search recursion (#2445)
realDuYuanChao Sep 18, 2020
ecac7b0
Contains loops.py add (#2442)
kanthuc Sep 18, 2020
363858e
hyphen_files = [file for file in filepaths if "-" in file] (#2447)
cclauss Sep 19, 2020
697495b
Fix copy / paste oversight (#2448)
cclauss Sep 19, 2020
b22596c
bin_to_octal (#2431)
mohammadreza490 Sep 19, 2020
b05081a
Update and rename bin_to_octal.py to binary_to_octal.py (#2449)
cclauss Sep 19, 2020
9b73884
Added a function that checks if given string can be rearranged to for…
susmith98 Sep 19, 2020
ea0759d
Create problem_54 in project Euler (#2451)
dhruvmanila Sep 20, 2020
718be54
Update sol1.py (#2455)
atarax665 Sep 20, 2020
a1ea76b
Optimization problem_10 in project_euler (#2453)
realDuYuanChao Sep 22, 2020
6e6a49d
Config Travis CI for two jobs (#2463)
dhruvmanila Sep 23, 2020
9200a2e
from __future__ import annotations (#2464)
cclauss Sep 23, 2020
de3b68d
added main method for calling on lunch
Abdujabbar Sep 23, 2020
5f9be0a
Add Python type hints and doctests to other/two_sum.py (#2467)
spamegg1 Sep 23, 2020
4a3b8d6
Added binary_xor_operator.py and binary_and_operator.py (#2433)
Sep 24, 2020
902fe1c
Fixed reverse words algorithm (#2469)
realDuYuanChao Sep 24, 2020
3a275ca
Fixed remove duplicate (#2470)
realDuYuanChao Sep 24, 2020
08eb1ef
Add solution() for problem 54 of Project Euler (#2472)
dhruvmanila Sep 24, 2020
d3c3f90
added type hints for backtracking/minimax.py
Abdujabbar Aug 15, 2020
584d1da
added some simple test cases
Abdujabbar Aug 26, 2020
8e3c12f
flake fix
Abdujabbar Aug 26, 2020
bb84f97
fixes doctests
Abdujabbar Aug 26, 2020
549c798
added main method for calling on lunch
Abdujabbar Sep 23, 2020
7d1724a
Merge branch 'master' of github.com:Abdujabbor/Python
Abdujabbar Sep 24, 2020
b006adf
prepare for python 3.9
Abdujabbar Sep 24, 2020
1338305
fix imports
Abdujabbar Sep 24, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Updated Stack (#2414)
* * Added type hints
* Added test
* Formated code

* updating DIRECTORY.md

* Update stack.py

* Test error conditions for pop, peek, and

Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
Co-authored-by: Christian Clauss <cclauss@me.com>
  • Loading branch information
3 people authored Sep 13, 2020
commit 44b8cb0c81b1c86dc8957d6d218f3643488e84a9
20 changes: 19 additions & 1 deletion DIRECTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@
* [Sudoku](https://github.com/TheAlgorithms/Python/blob/master/backtracking/sudoku.py)
* [Sum Of Subsets](https://github.com/TheAlgorithms/Python/blob/master/backtracking/sum_of_subsets.py)

## Bit Manipulation
* [Binary Or Operator](https://github.com/TheAlgorithms/Python/blob/master/bit_manipulation/binary_or_operator.py)

## Blockchain
* [Chinese Remainder Theorem](https://github.com/TheAlgorithms/Python/blob/master/blockchain/chinese_remainder_theorem.py)
* [Diophantine Equation](https://github.com/TheAlgorithms/Python/blob/master/blockchain/diophantine_equation.py)
Expand All @@ -50,6 +53,7 @@
* [Deterministic Miller Rabin](https://github.com/TheAlgorithms/Python/blob/master/ciphers/deterministic_miller_rabin.py)
* [Diffie](https://github.com/TheAlgorithms/Python/blob/master/ciphers/diffie.py)
* [Elgamal Key Generator](https://github.com/TheAlgorithms/Python/blob/master/ciphers/elgamal_key_generator.py)
* [Enigma Machine2](https://github.com/TheAlgorithms/Python/blob/master/ciphers/enigma_machine2.py)
* [Hill Cipher](https://github.com/TheAlgorithms/Python/blob/master/ciphers/hill_cipher.py)
* [Mixed Keyword Cypher](https://github.com/TheAlgorithms/Python/blob/master/ciphers/mixed_keyword_cypher.py)
* [Morse Code Implementation](https://github.com/TheAlgorithms/Python/blob/master/ciphers/morse_code_implementation.py)
Expand Down Expand Up @@ -105,6 +109,7 @@
* [Segment Tree Other](https://github.com/TheAlgorithms/Python/blob/master/data_structures/binary_tree/segment_tree_other.py)
* [Treap](https://github.com/TheAlgorithms/Python/blob/master/data_structures/binary_tree/treap.py)
* Disjoint Set
* [Alternate Disjoint Set](https://github.com/TheAlgorithms/Python/blob/master/data_structures/disjoint_set/alternate_disjoint_set.py)
* [Disjoint Set](https://github.com/TheAlgorithms/Python/blob/master/data_structures/disjoint_set/disjoint_set.py)
* Hashing
* [Double Hash](https://github.com/TheAlgorithms/Python/blob/master/data_structures/hashing/double_hash.py)
Expand Down Expand Up @@ -419,6 +424,7 @@
* [Sum Of Geometric Progression](https://github.com/TheAlgorithms/Python/blob/master/maths/sum_of_geometric_progression.py)
* [Test Prime Check](https://github.com/TheAlgorithms/Python/blob/master/maths/test_prime_check.py)
* [Trapezoidal Rule](https://github.com/TheAlgorithms/Python/blob/master/maths/trapezoidal_rule.py)
* [Ugly Numbers](https://github.com/TheAlgorithms/Python/blob/master/maths/ugly_numbers.py)
* [Volume](https://github.com/TheAlgorithms/Python/blob/master/maths/volume.py)
* [Zellers Congruence](https://github.com/TheAlgorithms/Python/blob/master/maths/zellers_congruence.py)

Expand Down Expand Up @@ -474,6 +480,7 @@
* [Sdes](https://github.com/TheAlgorithms/Python/blob/master/other/sdes.py)
* [Sierpinski Triangle](https://github.com/TheAlgorithms/Python/blob/master/other/sierpinski_triangle.py)
* [Tower Of Hanoi](https://github.com/TheAlgorithms/Python/blob/master/other/tower_of_hanoi.py)
* [Triplet Sum](https://github.com/TheAlgorithms/Python/blob/master/other/triplet_sum.py)
* [Two Sum](https://github.com/TheAlgorithms/Python/blob/master/other/two_sum.py)
* [Word Patterns](https://github.com/TheAlgorithms/Python/blob/master/other/word_patterns.py)

Expand Down Expand Up @@ -600,6 +607,12 @@
* [Solution42](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_42/solution42.py)
* Problem 43
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_43/sol1.py)
* Problem 44
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_44/sol1.py)
* Problem 45
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_45/sol1.py)
* Problem 46
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_46/sol1.py)
* Problem 47
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_47/sol1.py)
* Problem 48
Expand All @@ -608,10 +621,14 @@
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_52/sol1.py)
* Problem 53
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_53/sol1.py)
* Problem 55
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_55/sol1.py)
* Problem 551
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_551/sol1.py)
* Problem 56
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_56/sol1.py)
* Problem 63
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_63/sol1.py)
* Problem 67
* [Sol1](https://github.com/TheAlgorithms/Python/blob/master/project_euler/problem_67/sol1.py)
* Problem 76
Expand Down Expand Up @@ -673,7 +690,6 @@
* [Recursive Insertion Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/recursive_insertion_sort.py)
* [Selection Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/selection_sort.py)
* [Shell Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/shell_sort.py)
* [Sleep Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/sleep_sort.py)
* [Stooge Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/stooge_sort.py)
* [Strand Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/strand_sort.py)
* [Tim Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/tim_sort.py)
Expand All @@ -685,6 +701,7 @@
## Strings
* [Aho-Corasick](https://github.com/TheAlgorithms/Python/blob/master/strings/aho-corasick.py)
* [Boyer Moore Search](https://github.com/TheAlgorithms/Python/blob/master/strings/boyer_moore_search.py)
* [Capitalize](https://github.com/TheAlgorithms/Python/blob/master/strings/capitalize.py)
* [Check Anagrams](https://github.com/TheAlgorithms/Python/blob/master/strings/check_anagrams.py)
* [Check Pangram](https://github.com/TheAlgorithms/Python/blob/master/strings/check_pangram.py)
* [Is Palindrome](https://github.com/TheAlgorithms/Python/blob/master/strings/is_palindrome.py)
Expand Down Expand Up @@ -715,6 +732,7 @@
* [Emails From Url](https://github.com/TheAlgorithms/Python/blob/master/web_programming/emails_from_url.py)
* [Fetch Bbc News](https://github.com/TheAlgorithms/Python/blob/master/web_programming/fetch_bbc_news.py)
* [Fetch Github Info](https://github.com/TheAlgorithms/Python/blob/master/web_programming/fetch_github_info.py)
* [Fetch Jobs](https://github.com/TheAlgorithms/Python/blob/master/web_programming/fetch_jobs.py)
* [Get Imdb Top 250 Movies Csv](https://github.com/TheAlgorithms/Python/blob/master/web_programming/get_imdb_top_250_movies_csv.py)
* [Get Imdbtop](https://github.com/TheAlgorithms/Python/blob/master/web_programming/get_imdbtop.py)
* [Slack Message](https://github.com/TheAlgorithms/Python/blob/master/web_programming/slack_message.py)
Expand Down
87 changes: 58 additions & 29 deletions data_structures/stacks/stack.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
__author__ = "Omkar Pathak"
class StackOverflowError(BaseException):
pass


class Stack:
Expand All @@ -7,18 +8,17 @@ class Stack:
element to the top of the stack, and pop() removes an element from the top
of a stack. The order in which elements come off of a stack are
Last In, First Out (LIFO).

https://en.wikipedia.org/wiki/Stack_(abstract_data_type)
"""

def __init__(self, limit=10):
def __init__(self, limit: int = 10):
self.stack = []
self.limit = limit

def __bool__(self):
def __bool__(self) -> bool:
return bool(self.stack)

def __str__(self):
def __str__(self) -> str:
return str(self.stack)

def push(self, data):
Expand All @@ -29,21 +29,20 @@ def push(self, data):

def pop(self):
""" Pop an element off of the top of the stack."""
if self.stack:
return self.stack.pop()
else:
raise IndexError("pop from an empty stack")
return self.stack.pop()

def peek(self):
""" Peek at the top-most element of the stack."""
if self.stack:
return self.stack[-1]
return self.stack[-1]

def is_empty(self):
def is_empty(self) -> bool:
""" Check if a stack is empty."""
return not bool(self.stack)

def size(self):
def is_full(self) -> bool:
return self.size() == self.limit

def size(self) -> int:
""" Return the size of the stack."""
return len(self.stack)

Expand All @@ -52,24 +51,54 @@ def __contains__(self, item) -> bool:
return item in self.stack


class StackOverflowError(BaseException):
pass

def test_stack() -> None:
"""
>>> test_stack()
"""
stack = Stack(10)
assert bool(stack) is False
assert stack.is_empty() is True
assert stack.is_full() is False
assert str(stack) == "[]"

try:
_ = stack.pop()
assert False # This should not happen
except IndexError:
assert True # This should happen

try:
_ = stack.peek()
assert False # This should not happen
except IndexError:
assert True # This should happen

if __name__ == "__main__":
stack = Stack()
for i in range(10):
assert stack.size() == i
stack.push(i)

print("Stack demonstration:\n")
print("Initial stack: " + str(stack))
print("pop(): " + str(stack.pop()))
print("After pop(), the stack is now: " + str(stack))
print("peek(): " + str(stack.peek()))
assert bool(stack) is True
assert stack.is_empty() is False
assert stack.is_full() is True
assert str(stack) == str(list(range(10)))
assert stack.pop() == 9
assert stack.peek() == 8

stack.push(100)
print("After push(100), the stack is now: " + str(stack))
print("is_empty(): " + str(stack.is_empty()))
print("size(): " + str(stack.size()))
num = 5
if num in stack:
print(f"{num} is in stack")
assert str(stack) == str([0, 1, 2, 3, 4, 5, 6, 7, 8, 100])

try:
stack.push(200)
assert False # This should not happen
except StackOverflowError:
assert True # This should happen

assert stack.is_empty() is False
assert stack.size() == 10

assert 5 in stack
assert 55 not in stack


if __name__ == "__main__":
test_stack()