Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from collections import Counter
- import numpy as np
- import functools
- import time
- with open("input.txt", "r") as input_file:
- lines = input_file.read().splitlines()
- start_state = lines[0]
- rules = dict()
- for line in lines[2:]:
- pair, output = line.split(" -> ")
- rules[pair] = output
- @functools.lru_cache(10000)
- def get_counts_for_pair(pair, depth):
- rule_output = rules.get(pair)
- if rule_output is None or depth == 0:
- if pair[0] == pair[1]:
- return {pair[0]: 2}
- else:
- return {pair[0]: 1, pair[1]: 1}
- else:
- c = Counter()
- c.update(get_counts_for_pair(pair[0] + rule_output, depth - 1))
- c.update(get_counts_for_pair(rule_output + pair[1], depth - 1))
- c.update({rule_output: -1})
- return c
- letter_counts = Counter()
- letter_counts.update(get_counts_for_pair(start_state[0] + start_state[1], 40))
- for letter_index in range(1,len(start_state) - 1):
- pair = start_state[letter_index] + start_state[letter_index + 1]
- letter_counts.update(get_counts_for_pair(pair, 40))
- letter_counts.update({start_state[letter_index]: -1})
- raw_counts = np.array(list(letter_counts.values()))
- print(np.max(raw_counts) - np.min(raw_counts))
Advertisement
Add Comment
Please, Sign In to add comment