From da7ece3fa83a040b76ccbfacc194d35a16c6b723 Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Fri, 11 Dec 2015 13:14:12 +0100 Subject: [PATCH] Day 11 solutions. --- day-11/input.txt | 1 + day-11/solution.py | 62 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 day-11/input.txt create mode 100644 day-11/solution.py diff --git a/day-11/input.txt b/day-11/input.txt new file mode 100644 index 0000000..04b9e32 --- /dev/null +++ b/day-11/input.txt @@ -0,0 +1 @@ +hxbxwxba diff --git a/day-11/solution.py b/day-11/solution.py new file mode 100644 index 0000000..b9558e6 --- /dev/null +++ b/day-11/solution.py @@ -0,0 +1,62 @@ +import string + +letters = [c for c in string.lowercase] + +password = "hxbxwxba" + +forbidden = set([letters.index(c) for c in "iol"]) +passwordCode = [letters.index(c) for c in password] + +def convert(password): + return [letters.index(c) for c in password] + +def isOk(password): + hasStreak = False + prev = -2 + streak = 1 + same = 0 + sameChar = None + for x in password: + if x in forbidden: + return False + + if x == prev + 1: + streak += 1 + if streak >= 3: + hasStreak = True + else: + streak = 1 + + if x == prev and x is not sameChar: + same += 1 + sameChar = x + + prev = x + + return hasStreak and same >= 2 + +def incrementForbidden(password): + for idx, x in enumerate(password): + if x in forbidden: + password[idx] = (x + 1) % len(letters) + for i in range(idx + 1, len(password)): + password[i] = 0 + + return + +def increment(password): + carry = True + i = len(password) + while carry and i > 0: + i -= 1 + password[i] = (password[i] + 1) % len(letters) + carry = password[i] == 0 + + incrementForbidden(password) + +for x in range(2): + increment(passwordCode) + while not isOk(passwordCode): + increment(passwordCode) + + print "Next password is", ''.join([letters[c] for c in passwordCode])