09_decompress.py 743 B

1234567891011121314151617181920212223242526272829
  1. #!/usr/bin/env python3
  2. import sys
  3. import re
  4. def declen(data, compress_markers):
  5. regex = re.compile(r'\((\d+)x(\d+)\)')
  6. def range_len(start, end):
  7. m = regex.search(data, start, end)
  8. l = 0
  9. while m:
  10. rep_len = int(m.group(1))
  11. rep_times = int(m.group(2))
  12. l += m.start() - start
  13. start = m.end() + rep_len
  14. if compress_markers:
  15. rep_len = range_len(start - rep_len, start)
  16. l += rep_times * rep_len
  17. m = regex.search(data, start, end)
  18. l += end - start
  19. return l
  20. return range_len(0, len(data))
  21. compressed = sys.stdin.read().rstrip()
  22. print(declen(compressed, False))
  23. print(declen(compressed, True))