part1.py 958 B

123456789101112131415161718192021222324252627282930313233
  1. import argparse
  2. import functools
  3. from typing import NamedTuple, List, Dict, Set, Tuple
  4. from collections import Counter
  5. parser = argparse.ArgumentParser()
  6. parser.add_argument("ifile", type=argparse.FileType('r'))
  7. args = parser.parse_args()
  8. pair_rules: Dict[str, str] = dict()
  9. template = args.ifile.readline().strip()
  10. args.ifile.readline() # skip blank line
  11. for line in args.ifile.readlines():
  12. chunks = line.strip().split(" ")
  13. pair_rules[chunks[0]] = chunks[2]
  14. def polymerize(template: str, rules: Dict[str, str]):
  15. constructed = "" + template[0]
  16. prev = template[0]
  17. for index in range(1, len(template)):
  18. constructed += rules.get(prev + template[index], "")
  19. prev = template[index]
  20. constructed += template[index]
  21. return constructed
  22. for _ in range(0, 10):
  23. print(template)
  24. template = polymerize(template, pair_rules)
  25. counts = Counter(template).most_common()
  26. print(counts[0][1] - counts[-1][1])