04_bingo.py 790 B

123456789101112131415161718192021222324252627282930
  1. #!/usr/bin/env python3
  2. import sys
  3. WIDTH = 5
  4. def parse(f):
  5. yield list(map(int, next(f).split(',')))
  6. for group in f.read().split('\n\n'):
  7. yield list(map(int, group.split()))
  8. def rows_cols(board):
  9. for i in range(0, WIDTH * WIDTH, WIDTH):
  10. yield set(board[i:i + WIDTH])
  11. for i in range(WIDTH):
  12. yield set(board[i::WIDTH])
  13. def play(numbers, *boards):
  14. boards = [list(rows_cols(board)) for board in boards]
  15. for num in numbers:
  16. for i, board in enumerate(boards):
  17. for rowcol in board:
  18. rowcol.discard(num)
  19. if not all(board):
  20. yield sum(map(sum, board[:WIDTH])) * num
  21. del boards[i]
  22. scores = play(*parse(sys.stdin))
  23. print(next(scores))
  24. for last in scores: pass
  25. print(last)