a.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import os, argparse
  2. import numpy as np
  3. class bingo_brick:
  4. brick = None
  5. marks = None
  6. def __init__(self):
  7. self.marks = np.ones((5,5), dtype=bool)
  8. self.brick = np.ndarray((0))
  9. def append_row(self, row):
  10. if self.brick.size == 0:
  11. self.brick = np.array(row)
  12. else:
  13. self.brick = np.vstack((self.brick, row))
  14. def mark(self, mark):
  15. #self.marks[ där self.brick == mark ] = 0
  16. self.marks[self.brick == mark] = False
  17. def bingo(self):
  18. vert = self.marks.sum(axis = 0) == 0
  19. if vert.any():
  20. return True
  21. hor = self.marks.sum(axis = 1) == 0
  22. if hor.any():
  23. return True
  24. return False
  25. def score(self):
  26. remainder = self.brick[self.marks]
  27. score = remainder.sum()
  28. return score
  29. def __str__(self):
  30. result = ''
  31. if self.brick.size > 0:
  32. result = str(self.brick) + '\n'
  33. result += str(self.marks)
  34. else:
  35. result = "Empty brick"
  36. return result
  37. def solve_task(filename):
  38. marks = []
  39. bingo_bricks = []
  40. with open(filename) as infile:
  41. # Read first line of mark announcements
  42. marks_str = infile.readline().rstrip().split(',')
  43. marks = [int(k) for k in marks_str]
  44. # Read the bingo bricks line by line
  45. for raw_line in infile:
  46. line = raw_line.rstrip()
  47. if len(line) == 0: # Empty row separates bingo bricks
  48. bingo_bricks.append(bingo_brick())
  49. else:
  50. bingo_line_str = line.split()
  51. bingo_line = [int(k) for k in bingo_line_str]
  52. bingo_bricks[-1].append_row(bingo_line)
  53. # Time to play some bingo!
  54. # Iterate the mark announcements
  55. winning_brick = None
  56. winning_mark = None
  57. for mark in marks:
  58. print("Draws number: " + str(mark))
  59. for brick in bingo_bricks:
  60. brick.mark(mark)
  61. if brick.bingo():
  62. winning_brick = brick
  63. winning_mark = mark
  64. break
  65. if winning_brick:
  66. break
  67. if winning_brick:
  68. print(winning_brick)
  69. print("Brick score: " + str(winning_brick.score()) + "\nLast mark: " + str(winning_mark))
  70. print("Total score: " + str(winning_brick.score() * winning_mark))
  71. os.system("pause")
  72. def parse_arguments():
  73. parser = argparse.ArgumentParser(description="Script that solves the case",epilog="Have a nice day!")
  74. parser.add_argument('filename', nargs='?', default="example.txt", help='Input file')
  75. args = parser.parse_args()
  76. return args
  77. def main():
  78. args = parse_arguments()
  79. solve_task(args.filename)
  80. if __name__ == "__main__":
  81. main()