commit 47e5b0048bbf9df6db4e1d01b51bffbd59851ae7
parent 70743809077a4368bdb15a9feca4d1783cd26855
Author: Louis Burda <quent.burda@gmail.com>
Date: Sun, 5 Dec 2021 23:09:44 +0100
Add day 4 solution
Diffstat:
A | src/04/Cargo.toml | | | 7 | +++++++ |
A | src/04/input | | | 601 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | src/04/part1 | | | 86 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | src/04/part2 | | | 16 | ++++++++++++++++ |
A | src/04/src/main.rs | | | 130 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
5 files changed, 840 insertions(+), 0 deletions(-)
diff --git a/src/04/Cargo.toml b/src/04/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+
diff --git a/src/04/input b/src/04/input
@@ -0,0 +1,601 @@
+38,54,68,93,72,12,33,8,98,88,21,91,53,61,26,36,18,80,73,47,3,5,55,92,67,52,25,40,56,95,9,62,30,31,85,65,14,2,78,75,15,39,87,27,58,42,60,32,41,83,51,77,10,66,70,4,37,6,89,23,16,49,48,63,94,97,86,64,74,82,7,0,11,71,44,43,50,69,45,81,20,28,46,79,90,34,35,96,99,59,1,76,22,24,17,57,13,19,84,29
+
+57 7 8 38 31
+17 96 5 12 18
+58 45 81 89 4
+73 51 93 32 10
+74 50 26 0 24
+
+79 67 21 84 71
+25 22 19 80 13
+10 63 90 78 33
+93 50 89 58 87
+91 7 45 6 41
+
+66 85 4 91 41
+59 69 16 0 90
+35 13 64 61 93
+11 20 29 67 77
+92 75 58 3 34
+
+19 1 34 50 76
+26 75 8 28 20
+96 64 49 77 2
+18 58 62 53 60
+82 99 38 10 83
+
+89 69 97 16 48
+32 3 83 17 33
+82 53 15 50 94
+52 0 86 25 81
+42 38 84 73 76
+
+68 18 44 61 66
+24 21 22 6 41
+48 29 4 64 78
+93 25 88 95 96
+72 49 51 2 5
+
+35 41 59 23 21
+ 0 66 34 12 85
+61 26 29 68 5
+28 69 90 2 96
+ 1 16 32 24 44
+
+98 73 33 82 18
+51 62 88 67 6
+99 44 53 39 36
+34 90 50 72 43
+64 40 11 26 5
+
+88 8 81 57 99
+61 16 22 50 5
+26 84 85 7 15
+97 27 47 18 21
+ 3 78 66 94 58
+
+56 40 68 20 24
+26 98 6 76 89
+61 63 22 99 83
+31 5 32 54 82
+18 23 17 46 13
+
+35 95 67 73 13
+86 33 7 9 43
+44 28 55 32 52
+54 91 84 97 98
+17 49 93 23 56
+
+22 90 61 12 13
+87 4 46 25 88
+70 38 53 80 11
+75 56 96 49 32
+ 3 55 43 19 67
+
+40 17 70 76 61
+82 86 37 8 28
+60 48 24 83 53
+57 87 44 92 63
+10 49 88 15 55
+
+36 80 47 46 84
+25 70 2 79 75
+55 5 13 99 45
+54 73 83 59 67
+57 0 69 33 68
+
+51 52 21 44 36
+17 30 15 42 18
+ 6 3 47 94 2
+57 77 45 70 90
+29 60 19 9 84
+
+16 12 37 6 27
+86 87 21 70 71
+84 0 11 67 83
+ 5 68 33 23 26
+51 43 28 79 49
+
+22 5 53 12 42
+29 81 46 13 88
+80 65 8 62 33
+72 67 34 21 35
+38 77 90 52 44
+
+63 57 52 82 96
+46 11 32 20 58
+35 15 83 1 55
+18 16 73 19 17
+22 88 45 95 47
+
+43 15 7 97 88
+96 52 84 86 49
+80 13 21 28 29
+16 36 98 82 41
+32 10 62 68 24
+
+46 69 8 55 50
+28 21 92 79 73
+19 71 74 53 44
+24 27 10 14 85
+ 2 39 58 81 72
+
+68 74 43 62 61
+82 73 37 40 93
+16 7 41 54 96
+10 3 85 70 65
+69 71 94 5 81
+
+17 53 87 80 98
+76 41 30 25 58
+29 14 73 74 43
+20 91 24 70 39
+46 48 51 9 18
+
+20 41 36 81 93
+46 75 33 73 78
+26 16 80 54 90
+87 17 12 67 1
+51 10 39 91 45
+
+76 21 31 3 69
+27 42 97 32 87
+26 22 4 63 38
+46 77 67 80 43
+37 50 59 88 96
+
+17 16 10 68 76
+ 2 45 94 29 40
+ 1 54 60 66 93
+ 0 13 42 39 70
+ 6 82 46 74 43
+
+87 95 31 22 94
+86 30 39 56 18
+89 74 23 11 64
+63 48 85 20 49
+27 15 40 83 50
+
+81 48 47 73 95
+40 65 89 69 5
+38 76 85 30 11
+31 61 8 67 62
+41 68 42 78 20
+
+46 85 96 83 20
+94 52 7 97 31
+29 95 99 34 62
+ 8 69 6 51 54
+38 59 5 56 55
+
+18 15 10 35 96
+44 66 58 91 9
+12 2 45 98 80
+22 69 37 67 79
+46 36 23 51 75
+
+11 58 64 85 26
+21 43 32 36 65
+94 61 40 68 67
+14 23 6 53 2
+93 9 74 3 90
+
+73 82 46 37 20
+47 75 38 45 54
+76 34 65 44 58
+93 89 27 13 33
+85 67 40 42 17
+
+13 66 2 65 10
+98 4 83 79 92
+22 48 93 6 23
+24 39 17 60 9
+77 49 16 19 35
+
+96 37 88 4 32
+80 89 59 39 63
+67 19 35 10 40
+91 66 47 9 79
+45 21 86 92 30
+
+76 85 37 32 29
+59 41 44 23 93
+86 24 83 81 57
+22 21 82 53 16
+38 99 79 49 30
+
+54 29 64 65 62
+44 59 83 75 56
+11 13 34 12 24
+96 39 31 95 16
+41 38 21 25 60
+
+49 8 3 67 2
+30 81 39 26 33
+83 73 47 32 65
+48 20 75 24 40
+74 28 11 19 96
+
+87 25 49 81 7
+99 34 35 50 86
+18 24 68 4 78
+59 8 71 0 41
+92 54 64 75 46
+
+ 2 19 73 29 10
+55 6 43 48 22
+64 14 62 39 97
+99 26 68 25 12
+98 72 45 38 40
+
+59 76 40 37 9
+42 23 1 12 54
+49 51 17 11 34
+74 95 26 78 67
+65 32 98 80 45
+
+50 86 95 29 38
+ 6 11 24 10 73
+63 28 30 46 68
+34 9 20 58 77
+88 52 79 89 98
+
+32 20 93 39 80
+67 98 99 4 26
+22 89 97 13 73
+88 11 72 31 78
+76 95 64 43 75
+
+75 23 81 89 90
+98 86 88 38 99
+51 7 65 2 3
+16 59 49 41 87
+57 20 58 72 83
+
+21 81 24 43 12
+55 74 2 90 5
+13 89 59 42 3
+47 66 38 20 62
+61 56 72 84 41
+
+83 68 73 77 66
+96 48 24 7 98
+57 4 86 10 34
+22 46 80 75 49
+89 35 60 79 37
+
+27 50 90 37 28
+81 74 58 39 61
+ 8 72 31 85 57
+52 43 9 5 91
+68 86 0 4 89
+
+14 41 70 67 59
+13 94 31 69 65
+76 19 9 79 1
+33 20 53 91 36
+80 50 21 37 85
+
+16 47 62 33 12
+11 74 44 63 60
+ 2 23 84 80 42
+14 58 67 81 24
+ 8 29 31 91 43
+
+62 86 26 57 74
+ 9 46 47 81 39
+ 4 99 59 89 3
+20 76 51 70 84
+95 72 43 67 61
+
+75 93 56 15 30
+11 49 97 16 45
+52 91 21 92 62
+ 0 74 85 48 63
+28 76 59 79 60
+
+36 18 0 69 10
+34 33 21 5 23
+73 42 50 14 11
+75 26 95 79 51
+76 93 1 43 22
+
+86 64 25 9 54
+67 79 49 1 8
+63 47 60 4 46
+94 97 57 38 30
+91 87 0 68 15
+
+94 46 6 69 9
+18 49 43 30 31
+79 35 76 45 92
+67 89 82 2 57
+65 21 24 81 52
+
+ 5 58 43 37 61
+65 67 54 15 50
+69 75 14 17 96
+23 95 71 33 9
+68 82 10 3 29
+
+56 43 88 35 82
+44 14 64 60 23
+33 5 96 86 47
+70 74 27 4 1
+51 71 95 59 11
+
+46 14 44 6 19
+54 81 59 31 28
+ 7 67 73 23 86
+25 91 57 43 92
+65 76 80 47 77
+
+ 3 39 70 90 23
+64 77 33 83 22
+ 6 36 81 80 68
+85 45 72 53 42
+ 7 19 88 13 9
+
+88 3 72 6 29
+33 13 1 85 68
+28 32 78 8 63
+15 99 35 80 41
+61 50 43 53 39
+
+22 88 19 86 54
+78 3 70 65 85
+18 12 21 14 17
+ 5 48 64 81 71
+89 91 55 30 87
+
+35 82 37 42 25
+44 53 12 2 73
+18 24 0 75 51
+34 26 54 52 86
+56 64 31 57 80
+
+45 97 83 15 5
+40 77 1 53 84
+67 44 52 37 20
+36 64 33 82 90
+49 22 6 65 99
+
+18 69 23 78 55
+45 4 31 54 44
+16 97 13 81 86
+77 87 91 53 33
+ 1 84 83 75 40
+
+95 46 89 7 38
+83 32 99 44 20
+ 6 57 37 34 48
+69 5 84 29 54
+62 27 13 80 53
+
+45 92 59 71 83
+52 75 42 46 86
+76 33 50 80 69
+36 89 90 3 31
+ 7 5 48 38 53
+
+86 80 77 18 87
+79 93 52 17 20
+30 68 48 12 91
+25 98 13 9 47
+45 73 97 15 59
+
+93 60 34 18 25
+38 80 81 91 40
+43 87 20 79 7
+70 68 6 24 23
+46 97 32 78 67
+
+ 9 6 28 17 42
+ 2 86 84 90 13
+91 58 16 37 76
+15 3 45 51 4
+64 99 41 59 39
+
+44 3 85 80 93
+ 0 43 90 40 89
+82 91 55 79 75
+30 5 68 50 1
+37 24 59 62 66
+
+38 55 21 45 1
+23 14 95 25 22
+84 10 39 9 0
+17 15 58 70 49
+62 44 77 65 88
+
+ 8 62 25 75 39
+20 95 65 11 32
+ 5 92 15 86 66
+64 34 60 7 85
+10 76 6 53 61
+
+71 61 62 25 35
+23 30 37 14 9
+99 98 52 51 19
+77 57 17 72 85
+33 91 31 43 67
+
+76 66 39 36 44
+49 97 93 33 52
+13 70 21 17 32
+71 98 80 19 60
+73 15 99 74 9
+
+41 8 33 29 87
+42 86 66 31 50
+45 60 83 81 21
+36 4 98 43 0
+49 76 18 90 16
+
+83 53 34 39 58
+91 68 17 62 4
+ 2 76 44 31 35
+14 61 49 84 92
+73 6 86 27 65
+
+56 70 47 60 97
+35 89 26 99 59
+67 23 27 74 65
+61 62 15 18 45
+54 93 0 9 71
+
+11 24 97 15 30
+46 74 17 48 43
+16 64 72 60 37
+63 90 41 91 66
+25 95 1 54 49
+
+87 67 27 26 38
+63 44 65 25 81
+ 1 66 96 62 17
+82 2 58 4 86
+61 64 54 24 90
+
+72 94 69 85 43
+38 11 93 39 13
+86 92 12 42 75
+ 6 89 58 88 52
+79 19 20 55 14
+
+77 93 58 6 52
+27 48 29 60 71
+87 24 25 54 49
+53 38 90 51 80
+57 50 18 1 13
+
+85 84 54 2 51
+33 41 0 38 80
+ 5 62 1 28 96
+17 88 64 26 90
+78 91 56 34 74
+
+83 14 82 6 55
+30 13 99 57 39
+93 73 37 19 8
+29 49 76 22 92
+69 66 9 60 53
+
+51 78 52 72 79
+42 55 74 88 44
+90 75 65 87 69
+22 35 64 36 86
+63 41 19 59 49
+
+49 86 81 23 12
+93 16 9 8 95
+68 33 4 82 61
+45 28 85 87 38
+35 70 63 18 52
+
+63 93 38 34 61
+75 21 86 42 25
+52 85 99 24 36
+41 11 79 54 47
+44 84 65 28 89
+
+91 37 30 39 59
+ 7 94 90 38 40
+72 21 75 31 61
+68 42 34 20 8
+ 3 16 76 44 57
+
+32 55 36 81 42
+21 75 68 28 65
+46 70 29 54 64
+66 89 96 25 43
+79 76 41 77 71
+
+41 29 60 74 34
+84 49 83 72 92
+22 6 21 17 94
+15 44 62 28 2
+25 93 64 1 42
+
+68 76 23 62 10
+36 87 15 12 57
+79 46 18 83 11
+48 81 58 52 28
+72 40 64 55 21
+
+25 51 42 63 41
+ 0 72 92 23 13
+65 1 69 33 2
+78 27 95 61 55
+30 54 48 3 57
+
+50 40 58 66 59
+84 79 64 75 44
+88 93 41 25 97
+19 86 37 91 81
+10 26 94 77 34
+
+76 44 11 16 60
+19 92 91 58 50
+97 5 46 4 52
+87 42 65 75 15
+12 2 54 27 86
+
+77 38 51 29 89
+ 7 76 54 48 44
+88 50 2 5 53
+12 70 26 57 74
+31 19 18 34 47
+
+35 99 86 96 62
+61 97 71 70 66
+49 55 36 76 3
+94 23 31 91 26
+80 8 20 95 15
+
+ 4 96 40 36 12
+87 75 38 30 11
+69 29 23 85 91
+49 5 14 57 24
+88 20 99 78 65
+
+34 65 71 79 67
+28 1 33 47 11
+15 86 84 83 55
+35 10 19 63 23
+58 66 45 77 26
+
+74 13 25 39 8
+46 47 77 37 0
+60 1 81 42 18
+ 5 51 78 30 4
+36 12 10 32 82
+
+51 83 58 10 56
+28 18 43 99 14
+ 3 57 30 49 88
+20 68 76 73 82
+ 1 85 77 22 47
+
+50 12 11 97 83
+40 10 49 81 63
+43 15 91 3 2
+52 20 53 89 33
+42 94 59 78 46
+
+19 63 86 82 9
+69 13 27 88 37
+45 51 79 11 8
+ 2 29 41 84 73
+76 24 78 96 38
+
+15 19 88 95 54
+28 94 96 27 26
+ 8 82 68 6 71
+33 9 99 62 63
+38 83 41 14 79
+
+67 57 2 21 19
+11 79 74 45 95
+42 90 68 47 62
+80 61 1 0 39
+43 76 40 27 66
diff --git a/src/04/part1 b/src/04/part1
@@ -0,0 +1,86 @@
+--- Day 4: Giant Squid ---
+
+You're already almost 1.5km (almost a mile) below the surface of the ocean, already so deep that you
+can't see any sunlight. What you [1m[37mcan[0m see, however, is a giant squid that has attached
+itself to the outside of your submarine.
+
+Maybe it wants to play bingo?
+
+Bingo is played on a set of boards each consisting of a 5x5 grid of numbers. Numbers are chosen at
+random, and the chosen number is [1m[37mmarked[0m on all boards on which it appears. (Numbers may
+not appear on all boards.) If all numbers in any row or any column of a board are marked, that board
+[1m[37mwins[0m. (Diagonals don't count.)
+
+The submarine has a [1m[37mbingo subsystem[0m to help passengers (currently, you and the giant
+squid) pass the time. It automatically generates a random order in which to draw numbers and a
+random set of boards (your puzzle input). For example:
+
+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
+
+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 15 0 2 22
+ 9 18 13 17 5
+19 8 7 25 23
+20 11 10 24 4
+14 21 16 12 6
+
+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
+
+After the first five numbers are drawn (7, 4, 9, 5, and 11), there are no winners, but the boards
+are marked as follows (shown here adjacent to each other to save space):
+
+22 13 17 [1m[37m11[0m 0 3 15 0 2 22 14 21 17 24 [1m[37m4[0m
+ 8 2 23 [1m[37m4[0m 24 [1m[37m9[0m 18 13 17 [1m[37m5[0m 10 16 15
+[1m[37m9[0m 19
+21 [1m[37m9[0m 14 16 [1m[37m7[0m 19 8 [1m[37m7[0m 25 23 18 8 23 26 20
+ 6 10 3 18 [1m[37m5[0m 20 [1m[37m11[0m 10 24 [1m[37m4[0m 22
+[1m[37m11[0m 13 6 [1m[37m5[0m
+ 1 12 20 15 19 14 21 16 12 6 2 0 12 3 [1m[37m7[0m
+
+After the next six numbers are drawn (17, 23, 2, 0, 14, and 21), there are still no winners:
+
+22 13 [1m[37m17[0m [1m[37m11[0m [1m[37m0[0m 3 15 [1m[37m0[0m [1m[37m2[0m
+22 [1m[37m14[0m [1m[37m21[0m [1m[37m17[0m 24 [1m[37m4[0m
+ 8 [1m[37m2[0m [1m[37m23[0m [1m[37m4[0m 24 [1m[37m9[0m 18 13 [1m[37m17[0m
+[1m[37m5[0m 10 16 15 [1m[37m9[0m 19
+[1m[37m21[0m [1m[37m9[0m [1m[37m14[0m 16 [1m[37m7[0m 19 8 [1m[37m7[0m 25
+[1m[37m23[0m 18 8 [1m[37m23[0m 26 20
+ 6 10 3 18 [1m[37m5[0m 20 [1m[37m11[0m 10 24 [1m[37m4[0m 22
+[1m[37m11[0m 13 6 [1m[37m5[0m
+ 1 12 20 15 19 [1m[37m14[0m [1m[37m21[0m 16 12 6 [1m[37m2[0m
+[1m[37m0[0m 12 3 [1m[37m7[0m
+
+Finally, 24 is drawn:
+
+22 13 [1m[37m17[0m [1m[37m11[0m [1m[37m0[0m 3 15 [1m[37m0[0m [1m[37m2[0m
+22 [1m[37m14[0m [1m[37m21[0m [1m[37m17[0m [1m[37m24[0m [1m[37m4[0m
+ 8 [1m[37m2[0m [1m[37m23[0m [1m[37m4[0m [1m[37m24[0m [1m[37m9[0m 18 13
+[1m[37m17[0m [1m[37m5[0m 10 16 15 [1m[37m9[0m 19
+[1m[37m21[0m [1m[37m9[0m [1m[37m14[0m 16 [1m[37m7[0m 19 8 [1m[37m7[0m 25
+[1m[37m23[0m 18 8 [1m[37m23[0m 26 20
+ 6 10 3 18 [1m[37m5[0m 20 [1m[37m11[0m 10 [1m[37m24[0m [1m[37m4[0m 22
+[1m[37m11[0m 13 6 [1m[37m5[0m
+ 1 12 20 15 19 [1m[37m14[0m [1m[37m21[0m 16 12 6 [1m[37m2[0m
+[1m[37m0[0m 12 3 [1m[37m7[0m
+
+At this point, the third board [1m[37mwins[0m because it has at least one complete row or column
+of marked numbers (in this case, the entire top row is marked: [1m[37m14 21 17 24 4[0m).
+
+The [1m[37mscore[0m of the winning board can now be calculated. Start by finding the [1m[37msum
+of all unmarked numbers[0m on that board; in this case, the sum is 188. Then, multiply that sum by
+[1m[37mthe number that was just called[0m when the board won, 24, to get the final score, 188 *
+24 = [1m[37m4512[0m.
+
+To guarantee victory against the giant squid, figure out which board will win first. [1m[37mWhat
+will your final score be if you choose that board?[0m
+
+
diff --git a/src/04/part2 b/src/04/part2
@@ -0,0 +1,16 @@
+--- Part Two ---
+
+On the other hand, it might be wise to try a different strategy: let the giant squid win.
+
+You aren't sure how many bingo boards a giant squid could play at once, so rather than waste time
+counting its arms, the safe thing to do is to [1m[37mfigure out which board will win last[0m and
+choose that one. That way, no matter which boards it picks, it will win for sure.
+
+In the above example, the second board is the last to win, which happens after 13 is eventually
+called and its middle column is completely marked. If you were to keep playing until this point, the
+second board would have a sum of unmarked numbers equal to 148 for a final score of 148 * 13 =
+[1m[37m1924[0m.
+
+Figure out which board will win last. [1m[37mOnce it wins, what would its final score be?[0m
+
+
diff --git a/src/04/src/main.rs b/src/04/src/main.rs
@@ -0,0 +1,130 @@
+use std::io::BufRead;
+use std::io::BufReader;
+
+use std::fs::File;
+use std::env;
+
+struct Board {
+ fields: Vec<Vec<u32>>
+}
+
+fn read_board(reader: &mut BufReader<File>, boards: &mut Vec<Board>) -> bool {
+ let mut line = String::new();
+ let mut board = Board {
+ fields: Vec::new()
+ };
+
+ reader.read_line(&mut line).unwrap();
+ for _i in 0..5 {
+ line.clear();
+ let len = reader.read_line(&mut line).unwrap();
+ if len == 0 { return false; }
+ line = line.trim_end().to_string();
+ let vals: Vec<u32> = line.split_whitespace().map(|x| x.parse().unwrap()).collect();
+ board.fields.push(vals);
+ }
+
+ boards.push(board);
+
+ return true;
+}
+
+fn board_win(board: &Board, nums: &[u32]) -> bool {
+ for row in 0..5 {
+ let res = (0..5).find(|&col| !nums.contains(&board.fields[row][col]));
+ if res == None {
+ return true;
+ }
+
+ }
+
+ for col in 0..5 {
+ let res = (0..5).find(|&row| !nums.contains(&board.fields[row][col]));
+ if res == None {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+fn calc_score(board: &Board, nums: &[u32]) -> u32 {
+ let mut sum: u32 = 0;
+
+ for row in 0..5 {
+ for col in 0..5 {
+ if !nums.contains(&board.fields[row][col]) {
+ sum += board.fields[row][col];
+ }
+ }
+ }
+
+ return sum * nums.last().unwrap();
+}
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+ if args[1] == "1" {
+ part1();
+ } else if args[1] == "2" {
+ part2();
+ } else {
+ eprintln!("No such part\n");
+ }
+}
+
+fn part1() {
+ let file = File::open("input").expect("");
+ let mut reader = BufReader::new(file);
+ let mut line = String::new();
+ let mut boards = Vec::new();
+
+ reader.read_line(&mut line).unwrap();
+ line = line.trim_end().to_string();
+ let marked: Vec<u32> = line.split(",").map(|x| x.parse().unwrap()).collect();
+
+ while read_board(&mut reader, &mut boards) {}
+
+ for i in 1..marked.len() {
+ let curvals = &marked[..i];
+ for b in &boards {
+ if board_win(&b, curvals) {
+ let score = calc_score(&b, curvals);
+ println!("{}", score);
+ return;
+ }
+ }
+ }
+
+ println!("didnt work!");
+}
+
+fn part2() {
+ let file = File::open("input").expect("");
+ let mut reader = BufReader::new(file);
+
+ let mut line = String::new();
+ reader.read_line(&mut line).unwrap();
+ line = line.trim_end().to_string();
+ let marked: Vec<u32> = line.split(",").map(|x| x.parse().unwrap()).collect();
+
+ let mut boards = Vec::new();
+ while read_board(&mut reader, &mut boards) {}
+
+ let mut active: Vec<&Board> = boards.iter().collect();
+ let mut lastboard: Option<&Board> = None;
+ let mut lastvals: Option<&[u32]> = None;
+ for i in 1..marked.len() {
+ let curvals = &marked[..i];
+ for k in (0..active.len()).rev() {
+ if board_win(active[k], curvals) {
+ lastboard = Some(active[k]);
+ lastvals = Some(curvals);
+ active.remove(k);
+ }
+ }
+ }
+
+ let score = calc_score(lastboard.unwrap(), lastvals.unwrap());
+ println!("{}", score);
+}