aoc / year_2021 /code /day_4.py
YassineAlouini
Start
0f06ae9
raw
history blame
2.47 kB
def main():
import numpy as np
from collections import defaultdict
with open("/home/yassinealouini/Documents/code/advent_of_code/aoc/year_2021/data/4.txt") as f:
tmp = f.read().rstrip().split("\n")
draws = [int(e) for e in tmp[0].split(",")]
# Make the bingo boards
boards = defaultdict(lambda: np.zeros((5, 5)))
board_id = 0
data = tmp[2:]
for i, row in enumerate(data):
if (i + 1) % 6 == 0:
board_id += 1
continue
boards[board_id][i%6, :] = [int(e) for e in row.split(" ") if e != ""]
board_won = {k: 0 for k in boards.keys()}
for draw in draws:
for board_id, board in boards.items():
board = np.where(board == draw, -1, board)
boards[board_id] = board
if (board.sum(axis=1) == -5).any() or (board.sum(axis=0) == -5).any():
if sum(board_won.values()) == 0:
print("Solution for part I: ", board[(board > -1)].sum() * draw)
board_won[board_id] = 1
if sum(board_won.values()) == len(boards):
print("Solution for part II: ", board[(board > -1)].sum() * draw)
return
def streamlit_4(data_input):
import numpy as np
from collections import defaultdict
import streamlit as st
tmp = data_input.rstrip().split("\n")
draws = [int(e) for e in tmp[0].split(",")]
# Make the bingo boards
boards = defaultdict(lambda: np.zeros((5, 5)))
board_id = 0
data = tmp[2:]
for i, row in enumerate(data):
if (i + 1) % 6 == 0:
board_id += 1
continue
boards[board_id][i%6, :] = [int(e) for e in row.split(" ") if e != ""]
board_won = {k: 0 for k in boards.keys()}
for draw in draws:
for board_id, board in boards.items():
board = np.where(board == draw, -1, board)
boards[board_id] = board
if (board.sum(axis=1) == -5).any() or (board.sum(axis=0) == -5).any():
if sum(board_won.values()) == 0:
st.write("Solution for part I: ", board[(board > -1)].sum() * draw)
board_won[board_id] = 1
if sum(board_won.values()) == len(boards):
st.write("Solution for part II: ", board[(board > -1)].sum() * draw)
return
if __name__ == "__main__":
main()