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

4 yıl önce
1234567891011121314151617181920212223242526272829303132333435
  1. import sys
  2. import toolkit
  3. def parse_info(info):
  4. out = {}
  5. for line in info.splitlines():
  6. key, vals = line.split(':')
  7. out[key] = set()
  8. for a, b in zip(*[iter(toolkit.integers(vals))] * 2):
  9. out[key] |= set(range(a, b + 1))
  10. return out
  11. text = sys.stdin.read()
  12. info, mine, rest = text.split('\n\n')
  13. info = parse_info(info).items()
  14. mine = toolkit.integers(mine)
  15. rest = [toolkit.integers(ln) for ln in rest.splitlines()][1:]
  16. valid = {v for _, vs in info for v in vs}
  17. error_rate = sum(n for row in rest for n in row if n not in valid)
  18. print(error_rate)
  19. rows = [row for row in rest if valid.issuperset(row)]
  20. options = [{k for k, vs in info if vs.issuperset(col)} for col in zip(*rows)]
  21. ans2 = 1
  22. found = set()
  23. for k, vs in sorted(enumerate(options), key=lambda pair: len(pair[1])):
  24. v, = vs - found
  25. found.add(v)
  26. if v.startswith('departure'):
  27. ans2 *= mine[k]
  28. print(ans2)