From c09561597e239ed7f2b21f76c10fadd877b922ec Mon Sep 17 00:00:00 2001 From: Max Nuding Date: Sat, 4 Dec 2021 11:21:54 +0100 Subject: [PATCH] 04b --- Sources/aoc2021/04.swift | 25 +- Sources/aoc2021/Resources/input/04.txt | 614 ++++++++++++++++++++++++- 2 files changed, 612 insertions(+), 27 deletions(-) diff --git a/Sources/aoc2021/04.swift b/Sources/aoc2021/04.swift index 1bc9053..ae61ef0 100644 --- a/Sources/aoc2021/04.swift +++ b/Sources/aoc2021/04.swift @@ -23,17 +23,20 @@ struct Board { } mutating func checkHasWon() -> Bool { - //print("HasWon?: \(numbers)") - let foundInRows = numbers.contains { row in + var found = false + defer { + hasWon = hasWon || found + } + found = numbers.contains { row in row.allSatisfy { $0 == nil } } - if foundInRows { + if found { return true } - let foundInColumns = numbers.indices.contains { columnIndex in - return numbers.allSatisfy { $0[columnIndex] == nil } + found = numbers.indices.contains { columnIndex in + numbers.allSatisfy { $0[columnIndex] == nil } } - hasWon = foundInColumns + hasWon = found return hasWon } @@ -72,9 +75,7 @@ struct Day04 { func runA(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.crossOf(num: inputNumber) && board.checkHasWon() { print(board.calculateScore() * inputNumber) return @@ -85,11 +86,13 @@ struct Day04 { } func runB(boards: inout [Board], inputNumbers: [Int]) { + var countWon = 0 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() { + if board.crossOf(num: inputNumber) && !board.hasWon && board.checkHasWon() { + countWon += 1 + } + if countWon == boards.count { print(board.calculateScore() * inputNumber) return } diff --git a/Sources/aoc2021/Resources/input/04.txt b/Sources/aoc2021/Resources/input/04.txt index 669a51d..aa8bacb 100644 --- a/Sources/aoc2021/Resources/input/04.txt +++ b/Sources/aoc2021/Resources/input/04.txt @@ -1,19 +1,601 @@ -7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1 +87,7,82,21,47,88,12,71,24,35,10,90,4,97,30,55,36,74,19,50,23,46,13,44,69,27,2,0,37,33,99,49,77,15,89,98,31,51,22,96,73,94,95,18,52,78,32,83,85,54,75,84,59,25,76,45,20,48,9,28,39,70,63,56,5,68,61,26,58,92,67,53,43,62,17,81,80,66,91,93,41,64,14,8,57,38,34,16,42,11,86,72,40,65,79,6,3,29,60,1 -22 13 17 11 0 - 8 2 23 4 24 -21 9 14 16 7 - 6 10 3 18 5 - 1 12 20 15 19 + 3 55 15 54 81 +56 77 20 99 25 +90 57 67 0 97 +28 45 69 84 14 +91 94 39 36 85 - 3 15 0 2 22 - 9 18 13 17 5 -19 8 7 25 23 -20 11 10 24 4 -14 21 16 12 6 +52 60 30 7 36 +71 97 77 19 46 + 6 3 75 82 24 + 4 57 2 11 91 +56 84 23 43 48 -14 21 17 24 4 -10 16 15 9 19 -18 8 23 26 20 -22 11 13 6 5 - 2 0 12 3 7 +69 60 78 87 11 +79 30 93 39 63 +32 31 23 90 17 +57 98 13 46 9 +65 94 26 77 19 + +87 68 81 63 95 +91 43 98 49 70 +67 46 12 10 3 +65 93 39 29 34 +45 35 78 40 59 + +95 11 27 19 78 + 8 47 87 44 10 +48 83 93 52 23 +16 13 21 1 4 +69 12 40 39 81 + +50 73 63 93 86 +55 76 33 22 75 +61 23 82 37 99 +26 29 85 74 2 +19 78 30 40 6 + +58 2 95 92 78 +25 56 26 9 38 +43 83 4 87 8 +79 61 18 69 49 +24 29 5 41 89 + +56 8 72 92 9 +34 26 28 66 22 +51 42 89 87 90 +98 48 40 18 19 +13 80 71 79 52 + +87 77 82 38 48 +92 36 85 66 71 +97 29 94 9 1 +70 50 19 45 84 +43 6 72 54 89 + + 9 60 6 17 14 +97 2 10 84 0 + 7 98 51 8 93 +54 77 37 36 1 +72 29 26 47 19 + +92 22 25 19 36 +80 14 24 59 78 +29 45 88 54 4 +37 85 77 46 6 +42 52 43 26 72 + +41 84 36 95 49 +22 17 83 47 99 +25 77 12 71 39 +76 73 60 79 85 +63 94 11 54 51 + +88 29 7 26 45 +25 11 9 82 28 +43 5 41 70 39 +20 69 14 79 37 +78 59 98 93 6 + +99 24 81 51 57 +56 47 7 50 66 +84 85 71 86 31 +17 74 90 26 73 +15 11 12 61 45 + +61 27 84 49 21 +76 15 5 0 2 +35 7 79 77 20 +40 91 72 57 89 +11 33 18 42 78 + +21 38 46 53 50 +49 10 9 59 67 + 3 51 96 44 63 +93 45 82 27 47 +69 92 41 85 95 + +14 70 5 4 34 +59 98 53 45 7 +97 29 58 1 84 +19 69 37 93 57 +86 68 35 30 73 + +38 21 7 1 43 +41 9 54 0 11 +51 94 99 75 72 +89 78 79 2 73 +18 90 85 84 10 + +33 68 5 26 8 +51 85 20 49 58 +27 24 88 11 21 + 9 65 62 72 31 +95 53 12 14 83 + + 1 22 76 11 56 +97 95 79 55 14 +20 53 27 77 23 +37 49 30 72 84 +91 68 8 18 5 + +45 68 6 49 92 +43 90 20 1 78 +77 89 5 10 56 +84 28 73 62 72 +21 47 51 36 14 + +30 71 52 21 13 +20 8 73 38 92 +17 50 59 3 14 +19 76 41 4 90 +57 25 94 82 62 + +52 76 18 60 9 +29 38 5 96 63 +58 70 28 82 1 +40 49 43 25 19 +92 56 80 66 69 + +58 60 90 33 92 +13 74 0 80 84 +77 97 51 70 56 +15 87 68 98 55 + 1 64 35 3 83 + +77 43 69 58 34 +42 12 75 27 28 +74 54 30 2 15 +63 21 81 90 9 + 6 22 29 65 19 + +60 89 43 26 86 +47 52 12 17 90 +56 54 96 37 75 + 3 80 0 19 85 +39 61 13 59 73 + +94 59 82 21 68 +87 19 69 79 31 +64 57 72 43 25 +49 5 81 67 76 +95 16 58 52 51 + +33 36 1 61 85 +11 74 37 89 30 +24 59 31 76 62 + 4 50 81 69 78 +66 57 9 94 7 + + 6 20 26 2 9 +52 34 63 89 13 +16 65 30 29 27 +97 18 47 53 19 +79 7 38 33 39 + +90 20 79 95 44 + 0 96 98 74 60 +80 65 36 93 67 +54 25 81 84 10 +21 56 83 14 66 + +99 1 17 41 95 +66 29 47 74 43 +63 68 72 97 96 +92 79 13 93 4 +25 42 44 78 23 + +17 19 98 55 14 + 2 35 42 22 64 +52 32 69 27 82 +85 16 89 41 81 +10 70 95 56 84 + +64 4 94 51 35 +25 60 33 24 80 +59 40 14 47 93 +32 74 42 46 26 +49 75 7 95 79 + +39 98 43 56 73 +92 63 13 61 36 + 4 34 35 10 11 +30 19 75 26 41 +54 37 65 15 58 + +89 64 83 43 42 +71 32 25 63 34 +80 93 99 86 16 +31 33 94 27 91 + 8 17 81 41 85 + +16 89 41 87 53 +27 29 64 30 81 +20 47 18 1 50 +56 82 93 4 45 +71 21 63 25 15 + +61 12 97 41 32 +51 85 64 16 99 +68 2 43 10 86 +69 5 38 94 11 +92 74 20 83 90 + +98 96 44 95 36 +63 42 56 24 21 +40 7 65 48 59 +18 11 2 58 13 +86 41 0 53 20 + + 0 74 23 35 48 +21 34 97 10 2 +17 25 80 89 60 +15 27 94 68 7 +72 75 69 32 85 + +29 72 40 13 9 +48 41 21 66 94 +20 23 42 53 84 +93 14 7 57 77 +67 36 10 81 0 + +85 92 45 94 75 +58 79 9 98 5 +14 39 40 48 88 +96 61 36 62 7 +32 81 77 8 27 + +78 80 98 62 87 +90 53 91 81 23 +46 15 4 63 74 +30 6 47 64 44 +12 45 95 68 99 + +88 4 53 84 25 +71 36 20 46 74 +48 70 5 63 94 +15 65 78 33 67 +99 64 76 97 26 + +64 96 69 13 60 +31 26 86 38 46 +35 90 45 97 40 +98 87 21 61 1 +27 67 77 29 66 + +74 97 72 66 1 +34 50 2 57 33 +29 71 52 88 73 +16 7 39 40 24 +15 38 80 54 17 + +22 99 67 95 97 +60 68 38 18 96 +89 46 57 8 11 + 7 12 61 83 35 +17 74 42 52 58 + +10 19 44 12 41 +82 71 1 26 55 +52 88 6 97 48 +16 66 36 50 29 +67 2 65 0 45 + +68 16 99 57 12 +36 50 32 19 91 +43 21 52 31 69 +41 82 37 49 75 +20 74 87 76 63 + +81 10 7 80 78 +29 86 6 13 67 +19 12 23 54 68 +64 85 40 43 87 +16 5 59 3 34 + +79 37 13 17 31 +56 22 24 7 58 +65 76 38 39 85 +45 36 90 3 66 +25 52 28 61 71 + +18 20 21 74 33 +77 30 29 56 26 +86 49 44 75 62 +11 47 10 90 97 +64 94 6 43 67 + +77 59 44 58 41 +85 30 22 56 19 +62 16 35 32 88 +91 94 34 51 9 +31 33 13 60 90 + +94 56 72 12 59 +64 78 2 80 96 +41 99 69 21 79 +17 88 36 37 85 +89 7 66 15 84 + +61 80 26 83 11 +62 42 51 79 31 +86 98 64 28 58 + 2 19 71 35 52 +14 34 0 32 44 + + 1 50 76 15 12 +96 55 73 61 19 +74 0 79 5 8 + 3 36 53 67 52 +60 49 93 43 85 + +71 75 35 44 1 +82 96 22 68 81 +19 25 52 62 97 +28 64 73 99 92 +38 60 42 70 20 + +38 15 77 19 74 + 5 89 17 10 16 +96 48 40 42 57 +21 18 51 56 29 +86 63 25 45 93 + +98 36 26 69 2 +70 75 18 89 81 +33 24 10 76 47 +28 59 54 49 58 +62 19 53 73 16 + +96 84 52 86 47 +70 14 26 46 81 +90 53 66 16 87 +34 9 91 83 41 +61 29 13 49 77 + +78 49 94 33 18 +91 83 55 73 44 +19 4 14 6 3 +45 28 57 12 9 +41 1 82 79 95 + +74 38 35 88 6 +80 21 32 3 71 + 1 34 17 8 2 +94 24 84 26 91 +64 27 83 60 23 + +93 18 27 52 28 +83 90 40 8 87 +21 3 4 99 26 +14 13 71 41 91 +20 63 69 38 30 + +49 20 31 70 5 +37 7 94 85 84 +68 90 45 4 6 +96 46 10 97 63 + 9 89 34 25 52 + + 9 79 30 87 53 +43 3 47 32 0 +59 29 44 11 98 +31 75 41 91 12 + 8 14 62 73 94 + +43 52 60 16 61 +40 5 99 90 44 +35 78 83 75 64 +29 10 32 11 79 +59 18 72 54 30 + +11 19 84 76 12 + 7 91 24 81 93 + 4 59 78 63 69 +46 72 74 43 28 +94 55 73 35 1 + +51 6 64 31 82 +52 75 43 68 42 +95 49 21 63 46 +96 19 33 97 70 + 1 60 78 56 23 + +73 40 83 36 26 +32 61 43 66 39 +63 15 34 98 3 +68 79 44 12 27 + 4 57 96 7 52 + +63 77 12 89 17 +64 16 90 46 88 +33 65 58 55 85 +45 83 41 71 68 +57 81 56 13 15 + +34 33 49 54 10 +97 77 14 22 59 +26 45 16 13 76 + 3 87 75 66 47 + 2 53 56 23 63 + +42 38 69 33 96 +32 90 53 2 59 +56 22 45 11 54 +92 25 8 30 60 +75 41 19 79 70 + +17 88 80 21 3 +96 91 27 15 72 +61 62 5 23 75 +67 8 37 40 65 +76 46 49 13 35 + +90 7 11 28 54 +98 37 88 35 14 +12 20 71 44 80 +24 55 97 83 6 +36 59 66 48 26 + +90 87 75 28 7 +32 14 80 62 6 +81 12 18 22 52 +51 89 16 41 93 +55 0 43 40 11 + +28 49 8 75 21 +34 77 84 66 17 + 6 82 98 22 1 +20 93 94 96 40 +58 80 18 63 19 + +94 63 36 29 53 +27 61 32 79 71 + 8 87 67 58 1 +78 97 88 28 12 +59 74 70 89 80 + +48 37 57 42 26 +31 69 10 1 91 +23 38 99 79 49 +68 19 61 75 43 +90 59 30 94 44 + +76 56 21 17 24 +73 59 71 46 50 +35 9 97 92 26 +33 98 30 7 34 +52 5 91 68 60 + +35 63 55 99 8 + 2 94 66 29 14 +50 54 72 57 44 +90 34 9 69 95 +31 45 49 27 33 + +62 14 84 0 85 +59 36 64 43 31 +47 4 33 8 24 +28 46 39 20 22 + 3 80 72 21 40 + +19 92 34 62 2 + 7 98 44 3 5 +59 45 25 33 52 +85 87 65 9 89 +16 63 36 28 78 + +72 84 91 77 93 +48 99 80 21 90 +52 6 15 86 47 +19 32 83 53 22 +94 1 61 38 10 + +52 1 12 93 33 +59 11 82 96 10 +54 36 97 32 55 + 5 2 76 49 81 +48 60 62 98 27 + +65 62 7 22 52 +19 91 53 9 81 +51 20 82 99 60 +24 72 3 49 54 +35 94 74 38 42 + +60 28 11 10 35 +18 40 22 78 27 +53 3 52 1 63 +41 31 23 16 68 +70 98 42 84 33 + +64 99 92 95 74 +35 86 87 33 40 + 3 79 13 44 39 +34 57 69 50 80 + 9 42 29 77 6 + +22 71 46 44 88 +42 70 94 60 43 +50 92 95 57 63 +24 39 35 18 68 +28 34 77 81 91 + +49 41 21 59 32 +44 46 19 20 22 +88 45 85 10 38 +84 18 70 77 11 +33 43 63 0 47 + +86 23 32 30 25 +85 40 26 39 71 +88 3 72 93 19 +53 59 52 55 73 +51 58 90 49 81 + +33 25 87 46 58 +90 55 53 82 54 +30 89 11 81 29 +41 83 28 35 94 +49 97 48 72 34 + +86 22 0 27 89 +78 64 87 59 11 +85 19 60 61 3 +31 55 17 79 5 +93 4 1 26 66 + +96 11 86 81 31 +28 37 7 64 36 +27 29 6 53 69 +30 21 8 50 60 +43 1 12 63 97 + +81 3 10 25 41 + 4 54 96 45 51 +76 68 74 52 63 +26 77 21 82 69 +70 6 19 43 93 + +63 72 20 36 53 +65 84 61 92 67 +28 15 69 52 68 +95 21 44 48 96 +93 78 94 62 91 + +39 13 53 94 1 +95 42 48 93 79 +71 32 65 2 82 +96 22 99 46 54 +37 35 34 29 11 + +52 40 66 96 26 +11 69 62 91 85 +58 92 75 48 71 +19 31 28 12 15 +99 76 90 87 98 + +52 95 93 9 76 +11 63 68 89 17 +13 8 99 78 33 +14 53 6 4 47 +26 35 57 67 73 + +96 71 14 40 34 +16 80 55 67 19 +36 4 63 91 61 +46 77 43 81 23 +22 54 79 76 89 + +69 28 48 84 35 +31 86 58 91 45 +37 25 97 13 14 +65 32 80 99 23 +94 63 60 41 90 + +19 47 13 80 58 +69 53 15 81 20 +21 39 70 22 26 +56 92 61 65 42 +96 76 86 87 41