Day 11 - Advent of Code 2015
Working solutions for the day 11 puzzles.
Parts One and Two
""" day_11_01_02.py """
# usage: python3 day_11_01_02.py < input
def valid(text):
""" is text a valid string """
for character in 'ilo':
if character in text:
return False
for i in text[:-2]:
key = i + chr(ord(i) + 1) + chr(ord(i) + 2)
if key in text:
break
else:
return False
pairs = 0
for i in set(text):
key = i + i
if key in text:
pairs += 1
if pairs == 2:
break
else:
return False
return True
def generator(seed):
""" valid string generator """
string = seed
while True:
ords = [ord(i) - 97 for i in reversed(string)]
carry = 1
for i, value in enumerate(ords):
carry, ords[i] = divmod(value + carry, 26)
if carry == 1:
ords.append(0)
string = [chr(i + 97) for i in ords]
string = ''.join(reversed(string))
if valid(string):
yield string
password = generator(input())
# part 01
print(next(password))
# part 02
print(next(password))