From 94bfd86b91841617e995e27cda94d922e3a6990f Mon Sep 17 00:00:00 2001 From: Correl Roush Date: Wed, 5 May 2010 14:09:01 +0000 Subject: [PATCH] Problem 079 git-svn-id: file:///srv/svn/euler@73 e5f4c3ec-3c0c-11df-b522-21efaa4426b5 --- e079.py | 38 +++++++++++++++++++++++++++++++++++++ p079/keylog.txt | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 e079.py create mode 100644 p079/keylog.txt diff --git a/e079.py b/e079.py new file mode 100644 index 0000000..2cd5407 --- /dev/null +++ b/e079.py @@ -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() diff --git a/p079/keylog.txt b/p079/keylog.txt new file mode 100644 index 0000000..b6f9903 --- /dev/null +++ b/p079/keylog.txt @@ -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