adventofcode

git clone https://git.ce9e.org/adventofcode.git

commit
6536536674b6aec193c49279cf7196dd3365eadb
parent
e49df461ecca8aeb51f36498bd6ea6a90c7ce92f
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2023-12-04 07:50
2023-12-04

Diffstat

A 2023/04/input.txt 220 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A 2023/04/solution.rs 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
A 2023/04/test.txt 6 ++++++

3 files changed, 281 insertions, 0 deletions


diff --git a/2023/04/input.txt b/2023/04/input.txt

@@ -0,0 +1,220 @@
   -1     1 Card   1:  4 33 89 61 95 36  5 30 26 55 | 15 33 28 36 93 57 26 13 95  4 18 79  6 87 60 66 69 67 19 42 22 61 78  5 58
   -1     2 Card   2:  9 16 48 75 82 61 56 91  3 27 |  4 12 96 20 22 13  6 86 61 94 95 30  9 75 56 38 26 28  7 16 42 55  2 34  8
   -1     3 Card   3: 91 74 25 36 96 64 70 48 93 89 | 67 86 52 89 19 91 48 64 23 72  6 80 58 96 74 15 35 10 70 63 25 14 87 93 36
   -1     4 Card   4: 51  1 79 93 89 84 16 70 98 22 | 89 93 15 82 99 32 49 22 16  1 76 13 18 21 98 79 77 84 70 55 24 51 66 26 68
   -1     5 Card   5: 55 45 89 38 19 12 80 68 42 18 | 55 41 35 29 67 89 50 98 86 80 91 19 90 25 43 37 83 46 42 38 76 95 93 68 45
   -1     6 Card   6: 67 71 31 80  6  4 37 44 48 51 | 46 52 88 65 31 87 69 34 30 15 37 47 20 16 13 42 18 56 73 53 27 89 95 14 77
   -1     7 Card   7: 19 71 16 57 88 79 18 58 73 83 | 84 61 99 94 17 96 39 90 63 69 66 80 55 60 41 74 95 13 28 32  4 59  5  3  6
   -1     8 Card   8: 92 62 75 14 19 12 64 23 70 93 | 81 33 16 23 68 96 79 57 59 78 38 56 93 70 35 63 51 71 90 86 91 64 54 34  1
   -1     9 Card   9: 55 28 87 48 85 56 31 32 25 52 | 43 19 52 96 56 85 26 38 28 60 95  1 15  3 13 71 93 76  4 83 48  9 37 88 80
   -1    10 Card  10: 70 13 57 30 27 31 12 29 82 38 | 28 44 43 82 71 15 14 74 38 72 26 83 29 96 30 77 66 27 51  9 84 68 57 64 32
   -1    11 Card  11: 15 86 34 17 26 87 64 20 38 67 | 64 97 20 56 72 87 80 90 95 58 25 89 30 82 59 27 62 29  1 76 94 74 52 67 92
   -1    12 Card  12: 55 49 59 54 51 15 36 45 74 82 | 63 74 76  3 51 75 87 31 27 64 79 58 59 80 62 85 56  4 66 91 96 82 22 81 46
   -1    13 Card  13: 96 79 26 30 28 58 85 44 71 11 | 79 81  5 42 53 36 29 82 34 32 73 26 72 24 78 85  2 93 28 12 45 35 68 37 43
   -1    14 Card  14: 50  6 10 49 99 14 95 32 56 66 | 93  7 13 77 52 78 73 36 33 56 66 95 11 98 34 25 32 48 44 65 49 71  6 35 31
   -1    15 Card  15: 44 56 18 91  8  7 98 79 96 76 | 74 83 81 46 96 38  9 51 77 72 82 68 76 57 48 90  3 62 56 91 21 28 22 10 37
   -1    16 Card  16: 32 87 62 33 15 31 40  3  9 85 | 88 48 42 47 84 94 37 70 90 56 19 24  8  7 25 45 27 71 81 57 65 52 36 66 58
   -1    17 Card  17: 44 35 75 95 87 64 15 21 54 82 | 18 56 25  5 15 51 47 39  8  1 30 98 58 96 32 87 12 55 63 86 89 84 69  7 95
   -1    18 Card  18: 21 79 12 27 69 88 75 34 66  2 | 48 26 57 60 20 29 96 22 64 73 30 38 44 94 46 55  9 91 78 84 89 10 93 53  6
   -1    19 Card  19: 17 81 36 92 90 86 59 41 40 34 | 48 71  3 99 87 39 10 35 37 57 46 20 49 90 50 70 55  2 23  5 25 16 77 24 94
   -1    20 Card  20: 75 95 91 52 32 47 39 20 35 44 | 30 87 76 13 49 83 82 51  1 22 17 29 68 66 80 33 10 84 46 31 16 40 97 24 78
   -1    21 Card  21: 98 63 87 15 81 61 92 77 97 25 |  8 35 81 12 21 16 77 83 52  6 24 91 92 31 97 61 11 49 66 17 45 63  4 80 99
   -1    22 Card  22: 20 91 49 50  9 71 92 25 14 94 | 40 94 13 85 25 28  4 84 50 71 92 35 20  9 88 60 49 18 70 91 14 19 98 51 41
   -1    23 Card  23:  9 21 89 17 42 13 80 27 81 10 | 89 20 24 93  4 48 29  9 39 42 37  6 91 83 14 41  2 72 30 81 57 69 94 49 76
   -1    24 Card  24: 63  1 62  2 93 18 11 83 70 25 | 38 53 12 83 11 62 13 70  2 18 63 28 25 50 23 44  1 69 16  7 31 99 98 90 27
   -1    25 Card  25: 19  9 73 32 24  6 10 62 47 98 | 28 95 81 49 32 98 19 10 21 42 48 63  2 69 84 92 47 99 20 25  5 39  7 65 91
   -1    26 Card  26: 12 22 47 17 35 27  4 18 89 97 | 57 95 42 67 93 19 61 27 60 49 31 15 35 68 81 18 40 16 72 83 80 17 48  6  7
   -1    27 Card  27: 50 11  3 16 86 51 57 98  1 82 |  9 28 98  6 78 21 51 17 44 91 50 37 79 68  4 12 47 63 76 85 16 60  7 53  1
   -1    28 Card  28: 14 18 82 45 77 81 68  6 87 67 | 58 53 87 18 65 23 32 13 81 26 61 11 34 97 28 51 72 20 85 89  8 57 95 21 45
   -1    29 Card  29: 52 61 26 15 20 37 34 90 93 74 | 99 60 61 26 24 83  1 16 33 55 52 46 23 90 37 21 93 20 44 18 15 62 72 45 34
   -1    30 Card  30: 54 78 45 53 10 86  3 58 47 23 | 95 18 28 34 63  3 90 19 31 10 79 87 23 13  8 37 73 58  4 85 78 62 84 41 64
   -1    31 Card  31: 32  9 36 62 37 60 51 61 50 19 | 60 27 26 63 78 19 90 47 79 21 51 62 13 56  8  9 39 74 33 91 98 65 58 37  7
   -1    32 Card  32: 58 97 39 63  5 10 59 16 20 32 | 67 98 78 97 50 72 87 46 21 79 91 20 51 84 10 96 11 43 32 75 39 83 47 58  5
   -1    33 Card  33: 94 13 40 18 29  6 56 53 67 64 | 20 41 90 14 29 85 58 13 53 16 10 76 27 44  1 69 49 70 36 73 66 54 23 48 72
   -1    34 Card  34: 95 81 26 82 32 65 11 33 90 75 | 61 26 95 83 18 58 63 98 14 77 97 94 49 45 15 59 73 88 62 48  8 32 11 71 70
   -1    35 Card  35: 75 97 71 16 32 72 99  4 47 86 | 61 47 75 49 96  6 22 48 98  4 70 73 87 63  9 94 76 13  7 52 21 99 28 39 29
   -1    36 Card  36:  8 16 18 96 52 67 51 20 48  9 | 60 79 66 32 76 14 88 47  2  5 15 28 74 72 83 24 58 17 63 21 81 55 38 90 11
   -1    37 Card  37: 57 52 94 36  9 98 32 15 68 84 | 11 66 29 71 93 56 59  7  4 57 85 48 30 63 60 33 54 28 68 10 95 76 49 80 27
   -1    38 Card  38: 32  7 92 77 29 70 46 80 34 73 |  2 88 28 56 74 67 52 91 30 33  8 51 44 47 38 18 69 19 26 98 61  5 96 99 21
   -1    39 Card  39: 35 59 49 80 72 70 46 53  6 28 | 62 52 30 81 36 55 65 29 85 83 66 89 27  7 93 12 78 90 25 82 23 91 54 50 56
   -1    40 Card  40:  4 14 51 70 93 54 75 95 39 74 | 55 24 64 95 14 36 74 70 54 44  4 75 91 41 33 85 73  6 93 30 39 16 57 51 42
   -1    41 Card  41: 90 85 22 27 35 18 41 93 54 75 | 21 16 14 31 17 39 96  8 57 18 82 46 90 35 85 44 88 75 93 29 22 54 41 59 27
   -1    42 Card  42: 11 16 63 67 80 39 54 73 85 21 |  6 25 39 41 56 14 21 42  7 75 36  1 46 29 38 27 93 97 57 79 33 91 16 13 67
   -1    43 Card  43: 58 28 65  7 45 46 52 50 59 67 |  8 62 54 70 28 92 74 13 97 66 40 78 22 27 49 69 63 50 65 15 30 68 14 48 53
   -1    44 Card  44: 27 65 61 52  1 45 46 94 98 33 | 68 52 99 33 45  1 30 79 98 38 28 34 46  6 94 27 65 15 24 61 81 40 62 16 83
   -1    45 Card  45:  5 24  1 26 19 76 72 46 32 57 | 39 60 20 32 83 54 57  7 95 64 14 99 73 94 76 53 19 40  1 49 78 37 29 58 63
   -1    46 Card  46: 95 80 51 45 69 28  3 99 96 73 | 55 37 80 68 51 45 96 99 60 56 59 58 35 28 44  3 73 92 63  5 31 13 69 38 95
   -1    47 Card  47: 11 40 88 85 44 76 13 24 63 73 | 40 73 49 14 22 50 83 88 66 24  6 44  4 78 63 76 85  9 53 21 69 11 16 43 13
   -1    48 Card  48: 60 13 61 28  4 24  3 33 94 53 | 71 95 91  7 39 53 28  4 43 24 88 25 87 79 33 38 37 67 94 61 73 13 89 60 32
   -1    49 Card  49: 50 46 22  6 45 17 78 70 27 83 |  6 31  9 51 96 22 83 75 45 94 24 65 78 27 50 39 70 91 43 46 76 29 17  2  8
   -1    50 Card  50: 39 22 37 63 23 72 58 12 50 53 | 22 12 35 76 48  8 53 79 37 67 30 72 39 75  5 63 80 23 28 87 34 33 44 58 50
   -1    51 Card  51:  8 53 76 39 35 84 78 60 85 26 | 63 82 79 53 85 84 14 88 50 67 93 60 24 39 55 68 35 78 43 29 76  9  8 26 34
   -1    52 Card  52: 22 88 49  1  7 45 23  3 64 60 | 56 27 50 49  1 12 22  6 88 86 79 41  7 95 80 10 62 44 17 58 34 68 60 84 40
   -1    53 Card  53: 81 76 59 46 73 88 32  6 58 31 | 32 66 56 87 73 67  6 46 37 99 71 89 88 76 94 75 80  2 81 60 59 58 21 31 39
   -1    54 Card  54: 78 87 85 24 33 79 65 26 27 80 | 80 29 86 89 33 78 27 16 85 83 63 65 24 75 87 26 97 96 79 55  6 58 48 66 44
   -1    55 Card  55: 68 57 11 53 44 50 89 90 93  6 | 29 85 78 28 77 41 96 15 79  9 24 23 81 94 37 34 38 48 43 62 91 50 64 70 55
   -1    56 Card  56: 19 75 44 23 55 85 82 61 62 53 | 27 33 28 74 49 17 46 47 54 66 38 97 87  3 24 69 29 63 15 21 80 72 58 83 11
   -1    57 Card  57: 31 72 59 89 43  9 40 10 37 68 | 93 99 83 21 59 11 10 91 71 68 16 87 14 12 85 86  8 34  7 89  5 81 31 62  9
   -1    58 Card  58: 87 29 96 83 21 94 62 89 46  7 | 21 62 98 81  2 69 77  5 87 79 29 88  9  3 68 27 94 38 78 85 39 76 25 61 15
   -1    59 Card  59: 34 88 98 28 32 25 78 46 24  3 | 28 84  2 39 40 64 79 46 20 77 16 54 26 25 44 21 45 56 43 58  9 85 36 99 49
   -1    60 Card  60: 81 84 80 29 13 19 83 28 85 76 | 71 25 85 68 83 21 99 58 43 64  5 80 57  3  8 70 78 39 24 92 81 45 56 88 98
   -1    61 Card  61: 94  4  9 77 20 96 88 80 69 34 | 33 87 49 37 35 57  3 84 13 44 17 81 59 10 20 94 79 95 78 91 66 75 16  1 71
   -1    62 Card  62: 45 37 41 78  6 91  7 95 88 65 | 27 21 97 22 11 10 29 54 24 59 32 87 42 39 80 92 62 51  8 53 81 91 17 50  4
   -1    63 Card  63: 76 28  2 43 54  4 99 89 16 21 | 57  8 63 52 56 16  1 11 68 82 66 18 98 71 75 13 92 17 64 12 72 45 50 73 48
   -1    64 Card  64: 92 71 31 54 89 29 76 85 88 97 | 96 99 77 56  5 50 74 20 79 69 58 60 48 37  7 61 49 43  6  9 75 35 72 34 93
   -1    65 Card  65: 39 40 94 18 77 88 26 23 98 24 | 77 10 24 39 26 89 29  6 57 71  5 34 88 76 27 40  7  9 44 94 96 23 53 98 18
   -1    66 Card  66: 12 36 17 45 62 50 60 30 44 34 | 60 78 36  4 35 95 12 38 50 54 41 72 17 55 94 67 45 44 33 62 11 34 30 42 19
   -1    67 Card  67: 25 78 24 13  1 68 94 63 16 54 | 79 78  7 83 24 13 45 42 18 68  1 54 58 25 69 73 95 26 47 23 70 63 94 16  9
   -1    68 Card  68:  3 68 70 36 31 81 83  6 18 26 | 39 26  6 65 47 81  5 79 85 62 60 12 23 19 96  8 86 20 83 84 88 99 61 36 32
   -1    69 Card  69: 72 59 95 43 82 18 34 36 66 22 | 43 81 57 36 95 89 34 22 69 11 17 74 35 40 66 80 82 97 72 38 54 32 86 52 20
   -1    70 Card  70: 63 77 33 31 98 80 37 25 22 19 | 22  6 12 63  1 56 20 23 17 25 29  7 48 33 37 81 31 80 73 77 98 19 91 15 41
   -1    71 Card  71: 99 22 50 60 61 46 63 84 29 82 | 65 59 93 16 75 36 29 32  6 69 94 81 67 98 37 87 55 14 77 46 91 48 35 54 22
   -1    72 Card  72:  1 98 62 86 29 42 19 31 45 74 | 24 58  8 65 21 53 17 75 84 41 69 95 48 63 91 23 80 76 56 27 15  1  3 51 49
   -1    73 Card  73: 39 15 81 50 45 24 47  5 14 33 |  4 58 70 13  7 82 63 77 96 86 60 84 99 54 34 71 22 19 51 39 27 75 94 10 44
   -1    74 Card  74: 13 16 26 32 78 79 56 66 81 42 | 19 16 68 15 78 17 56 79 70 35 22 13 41 81 26 76 12 36 62  8 31 32 42 52 66
   -1    75 Card  75: 60 94 85 66 28 10  1 72 95 73 |  9 63 40 72 26  6 77 98 68  4 97 99 13 65 74 16 59  3 56 66  2 42 37 43 89
   -1    76 Card  76: 11 52 55 68 91 44 37 27 69 22 | 39  4 69 82 41 93 23 96 85 59 26  8 54 63 21 75 55 12 84 42 86 19 72 60 97
   -1    77 Card  77: 10 67  4 35 16 92 17 48 53 57 | 62 38 35 22 23 71 49  3 10 98 13 29 33 88 61 37 72 90 54 24 21 87 60  5 12
   -1    78 Card  78: 15 24 23  7 13 22 99  9 35 34 | 94 72 24 81 30 42 49 74 41 83 19  9 69 40 97 13 62 14 26 15  8 21 44 56 34
   -1    79 Card  79: 12 77 79 91 48 42 70 80 45 56 | 80 81 70 67 25 59 42 48 34 84  2 79 40 26 45 12 90 53 62 17 93 56 98 77 16
   -1    80 Card  80: 93 49 48 53 80 61 96 32 65 35 | 96 28 40 90 23 53 68 32 50 12 41 15 67 16 35 87 56 44 42 30 80 97  7 71 61
   -1    81 Card  81: 59  9 95 44 51 29 94 47 71 25 |  8 46 51 50 11 44 71 55 33  9 25 95 88 67 82 58 77 69 49 96 97 70 78 12 90
   -1    82 Card  82: 85 37 91  6 22 72 74 92  3 47 | 38  4 35 32 65 86 89 50 95  7 18 67 22 46 84 99  8 74 43 70 13 12 92 52 81
   -1    83 Card  83: 96 50  6 93 23  9 72 36 94 10 | 86 62 75 40 39 68 95 23 65 33  4 26  1 50  9 14 85 82 83 72 43 31 87 10 29
   -1    84 Card  84:  1 97 71 30 44 47 81 85 14 90 | 37 98 64 71  5 89 16 66 52 77  9  4 21 96 41 69 53 23 33 31 67 68 97 40 90
   -1    85 Card  85:  9 40 80 70 10 36 13 20 35 21 | 24 60 15 37  6 40 39 52  8 69 13 10 85 65 12 90 82 58 42 79 89 56 75 62 76
   -1    86 Card  86: 85 54 51 56 30 70 95 24 25 86 | 24 19 96  3 64 84 62 91 63 73 31  5 85 98 23 22 15 93  2 27 76 36 48 43 94
   -1    87 Card  87: 18  7 34 24 86 45 78 60 76 77 | 24 26  2  6  4 30 71 89 52 92 46 56 44 51 55 32 88 59 64 75 12 93 42 81 29
   -1    88 Card  88: 31 98 43 82 87 28 77 29  6 63 | 75 49 51 95 86 97 69 46  2 68 93 17 80 41 89 96 18 47 71 52 15 48 83 30 44
   -1    89 Card  89: 72 94 63 23 50 84  1 64 51  5 | 59 89 54 55 66 77 65 28 46 83  1 57 58  7 32 56 33 97  2 78 15 98 26 71 88
   -1    90 Card  90:  5 81 46 18  3 15 38 33 68 70 | 14 35 36 94  5  1 28 17 18 42 62 74 22 39  6  7 76 80  9 55 84 65 10 25 69
   -1    91 Card  91: 38 65 85 67  6 43 33 61 12 45 | 20 47 61 68 87 73 79 34 77 33 52 86  9 38 85 51 30 90 17 75 45 28 50 92 67
   -1    92 Card  92: 89 95 63 94 37 19 60 61 99 69 |  7 97  1 46 32 80 58 84 23 62 36 73 64 66 38 20 47 93 16 88  9 13 50 29 98
   -1    93 Card  93:  3 52 96 74 63  1 39 61 99 97 | 95 28 99 47 35 55  1 38 31 50 96 97 64 63 61  8  3 22 33 23 74 39 66 46 24
   -1    94 Card  94: 93 15  9 14 53 62 45 26 64  3 | 15 26  9 40 63 53 45  5 80 87 62  3  8 93 23 25 14 92 48 20 41 69 24 43 64
   -1    95 Card  95: 36  4 53 58 10 86  2 16 68 22 | 16  1 40 38 53 20 99 66 58 80 85 17  6 78 93 28 10 22 36 57  4 98 68 94 86
   -1    96 Card  96: 72 18 52  2 43 44  9 77 99 30 | 66 39 30 33  2  9 64 36 77 45 22 95 18 42 93 72 52 83 55 99 43 44 26 89 14
   -1    97 Card  97: 64 82 55 43 33  7 61 11 84 57 | 77 94 59 89 34 64 33 18  1  7 61 55 82 20 78 30 72 84 99 92 95 11 79 43 57
   -1    98 Card  98: 54 12 29  6 71 59 45 60 98 41 | 94 70 54 99 98  6  3 51  1 14 71 29 61 83  9 81 60 45 12 62 59 41 36  4 43
   -1    99 Card  99: 37 78 19 25 73 70 59 14 51 46 | 13  7 32 42 64 30 31 11  9 91  6 51 36 68 17 92 52 70 83 96 74 54 93 25 48
   -1   100 Card 100: 39 37 69 45 28 99 35 89 49 87 | 17 25 68 46 65 44 38  4 66 41 48 81 15  1 93  8  6 52 35 73 13 36 64 74 39
   -1   101 Card 101: 88 58 16 11 59 64 74 34 77 60 | 24 43 14 21 37 28  9 12 40 92 94 32  5  4 36 87 95  8 80 38 73 54 23  6 15
   -1   102 Card 102: 84 26 44 74 21 67 95 80 57 65 | 60 75  6 63 86 32 91 21 50 89 69  2 76 51 26 15 83 58 19 64 10 18 27 84 80
   -1   103 Card 103:  6 65 36 86 91 30 68 70 20 34 |  5 64 81 89 15 97 91 57 86 28 60 79 23  4 51 93 65 49 37 59 73 34 46  2 12
   -1   104 Card 104: 85 93  8  6 60 87 99 18  7 37 | 77 28 48 34 89 66 19 98 55 24 84 25 54 76 61 58 45 57 65 90 41  6  9 39 14
   -1   105 Card 105: 87  6 92 53 14 51  4 52 37 71 | 56 88 32 22 15 36 97  5 29 61 16 83 50 71 91 58 96 76  7 48 37 68 35 84 77
   -1   106 Card 106: 53 42 62 70 21 50 40  7 10 81 | 65 72 86  3 82  1 74 33  5 57  4 68 22  9 78 59 36 56 31 66 45 47 38 55  8
   -1   107 Card 107: 60 28 38 22 78 27 67 96 66  9 | 70 86 35 64 92 24 57 31  6 14 49 66 36 29 47 16 80 81 41 95 51 44 72 58 68
   -1   108 Card 108: 37 39 66 82  3  8 76 96 32 24 | 27 70 95 55  9  7 43 62 63 61  6 92 98  1 20 36 41 17 49 44 42 64 35 67 85
   -1   109 Card 109: 88 80 78  7 15  8 61 31 97 39 | 97 84 74  6  8 88 80  5 70 13 51 45 14 33 78 87 31 61 12 95 68 23 15 39  7
   -1   110 Card 110: 32 33 53  3 70 17 30 59 31 19 | 73 15 49  6 19 17 46 99 63 29 53  9 35 33 90 87 67  3 94 57 77 24 39 75 84
   -1   111 Card 111: 68 91 78 39 65 11 26 61 19 37 | 62 37 53 83 78 69 31 39  4 65 19 11 72  5  1  7 10 70 94 91 51 48 68 56 61
   -1   112 Card 112:  1 51 67 84 11 31 28 60 21 52 | 36 96  4 67 97 60 77 65 55  1 31 33 99 87 69 63 48 61 41 51 85 17 52 64 28
   -1   113 Card 113:  5 68 86 22 93 58 61 29 32 63 |  5 47 68 27 29 93 58 32 22 84 63 43 86  1 28 81 13 89 61 71 48 66 79 10  8
   -1   114 Card 114: 68 62  9 50 75 80 94 27  1 25 | 56 58 63 94 15 45 30 46 49 71 75 76 77 33 27 55 28  5 53 93  8 65 11  7 13
   -1   115 Card 115: 40 13 36 49 51 92 62 10 14  3 | 40 99 13 85 56 68 70 36 47 51 92 32 11 62 49 96  9 98 74 73 58 10 14 86  3
   -1   116 Card 116:  5 70  2  1 82 54 68 50 23 38 | 15 36 43 23 78 74 24 48 37 34 47 41 21 30 32 40 98 73 88 42 28 53 14  7 71
   -1   117 Card 117: 30 89 51 93 63 67 24 61 64  2 | 55 46 18  2 73 64 93 30 33 10 17 61 63 15 62 78 67 23 24 95 16 51 89 27 13
   -1   118 Card 118: 10 25  8 75 57 80 24 31 15 87 | 73 75 23 64 86 37 62 74 39 91 29 67 30 76 18 79 54 55 93 68 40 56  4 53  8
   -1   119 Card 119: 15  3 65 84 33 60 93 24 68  6 | 39 24 60 48 71  9 49 30 81 86 16 41 23 17 33 56 54 57 61 67 78 31 42 58 64
   -1   120 Card 120:  1 99 53 80 56 86 40 93 41 91 | 50 95 37 96 42 91 71  7 34 83 40 67  8 24 99 23 80 56 48 88 38 58 46 93  6
   -1   121 Card 121: 96 74 47 38 79 35 11 95 77  8 | 77 70 23 37  1  3 27 93 79 78 80 26 45 34 83 75 32 82 95 38 36 35  8 96 16
   -1   122 Card 122: 72  9 69 79  5  6 84 62 60 49 | 23 82 43 58 94 40 97 88 16 77 18 68 87 41 36 17 67 10 33 51 73 98 11 85 35
   -1   123 Card 123: 91 14 61 41 65 77 73 83  9 63 | 14 80 89 42 60 57 72 44 99 77 95 17 31 33 28  8 96  2 91  6 84 19 36  9 76
   -1   124 Card 124: 38 79 57 16 24 66 53 87 86 82 | 66 87  3 25 84  9 49 42 10 82 58 78 60 16 86 35 19 92 48 91 75 12 43 45 32
   -1   125 Card 125: 45 46 26  7 38 88 22 35 37 61 | 97 45 66 57 17  9 52 35 58 19 56 26 94 71 75  5 38 70 36 33 88 90 24 78  6
   -1   126 Card 126: 82 79 41 90 25 93 48 31  4 89 | 15 61 53 29 30 78 59 26 14 43 68 65 87  8 62 32 80 36 18  3 45 67 84 10 16
   -1   127 Card 127: 79 46 44 63 70 53 56 62 43 66 | 64 59 15  6 98 77 73 23 24 65 38 54 11 27 19  3 81 37 61 56 34 29 68 32  1
   -1   128 Card 128: 24 35 33 23 10 55 69  9 94 34 | 20 44 42 15 38 18 87  5 64 40 93  3 54 25 29  4 41 50 14 88 91 63 32 83 92
   -1   129 Card 129: 58 26 88  4 64 24 55 75 10 31 | 25  9 83  1 40 21  8 30 11 66 35 23 82 99 48 18 49 17 70  3 76 65 44 46 14
   -1   130 Card 130: 61 93 73  2 14 30 74 23 70 20 | 42 72 98 82 76  9 58 38 62 34 39 26 15 31 84 18 22 35 32 87 79 46 86 55 94
   -1   131 Card 131: 60  3 38 43 96 77 56 94 12 85 | 25 52  5 13 77 58 15  1 47 19 26 78  7  4 33 87 40 92 72 98 81 11 38 71 55
   -1   132 Card 132: 32 92 27 46 63 41 71 45 29 83 | 85 94 63 16 45 27 46 92  5 58 41 43 34 62 71 84  4 29 38 48 32 83 78 86 89
   -1   133 Card 133: 55 54 13 84 18 72 69 11 46 24 | 30 50 77  8 88 46 28 16 54 95 84 69 25 33 19 66 55 11 61 24 72 13 17 18 87
   -1   134 Card 134: 22 57 51 21 48 66 24 79 58 41 | 20  4 16 57 23 66  3 67 56 73 36 39 22 88 65 45 87 62 27 19 84 97 29 79 21
   -1   135 Card 135: 27 42 87 97 50 62 95 77 59  5 | 83 97 23 25 27 40 96 59 62 95 36  9 85 68 87 42 54 30  5 50 75 77 38 57 37
   -1   136 Card 136: 39  4 14 17  7 81 12 18 87 59 | 98 59 34 94  4 39 87 44 79 50 96 67 17  7 12 18 70  2 13 19 30 81 14 37 48
   -1   137 Card 137: 28 15 18 16 47 82 58 98 24 22 | 86 23 53 85 67  5 15 51 87 83  2 14 94 72 50  6 57  9  1 25 37 80 48 29 31
   -1   138 Card 138: 47 42 92  1 65 79 26 22 62 35 | 47 62 29 79 21 33 83 42 56 93 81 22 92 58 26 14 63 95 20 65 52 35 60 13  1
   -1   139 Card 139:  4 18 33  2 24 13 26 99 73 65 | 35 23 10 16 43 94 98 53 55  9 51 65 68 31 37 17  6 33 15 12 97 81 99 77 74
   -1   140 Card 140:  4 64 47 57 95 25 21 15 98 33 | 90 20 79 32 47  8 14 61 56 43 58 39 40 69 34 53 81  6  1 72 70 67 75 74 42
   -1   141 Card 141: 85 31 79 11 41 81 46  9 10 70 | 38 85 77 30 70 92 10  9 46 86 45 79 19 97 31 74  5 67 15 41 73 66 11  8 14
   -1   142 Card 142: 95 91 70 34 85 27 30 54  7 87 | 55 15 33 45 24 35  6 56 28  1  8 48  9 65 82 80 75 22 46 23 10 37 83 78 76
   -1   143 Card 143: 49 46  6 57 67 28 64 68 12 27 | 67 78 91 70  4 55  3 86  6 48 64 56 21 46  9 50 95 49 27 32 14 59 33 25 98
   -1   144 Card 144: 32 43 10 98 79 27 97 88 47 54 | 26 97 66 61 22 29 81 12 99 52 40 28 90  9 88 96 30  1 53 15 48 67 82 57 46
   -1   145 Card 145: 92  3 45  6 30 64 98 33 49 39 | 19 34 12 89 96  2 59 36 37  7 73 41 53 14 46 81 22 24 17 66 10 86 51 47 60
   -1   146 Card 146: 66 20 93 65 53 56 37  5  6 51 | 12 54 51 23 91 40 73 20 37 67  8 47 53 31 70 60 58 36 89 16 61 88 17 39 98
   -1   147 Card 147: 86 93 34 56  7 84 73 78 80  9 | 76 10 97 36 77 67 49 99 87 28 35 26 13 74 72 90 41 83 25 73 68 56  8 63 66
   -1   148 Card 148: 42 27 97 56 50 77 29 59 38 82 | 56 91 65 41 25 26 74  8 52 53 30 86 34 17 19 75 96 61  6 83 15 57 81 31 66
   -1   149 Card 149:  5 99 87 72 12 89 85 76 88 50 | 40  6 84 93 73 91 92 48 71 54 10 32 69  7 65 12  1  9 98 60 22 28 41 61 21
   -1   150 Card 150: 44 29 36 43  8 85 98 13 70 32 | 94 99 84 21 75 66 69 26 38 28 47 16 64  3 63 45  2 67 72 34 77 65 86 14 52
   -1   151 Card 151: 69 92 68 12 74 50 54 25 48 99 | 25 54 16 99 69 35 47 68 30 31 92 74 15 48 64 43 70 51 80 37 50 95 12 57 72
   -1   152 Card 152: 15 28 38 29 61 89 57 34  7 81 | 12 39 28 16 29  3 25 42  7 80 11 38 62 81 72 36  4 55 88 35 82 89 23 67 57
   -1   153 Card 153: 92 85 16  3 36  7 29 48 43 45 | 74 11 39 69 24 76 23 80 82 88 53 59 52  4 13 71 90 97 56 61  7 51 14 66 31
   -1   154 Card 154: 34 51 19 90 13 97 77 16 30 73 | 59 90 10 48  6 73 97 21 51 71 18 68 77 83 37 13 30 44 16 19  5 34 54 62 53
   -1   155 Card 155:  1 35 78 70  3 71 13 53 88 44 | 85  3 42 87 99 35 81 64 44 80 58 45  9 50 10 23 54 13 95 96 57 51 78 60 90
   -1   156 Card 156: 22 68 41 81 61  8 17 45 34 67 | 48 45 68 26 61 75 64 34 80 22 81 88 52 24 17 67  4  8 56  3 41 70 40 94 44
   -1   157 Card 157: 54 63 93  3 17 47 27 48 31 59 | 40 78 99 43 59 17 71 63 85 54 83 58 31 52 56 29 27 24 42  3 47 93 89 48 32
   -1   158 Card 158: 17 46 57 23 11 99  7 35 29  8 |  8 54 55 50 74 29 63 87 59 22 14 72 79 73 20 56 60 11 68 41  4 26 31  5 62
   -1   159 Card 159: 23 43 41 42 57 19 46 59 22 88 | 99 96 51 77 57 43 68 10 95 76 19 59 41 46 88 36 58 44 23 94 42 22  7 31 35
   -1   160 Card 160: 63 47 33 78 20 46 60  7 74 34 | 33 30 70 26 34 43 20 78 63  9 98 74 35 72 46  7 25 62  2 91 60 44 47 94 96
   -1   161 Card 161: 55 35 65 41 30 49 44 18 66 67 | 41 72 18 77 73 30 65 68 97 44 70 35 15 49 81 55 67 83 62 47 19 66 50 28 95
   -1   162 Card 162: 66 67 63 42 11 50 10 82 18 20 | 41 10 50 29 82 18 76 98 60 70 64 86 90 42 11 67 62 22 17 77 20 33 66 19 27
   -1   163 Card 163: 21 12  8 87 73 45 90 49 89 44 | 74 15 48 23 66 96 63 92 42  9 18 54  6 72 94 14 67 76 71 70 31 52 55 57 24
   -1   164 Card 164:  8 57 34 59 61  5 89 37 48 78 | 91 12 94 98 39 61 75  2 81 47 82 78 19  9  4 52 58 60 64 63 54 86 38 66 68
   -1   165 Card 165: 25 74 37 58 75 11 43 94 41 93 | 48 20 21 13 70 61 63 53 44 92 65 87 30  4  3 96 15 37 19 90 14  7 67 69 52
   -1   166 Card 166: 66 52 49 56 45 91 68 74 42 62 | 71 24 22 30 65 19 28 15 27 85 98  3 59 91 61 83 36 38 64 72 88  2 13 23  8
   -1   167 Card 167: 14 52 73 13 66 78 94 75 77 47 | 87 43 51 20 42 58 78 47 24 71 22 32  3 54 97 56 29 33 75 68  1 31 69 96  2
   -1   168 Card 168: 17 28 87 86 62 78 90 80 91 93 | 41 27 24 88 62 93 15 13  6  5 22  3 57 74 58  1 86 66  4 54 85  9 84 44 61
   -1   169 Card 169: 66 53 21 98 93  6 10 33  1 38 | 98 79  7 99 64 55 29 61 57 63 85 91 50 46 15 48 10 95 34 36 44 81 27 69 16
   -1   170 Card 170: 90 78 38 94 40 86 17 80 75 84 | 20  4 23 79 11 89 21 87  1 50 15 82 56  7 60 10 76 32 30 64 22 88 26 49 55
   -1   171 Card 171: 89 24 37 14 35 15 51 75 81 38 |  8 95 61 43 72 39 59 32  1 84 63 20 55 33 17 45 60 98 41  2 48 44 71 27 18
   -1   172 Card 172: 32 53  5 76 97 90 75 37  1 89 | 16 52 10  6 98 12 20  9 96 44 84 38 37 60 87 22 72 28 35 94 70 65 41 67 86
   -1   173 Card 173: 30 87 95 75 17 56 77 64 22 49 | 52  6 78 29 91  4 69 36 53 71 94 96 14 25 55 47 12 92 34 27 31 58 73 37 83
   -1   174 Card 174: 66 57 29 60 36 47 14 97 73 17 | 40 28 26 81  6 86 54 75  5 12 64 19 82 41 46 32  1 44 39 96 61 53 18 43 67
   -1   175 Card 175: 31 37  7 14 25 11 68 67 19 36 | 80 17 34 83 14 11 79 36 91 59 64 58 73 37 99 12 41 67  5 31 25  7 33 68 19
   -1   176 Card 176: 41 73 88 38 25 14 94 61 96 55 | 73 28 97 81 58 94 55 96 50 69 37 67 79 66 30 59 71 10 14 25 88 61 38 41 16
   -1   177 Card 177: 20 86 57 59 93 17 31 53 90  5 | 60 35 80 91 86 79 17 65  1 31 93  5 57  8 53 64 20 81 29 13 21 63 59 90 74
   -1   178 Card 178: 56 26 38 71 98 91 52  6 13  5 | 58  7 84  1 54 70 49 16 32 96 39 78 15 20 22 82 95 93 21 68 42 29 88 48 12
   -1   179 Card 179: 51 28 25 81 79 61 80 52 90 57 | 52 43 81 90 51 57 78 69 15 50 80 73 35 92 77 25 11 14 79 10 30 28 61 48 87
   -1   180 Card 180: 15 58 35 40  7 30 73 72 19 69 | 60  5 78 55 49 45 84 77 62 11 97 56 57 32 26 93 76 65 80 16 87 91 41 51 18
   -1   181 Card 181: 93 19 33 58 20 72 16 62 60 90 | 48 25 50 60 33 32 16 90 83 81 38 19  4 20 92 99 58 93 22 47 62  8 72 56 75
   -1   182 Card 182: 53 47 67 48 32 35 51 63 34 65 | 36  9 92 32 67 65 71 54 26 44 35 25 63 69  8 47 48 34 85 49 42 59 51 99 53
   -1   183 Card 183: 26 38 36 97 73 31 50  4 19 46 | 35 59 36 37 17 73 99 66 22 88 29 40 50 96 92 32 75 85  5 47 53 84  2 69 44
   -1   184 Card 184: 77 31 80 46 17 38 29 10 95 63 | 52 49 42 74 93  8 79 30  2 90 70 72  9 87 37 81 92  3 31 91 15 68 54 69 96
   -1   185 Card 185:  3 28 46 30 59 14 55 70 32 63 | 81  7 54 12  4 79 27 11 16 58 73 33 45 22  8 61 29 10 47 87  6 89 34  1 44
   -1   186 Card 186: 43 15 95 46 72 98 88 32 19 92 | 17 43  3 92  5 14  6 44  9 13 68 41 59 28 53 24 81 62 61 11  7 63 96 23 12
   -1   187 Card 187: 10 48 59 87 20 40 15 31 39 57 | 15 30 42  2 74 35 78 65 14 53 45 76 29 11 34 48 55 10 86 17 66 72 22 32 89
   -1   188 Card 188: 92 82 12 52 35 50 66 17  5 45 | 73 21 92 57  5 12 69 94 88 51 45 29 22 13 15 27 74 50 25 53 82 66 35 62 55
   -1   189 Card 189: 43 25 90 61 67 28 31 15 75 62 | 83 50 15 77 27 18 13 99  8 82 63 78 58 84 53 69 97 17 31 57 94  3 49 67 47
   -1   190 Card 190: 23  7 97 33 91 82 37 35 20 19 | 66 47 76 80 94 69 24 33 96 81  6 23 55 17  7 57  9 97  1 37 32 85 39 63 91
   -1   191 Card 191:  9 13 80 21 31 39 23 70  4 34 | 23 10 87 85 95 31 39 60 76 73 80 12 86 20 84 28  5 65 59 94 19 56 54 61 36
   -1   192 Card 192: 82 39 58 98  8 42 44 11 80 71 | 81 60 25 76 86 15 70  8 95 42 34 97 20 72 29 39 98 94 61 33  2 87  4 73 47
   -1   193 Card 193: 89 65 23 47 93 86 51 26 94 10 | 38 51 81 22  9 28 97 70 20 63 90  8 55 85 66  4 49 50 52 69 54 83 17  2 21
   -1   194 Card 194:  5 36 20 85 62 13  9 25 95 33 | 43 52 44 31 41 54 22 56 82 59 50 66 84 46 17 53 92 28 45 24  1  9 83 72 48
   -1   195 Card 195: 34  6 40 88 78 49 59 73 68 51 | 54 60 27 15 32 56 72 20 45 30 17 89 94  4 63 18 26 12 41 47 44 38 70 14 28
   -1   196 Card 196:  8  6 50 43 64 36 68 14 16 82 | 89 28 90 26 58 59 41 97 30 98 60 69 39 79 61 65 21 10 72 70 54  2 84 25  5
   -1   197 Card 197: 39 93  1 72 52 38 34 80 98  5 | 40 72 89 75 32 34 59 14 87 39  1 98 24 70 36 37  6 93 38 71 60 15 80 25 10
   -1   198 Card 198: 16 75 48 28  6 87 23 55 13 44 | 48 69 55 40  6 64 88 66 58 13 49 65 62 78 10 97 16  1 57 90  4 37 54 44 74
   -1   199 Card 199: 25 89  5 87 17 95 33  3 79 55 | 33 27 76 67 34 79 16 51 28 86 53 97 88 55 22 10 62 14  3 69 83 29 45 50 24
   -1   200 Card 200: 73  8 91 68 93 89 80 24 10  1 | 70 65 62 45 55 36  6 21 15 88 92 72 24 94 58 53 95 59 69 43 14 40 83 63 29
   -1   201 Card 201: 58 68 88 94 91 45 46 43 87 47 | 88 49 97 53  2 85 68 91  3 15  1 43 59 58 20 84  5 45 94 90 81 17 64 92  8
   -1   202 Card 202: 71 11 50  5 31 44 65 21 27 18 | 43 71  5 65 98 74  6 39 45 79 76 21 92 94 75 17 11 70 32 36 27 48 50 18 97
   -1   203 Card 203: 48 83 22 17 39 49 36 97  9 18 | 18 39 26 29 83  9 19 46 22 61  6 37 48 76 49 33 10 17 36 58 86 62 42 78 97
   -1   204 Card 204:  6 79 83 61 90 74 73 44 96 31 | 73 31 12 27 74 66 78 28 39  5 98 19  3 77  9 18 50 96 44 83 37  6  7 61 79
   -1   205 Card 205: 31 66  8 18 16 78 86 71 84 14 | 84 64 71 44  9 50 14 61 87 16 81 49 33 78 92 31 66 18 95 62 86 67 22 17  8
   -1   206 Card 206: 70 10 17 50 65 68 89 43  6 76 | 96 84 29  5 48 53 11 55 85 81 69 34 22 24 94 83 33 71 51 52 60 13 61 16 38
   -1   207 Card 207: 52 60  8  4 89 66 71 65  7 25 | 22  3  8 54 11 25  2 65 49 38 67 94  4 89 58 41 10 60 52 71 37 28 66 45  7
   -1   208 Card 208: 85 45 65 49 94 46 86 20 78 92 | 26 93 33  9 12 67 17  1 14  4 82 28  8  7 61 68 50 22 80  2 75 70 58 16 72
   -1   209 Card 209: 28 54 14 59 76 99 27 83 10 22 | 86 84 15 83 30 54 32 10 33 76  4 41 22 27 26 49 73 17 14  6 85 57 70 99 48
   -1   210 Card 210: 38 33  8 80 27 65 77 55 60 62 | 55 48 73 37 91  2 49 68 66 12 80 17 13 33 67 41 42 11 47 78 97 87 58 65 19
   -1   211 Card 211: 50 13 37 39 46  2 99 35  3 52 | 55 63 67 74 93 86 83 46 43 96 60 61 18 81 38 50 48 70 22 34  2 77 59 27 45
   -1   212 Card 212: 58 72 43 19 34 99 78 17 51 76 | 71 67 53 44 89 97 68 50  7 32 59 72 21 87  4 18 42 22 40 92  2 82 41 77 70
   -1   213 Card 213: 75 26 12 79 40 94 63 99 65 67 | 76 73 36  1 58 60 42 39 82 55 24 45 14 89 20 64 30 86 18 98 67 32 19 81 92
   -1   214 Card 214: 17 76 35 95 58 28  8 43 22 72 | 31 33 11 93 89 46 99 74 66 78  4 68 65 64 54 25 82 15 55 53 84 19  9 38 69
   -1   215 Card 215: 54 74 15 45 49 73 99 62 55  8 | 68 15 57 94 18  6 45 44 37 88 97 93 53 51 16 64 31 99 52 62 36 61 55 76 24
   -1   216 Card 216: 74 42 58 70 62 66 43  4 78 68 | 95 86 36 52 13 22  6 45 74  2 25 18 99 47 93 26 77 58 63 62 96 73 27  1 94
   -1   217 Card 217: 26 68  4 18 20 49 48 44 75 54 | 83 36 99 50 66 38 46 13 69 90 61 41 17  5 98 11 87 14 39 84  6 28 77 31 82
   -1   218 Card 218: 33 13 50 29  8 32 69 44 30 17 | 81 96 70 16 25 28 77 23 19 99 93 61 82 88 26 58 12 30 24 78 97 54 38 90 48
   -1   219 Card 219: 81 72 88 86  7 12 84 74 38 70 | 67 16 75 25 37 36 26 10 20 99 94 28 79 90 93 68 22 84 47 53 44 82 91 97  8
   -1   220 Card 220: 56 45 18 93 37 22 52 53 66 69 | 58 79 19 59  9 16 65 24 29 97 88 73 54 83 49 71 15 23 12 57 84 99 35 31 91

