Syncing z2
This commit is contained in:
100
2021/04.py
Normal file
100
2021/04.py
Normal file
@@ -0,0 +1,100 @@
|
||||
import json
|
||||
|
||||
def test_winner(board, drawn_numbers):
|
||||
for one_combination in board['winning_combinations']:
|
||||
total = 0
|
||||
if set(one_combination).issubset(set(drawn_numbers)):
|
||||
for one_number in one_bingo['numbers']:
|
||||
if one_number not in drawn_numbers:
|
||||
total += int(one_number)
|
||||
return int(total) * int(drawn_numbers[-1])
|
||||
return -1
|
||||
|
||||
with open('./2021/04.input', 'r') as input_file:
|
||||
# with open('./2021/04.test', 'r') as input_file:
|
||||
input_data = input_file.read()
|
||||
|
||||
number_list = input_data.split('\n\n')[0].split(',')
|
||||
|
||||
print(number_list)
|
||||
|
||||
bingo_boards = input_data.split('\n\n')[1:]
|
||||
|
||||
bingo_dicts = []
|
||||
for one_board in bingo_boards:
|
||||
one_bingo = {}
|
||||
one_bingo['numbers'] = []
|
||||
one_bingo['winning_combinations'] = []
|
||||
rows = one_board.split('\n')
|
||||
|
||||
for row in range(len(rows)):
|
||||
columns = rows[row].split(' ')
|
||||
columns = list(filter("".__ne__, columns))
|
||||
one_bingo['numbers'].extend(columns)
|
||||
|
||||
one_bingo['winning_combinations'].append(columns)
|
||||
for column in range(len(columns)):
|
||||
winning_column = []
|
||||
for row in range(len(rows)):
|
||||
print(row, column, row * column)
|
||||
winning_column.append(one_bingo['numbers'][row * len(columns) + column])
|
||||
print(winning_column)
|
||||
one_bingo['winning_combinations'].append(winning_column)
|
||||
bingo_dicts.append(one_bingo)
|
||||
|
||||
# Find a winning board.
|
||||
winner_found = False
|
||||
for i in range(4, len(number_list)):
|
||||
drawn_numbers = number_list[:i]
|
||||
print("Drawn numbers", drawn_numbers)
|
||||
|
||||
for one_bingo in bingo_dicts:
|
||||
for one_combination in one_bingo['winning_combinations']:
|
||||
total = 0
|
||||
if set(one_combination).issubset(set(drawn_numbers)):
|
||||
# Get the board
|
||||
print("Winning Combination", one_combination)
|
||||
print("Winning Board", one_bingo['numbers'])
|
||||
one_bingo['numbers'].sort()
|
||||
print("Winning Sorted", one_bingo['numbers'])
|
||||
|
||||
for one_number in one_bingo['numbers']:
|
||||
if one_number not in drawn_numbers:
|
||||
total += int(one_number)
|
||||
print(total)
|
||||
winner_found = True
|
||||
print(total, drawn_numbers[-1], int(total) * int(drawn_numbers[-1]))
|
||||
if winner_found:
|
||||
break
|
||||
if winner_found:
|
||||
break
|
||||
if winner_found:
|
||||
break
|
||||
|
||||
boards_left = bingo_dicts.copy()
|
||||
|
||||
|
||||
for i in range(4, len(number_list)):
|
||||
drawn_numbers = number_list[:i]
|
||||
|
||||
# Test for winner. If winner, eliminate.
|
||||
for one_board in range(len(boards_left) - 1, 0, -1):
|
||||
total = 0
|
||||
for one_combination in boards_left[one_board]:
|
||||
if set(one_combination).issubset(set(drawn_numbers)) and len(boards_left) > 1:
|
||||
# Remove the board
|
||||
del boards_left[one_board]
|
||||
|
||||
for one_number in one_bingo['numbers']:
|
||||
if one_number not in drawn_numbers:
|
||||
total += int(one_number)
|
||||
print(len(boards_left))
|
||||
print(total)
|
||||
winner_found = True
|
||||
print(total, drawn_numbers[-1], int(total) * int(drawn_numbers[-1]))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user