mirror of
https://github.com/correl/euler.git
synced 2024-11-23 19:19:53 +00:00
Problem 079
git-svn-id: file:///srv/svn/euler@73 e5f4c3ec-3c0c-11df-b522-21efaa4426b5
This commit is contained in:
parent
305251d533
commit
94bfd86b91
2 changed files with 88 additions and 0 deletions
38
e079.py
Normal file
38
e079.py
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
"""By analysing a user's login attempts, can you determine the secret numeric passcode?
|
||||||
|
|
||||||
|
A common security method used for online banking is to ask the user for three random characters from a passcode. For example, if the passcode was 531278, they may ask for the 2nd, 3rd, and 5th characters; the expected reply would be: 317.
|
||||||
|
|
||||||
|
The text file, keylog.txt, contains fifty successful login attempts.
|
||||||
|
|
||||||
|
Given that the three characters are always asked for in order, analyse the file so as to determine the shortest possible secret passcode of unknown length.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def main():
|
||||||
|
key = []
|
||||||
|
with open('p079/keylog.txt', 'r') as f:
|
||||||
|
while True:
|
||||||
|
line = f.readline()
|
||||||
|
if not line:
|
||||||
|
break
|
||||||
|
prev = None
|
||||||
|
for c in line.strip():
|
||||||
|
c = int(c)
|
||||||
|
if c not in key:
|
||||||
|
if prev:
|
||||||
|
# Place right of prev
|
||||||
|
i = key.index(prev) + 1
|
||||||
|
key.insert(i, c)
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
key.insert(0, c)
|
||||||
|
elif prev and key.index(c) < key.index(prev):
|
||||||
|
# Move if not right of prev
|
||||||
|
old = key.index(c)
|
||||||
|
key.insert(key.index(prev) + 1, c)
|
||||||
|
key.pop(old)
|
||||||
|
pass
|
||||||
|
prev = c
|
||||||
|
print 'Key:', ''.join(str(c) for c in key)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
50
p079/keylog.txt
Normal file
50
p079/keylog.txt
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
319
|
||||||
|
680
|
||||||
|
180
|
||||||
|
690
|
||||||
|
129
|
||||||
|
620
|
||||||
|
762
|
||||||
|
689
|
||||||
|
762
|
||||||
|
318
|
||||||
|
368
|
||||||
|
710
|
||||||
|
720
|
||||||
|
710
|
||||||
|
629
|
||||||
|
168
|
||||||
|
160
|
||||||
|
689
|
||||||
|
716
|
||||||
|
731
|
||||||
|
736
|
||||||
|
729
|
||||||
|
316
|
||||||
|
729
|
||||||
|
729
|
||||||
|
710
|
||||||
|
769
|
||||||
|
290
|
||||||
|
719
|
||||||
|
680
|
||||||
|
318
|
||||||
|
389
|
||||||
|
162
|
||||||
|
289
|
||||||
|
162
|
||||||
|
718
|
||||||
|
729
|
||||||
|
319
|
||||||
|
790
|
||||||
|
680
|
||||||
|
890
|
||||||
|
362
|
||||||
|
319
|
||||||
|
760
|
||||||
|
316
|
||||||
|
729
|
||||||
|
380
|
||||||
|
319
|
||||||
|
728
|
||||||
|
716
|
Loading…
Reference in a new issue