This repository has been archived on 2018-12-05. You can view files and clone it, but cannot push or open issues or pull requests.
aoc2018/5/code.py

69 lines
2.2 KiB
Python
Raw Normal View History

2018-12-05 06:02:54 +00:00
#!/usr/bin/env python3
import string
import sys
def react(code, offset = 0):
reacted = False
current = None
previous = None
index = 0
for c in code[offset:]:
if index < 1:
index += 1
continue
try:
current = code[index]
except IndexError:
break
previous = code[index-1]
#print("Checking {} & {}".format(previous, current))
if previous.upper() == current.upper():
if previous != current:
#print("{} and {} reacted around index {} ({})".format(previous, current, index, code[index-2:index+2]))
reacted = True
break
index += 1
if reacted:
#start = index - 10
#if start < 0:
start = 0
return (True, start, code[:index-1] + code[index+1:])
else:
return (False, index, code)
if __name__ == '__main__':
lines = sys.stdin.readlines()
# Part 1
#for l in lines:
# reacted = True
# code = l.strip()
# index = 0
# iteration = 0
# while reacted:
# (reacted, index, code) = react(code, index)
# #print("{}, {}, iteration {}".format(reacted, index, iteration))
# iteration += 1
# print("Resulting code: '{}' ({} iterations) has {} units".format(code, iteration, len(code)))
permutations = {}
for l in lines:
for character in string.ascii_lowercase:
reacted = True
code = l.strip()
code = code.replace(character, '')
code = code.replace(character.upper(), '')
index = 0
iteration = 0
while reacted:
(reacted, index, code) = react(code, index)
iteration += 1
permutations[character] = {
'code': code,
'size': len(code),
'iterations': iteration,
}
for character in string.ascii_lowercase:
print("Option {}{} result in code length {} ({} iterations)".format(
character, character.upper(), permutations[character]['size'],
permutations[character]['iterations']))