# Untitled

unknown

python

2 years ago

2.5 kB

3

Indexable

Never

^{}

with open('04.in', 'r') as file: data = (line.rstrip() for line in file) data = list(line for line in data if line) numbersraw = data.pop(0) numbers = numbersraw.split(",") boards = [] while True: # this loop parses the input and creates a list of boards board = [] for y in range(5): board.append(data.pop(0).split()) boards.append(board) if not data: break boards_to_ignore = [] bingoboards = [] lastnumber = "" def checkbingo(board, number, bingoboards): # function to check a board to see if there's a bingo global lastnumber for i in range(5): # check rows bingo = True for j in range(5): if board[i][j] != 'x': bingo = False if bingo: bingoboards.append(board) lastnumber = number # calcvalue(board, number) # uncomment for part one solution for i in range(5): # check columns bingo = True for j in range(5): if board[j][i] != 'x': bingo = False if bingo: bingoboards.append(board) lastnumber = number # calcvalue(board, number) # uncomment for part one solution return bingoboards def calcvalue(board, number): # function to calculate value for matching board print(board, number) total = 0 for row in board: for item in row: if item.isdigit(): total += int(item) total *= int(number) print(total) quit() for number in numbers: # main loop print(number) for b, board in enumerate(boards): if b in boards_to_ignore: # if this board's index is already in the matched list, skip it continue for y, row in enumerate(board): for x, item in enumerate(row): if item == str(number): boards[b][y][x] = 'x' bingolen = len(bingoboards) # see how many matching boards there are now... bingoboards = checkbingo(board, number, bingoboards) # ...check the current board for a bingo... if len(bingoboards) > bingolen: # if the matched boards list is bigger now, there must have been a bingo boards_to_ignore.append(b) # so we can add this board to the bingo list calcvalue(bingoboards[-1], lastnumber)