aoc

Advent of Code Solutions
git clone git://git.alexkarle.com.com/aoc
Log | Files | Refs | README | LICENSE

commit 7156bcda556ef263fd5f228fa5e515f28ccb364c (patch)
parent 418b3c17748e10aab93cf7ce926aad325ca5cd38
Author: Alex Karle <alex@alexkarle.com>
Date:   Sat,  4 Dec 2021 00:32:18 -0500

day4: Add hacky solution

Diffstat:
A4/a.py | 655+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A4/b.py | 661+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A4/input | 601+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 1917 insertions(+), 0 deletions(-)

diff --git a/4/a.py b/4/a.py @@ -0,0 +1,655 @@ +#!/usr/bin/env python3 +import sys +from collections import defaultdict + +# XXX: yikes +N = [18,99,39,89,0,40,52,72,61,77,69,51,30,83,20,65,93,88,29,22,14,82,53,41,76,79,46,78,56,57,24,36,38,11,50,1,19,26,70,4,54,3,84,33,15,21,9,58,64,85,10,66,17,43,31,27,2,5,95,96,16,97,12,34,74,67,86,23,49,8,59,45,68,91,25,48,13,28,81,94,92,42,7,37,75,32,6,60,63,35,62,98,90,47,87,73,44,71,55,80] + +boards = [ [ +[12 , 79 , 33 , 36 , 97], +[82 , 38 , 77 , 61 , 84], +[55 , 74 , 21 , 65 , 39], +[54 , 56 , 95 , 50 , 2], +[45 , 68 , 31 , 94 , 14], +], [ +[95 , 26 , 80 , 25 , 62], +[79 , 91 , 70 , 76 , 61], +[98 , 97 , 17 , 75 , 23], +[71 , 30 , 21 , 52 , 29], +[20 , 54 , 32 , 12 , 31], +], [ +[35 , 31 , 86 , 36 , 52], +[18 , 50 , 79 , 60 , 67], +[98 , 3 , 51 , 46 , 25], +[ 4 , 61 , 55 , 87 , 70], +[94 , 39 , 68 , 27 , 14], +], [ +[9 , 49 , 53 , 52 , 2], +[65 , 92 , 4 , 73 , 67], +[90 , 95 , 39 , 78 , 64], +[17 , 27 , 13 , 60 , 51], +[25 , 63 , 70 , 77 , 22], +], [ +[33 , 34 , 6 , 58 , 77], +[44 , 75 , 54 , 18 , 21], +[15 , 25 , 79 , 12 , 70], +[90 , 14 , 81 , 22 , 49], +[72 , 38 , 59 , 78 , 16], +], [ +[13 , 51 , 94 , 40 , 56], +[6 , 99 , 9 , 64 , 91], +[87 , 73 , 93 , 71 , 31], +[39 , 42 , 28 , 24 , 7], +[1 , 52 , 17 , 85 , 11], +], [ +[95 , 23 , 15 , 29 , 12], +[40 , 79 , 2 , 64 , 59], +[94 , 93 , 3 , 25 , 10], +[5 , 58 , 7 , 78 , 82], +[62 , 73 , 74 , 16 , 56], +], [ +[17 , 55 , 56 , 14 , 51], +[70 , 94 , 66 , 21 , 37], +[97 , 90 , 43 , 80 , 89], +[50 , 12 , 52 , 46 , 85], +[16 , 79 , 60 , 15 , 45], +], [ +[18 , 59 , 37 , 25 , 41], +[51 , 61 , 63 , 7 , 53], +[3 , 21 , 31 , 76 , 72], +[29 , 99 , 34 , 6 , 83], +[55 , 45 , 93 , 75 , 15], +], [ +[59 , 63 , 4 , 95 , 68], +[18 , 47 , 43 , 15 , 26], +[66 , 7 , 54 , 22 , 8], +[50 , 75 , 91 , 20 , 98], +[49 , 61 , 55 , 12 , 1], +], [ +[96 , 74 , 37 , 12 , 66], +[10 , 94 , 7 , 29 , 75], +[20 , 48 , 26 , 67 , 41], +[40 , 99 , 9 , 80 , 35], +[72 , 87 , 82 , 76 , 85], +], [ +[60 , 58 , 43 , 17 , 57], +[25 , 33 , 85 , 91 , 27], +[46 , 36 , 54 , 49 , 64], +[86 , 53 , 4 , 63 , 95], +[38 , 74 , 84 , 37 , 67], +], [ +[66 , 90 , 73 , 98 , 51], +[11 , 94 , 60 , 92 , 14], +[82 , 58 , 17 , 63 , 52], +[33 , 1 , 18 , 77 , 72], +[12 , 76 , 20 , 23 , 10], +], [ +[28 , 69 , 67 , 6 , 32], +[4 , 17 , 77 , 52 , 33], +[26 , 57 , 92 , 56 , 73], +[30 , 91 , 50 , 82 , 2], +[21 , 31 , 61 , 78 , 99], +], [ +[98 , 63 , 26 , 81 , 75], +[23 , 36 , 3 , 88 , 65], +[69 , 87 , 33 , 20 , 43], +[4 , 51 , 47 , 70 , 50], +[10 , 91 , 74 , 77 , 66], +], [ +[61 , 47 , 90 , 22 , 63], +[26 , 15 , 41 , 8 , 73], +[71 , 40 , 82 , 91 , 75], +[39 , 95 , 56 , 84 , 55], +[5 , 76 , 32 , 69 , 34], +], [ +[78 , 77 , 1 , 57 , 39], +[70 , 49 , 83 , 90 , 87], +[97 , 74 , 26 , 67 , 19], +[50 , 21 , 2 , 92 , 60], +[82 , 65 , 62 , 31 , 33], +], [ +[6 , 46 , 97 , 50 , 2], +[48 , 23 , 34 , 24 , 93], +[83 , 7 , 31 , 59 , 66], +[44 , 18 , 21 , 47 , 77], +[69 , 86 , 35 , 72 , 17], +], [ +[78 , 68 , 69 , 4 , 26], +[47 , 38 , 15 , 95 , 53], +[66 , 46 , 49 , 79 , 59], +[82 , 30 , 50 , 7 , 2], +[17 , 16 , 34 , 64 , 51], +], [ +[19 , 20 , 13 , 75 , 26], +[63 , 28 , 14 , 93 , 50], +[27 , 70 , 61 , 29 , 67], +[12 , 89 , 71 , 33 , 98], +[31 , 25 , 16 , 79 , 69], +], [ +[95 , 23 , 83 , 86 , 16], +[4 , 50 , 27 , 92 , 62], +[42 , 29 , 75 , 88 , 49], +[31 , 58 , 39 , 44 , 93], +[80 , 19 , 15 , 97 , 96], +], [ +[91 , 60 , 6 , 47 , 63], +[51 , 90 , 36 , 11 , 72], +[73 , 84 , 50 , 76 , 40], +[49 , 75 , 82 , 9 , 35], +[71 , 1 , 0 , 67 , 59], +], [ +[48 , 56 , 80 , 24 , 86], +[4 , 74 , 95 , 53 , 41], +[52 , 58 , 36 , 19 , 64], +[90 , 87 , 99 , 82 , 25], +[35 , 13 , 22 , 26 , 21], +], [ +[68 , 87 , 18 , 23 , 97], +[69 , 25 , 40 , 76 , 24], +[34 , 33 , 56 , 16 , 51], +[49 , 77 , 88 , 75 , 26], +[2 , 19 , 96 , 35 , 86], +], [ +[29 , 26 , 56 , 49 , 10], +[89 , 91 , 95 , 5 , 69], +[52 , 1 , 99 , 34 , 20], +[8 , 74 , 64 , 32 , 61], +[25 , 72 , 60 , 22 , 97], +], [ +[39 , 65 , 0 , 91 , 86], +[9 , 7 , 21 , 62 , 89], +[22 , 92 , 63 , 46 , 17], +[61 , 66 , 37 , 59 , 52], +[93 , 70 , 3 , 97 , 49], +], [ +[29 , 3 , 66 , 4 , 43], +[46 , 25 , 7 , 62 , 54], +[71 , 26 , 70 , 75 , 5], +[17 , 82 , 33 , 51 , 19], +[65 , 40 , 91 , 53 , 15], +], [ +[88 , 59 , 14 , 41 , 92], +[83 , 74 , 73 , 65 , 12], +[95 , 97 , 35 , 47 , 55], +[62 , 2 , 3 , 9 , 63], +[52 , 44 , 32 , 33 , 72], +], [ +[82 , 12 , 77 , 25 , 60], +[8 , 93 , 38 , 56 , 97], +[59 , 5 , 70 , 33 , 40], +[9 , 90 , 1 , 41 , 57], +[68 , 73 , 26 , 91 , 6], +], [ +[72 , 15 , 64 , 59 , 49], +[26 , 12 , 9 , 97 , 80], +[84 , 18 , 91 , 20 , 87], +[69 , 34 , 14 , 65 , 40], +[98 , 74 , 27 , 5 , 31], +], [ +[55 , 99 , 23 , 12 , 76], +[57 , 92 , 71 , 83 , 53], +[19 , 24 , 39 , 97 , 73], +[96 , 91 , 32 , 34 , 28], +[0 , 72 , 42 , 65 , 1], +], [ +[84 , 50 , 97 , 46 , 99], +[90 , 1 , 95 , 64 , 22], +[45 , 53 , 55 , 25 , 42], +[30 , 70 , 52 , 88 , 72], +[29 , 44 , 98 , 51 , 6], +], [ +[70 , 74 , 85 , 78 , 45], +[34 , 91 , 82 , 63 , 99], +[17 , 3 , 50 , 53 , 87], +[38 , 88 , 98 , 6 , 92], +[39 , 30 , 10 , 18 , 67], +], [ +[26 , 45 , 13 , 93 , 29], +[18 , 51 , 66 , 22 , 17], +[55 , 75 , 70 , 9 , 6], +[3 , 74 , 30 , 42 , 91], +[21 , 77 , 57 , 37 , 90], +], [ +[17 , 94 , 74 , 85 , 60], +[2 , 67 , 97 , 19 , 11], +[20 , 32 , 58 , 18 , 56], +[10 , 95 , 40 , 51 , 93], +[66 , 50 , 15 , 65 , 52], +], [ +[7 , 38 , 79 , 77 , 42], +[15 , 34 , 13 , 80 , 93], +[46 , 54 , 74 , 33 , 17], +[1 , 4 , 83 , 68 , 35], +[70 , 85 , 66 , 63 , 39], +], [ +[22 , 68 , 41 , 2 , 58], +[69 , 76 , 14 , 62 , 33], +[64 , 39 , 46 , 28 , 59], +[60 , 21 , 26 , 13 , 74], +[12 , 54 , 99 , 82 , 0], +], [ +[9 , 0 , 82 , 4 , 20], +[88 , 76 , 18 , 55 , 44], +[10 , 53 , 74 , 93 , 58], +[49 , 50 , 16 , 42 , 2], +[19 , 23 , 66 , 54 , 65], +], [ +[96 , 9 , 42 , 30 , 67], +[3 , 29 , 94 , 5 , 45], +[65 , 62 , 25 , 59 , 17], +[21 , 79 , 73 , 44 , 66], +[38 , 6 , 86 , 7 , 4], +], [ +[89 , 77 , 17 , 13 , 79], +[51 , 10 , 28 , 18 , 36], +[59 , 69 , 80 , 61 , 25], +[0 , 21 , 9 , 91 , 30], +[86 , 96 , 2 , 29 , 39], +], [ +[53 , 11 , 27 , 20 , 82], +[15 , 38 , 90 , 34 , 98], +[69 , 28 , 16 , 14 , 99], +[67 , 49 , 48 , 42 , 59], +[51 , 2 , 61 , 23 , 3], +], [ +[37 , 60 , 14 , 43 , 49], +[66 , 24 , 54 , 96 , 58], +[73 , 28 , 48 , 3 , 81], +[93 , 35 , 97 , 46 , 52], +[75 , 84 , 79 , 1 , 11], +], [ +[48 , 75 , 8 , 88 , 85], +[81 , 94 , 3 , 32 , 28], +[63 , 49 , 78 , 86 , 90], +[67 , 84 , 5 , 4 , 52], +[57 , 89 , 29 , 96 , 71], +], [ +[3 , 34 , 89 , 15 , 64], +[47 , 31 , 57 , 72 , 26], +[48 , 75 , 19 , 2 , 65], +[42 , 45 , 97 , 54 , 71], +[55 , 27 , 87 , 77 , 35], +], [ +[74 , 50 , 53 , 19 , 96], +[95 , 89 , 71 , 75 , 26], +[8 , 11 , 20 , 43 , 38], +[78 , 51 , 28 , 65 , 93], +[64 , 9 , 84 , 31 , 23], +], [ +[37 , 42 , 65 , 94 , 92], +[69 , 35 , 40 , 1 , 71], +[63 , 43 , 75 , 59 , 74], +[97 , 90 , 67 , 91 , 85], +[28 , 58 , 21 , 49 , 52], +], [ +[20 , 62 , 44 , 96 , 74], +[18 , 37 , 63 , 54 , 51], +[39 , 90 , 1 , 4 , 84], +[7 , 72 , 57 , 19 , 79], +[99 , 66 , 43 , 38 , 36], +], [ +[2 , 68 , 67 , 21 , 78], +[81 , 86 , 63 , 13 , 69], +[74 , 29 , 53 , 56 , 30], +[16 , 72 , 7 , 54 , 1], +[64 , 50 , 73 , 14 , 45], +], [ +[21 , 47 , 88 , 28 , 32], +[7 , 43 , 83 , 39 , 27], +[95 , 9 , 98 , 45 , 99], +[68 , 49 , 94 , 73 , 35], +[10 , 36 , 13 , 25 , 37], +], [ +[45 , 2 , 16 , 75 , 9], +[66 , 46 , 20 , 91 , 87], +[36 , 74 , 64 , 85 , 62], +[51 , 39 , 93 , 3 , 57], +[0 , 37 , 56 , 27 , 50], +], [ +[9 , 21 , 37 , 96 , 89], +[66 , 4 , 16 , 3 , 56], +[58 , 32 , 97 , 76 , 47], +[7 , 59 , 13 , 0 , 34], +[69 , 68 , 95 , 61 , 51], +], [ +[30 , 41 , 60 , 88 , 98], +[33 , 94 , 57 , 79 , 40], +[14 , 36 , 17 , 56 , 99], +[10 , 37 , 62 , 54 , 0], +[65 , 32 , 58 , 21 , 23], +], [ +[89 , 47 , 65 , 40 , 18], +[25 , 17 , 13 , 0 , 33], +[49 , 57 , 26 , 3 , 76], +[15 , 71 , 70 , 95 , 61], +[67 , 94 , 80 , 77 , 7], +], [ +[92 , 40 , 55 , 95 , 8], +[88 , 62 , 4 , 43 , 13], +[54 , 1 , 19 , 20 , 87], +[11 , 97 , 23 , 27 , 80], +[63 , 10 , 66 , 45 , 7], +], [ +[46 , 76 , 10 , 61 , 26], +[86 , 55 , 15 , 84 , 25], +[12 , 80 , 82 , 83 , 54], +[22 , 81 , 69 , 70 , 48], +[53 , 89 , 30 , 44 , 20], +], [ +[84 , 62 , 57 , 74 , 30], +[96 , 18 , 24 , 9 , 29], +[22 , 8 , 56 , 44 , 4], +[71 , 85 , 16 , 55 , 73], +[25 , 28 , 88 , 61 , 33], +], [ +[60 , 26 , 72 , 28 , 89], +[51 , 94 , 24 , 96 , 53], +[39 , 0 , 90 , 12 , 22], +[92 , 95 , 65 , 34 , 32], +[63 , 36 , 48 , 58 , 52], +], [ +[92 , 5 , 32 , 52 , 30], +[6 , 93 , 73 , 74 , 10], +[38 , 62 , 55 , 28 , 79], +[88 , 60 , 27 , 7 , 83], +[82 , 53 , 39 , 70 , 95], +], [ +[84 , 35 , 58 , 4 , 19], +[80 , 96 , 53 , 45 , 7], +[31 , 52 , 14 , 8 , 63], +[87 , 41 , 75 , 65 , 18], +[3 , 72 , 79 , 91 , 86], +], [ +[16 , 19 , 42 , 49 , 0], +[34 , 18 , 26 , 70 , 98], +[45 , 38 , 87 , 17 , 54], +[84 , 51 , 7 , 24 , 66], +[57 , 46 , 3 , 36 , 43], +], [ +[36 , 13 , 44 , 81 , 48], +[93 , 88 , 41 , 77 , 57], +[6 , 64 , 2 , 3 , 46], +[30 , 10 , 8 , 20 , 14], +[26 , 76 , 7 , 1 , 90], +], [ +[67 , 74 , 39 , 25 , 78], +[4 , 96 , 62 , 70 , 30], +[22 , 41 , 72 , 47 , 32], +[87 , 27 , 77 , 51 , 86], +[65 , 35 , 26 , 11 , 85], +], [ +[94 , 42 , 49 , 91 , 12], +[78 , 51 , 3 , 95 , 76], +[0 , 72 , 13 , 30 , 25], +[33 , 81 , 32 , 58 , 62], +[67 , 5 , 88 , 26 , 1], +], [ +[71 , 21 , 29 , 73 , 75], +[39 , 77 , 63 , 66 , 36], +[74 , 18 , 80 , 35 , 34], +[26 , 5 , 53 , 33 , 6], +[19 , 1 , 27 , 25 , 9], +], [ +[72 , 53 , 57 , 24 , 30], +[66 , 84 , 68 , 40 , 12], +[52 , 48 , 34 , 21 , 26], +[73 , 3 , 18 , 81 , 67], +[82 , 7 , 17 , 36 , 56], +], [ +[93 , 85 , 42 , 81 , 30], +[47 , 4 , 48 , 82 , 96], +[28 , 41 , 52 , 0 , 36], +[97 , 14 , 35 , 9 , 33], +[98 , 11 , 69 , 20 , 87], +], [ +[46 , 67 , 85 , 96 , 34], +[90 , 92 , 68 , 56 , 51], +[16 , 61 , 29 , 28 , 27], +[81 , 57 , 64 , 53 , 26], +[6 , 49 , 43 , 41 , 65], +], [ +[37 , 82 , 55 , 88 , 27], +[43 , 79 , 25 , 5 , 50], +[92 , 83 , 81 , 44 , 22], +[75 , 74 , 39 , 16 , 41], +[48 , 29 , 80 , 77 , 90], +], [ +[57 , 25 , 10 , 61 , 40], +[1 , 22 , 20 , 81 , 41], +[32 , 83 , 43 , 54 , 97], +[29 , 47 , 15 , 27 , 8], +[79 , 28 , 63 , 77 , 99], +], [ +[62 , 43 , 94 , 24 , 48], +[45 , 93 , 14 , 34 , 11], +[58 , 31 , 33 , 71 , 97], +[10 , 59 , 76 , 30 , 26], +[64 , 54 , 79 , 80 , 56], +], [ +[34 , 8 , 49 , 13 , 12], +[54 , 57 , 4 , 82 , 46], +[84 , 32 , 59 , 55 , 40], +[0 , 73 , 99 , 38 , 56], +[16 , 61 , 36 , 17 , 78], +], [ +[7 , 97 , 37 , 81 , 91], +[3 , 10 , 83 , 48 , 90], +[49 , 40 , 72 , 6 , 2], +[17 , 39 , 94 , 82 , 66], +[58 , 68 , 52 , 64 , 42], +], [ +[30 , 93 , 40 , 75 , 74], +[62 , 48 , 47 , 3 , 59], +[57 , 10 , 73 , 79 , 86], +[71 , 89 , 88 , 5 , 38], +[13 , 6 , 56 , 80 , 81], +], [ +[58 , 54 , 52 , 83 , 88], +[12 , 84 , 87 , 28 , 46], +[42 , 6 , 27 , 39 , 4], +[47 , 72 , 93 , 64 , 66], +[79 , 71 , 44 , 18 , 3], +], [ +[60 , 72 , 89 , 35 , 17], +[77 , 66 , 68 , 59 , 9], +[2 , 43 , 18 , 14 , 33], +[20 , 30 , 82 , 31 , 52], +[81 , 64 , 56 , 45 , 27], +], [ +[64 , 9 , 44 , 23 , 99], +[40 , 75 , 55 , 29 , 86], +[94 , 46 , 45 , 84 , 97], +[92 , 25 , 30 , 13 , 10], +[90 , 87 , 61 , 53 , 70], +], [ +[6 , 49 , 41 , 40 , 37], +[65 , 24 , 47 , 33 , 55], +[51 , 4 , 72 , 16 , 85], +[56 , 5 , 25 , 98 , 14], +[32 , 26 , 50 , 17 , 34], +], [ +[24 , 78 , 72 , 40 , 31], +[3 , 12 , 33 , 87 , 71], +[99 , 91 , 8 , 59 , 34], +[50 , 90 , 63 , 45 , 29], +[75 , 96 , 7 , 22 , 44], +], [ +[81 , 94 , 61 , 41 , 10], +[23 , 5 , 66 , 27 , 70], +[62 , 82 , 4 , 74 , 52], +[19 , 55 , 67 , 59 , 49], +[48 , 77 , 35 , 33 , 45], +], [ +[7 , 86 , 81 , 93 , 19], +[90 , 57 , 64 , 45 , 36], +[75 , 13 , 2 , 28 , 39], +[46 , 10 , 83 , 80 , 47], +[1 , 91 , 94 , 24 , 56], +], [ +[20 , 18 , 0 , 49 , 44], +[77 , 72 , 31 , 61 , 46], +[66 , 95 , 73 , 8 , 76], +[3 , 13 , 99 , 94 , 96], +[59 , 97 , 43 , 85 , 86], +], [ +[34 , 78 , 54 , 37 , 0], +[12 , 85 , 86 , 93 , 70], +[53 , 10 , 59 , 8 , 55], +[63 , 20 , 29 , 36 , 32], +[76 , 75 , 43 , 96 , 61], +], [ +[62 , 55 , 26 , 17 , 74], +[10 , 15 , 47 , 38 , 20], +[41 , 66 , 59 , 58 , 9], +[34 , 52 , 40 , 93 , 82], +[45 , 43 , 21 , 11 , 24], +], [ +[85 , 90 , 47 , 75 , 50], +[51 , 12 , 8 , 54 , 11], +[73 , 19 , 3 , 37 , 28], +[25 , 24 , 84 , 67 , 87], +[44 , 94 , 6 , 20 , 45], +], [ +[36 , 99 , 81 , 96 , 75], +[89 , 90 , 29 , 33 , 55], +[40 , 25 , 10 , 32 , 92], +[51 , 27 , 70 , 0 , 15], +[76 , 50 , 44 , 22 , 24], +], [ +[31 , 63 , 21 , 13 , 24], +[42 , 87 , 53 , 5 , 38], +[8 , 50 , 30 , 73 , 83], +[95 , 91 , 15 , 41 , 52], +[23 , 99 , 10 , 67 , 60], +], [ +[88 , 49 , 2 , 4 , 85], +[22 , 25 , 6 , 30 , 62], +[34 , 53 , 74 , 96 , 64], +[77 , 80 , 93 , 65 , 63], +[37 , 27 , 26 , 68 , 56], +], [ +[86 , 90 , 40 , 79 , 7], +[57 , 2 , 34 , 91 , 35], +[85 , 74 , 52 , 97 , 93], +[63 , 32 , 38 , 1 , 12], +[29 , 46 , 56 , 84 , 25], +], [ +[38 , 26 , 22 , 49 , 24], +[56 , 84 , 2 , 18 , 62], +[3 , 90 , 17 , 73 , 37], +[55 , 95 , 92 , 35 , 29], +[7 , 51 , 42 , 5 , 39], +], [ +[14 , 0 , 19 , 53 , 69], +[2 , 22 , 65 , 78 , 31], +[43 , 88 , 37 , 93 , 46], +[12 , 30 , 83 , 26 , 29], +[92 , 68 , 62 , 7 , 44], +], [ +[38 , 65 , 61 , 93 , 36], +[53 , 43 , 11 , 12 , 54], +[97 , 99 , 48 , 24 , 21], +[84 , 33 , 3 , 23 , 31], +[56 , 4 , 87 , 90 , 7], +], [ +[0 , 61 , 67 , 13 , 56], +[24 , 69 , 94 , 85 , 73], +[78 , 35 , 89 , 55 , 72], +[21 , 4 , 90 , 80 , 83], +[64 , 99 , 5 , 16 , 36], +], [ +[55 , 72 , 7 , 83 , 35], +[63 , 73 , 96 , 21 , 75], +[8 , 79 , 59 , 62 , 37], +[15 , 89 , 28 , 80 , 82], +[34 , 61 , 97 , 23 , 0], +], [ +[48 , 21 , 43 , 36 , 15], +[97 , 65 , 91 , 6 , 83], +[84 , 64 , 98 , 31 , 90], +[72 , 58 , 5 , 70 , 92], +[52 , 71 , 25 , 41 , 51], +], [ +[14 , 32 , 70 , 8 , 73], +[71 , 75 , 95 , 29 , 68], +[22 , 27 , 65 , 7 , 78], +[21 , 37 , 47 , 19 , 6], +[60 , 83 , 2 , 80 , 98], +], [ +[59 , 90 , 57 , 29 , 68], +[54 , 31 , 13 , 61 , 28], +[65 , 37 , 17 , 53 , 1], +[25 , 38 , 20 , 46 , 69], +[23 , 18 , 77 , 98 , 96], +], [ +[20 , 38 , 79 , 65 , 16], +[93 , 77 , 14 , 97 , 47], +[34 , 42 , 8 , 18 , 54], +[91 , 64 , 0 , 58 , 75], +[25 , 67 , 37 , 6 , 56], +], [ +[88 , 81 , 6 , 8 , 65], +[30 , 51 , 95 , 12 , 97], +[70 , 16 , 55 , 54 , 73], +[75 , 64 , 93 , 1 , 52], +[82 , 77 , 24 , 50 , 36], +], [ +[41 , 59 , 17 , 76 , 95], +[51 , 58 , 61 , 73 , 56], +[1 , 5 , 53 , 20 , 21], +[22 , 14 , 37 , 28 , 0], +[43 , 35 , 26 , 96 , 32], +], [ +[17 , 86 , 68 , 23 , 20], +[41 , 88 , 75 , 58 , 64], +[94 , 90 , 3 , 0 , 26], +[30 , 51 , 13 , 95 , 10], +[97 , 77 , 83 , 57 , 21], +] + ] + +def main(): + # we need an efficient way to find boards with numbers + # roll each n into `(b, r, c)` + index = {} + i = 0 + for b in boards: + for r in range(len(b)): + for c in range(len(b[r])): + x = b[r][c] + if x not in index: + index[x] = [] + index[x].append((i, r, c)) + i+=1 + + # now go through all numbers and keep track of if r/c counts + # by board, if one is 5... + seen = {} + counts = {} + for n in N: + seen[n] = 1 + if n not in index: + continue + for b, r, c in index[n]: + if b not in counts: + counts[b] = defaultdict(int) + counts[b][f"r{r}"] += 1 + counts[b][f"c{c}"] += 1 + + # check win condition + for v in counts[b].values(): + if v == 5: + print(f"board {b} is a winner!") + # find all unmarked in board... + s = 0 + for row in boards[b]: + for x in row: + if x not in seen: + s += x + + print(n * s) + sys.exit(0) + + +if __name__ == '__main__': + main() diff --git a/4/b.py b/4/b.py @@ -0,0 +1,661 @@ +#!/usr/bin/env python3 +import sys +from collections import defaultdict + +# XXX: yikes +N = [18,99,39,89,0,40,52,72,61,77,69,51,30,83,20,65,93,88,29,22,14,82,53,41,76,79,46,78,56,57,24,36,38,11,50,1,19,26,70,4,54,3,84,33,15,21,9,58,64,85,10,66,17,43,31,27,2,5,95,96,16,97,12,34,74,67,86,23,49,8,59,45,68,91,25,48,13,28,81,94,92,42,7,37,75,32,6,60,63,35,62,98,90,47,87,73,44,71,55,80] + +boards = [ [ +[12 , 79 , 33 , 36 , 97], +[82 , 38 , 77 , 61 , 84], +[55 , 74 , 21 , 65 , 39], +[54 , 56 , 95 , 50 , 2], +[45 , 68 , 31 , 94 , 14], +], [ +[95 , 26 , 80 , 25 , 62], +[79 , 91 , 70 , 76 , 61], +[98 , 97 , 17 , 75 , 23], +[71 , 30 , 21 , 52 , 29], +[20 , 54 , 32 , 12 , 31], +], [ +[35 , 31 , 86 , 36 , 52], +[18 , 50 , 79 , 60 , 67], +[98 , 3 , 51 , 46 , 25], +[ 4 , 61 , 55 , 87 , 70], +[94 , 39 , 68 , 27 , 14], +], [ +[9 , 49 , 53 , 52 , 2], +[65 , 92 , 4 , 73 , 67], +[90 , 95 , 39 , 78 , 64], +[17 , 27 , 13 , 60 , 51], +[25 , 63 , 70 , 77 , 22], +], [ +[33 , 34 , 6 , 58 , 77], +[44 , 75 , 54 , 18 , 21], +[15 , 25 , 79 , 12 , 70], +[90 , 14 , 81 , 22 , 49], +[72 , 38 , 59 , 78 , 16], +], [ +[13 , 51 , 94 , 40 , 56], +[6 , 99 , 9 , 64 , 91], +[87 , 73 , 93 , 71 , 31], +[39 , 42 , 28 , 24 , 7], +[1 , 52 , 17 , 85 , 11], +], [ +[95 , 23 , 15 , 29 , 12], +[40 , 79 , 2 , 64 , 59], +[94 , 93 , 3 , 25 , 10], +[5 , 58 , 7 , 78 , 82], +[62 , 73 , 74 , 16 , 56], +], [ +[17 , 55 , 56 , 14 , 51], +[70 , 94 , 66 , 21 , 37], +[97 , 90 , 43 , 80 , 89], +[50 , 12 , 52 , 46 , 85], +[16 , 79 , 60 , 15 , 45], +], [ +[18 , 59 , 37 , 25 , 41], +[51 , 61 , 63 , 7 , 53], +[3 , 21 , 31 , 76 , 72], +[29 , 99 , 34 , 6 , 83], +[55 , 45 , 93 , 75 , 15], +], [ +[59 , 63 , 4 , 95 , 68], +[18 , 47 , 43 , 15 , 26], +[66 , 7 , 54 , 22 , 8], +[50 , 75 , 91 , 20 , 98], +[49 , 61 , 55 , 12 , 1], +], [ +[96 , 74 , 37 , 12 , 66], +[10 , 94 , 7 , 29 , 75], +[20 , 48 , 26 , 67 , 41], +[40 , 99 , 9 , 80 , 35], +[72 , 87 , 82 , 76 , 85], +], [ +[60 , 58 , 43 , 17 , 57], +[25 , 33 , 85 , 91 , 27], +[46 , 36 , 54 , 49 , 64], +[86 , 53 , 4 , 63 , 95], +[38 , 74 , 84 , 37 , 67], +], [ +[66 , 90 , 73 , 98 , 51], +[11 , 94 , 60 , 92 , 14], +[82 , 58 , 17 , 63 , 52], +[33 , 1 , 18 , 77 , 72], +[12 , 76 , 20 , 23 , 10], +], [ +[28 , 69 , 67 , 6 , 32], +[4 , 17 , 77 , 52 , 33], +[26 , 57 , 92 , 56 , 73], +[30 , 91 , 50 , 82 , 2], +[21 , 31 , 61 , 78 , 99], +], [ +[98 , 63 , 26 , 81 , 75], +[23 , 36 , 3 , 88 , 65], +[69 , 87 , 33 , 20 , 43], +[4 , 51 , 47 , 70 , 50], +[10 , 91 , 74 , 77 , 66], +], [ +[61 , 47 , 90 , 22 , 63], +[26 , 15 , 41 , 8 , 73], +[71 , 40 , 82 , 91 , 75], +[39 , 95 , 56 , 84 , 55], +[5 , 76 , 32 , 69 , 34], +], [ +[78 , 77 , 1 , 57 , 39], +[70 , 49 , 83 , 90 , 87], +[97 , 74 , 26 , 67 , 19], +[50 , 21 , 2 , 92 , 60], +[82 , 65 , 62 , 31 , 33], +], [ +[6 , 46 , 97 , 50 , 2], +[48 , 23 , 34 , 24 , 93], +[83 , 7 , 31 , 59 , 66], +[44 , 18 , 21 , 47 , 77], +[69 , 86 , 35 , 72 , 17], +], [ +[78 , 68 , 69 , 4 , 26], +[47 , 38 , 15 , 95 , 53], +[66 , 46 , 49 , 79 , 59], +[82 , 30 , 50 , 7 , 2], +[17 , 16 , 34 , 64 , 51], +], [ +[19 , 20 , 13 , 75 , 26], +[63 , 28 , 14 , 93 , 50], +[27 , 70 , 61 , 29 , 67], +[12 , 89 , 71 , 33 , 98], +[31 , 25 , 16 , 79 , 69], +], [ +[95 , 23 , 83 , 86 , 16], +[4 , 50 , 27 , 92 , 62], +[42 , 29 , 75 , 88 , 49], +[31 , 58 , 39 , 44 , 93], +[80 , 19 , 15 , 97 , 96], +], [ +[91 , 60 , 6 , 47 , 63], +[51 , 90 , 36 , 11 , 72], +[73 , 84 , 50 , 76 , 40], +[49 , 75 , 82 , 9 , 35], +[71 , 1 , 0 , 67 , 59], +], [ +[48 , 56 , 80 , 24 , 86], +[4 , 74 , 95 , 53 , 41], +[52 , 58 , 36 , 19 , 64], +[90 , 87 , 99 , 82 , 25], +[35 , 13 , 22 , 26 , 21], +], [ +[68 , 87 , 18 , 23 , 97], +[69 , 25 , 40 , 76 , 24], +[34 , 33 , 56 , 16 , 51], +[49 , 77 , 88 , 75 , 26], +[2 , 19 , 96 , 35 , 86], +], [ +[29 , 26 , 56 , 49 , 10], +[89 , 91 , 95 , 5 , 69], +[52 , 1 , 99 , 34 , 20], +[8 , 74 , 64 , 32 , 61], +[25 , 72 , 60 , 22 , 97], +], [ +[39 , 65 , 0 , 91 , 86], +[9 , 7 , 21 , 62 , 89], +[22 , 92 , 63 , 46 , 17], +[61 , 66 , 37 , 59 , 52], +[93 , 70 , 3 , 97 , 49], +], [ +[29 , 3 , 66 , 4 , 43], +[46 , 25 , 7 , 62 , 54], +[71 , 26 , 70 , 75 , 5], +[17 , 82 , 33 , 51 , 19], +[65 , 40 , 91 , 53 , 15], +], [ +[88 , 59 , 14 , 41 , 92], +[83 , 74 , 73 , 65 , 12], +[95 , 97 , 35 , 47 , 55], +[62 , 2 , 3 , 9 , 63], +[52 , 44 , 32 , 33 , 72], +], [ +[82 , 12 , 77 , 25 , 60], +[8 , 93 , 38 , 56 , 97], +[59 , 5 , 70 , 33 , 40], +[9 , 90 , 1 , 41 , 57], +[68 , 73 , 26 , 91 , 6], +], [ +[72 , 15 , 64 , 59 , 49], +[26 , 12 , 9 , 97 , 80], +[84 , 18 , 91 , 20 , 87], +[69 , 34 , 14 , 65 , 40], +[98 , 74 , 27 , 5 , 31], +], [ +[55 , 99 , 23 , 12 , 76], +[57 , 92 , 71 , 83 , 53], +[19 , 24 , 39 , 97 , 73], +[96 , 91 , 32 , 34 , 28], +[0 , 72 , 42 , 65 , 1], +], [ +[84 , 50 , 97 , 46 , 99], +[90 , 1 , 95 , 64 , 22], +[45 , 53 , 55 , 25 , 42], +[30 , 70 , 52 , 88 , 72], +[29 , 44 , 98 , 51 , 6], +], [ +[70 , 74 , 85 , 78 , 45], +[34 , 91 , 82 , 63 , 99], +[17 , 3 , 50 , 53 , 87], +[38 , 88 , 98 , 6 , 92], +[39 , 30 , 10 , 18 , 67], +], [ +[26 , 45 , 13 , 93 , 29], +[18 , 51 , 66 , 22 , 17], +[55 , 75 , 70 , 9 , 6], +[3 , 74 , 30 , 42 , 91], +[21 , 77 , 57 , 37 , 90], +], [ +[17 , 94 , 74 , 85 , 60], +[2 , 67 , 97 , 19 , 11], +[20 , 32 , 58 , 18 , 56], +[10 , 95 , 40 , 51 , 93], +[66 , 50 , 15 , 65 , 52], +], [ +[7 , 38 , 79 , 77 , 42], +[15 , 34 , 13 , 80 , 93], +[46 , 54 , 74 , 33 , 17], +[1 , 4 , 83 , 68 , 35], +[70 , 85 , 66 , 63 , 39], +], [ +[22 , 68 , 41 , 2 , 58], +[69 , 76 , 14 , 62 , 33], +[64 , 39 , 46 , 28 , 59], +[60 , 21 , 26 , 13 , 74], +[12 , 54 , 99 , 82 , 0], +], [ +[9 , 0 , 82 , 4 , 20], +[88 , 76 , 18 , 55 , 44], +[10 , 53 , 74 , 93 , 58], +[49 , 50 , 16 , 42 , 2], +[19 , 23 , 66 , 54 , 65], +], [ +[96 , 9 , 42 , 30 , 67], +[3 , 29 , 94 , 5 , 45], +[65 , 62 , 25 , 59 , 17], +[21 , 79 , 73 , 44 , 66], +[38 , 6 , 86 , 7 , 4], +], [ +[89 , 77 , 17 , 13 , 79], +[51 , 10 , 28 , 18 , 36], +[59 , 69 , 80 , 61 , 25], +[0 , 21 , 9 , 91 , 30], +[86 , 96 , 2 , 29 , 39], +], [ +[53 , 11 , 27 , 20 , 82], +[15 , 38 , 90 , 34 , 98], +[69 , 28 , 16 , 14 , 99], +[67 , 49 , 48 , 42 , 59], +[51 , 2 , 61 , 23 , 3], +], [ +[37 , 60 , 14 , 43 , 49], +[66 , 24 , 54 , 96 , 58], +[73 , 28 , 48 , 3 , 81], +[93 , 35 , 97 , 46 , 52], +[75 , 84 , 79 , 1 , 11], +], [ +[48 , 75 , 8 , 88 , 85], +[81 , 94 , 3 , 32 , 28], +[63 , 49 , 78 , 86 , 90], +[67 , 84 , 5 , 4 , 52], +[57 , 89 , 29 , 96 , 71], +], [ +[3 , 34 , 89 , 15 , 64], +[47 , 31 , 57 , 72 , 26], +[48 , 75 , 19 , 2 , 65], +[42 , 45 , 97 , 54 , 71], +[55 , 27 , 87 , 77 , 35], +], [ +[74 , 50 , 53 , 19 , 96], +[95 , 89 , 71 , 75 , 26], +[8 , 11 , 20 , 43 , 38], +[78 , 51 , 28 , 65 , 93], +[64 , 9 , 84 , 31 , 23], +], [ +[37 , 42 , 65 , 94 , 92], +[69 , 35 , 40 , 1 , 71], +[63 , 43 , 75 , 59 , 74], +[97 , 90 , 67 , 91 , 85], +[28 , 58 , 21 , 49 , 52], +], [ +[20 , 62 , 44 , 96 , 74], +[18 , 37 , 63 , 54 , 51], +[39 , 90 , 1 , 4 , 84], +[7 , 72 , 57 , 19 , 79], +[99 , 66 , 43 , 38 , 36], +], [ +[2 , 68 , 67 , 21 , 78], +[81 , 86 , 63 , 13 , 69], +[74 , 29 , 53 , 56 , 30], +[16 , 72 , 7 , 54 , 1], +[64 , 50 , 73 , 14 , 45], +], [ +[21 , 47 , 88 , 28 , 32], +[7 , 43 , 83 , 39 , 27], +[95 , 9 , 98 , 45 , 99], +[68 , 49 , 94 , 73 , 35], +[10 , 36 , 13 , 25 , 37], +], [ +[45 , 2 , 16 , 75 , 9], +[66 , 46 , 20 , 91 , 87], +[36 , 74 , 64 , 85 , 62], +[51 , 39 , 93 , 3 , 57], +[0 , 37 , 56 , 27 , 50], +], [ +[9 , 21 , 37 , 96 , 89], +[66 , 4 , 16 , 3 , 56], +[58 , 32 , 97 , 76 , 47], +[7 , 59 , 13 , 0 , 34], +[69 , 68 , 95 , 61 , 51], +], [ +[30 , 41 , 60 , 88 , 98], +[33 , 94 , 57 , 79 , 40], +[14 , 36 , 17 , 56 , 99], +[10 , 37 , 62 , 54 , 0], +[65 , 32 , 58 , 21 , 23], +], [ +[89 , 47 , 65 , 40 , 18], +[25 , 17 , 13 , 0 , 33], +[49 , 57 , 26 , 3 , 76], +[15 , 71 , 70 , 95 , 61], +[67 , 94 , 80 , 77 , 7], +], [ +[92 , 40 , 55 , 95 , 8], +[88 , 62 , 4 , 43 , 13], +[54 , 1 , 19 , 20 , 87], +[11 , 97 , 23 , 27 , 80], +[63 , 10 , 66 , 45 , 7], +], [ +[46 , 76 , 10 , 61 , 26], +[86 , 55 , 15 , 84 , 25], +[12 , 80 , 82 , 83 , 54], +[22 , 81 , 69 , 70 , 48], +[53 , 89 , 30 , 44 , 20], +], [ +[84 , 62 , 57 , 74 , 30], +[96 , 18 , 24 , 9 , 29], +[22 , 8 , 56 , 44 , 4], +[71 , 85 , 16 , 55 , 73], +[25 , 28 , 88 , 61 , 33], +], [ +[60 , 26 , 72 , 28 , 89], +[51 , 94 , 24 , 96 , 53], +[39 , 0 , 90 , 12 , 22], +[92 , 95 , 65 , 34 , 32], +[63 , 36 , 48 , 58 , 52], +], [ +[92 , 5 , 32 , 52 , 30], +[6 , 93 , 73 , 74 , 10], +[38 , 62 , 55 , 28 , 79], +[88 , 60 , 27 , 7 , 83], +[82 , 53 , 39 , 70 , 95], +], [ +[84 , 35 , 58 , 4 , 19], +[80 , 96 , 53 , 45 , 7], +[31 , 52 , 14 , 8 , 63], +[87 , 41 , 75 , 65 , 18], +[3 , 72 , 79 , 91 , 86], +], [ +[16 , 19 , 42 , 49 , 0], +[34 , 18 , 26 , 70 , 98], +[45 , 38 , 87 , 17 , 54], +[84 , 51 , 7 , 24 , 66], +[57 , 46 , 3 , 36 , 43], +], [ +[36 , 13 , 44 , 81 , 48], +[93 , 88 , 41 , 77 , 57], +[6 , 64 , 2 , 3 , 46], +[30 , 10 , 8 , 20 , 14], +[26 , 76 , 7 , 1 , 90], +], [ +[67 , 74 , 39 , 25 , 78], +[4 , 96 , 62 , 70 , 30], +[22 , 41 , 72 , 47 , 32], +[87 , 27 , 77 , 51 , 86], +[65 , 35 , 26 , 11 , 85], +], [ +[94 , 42 , 49 , 91 , 12], +[78 , 51 , 3 , 95 , 76], +[0 , 72 , 13 , 30 , 25], +[33 , 81 , 32 , 58 , 62], +[67 , 5 , 88 , 26 , 1], +], [ +[71 , 21 , 29 , 73 , 75], +[39 , 77 , 63 , 66 , 36], +[74 , 18 , 80 , 35 , 34], +[26 , 5 , 53 , 33 , 6], +[19 , 1 , 27 , 25 , 9], +], [ +[72 , 53 , 57 , 24 , 30], +[66 , 84 , 68 , 40 , 12], +[52 , 48 , 34 , 21 , 26], +[73 , 3 , 18 , 81 , 67], +[82 , 7 , 17 , 36 , 56], +], [ +[93 , 85 , 42 , 81 , 30], +[47 , 4 , 48 , 82 , 96], +[28 , 41 , 52 , 0 , 36], +[97 , 14 , 35 , 9 , 33], +[98 , 11 , 69 , 20 , 87], +], [ +[46 , 67 , 85 , 96 , 34], +[90 , 92 , 68 , 56 , 51], +[16 , 61 , 29 , 28 , 27], +[81 , 57 , 64 , 53 , 26], +[6 , 49 , 43 , 41 , 65], +], [ +[37 , 82 , 55 , 88 , 27], +[43 , 79 , 25 , 5 , 50], +[92 , 83 , 81 , 44 , 22], +[75 , 74 , 39 , 16 , 41], +[48 , 29 , 80 , 77 , 90], +], [ +[57 , 25 , 10 , 61 , 40], +[1 , 22 , 20 , 81 , 41], +[32 , 83 , 43 , 54 , 97], +[29 , 47 , 15 , 27 , 8], +[79 , 28 , 63 , 77 , 99], +], [ +[62 , 43 , 94 , 24 , 48], +[45 , 93 , 14 , 34 , 11], +[58 , 31 , 33 , 71 , 97], +[10 , 59 , 76 , 30 , 26], +[64 , 54 , 79 , 80 , 56], +], [ +[34 , 8 , 49 , 13 , 12], +[54 , 57 , 4 , 82 , 46], +[84 , 32 , 59 , 55 , 40], +[0 , 73 , 99 , 38 , 56], +[16 , 61 , 36 , 17 , 78], +], [ +[7 , 97 , 37 , 81 , 91], +[3 , 10 , 83 , 48 , 90], +[49 , 40 , 72 , 6 , 2], +[17 , 39 , 94 , 82 , 66], +[58 , 68 , 52 , 64 , 42], +], [ +[30 , 93 , 40 , 75 , 74], +[62 , 48 , 47 , 3 , 59], +[57 , 10 , 73 , 79 , 86], +[71 , 89 , 88 , 5 , 38], +[13 , 6 , 56 , 80 , 81], +], [ +[58 , 54 , 52 , 83 , 88], +[12 , 84 , 87 , 28 , 46], +[42 , 6 , 27 , 39 , 4], +[47 , 72 , 93 , 64 , 66], +[79 , 71 , 44 , 18 , 3], +], [ +[60 , 72 , 89 , 35 , 17], +[77 , 66 , 68 , 59 , 9], +[2 , 43 , 18 , 14 , 33], +[20 , 30 , 82 , 31 , 52], +[81 , 64 , 56 , 45 , 27], +], [ +[64 , 9 , 44 , 23 , 99], +[40 , 75 , 55 , 29 , 86], +[94 , 46 , 45 , 84 , 97], +[92 , 25 , 30 , 13 , 10], +[90 , 87 , 61 , 53 , 70], +], [ +[6 , 49 , 41 , 40 , 37], +[65 , 24 , 47 , 33 , 55], +[51 , 4 , 72 , 16 , 85], +[56 , 5 , 25 , 98 , 14], +[32 , 26 , 50 , 17 , 34], +], [ +[24 , 78 , 72 , 40 , 31], +[3 , 12 , 33 , 87 , 71], +[99 , 91 , 8 , 59 , 34], +[50 , 90 , 63 , 45 , 29], +[75 , 96 , 7 , 22 , 44], +], [ +[81 , 94 , 61 , 41 , 10], +[23 , 5 , 66 , 27 , 70], +[62 , 82 , 4 , 74 , 52], +[19 , 55 , 67 , 59 , 49], +[48 , 77 , 35 , 33 , 45], +], [ +[7 , 86 , 81 , 93 , 19], +[90 , 57 , 64 , 45 , 36], +[75 , 13 , 2 , 28 , 39], +[46 , 10 , 83 , 80 , 47], +[1 , 91 , 94 , 24 , 56], +], [ +[20 , 18 , 0 , 49 , 44], +[77 , 72 , 31 , 61 , 46], +[66 , 95 , 73 , 8 , 76], +[3 , 13 , 99 , 94 , 96], +[59 , 97 , 43 , 85 , 86], +], [ +[34 , 78 , 54 , 37 , 0], +[12 , 85 , 86 , 93 , 70], +[53 , 10 , 59 , 8 , 55], +[63 , 20 , 29 , 36 , 32], +[76 , 75 , 43 , 96 , 61], +], [ +[62 , 55 , 26 , 17 , 74], +[10 , 15 , 47 , 38 , 20], +[41 , 66 , 59 , 58 , 9], +[34 , 52 , 40 , 93 , 82], +[45 , 43 , 21 , 11 , 24], +], [ +[85 , 90 , 47 , 75 , 50], +[51 , 12 , 8 , 54 , 11], +[73 , 19 , 3 , 37 , 28], +[25 , 24 , 84 , 67 , 87], +[44 , 94 , 6 , 20 , 45], +], [ +[36 , 99 , 81 , 96 , 75], +[89 , 90 , 29 , 33 , 55], +[40 , 25 , 10 , 32 , 92], +[51 , 27 , 70 , 0 , 15], +[76 , 50 , 44 , 22 , 24], +], [ +[31 , 63 , 21 , 13 , 24], +[42 , 87 , 53 , 5 , 38], +[8 , 50 , 30 , 73 , 83], +[95 , 91 , 15 , 41 , 52], +[23 , 99 , 10 , 67 , 60], +], [ +[88 , 49 , 2 , 4 , 85], +[22 , 25 , 6 , 30 , 62], +[34 , 53 , 74 , 96 , 64], +[77 , 80 , 93 , 65 , 63], +[37 , 27 , 26 , 68 , 56], +], [ +[86 , 90 , 40 , 79 , 7], +[57 , 2 , 34 , 91 , 35], +[85 , 74 , 52 , 97 , 93], +[63 , 32 , 38 , 1 , 12], +[29 , 46 , 56 , 84 , 25], +], [ +[38 , 26 , 22 , 49 , 24], +[56 , 84 , 2 , 18 , 62], +[3 , 90 , 17 , 73 , 37], +[55 , 95 , 92 , 35 , 29], +[7 , 51 , 42 , 5 , 39], +], [ +[14 , 0 , 19 , 53 , 69], +[2 , 22 , 65 , 78 , 31], +[43 , 88 , 37 , 93 , 46], +[12 , 30 , 83 , 26 , 29], +[92 , 68 , 62 , 7 , 44], +], [ +[38 , 65 , 61 , 93 , 36], +[53 , 43 , 11 , 12 , 54], +[97 , 99 , 48 , 24 , 21], +[84 , 33 , 3 , 23 , 31], +[56 , 4 , 87 , 90 , 7], +], [ +[0 , 61 , 67 , 13 , 56], +[24 , 69 , 94 , 85 , 73], +[78 , 35 , 89 , 55 , 72], +[21 , 4 , 90 , 80 , 83], +[64 , 99 , 5 , 16 , 36], +], [ +[55 , 72 , 7 , 83 , 35], +[63 , 73 , 96 , 21 , 75], +[8 , 79 , 59 , 62 , 37], +[15 , 89 , 28 , 80 , 82], +[34 , 61 , 97 , 23 , 0], +], [ +[48 , 21 , 43 , 36 , 15], +[97 , 65 , 91 , 6 , 83], +[84 , 64 , 98 , 31 , 90], +[72 , 58 , 5 , 70 , 92], +[52 , 71 , 25 , 41 , 51], +], [ +[14 , 32 , 70 , 8 , 73], +[71 , 75 , 95 , 29 , 68], +[22 , 27 , 65 , 7 , 78], +[21 , 37 , 47 , 19 , 6], +[60 , 83 , 2 , 80 , 98], +], [ +[59 , 90 , 57 , 29 , 68], +[54 , 31 , 13 , 61 , 28], +[65 , 37 , 17 , 53 , 1], +[25 , 38 , 20 , 46 , 69], +[23 , 18 , 77 , 98 , 96], +], [ +[20 , 38 , 79 , 65 , 16], +[93 , 77 , 14 , 97 , 47], +[34 , 42 , 8 , 18 , 54], +[91 , 64 , 0 , 58 , 75], +[25 , 67 , 37 , 6 , 56], +], [ +[88 , 81 , 6 , 8 , 65], +[30 , 51 , 95 , 12 , 97], +[70 , 16 , 55 , 54 , 73], +[75 , 64 , 93 , 1 , 52], +[82 , 77 , 24 , 50 , 36], +], [ +[41 , 59 , 17 , 76 , 95], +[51 , 58 , 61 , 73 , 56], +[1 , 5 , 53 , 20 , 21], +[22 , 14 , 37 , 28 , 0], +[43 , 35 , 26 , 96 , 32], +], [ +[17 , 86 , 68 , 23 , 20], +[41 , 88 , 75 , 58 , 64], +[94 , 90 , 3 , 0 , 26], +[30 , 51 , 13 , 95 , 10], +[97 , 77 , 83 , 57 , 21], +] + ] + +def main(): + # we need an efficient way to find boards with numbers + # roll each n into `(b, r, c)` + index = {} + i = 0 + for b in boards: + for r in range(len(b)): + for c in range(len(b[r])): + x = b[r][c] + if x not in index: + index[x] = [] + index[x].append((i, r, c)) + i+=1 + + # now go through all numbers and keep track of if r/c counts + # by board, if one is 5... + winners = {} + seen = {} + counts = {} + for n in N: + seen[n] = 1 + if n not in index: + continue + for b, r, c in index[n]: + if b in winners: + continue + + if b not in counts: + counts[b] = defaultdict(int) + counts[b][f"r{r}"] += 1 + counts[b][f"c{c}"] += 1 + + # check win condition + for v in counts[b].values(): + if v == 5: + winners[b] = 1 + if len(winners) == len(boards): + print(f"board {b} is the last winner!") + # find all unmarked in board... + s = 0 + for row in boards[b]: + for x in row: + if x not in seen: + s += x + + print(n * s) + sys.exit(0) + + +if __name__ == '__main__': + main() diff --git a/4/input b/4/input @@ -0,0 +1,601 @@ +18,99,39,89,0,40,52,72,61,77,69,51,30,83,20,65,93,88,29,22,14,82,53,41,76,79,46,78,56,57,24,36,38,11,50,1,19,26,70,4,54,3,84,33,15,21,9,58,64,85,10,66,17,43,31,27,2,5,95,96,16,97,12,34,74,67,86,23,49,8,59,45,68,91,25,48,13,28,81,94,92,42,7,37,75,32,6,60,63,35,62,98,90,47,87,73,44,71,55,80 + +12 79 33 36 97 +82 38 77 61 84 +55 74 21 65 39 +54 56 95 50 2 +45 68 31 94 14 + +95 26 80 25 62 +79 91 70 76 61 +98 97 17 75 23 +71 30 21 52 29 +20 54 32 12 31 + +35 31 86 36 52 +18 50 79 60 67 +98 3 51 46 25 + 4 61 55 87 70 +94 39 68 27 14 + + 9 49 53 52 2 +65 92 4 73 67 +90 95 39 78 64 +17 27 13 60 51 +25 63 70 77 22 + +33 34 6 58 77 +44 75 54 18 21 +15 25 79 12 70 +90 14 81 22 49 +72 38 59 78 16 + +13 51 94 40 56 + 6 99 9 64 91 +87 73 93 71 31 +39 42 28 24 7 + 1 52 17 85 11 + +95 23 15 29 12 +40 79 2 64 59 +94 93 3 25 10 + 5 58 7 78 82 +62 73 74 16 56 + +17 55 56 14 51 +70 94 66 21 37 +97 90 43 80 89 +50 12 52 46 85 +16 79 60 15 45 + +18 59 37 25 41 +51 61 63 7 53 + 3 21 31 76 72 +29 99 34 6 83 +55 45 93 75 15 + +59 63 4 95 68 +18 47 43 15 26 +66 7 54 22 8 +50 75 91 20 98 +49 61 55 12 1 + +96 74 37 12 66 +10 94 7 29 75 +20 48 26 67 41 +40 99 9 80 35 +72 87 82 76 85 + +60 58 43 17 57 +25 33 85 91 27 +46 36 54 49 64 +86 53 4 63 95 +38 74 84 37 67 + +66 90 73 98 51 +11 94 60 92 14 +82 58 17 63 52 +33 1 18 77 72 +12 76 20 23 10 + +28 69 67 6 32 + 4 17 77 52 33 +26 57 92 56 73 +30 91 50 82 2 +21 31 61 78 99 + +98 63 26 81 75 +23 36 3 88 65 +69 87 33 20 43 + 4 51 47 70 50 +10 91 74 77 66 + +61 47 90 22 63 +26 15 41 8 73 +71 40 82 91 75 +39 95 56 84 55 + 5 76 32 69 34 + +78 77 1 57 39 +70 49 83 90 87 +97 74 26 67 19 +50 21 2 92 60 +82 65 62 31 33 + + 6 46 97 50 2 +48 23 34 24 93 +83 7 31 59 66 +44 18 21 47 77 +69 86 35 72 17 + +78 68 69 4 26 +47 38 15 95 53 +66 46 49 79 59 +82 30 50 7 2 +17 16 34 64 51 + +19 20 13 75 26 +63 28 14 93 50 +27 70 61 29 67 +12 89 71 33 98 +31 25 16 79 69 + +95 23 83 86 16 + 4 50 27 92 62 +42 29 75 88 49 +31 58 39 44 93 +80 19 15 97 96 + +91 60 6 47 63 +51 90 36 11 72 +73 84 50 76 40 +49 75 82 9 35 +71 1 0 67 59 + +48 56 80 24 86 + 4 74 95 53 41 +52 58 36 19 64 +90 87 99 82 25 +35 13 22 26 21 + +68 87 18 23 97 +69 25 40 76 24 +34 33 56 16 51 +49 77 88 75 26 + 2 19 96 35 86 + +29 26 56 49 10 +89 91 95 5 69 +52 1 99 34 20 + 8 74 64 32 61 +25 72 60 22 97 + +39 65 0 91 86 + 9 7 21 62 89 +22 92 63 46 17 +61 66 37 59 52 +93 70 3 97 49 + +29 3 66 4 43 +46 25 7 62 54 +71 26 70 75 5 +17 82 33 51 19 +65 40 91 53 15 + +88 59 14 41 92 +83 74 73 65 12 +95 97 35 47 55 +62 2 3 9 63 +52 44 32 33 72 + +82 12 77 25 60 + 8 93 38 56 97 +59 5 70 33 40 + 9 90 1 41 57 +68 73 26 91 6 + +72 15 64 59 49 +26 12 9 97 80 +84 18 91 20 87 +69 34 14 65 40 +98 74 27 5 31 + +55 99 23 12 76 +57 92 71 83 53 +19 24 39 97 73 +96 91 32 34 28 + 0 72 42 65 1 + +84 50 97 46 99 +90 1 95 64 22 +45 53 55 25 42 +30 70 52 88 72 +29 44 98 51 6 + +70 74 85 78 45 +34 91 82 63 99 +17 3 50 53 87 +38 88 98 6 92 +39 30 10 18 67 + +26 45 13 93 29 +18 51 66 22 17 +55 75 70 9 6 + 3 74 30 42 91 +21 77 57 37 90 + +17 94 74 85 60 + 2 67 97 19 11 +20 32 58 18 56 +10 95 40 51 93 +66 50 15 65 52 + + 7 38 79 77 42 +15 34 13 80 93 +46 54 74 33 17 + 1 4 83 68 35 +70 85 66 63 39 + +22 68 41 2 58 +69 76 14 62 33 +64 39 46 28 59 +60 21 26 13 74 +12 54 99 82 0 + + 9 0 82 4 20 +88 76 18 55 44 +10 53 74 93 58 +49 50 16 42 2 +19 23 66 54 65 + +96 9 42 30 67 + 3 29 94 5 45 +65 62 25 59 17 +21 79 73 44 66 +38 6 86 7 4 + +89 77 17 13 79 +51 10 28 18 36 +59 69 80 61 25 + 0 21 9 91 30 +86 96 2 29 39 + +53 11 27 20 82 +15 38 90 34 98 +69 28 16 14 99 +67 49 48 42 59 +51 2 61 23 3 + +37 60 14 43 49 +66 24 54 96 58 +73 28 48 3 81 +93 35 97 46 52 +75 84 79 1 11 + +48 75 8 88 85 +81 94 3 32 28 +63 49 78 86 90 +67 84 5 4 52 +57 89 29 96 71 + + 3 34 89 15 64 +47 31 57 72 26 +48 75 19 2 65 +42 45 97 54 71 +55 27 87 77 35 + +74 50 53 19 96 +95 89 71 75 26 + 8 11 20 43 38 +78 51 28 65 93 +64 9 84 31 23 + +37 42 65 94 92 +69 35 40 1 71 +63 43 75 59 74 +97 90 67 91 85 +28 58 21 49 52 + +20 62 44 96 74 +18 37 63 54 51 +39 90 1 4 84 + 7 72 57 19 79 +99 66 43 38 36 + + 2 68 67 21 78 +81 86 63 13 69 +74 29 53 56 30 +16 72 7 54 1 +64 50 73 14 45 + +21 47 88 28 32 + 7 43 83 39 27 +95 9 98 45 99 +68 49 94 73 35 +10 36 13 25 37 + +45 2 16 75 9 +66 46 20 91 87 +36 74 64 85 62 +51 39 93 3 57 + 0 37 56 27 50 + + 9 21 37 96 89 +66 4 16 3 56 +58 32 97 76 47 + 7 59 13 0 34 +69 68 95 61 51 + +30 41 60 88 98 +33 94 57 79 40 +14 36 17 56 99 +10 37 62 54 0 +65 32 58 21 23 + +89 47 65 40 18 +25 17 13 0 33 +49 57 26 3 76 +15 71 70 95 61 +67 94 80 77 7 + +92 40 55 95 8 +88 62 4 43 13 +54 1 19 20 87 +11 97 23 27 80 +63 10 66 45 7 + +46 76 10 61 26 +86 55 15 84 25 +12 80 82 83 54 +22 81 69 70 48 +53 89 30 44 20 + +84 62 57 74 30 +96 18 24 9 29 +22 8 56 44 4 +71 85 16 55 73 +25 28 88 61 33 + +60 26 72 28 89 +51 94 24 96 53 +39 0 90 12 22 +92 95 65 34 32 +63 36 48 58 52 + +92 5 32 52 30 + 6 93 73 74 10 +38 62 55 28 79 +88 60 27 7 83 +82 53 39 70 95 + +84 35 58 4 19 +80 96 53 45 7 +31 52 14 8 63 +87 41 75 65 18 + 3 72 79 91 86 + +16 19 42 49 0 +34 18 26 70 98 +45 38 87 17 54 +84 51 7 24 66 +57 46 3 36 43 + +36 13 44 81 48 +93 88 41 77 57 + 6 64 2 3 46 +30 10 8 20 14 +26 76 7 1 90 + +67 74 39 25 78 + 4 96 62 70 30 +22 41 72 47 32 +87 27 77 51 86 +65 35 26 11 85 + +94 42 49 91 12 +78 51 3 95 76 + 0 72 13 30 25 +33 81 32 58 62 +67 5 88 26 1 + +71 21 29 73 75 +39 77 63 66 36 +74 18 80 35 34 +26 5 53 33 6 +19 1 27 25 9 + +72 53 57 24 30 +66 84 68 40 12 +52 48 34 21 26 +73 3 18 81 67 +82 7 17 36 56 + +93 85 42 81 30 +47 4 48 82 96 +28 41 52 0 36 +97 14 35 9 33 +98 11 69 20 87 + +46 67 85 96 34 +90 92 68 56 51 +16 61 29 28 27 +81 57 64 53 26 + 6 49 43 41 65 + +37 82 55 88 27 +43 79 25 5 50 +92 83 81 44 22 +75 74 39 16 41 +48 29 80 77 90 + +57 25 10 61 40 + 1 22 20 81 41 +32 83 43 54 97 +29 47 15 27 8 +79 28 63 77 99 + +62 43 94 24 48 +45 93 14 34 11 +58 31 33 71 97 +10 59 76 30 26 +64 54 79 80 56 + +34 8 49 13 12 +54 57 4 82 46 +84 32 59 55 40 + 0 73 99 38 56 +16 61 36 17 78 + + 7 97 37 81 91 + 3 10 83 48 90 +49 40 72 6 2 +17 39 94 82 66 +58 68 52 64 42 + +30 93 40 75 74 +62 48 47 3 59 +57 10 73 79 86 +71 89 88 5 38 +13 6 56 80 81 + +58 54 52 83 88 +12 84 87 28 46 +42 6 27 39 4 +47 72 93 64 66 +79 71 44 18 3 + +60 72 89 35 17 +77 66 68 59 9 + 2 43 18 14 33 +20 30 82 31 52 +81 64 56 45 27 + +64 9 44 23 99 +40 75 55 29 86 +94 46 45 84 97 +92 25 30 13 10 +90 87 61 53 70 + + 6 49 41 40 37 +65 24 47 33 55 +51 4 72 16 85 +56 5 25 98 14 +32 26 50 17 34 + +24 78 72 40 31 + 3 12 33 87 71 +99 91 8 59 34 +50 90 63 45 29 +75 96 7 22 44 + +81 94 61 41 10 +23 5 66 27 70 +62 82 4 74 52 +19 55 67 59 49 +48 77 35 33 45 + + 7 86 81 93 19 +90 57 64 45 36 +75 13 2 28 39 +46 10 83 80 47 + 1 91 94 24 56 + +20 18 0 49 44 +77 72 31 61 46 +66 95 73 8 76 + 3 13 99 94 96 +59 97 43 85 86 + +34 78 54 37 0 +12 85 86 93 70 +53 10 59 8 55 +63 20 29 36 32 +76 75 43 96 61 + +62 55 26 17 74 +10 15 47 38 20 +41 66 59 58 9 +34 52 40 93 82 +45 43 21 11 24 + +85 90 47 75 50 +51 12 8 54 11 +73 19 3 37 28 +25 24 84 67 87 +44 94 6 20 45 + +36 99 81 96 75 +89 90 29 33 55 +40 25 10 32 92 +51 27 70 0 15 +76 50 44 22 24 + +31 63 21 13 24 +42 87 53 5 38 + 8 50 30 73 83 +95 91 15 41 52 +23 99 10 67 60 + +88 49 2 4 85 +22 25 6 30 62 +34 53 74 96 64 +77 80 93 65 63 +37 27 26 68 56 + +86 90 40 79 7 +57 2 34 91 35 +85 74 52 97 93 +63 32 38 1 12 +29 46 56 84 25 + +38 26 22 49 24 +56 84 2 18 62 + 3 90 17 73 37 +55 95 92 35 29 + 7 51 42 5 39 + +14 0 19 53 69 + 2 22 65 78 31 +43 88 37 93 46 +12 30 83 26 29 +92 68 62 7 44 + +38 65 61 93 36 +53 43 11 12 54 +97 99 48 24 21 +84 33 3 23 31 +56 4 87 90 7 + + 0 61 67 13 56 +24 69 94 85 73 +78 35 89 55 72 +21 4 90 80 83 +64 99 5 16 36 + +55 72 7 83 35 +63 73 96 21 75 + 8 79 59 62 37 +15 89 28 80 82 +34 61 97 23 0 + +48 21 43 36 15 +97 65 91 6 83 +84 64 98 31 90 +72 58 5 70 92 +52 71 25 41 51 + +14 32 70 8 73 +71 75 95 29 68 +22 27 65 7 78 +21 37 47 19 6 +60 83 2 80 98 + +59 90 57 29 68 +54 31 13 61 28 +65 37 17 53 1 +25 38 20 46 69 +23 18 77 98 96 + +20 38 79 65 16 +93 77 14 97 47 +34 42 8 18 54 +91 64 0 58 75 +25 67 37 6 56 + +88 81 6 8 65 +30 51 95 12 97 +70 16 55 54 73 +75 64 93 1 52 +82 77 24 50 36 + +41 59 17 76 95 +51 58 61 73 56 + 1 5 53 20 21 +22 14 37 28 0 +43 35 26 96 32 + +17 86 68 23 20 +41 88 75 58 64 +94 90 3 0 26 +30 51 13 95 10 +97 77 83 57 21