classed passwords
This commit is contained in:
parent
f94a7aa9e2
commit
9603c859bc
96
passwords.py
96
passwords.py
|
@ -1,33 +1,75 @@
|
|||
passwords = [
|
||||
'about', 'after', 'again', 'below', 'could',
|
||||
'every', 'first', 'found', 'great', 'house',
|
||||
'large', 'learn', 'never', 'other', 'place',
|
||||
'plant', 'point', 'right', 'small', 'sound',
|
||||
'spell', 'still', 'study', 'their', 'there',
|
||||
'these', 'thing', 'think', 'three', 'water',
|
||||
'where', 'which', 'world', 'would', 'write'
|
||||
]
|
||||
|
||||
final = passwords
|
||||
|
||||
class FoundCondition(Exception):
|
||||
pass
|
||||
|
||||
responses = []
|
||||
for i in range(5):
|
||||
response = [*input("{}th letters: ".format(str(i)))]
|
||||
responses.append(response)
|
||||
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',
|
||||
'large', 'learn', 'never', 'other', 'place',
|
||||
'plant', 'point', 'right', 'small', 'sound',
|
||||
'spell', 'still', 'study', 'their', 'there',
|
||||
'these', 'thing', 'think', 'three', 'water',
|
||||
'where', 'which', 'world', 'would', 'write'
|
||||
]
|
||||
|
||||
def check(index, word, responses):
|
||||
if index == 5:
|
||||
raise FoundCondition(word)
|
||||
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.
|
||||
"""
|
||||
|
||||
for a in responses[index]:
|
||||
if a == word[index]:
|
||||
check(index + 1, word, responses)
|
||||
self.responses = cols
|
||||
self.word = None
|
||||
|
||||
for word in passwords:
|
||||
try:
|
||||
check(0, word, responses)
|
||||
except FoundCondition as e:
|
||||
print(str(e))
|
||||
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
|
||||
|
||||
if index == 5:
|
||||
raise FoundCondition(word)
|
||||
|
||||
for a in responses[index]:
|
||||
if a == word[index]:
|
||||
self._solver(index + 1, word)
|
||||
|
||||
@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())
|
||||
|
|
Loading…
Reference in New Issue