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])