From 7c746b7003dca6e019e0fb8939408ba1099cab0d Mon Sep 17 00:00:00 2001 From: Dmitry Fedotov Date: Sun, 5 Dec 2021 17:51:16 +0300 Subject: [PATCH] added day4_2.py --- day4_2.py | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100755 day4_2.py diff --git a/day4_2.py b/day4_2.py new file mode 100755 index 0000000..76c42c8 --- /dev/null +++ b/day4_2.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python3 +import sys, utils + +class Board(object): + def __init__(self, l): + self.board = [] + self.won = False + for row in l: + vals = [[int(v), False] for v in row.split()] + self.board.append(vals) + + def __str__(self): + s = '' + for row in self.board: + s += "\t".join([str(n[0]) for n in row]) + '\n' + return s + + def check(self, n): + if self.won: + return None + for i in range(len(self.board)): + for j in range(len(self.board[0])): + if self.board[i][j][0] == n: + self.board[i][j][1] = True + return self.has_winning_row() or self.has_winning_column() + + def has_winning_row(self) -> list: + for row in self.board: + winning = True + for val in row: + if not val[1]: + winning = False + if winning: + return self.sum_unmarked() + return None + + def has_winning_column(self) -> list: + for x in range(len(self.board[0])): + column = [row[x] for row in self.board] + winning = True + for val in column: + if not val[1]: + winning = False + if winning: + return self.sum_unmarked() + return None + + def sum_unmarked(self) -> int: + self.won = True + total = 0 + for row in self.board: + for value in row: + if not value[1]: + total += value[0] + return total + +def get_numbers(l): + nums = [int(n) for n in l[0].split(',')] + return nums + +def init_boards(l): + boards = [] + for i in range(2, len(l)-4, 6): + b = Board(l[i:i+5]) + boards.append(b) + return boards + +def solve(boards, nums): + for n in nums: + for board in boards: + s = board.check(n) + if s: + return s * n + return "FUCK!" + +def last_winning(boards, nums): + last = None + for n in nums: + for board in boards: + s = board.check(n) + if s: + last = s * n + return last + +def process(l): + nums = get_numbers(l) + boards = init_boards(l) + return last_winning(boards, nums) + + + +if __name__ == '__main__': + if len(sys.argv) < 2: + print("please supply input file") + sys.exit() + + l = utils.File(sys.argv[1]).get_strings() + print(process(l)) + + +