mirror of
https://github.com/correl/euler.git
synced 2024-11-27 11:09:54 +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