123456789101112131415161718192021222324252627282930313233 |
- import argparse
- import functools
- from typing import NamedTuple, List, Dict, Set, Tuple
- from collections import Counter
- parser = argparse.ArgumentParser()
- parser.add_argument("ifile", type=argparse.FileType('r'))
- args = parser.parse_args()
- pair_rules: Dict[str, str] = dict()
- template = args.ifile.readline().strip()
- args.ifile.readline() # skip blank line
- for line in args.ifile.readlines():
- chunks = line.strip().split(" ")
- pair_rules[chunks[0]] = chunks[2]
- def polymerize(template: str, rules: Dict[str, str]):
- constructed = "" + template[0]
- prev = template[0]
- for index in range(1, len(template)):
- constructed += rules.get(prev + template[index], "")
- prev = template[index]
- constructed += template[index]
- return constructed
- for _ in range(0, 10):
- print(template)
- template = polymerize(template, pair_rules)
- counts = Counter(template).most_common()
- print(counts[0][1] - counts[-1][1])
|