diff --git a/2023/04/solution.rs b/2023/04/solution.rs

@@ -0,0 +1,55 @@
   -1     1 use std::collections::HashSet;
   -1     2 
   -1     3 #[path = "../lib.rs"]
   -1     4 mod lib;
   -1     5 
   -1     6 fn parse() -> Option<Vec<usize>> {
   -1     7     let mut matches = vec![];
   -1     8 
   -1     9     for line in lib::iter_input() {
   -1    10         let (_, numbers) = line.split_once(": ")?;
   -1    11         let (winning, have) = numbers.split_once(" | ")?;
   -1    12 
   -1    13         let w = winning
   -1    14             .trim()
   -1    15             .split_whitespace()
   -1    16             .map(|s| s.parse::<u64>().unwrap())
   -1    17             .collect::<HashSet<u64>>();
   -1    18 
   -1    19         let h = have
   -1    20             .trim()
   -1    21             .split_whitespace()
   -1    22             .map(|s| s.parse::<u64>().unwrap())
   -1    23             .collect::<HashSet<u64>>();
   -1    24 
   -1    25         matches.push(w.intersection(&h).count());
   -1    26     }
   -1    27 
   -1    28     return Some(matches);
   -1    29 }
   -1    30 
   -1    31 fn part1(matches: &Vec<usize>) -> u32 {
   -1    32     return matches
   -1    33         .iter()
   -1    34         .map(|x| if *x > 0 { 2_u32.pow(*x as u32 - 1) } else { 0 })
   -1    35         .sum::<u32>();
   -1    36 }
   -1    37 
   -1    38 fn part2(matches: &Vec<usize>) -> usize {
   -1    39     let mut counts = vec![];
   -1    40     for _ in 0..matches.len() {
   -1    41         counts.push(1);
   -1    42     }
   -1    43     for i in 0..matches.len() {
   -1    44         for j in 0..matches[i] {
   -1    45             counts[i + j + 1] += counts[i];
   -1    46         }
   -1    47     }
   -1    48     return counts.iter().sum();
   -1    49 }
   -1    50 
   -1    51 fn main() {
   -1    52     let matches = parse().unwrap();
   -1    53     println!("part1: {}", part1(&matches));
   -1    54     println!("part2: {}", part2(&matches));
   -1    55 }

diff --git a/2023/04/test.txt b/2023/04/test.txt

@@ -0,0 +1,6 @@
   -1     1 Card 1: 41 48 83 86 17 | 83 86  6 31 17  9 48 53
   -1     2 Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19
   -1     3 Card 3:  1 21 53 59 44 | 69 82 63 72 16 21 14  1
   -1     4 Card 4: 41 92 73 84 69 | 59 84 76 51 58  5 54 83
   -1     5 Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36
   -1     6 Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11