diff --git a/2021/4/main2.py b/2021/4/main2.py new file mode 100644 index 0000000..0cd11a0 --- /dev/null +++ b/2021/4/main2.py @@ -0,0 +1,83 @@ +# all the numbers called, in order +numbers = [] + +temp_board = [] +boards = [] +fills = [] + +board_index = 0 + +#### +def Victory(board): + for y in range(0, len(board)): + if(board[y] == [True, True, True, True, True]): + return True; + + # NOTE(dev): Assumes all columns are the same length + for x in range(0, len(board[0])): + num_true = 0 + for y in range(0, len(board)): + if(board[y][x]): + num_true = num_true + 1 + if(num_true == len(board[0])): + return True + + return False + +#### +def FindWinner(numbers): + indexes = [] + winning_indexes = [] + for i in range(0, len(boards)): + indexes.append(i) + for i in range(0, len(numbers)): + for board_index in range(0, len(boards)): + if(board_index not in winning_indexes): + for y in range(0, len(boards[board_index])): + for x in range(0, len(boards[board_index][y])): + if(boards[board_index][y][x] == numbers[i]): + fills[board_index][y][x] = True + if(Victory(fills[board_index])): + print('Victory with', numbers[i], 'on board', board_index, '!!') + winning_indexes.append(int(board_index)) + indexes.remove(int(board_index)) + if(len(indexes) == 0): + return numbers[i], board_index + +#### MAIN EXECUTION #### +with open('data', 'r') as fp: + for i,line in enumerate(fp): + + if(i == 0): + numbers = line.strip().split(',') + elif(len(line.strip()) == 0): + if(len(temp_board) > 0): # i.e. skip the first, empty one + # add in the next player board + boards.append(temp_board) + temp_board = [] + # create a blank answer board for this player board + for j in range(0,5): + temp_board.append([False, False, False, False, False]) + fills.append(temp_board); + temp_board = [] + board_index = board_index + 1 + else: + # add the next array of numbers to the temporary board object + temp_board.append(line.strip().split()) + +winning_number,winning_board_index = FindWinner(numbers) +print('Winning Number:', winning_number, ', Winning Board Index: ', winning_board_index) + +total = 0 +for y in range(0, len(fills[winning_board_index])): + for x in range(0, len(fills[winning_board_index][y])): # assumes size is same for all columns + if(not fills[winning_board_index][y][x]): + total = total + int(boards[winning_board_index][y][x]) + +print(total * int(winning_number)) + +# # DEBUG(dev): Show full contents of all boards +# for x in range(0, len(boards)): +# for y in range(0, len(boards[x])): +# for z in range(0, len(boards[x][y])): +# print(boards[x][y][z])