04_forklifts.py 804 B

123456789101112131415161718192021222324
  1. #!/usr/bin/env python3
  2. import sys
  3. def remove_accessible(papers):
  4. for x, y in papers:
  5. neighbors = {(x - 1, y - 1), (x, y - 1), (x + 1, y - 1),
  6. (x - 1, y ), (x + 1, y ),
  7. (x - 1, y + 1), (x, y + 1), (x + 1, y + 1)}
  8. if len(papers & neighbors) >= 4:
  9. yield x, y
  10. def find_inaccessible(papers):
  11. new = set(remove_accessible(papers))
  12. while len(new) != len(papers):
  13. papers = new
  14. new = set(remove_accessible(papers))
  15. return papers
  16. papers = {(x, y) for y, line in enumerate(sys.stdin)
  17. for x, char in enumerate(line)
  18. if char == '@'}
  19. remains = set(remove_accessible(papers))
  20. print(len(papers) - len(remains))
  21. print(len(papers) - len(find_inaccessible(remains)))