first commit
This commit is contained in:
60
exceptions.py
Normal file
60
exceptions.py
Normal file
@ -0,0 +1,60 @@
|
||||
"""Exceptions used for the vial solver."""
|
||||
from collections import Counter
|
||||
|
||||
class InvalidVial(Exception):
|
||||
"""Raised when an invalid vial is initialized."""
|
||||
def __init__(self, balls, size):
|
||||
self.message = "The vial you tried to initialize is not possible."
|
||||
self.message += f"\n(balls: {balls}, size: {size})"
|
||||
super().__init__(self.message)
|
||||
|
||||
class InvalidGame(Exception):
|
||||
"""Raised when an invalid game is initialized."""
|
||||
def __init__(self, vial_string):
|
||||
self.message = "The game you tried to initialize is not possible."
|
||||
self.message += f"\n(input string: {vial_string})"
|
||||
|
||||
count = Counter(list(vial_string.replace(" ", "")))
|
||||
count_counter = Counter(list(count.values()))
|
||||
if 1 in count_counter.values():
|
||||
wrong_letter = list(count.keys())[
|
||||
list(count.values()).index(list(count_counter.keys())[
|
||||
list(count_counter.values()).index(1)
|
||||
])
|
||||
]
|
||||
pointers = ' '*len("(input string: ")
|
||||
indices = [index for index, value in enumerate(list(vial_string))
|
||||
if value == wrong_letter]
|
||||
for i, index in enumerate(indices):
|
||||
if i > 0:
|
||||
index -= indices[i-1]+1
|
||||
|
||||
pointers += ' '*index + "^"
|
||||
self.message += "\n"+pointers
|
||||
super().__init__(self.message)
|
||||
|
||||
class NoSolutions(Exception):
|
||||
"""Raised when an invalid game is initialized."""
|
||||
def __init__(self):
|
||||
self.message = "There are no valid solutions for the game."
|
||||
super().__init__(self.message)
|
||||
|
||||
class VialFull(Exception):
|
||||
"""Raised when a full vial is pushed to."""
|
||||
def __init__(self, balls, size):
|
||||
self.message = "The vial you tried to push to is already full."
|
||||
self.message += f"\n(balls: {balls}, size: {size})"
|
||||
super().__init__(self.message)
|
||||
|
||||
class VialEmpty(Exception):
|
||||
"""Raised when an empty vial is popped."""
|
||||
def __init__(self, balls, size):
|
||||
self.message = "The vial you tried to pull from is empty."
|
||||
self.message += f"\n(balls: {balls}, size: {size})"
|
||||
super().__init__(self.message)
|
||||
|
||||
class HeapEmpty(Exception):
|
||||
"""Raised when extract_min() is tried on an empty heap."""
|
||||
def __init__(self):
|
||||
self.message = "The heap you tried to extract from is empty."
|
||||
super().__init__(self.message)
|
Reference in New Issue
Block a user