classed passwords
This commit is contained in:
parent
f94a7aa9e2
commit
9603c859bc
74
passwords.py
74
passwords.py
|
@ -1,4 +1,13 @@
|
||||||
passwords = [
|
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',
|
'about', 'after', 'again', 'below', 'could',
|
||||||
'every', 'first', 'found', 'great', 'house',
|
'every', 'first', 'found', 'great', 'house',
|
||||||
'large', 'learn', 'never', 'other', 'place',
|
'large', 'learn', 'never', 'other', 'place',
|
||||||
|
@ -6,28 +15,61 @@ passwords = [
|
||||||
'spell', 'still', 'study', 'their', 'there',
|
'spell', 'still', 'study', 'their', 'there',
|
||||||
'these', 'thing', 'think', 'three', 'water',
|
'these', 'thing', 'think', 'three', 'water',
|
||||||
'where', 'which', 'world', 'would', 'write'
|
'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):
|
self.responses = cols
|
||||||
pass
|
self.word = None
|
||||||
|
|
||||||
responses = []
|
def solve(self):
|
||||||
for i in range(5):
|
"""
|
||||||
response = [*input("{}th letters: ".format(str(i)))]
|
start solving.
|
||||||
responses.append(response)
|
"""
|
||||||
|
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:
|
if index == 5:
|
||||||
raise FoundCondition(word)
|
raise FoundCondition(word)
|
||||||
|
|
||||||
for a in responses[index]:
|
for a in responses[index]:
|
||||||
if a == word[index]:
|
if a == word[index]:
|
||||||
check(index + 1, word, responses)
|
self._solver(index + 1, word)
|
||||||
|
|
||||||
for word in passwords:
|
@classmethod
|
||||||
try:
|
def human_helper(cls):
|
||||||
check(0, word, responses)
|
"""
|
||||||
except FoundCondition as e:
|
prints stuff out to console to prompt for information.
|
||||||
print(str(e))
|
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