From 42e442da09c0f26b18a1d225c3e2604638757dd5 Mon Sep 17 00:00:00 2001 From: Max Nuding Date: Sat, 4 Dec 2021 11:09:56 +0100 Subject: [PATCH] 04a --- Sources/aoc2021/04.swift | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/Sources/aoc2021/04.swift b/Sources/aoc2021/04.swift index f38d17a..1bc9053 100644 --- a/Sources/aoc2021/04.swift +++ b/Sources/aoc2021/04.swift @@ -58,13 +58,16 @@ struct Day04 { .map { Int($0)! } _ = lines.removeFirst() //empty seperator line - let boards = lines + let boardsInitial = lines .split(separator: "") .map { boardLines in Board(numbers: boardLines.map { $0.split(separator: " ").map { num in Int(num)! } }) } - var boardsA = boards - runA(boards: &boardsA, inputNumbers: inputNumbers) + var boards = boardsInitial + runA(boards: &boards, inputNumbers: inputNumbers) + + boards = boardsInitial + runB(boards: &boards, inputNumbers: inputNumbers) } func runA(boards: inout [Board], inputNumbers: [Int]) { @@ -81,7 +84,17 @@ struct Day04 { } } - func runB(_ commands: [String]) { - + func runB(boards: inout [Board], inputNumbers: [Int]) { + for inputNumber in inputNumbers { + //print("\nInput: \(inputNumber)") + for (idx, var board) in boards.enumerated() { + //print("Checking board: \(idx)") + if !board.hasWon && board.crossOf(num: inputNumber) && board.checkHasWon() { + print(board.calculateScore() * inputNumber) + return + } + boards[idx] = board + } + } } }