Problem 079

git-svn-id: file:///srv/svn/euler@73 e5f4c3ec-3c0c-11df-b522-21efaa4426b5
This commit is contained in:
Correl Roush 2010-05-05 14:09:01 +00:00
parent 305251d533
commit 94bfd86b91
2 changed files with 88 additions and 0 deletions

38
e079.py Normal file
View 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
View 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