added day 1 part 1
This commit is contained in:
88
day4_1.py
Executable file
88
day4_1.py
Executable file
@@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env python3
|
||||
import sys, utils
|
||||
|
||||
class Board(object):
|
||||
def __init__(self, l):
|
||||
self.board = []
|
||||
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):
|
||||
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:
|
||||
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 process(l):
|
||||
nums = get_numbers(l)
|
||||
boards = init_boards(l)
|
||||
return solve(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))
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user