You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

39 lines
968 B
Python

6 years ago
from pprint import pprint
with open('input.txt', 'r') as f:
raw = [x.strip() for x in f.readlines()]
initial_state = raw[0].split(' ')[-1]
rules = dict()
for rule in raw[2:]:
x, y = rule.split(' => ')
rules[x] = y
print(initial_state)
pprint(rules)
gens = 50000000000
start_idx = 0
state = initial_state
print(state)
for it in range(gens):
if it % 10000 == 0:
print('calc at', it, 'state len:', len(state), 'idx', start_idx)
print(state)
next = []
state = '....' + state + '....'
for i in range(2, len(state) - 2):
seq = state[i-2:i+3]
next.append(rules.get(seq) or '.')
start_idx -= 2
state = ''.join(next)
start_idx += len(state) - len(state.lstrip('.'))
state = state.strip('.')
# print(' ' * (start_idx + 20) + state, start_idx)
res = 0
for i, pot_val in enumerate(state):
pot_id = i + start_idx
if pot_val == '#':
res += pot_id
print(res)