classed passwords

This commit is contained in:
randomuser 2023-07-14 23:52:08 -05:00
parent f94a7aa9e2
commit 9603c859bc
1 changed files with 69 additions and 27 deletions

View File

@ -1,3 +1,12 @@
class FoundCondition(Exception):
pass
class PasswordModule:
"""
takes in information about passwords and returns the password
it could be given the information. implementation is pursuant
Bomb Defusal Manual, Version 1, English, Page 16.
"""
passwords = [
'about', 'after', 'again', 'below', 'could',
'every', 'first', 'found', 'great', 'house',
@ -8,26 +17,59 @@ passwords = [
'where', 'which', 'world', 'would', 'write'
]
final = passwords
def __init__(self, cols):
"""
cols should contain a five element long array of numbers,
the first element containing all the possible characters for
the first position, the second containing all the characters for
the second position, and so on.
"""
class FoundCondition(Exception):
pass
self.responses = cols
self.word = None
responses = []
for i in range(5):
response = [*input("{}th letters: ".format(str(i)))]
responses.append(response)
def solve(self):
"""
start solving.
"""
for word in self.passwords:
try:
self._solver(0, word)
except FoundCondition as e:
self.word = str(e)
return self.word
def _solver(self, index, word):
"""
internal method. end users need not use.
"""
responses = self.responses
def check(index, word, responses):
if index == 5:
raise FoundCondition(word)
for a in responses[index]:
if a == word[index]:
check(index + 1, word, responses)
self._solver(index + 1, word)
for word in passwords:
try:
check(0, word, responses)
except FoundCondition as e:
print(str(e))
@classmethod
def human_helper(cls):
"""
prints stuff out to console to prompt for information.
useful for module specific debugging. see usage in the
default module execution location
(hint, default module execution location is where __name__ ==
"__main__"
"""
responses = []
for i in range(5):
response = [*input("{}th letters: ".format(str(i)))]
responses.append(response)
obj = cls(responses)
return obj.solve()
if __name__ == "__main__":
print(PasswordModule.human_helper())