2021 Day 4 & Day 5 Complete
This commit is contained in:
parent
f3fe5c523b
commit
70569e043a
601
2021/day04/input
Normal file
601
2021/day04/input
Normal file
@ -0,0 +1,601 @@
|
|||||||
|
67,31,58,8,79,18,19,45,38,13,40,62,85,10,21,96,56,55,4,36,76,42,32,34,39,89,6,12,24,57,93,47,41,52,83,61,5,37,28,15,86,23,69,92,70,27,25,53,44,80,65,22,99,43,66,26,11,72,2,98,14,82,87,20,73,46,35,7,1,84,95,74,81,63,78,94,16,60,29,97,91,30,17,54,68,90,71,88,77,9,64,50,0,49,48,75,3,59,51,33
|
||||||
|
|
||||||
|
12 75 58 21 87
|
||||||
|
55 80 14 63 17
|
||||||
|
37 35 76 92 56
|
||||||
|
72 68 51 19 38
|
||||||
|
91 60 34 30 88
|
||||||
|
|
||||||
|
0 66 5 51 8
|
||||||
|
45 57 31 3 62
|
||||||
|
7 60 40 29 90
|
||||||
|
80 19 47 86 81
|
||||||
|
95 69 68 53 93
|
||||||
|
|
||||||
|
30 99 16 34 42
|
||||||
|
94 39 83 78 49
|
||||||
|
57 81 97 77 52
|
||||||
|
9 61 98 11 89
|
||||||
|
85 1 60 90 55
|
||||||
|
|
||||||
|
87 49 12 85 88
|
||||||
|
67 89 7 35 70
|
||||||
|
37 45 93 84 9
|
||||||
|
80 58 54 13 22
|
||||||
|
8 71 48 15 39
|
||||||
|
|
||||||
|
40 79 34 18 42
|
||||||
|
35 8 64 5 63
|
||||||
|
93 57 16 10 96
|
||||||
|
22 20 23 0 86
|
||||||
|
61 78 68 83 12
|
||||||
|
|
||||||
|
43 78 64 70 49
|
||||||
|
60 54 31 82 9
|
||||||
|
10 69 2 1 50
|
||||||
|
37 12 16 77 25
|
||||||
|
18 14 57 13 91
|
||||||
|
|
||||||
|
42 85 53 57 52
|
||||||
|
19 41 84 68 28
|
||||||
|
39 22 55 51 87
|
||||||
|
49 23 5 66 71
|
||||||
|
72 83 86 35 50
|
||||||
|
|
||||||
|
91 75 9 62 82
|
||||||
|
47 37 94 6 55
|
||||||
|
96 38 8 19 22
|
||||||
|
46 66 54 43 59
|
||||||
|
1 0 26 36 74
|
||||||
|
|
||||||
|
19 78 25 10 80
|
||||||
|
23 88 95 42 11
|
||||||
|
54 85 52 92 31
|
||||||
|
73 87 9 17 93
|
||||||
|
2 46 12 24 83
|
||||||
|
|
||||||
|
84 73 85 51 89
|
||||||
|
41 26 98 11 29
|
||||||
|
81 6 35 39 76
|
||||||
|
27 10 49 4 92
|
||||||
|
55 43 28 45 88
|
||||||
|
|
||||||
|
23 0 19 26 73
|
||||||
|
72 42 40 58 38
|
||||||
|
36 46 18 89 52
|
||||||
|
85 35 50 13 1
|
||||||
|
66 57 45 81 25
|
||||||
|
|
||||||
|
11 71 35 0 95
|
||||||
|
45 16 78 33 31
|
||||||
|
30 34 25 91 36
|
||||||
|
83 58 8 3 62
|
||||||
|
67 14 72 93 28
|
||||||
|
|
||||||
|
63 41 19 80 27
|
||||||
|
69 15 99 75 95
|
||||||
|
47 86 52 22 12
|
||||||
|
66 43 37 6 97
|
||||||
|
13 1 5 71 83
|
||||||
|
|
||||||
|
19 42 85 53 31
|
||||||
|
36 14 75 39 74
|
||||||
|
70 86 97 72 69
|
||||||
|
15 20 41 6 21
|
||||||
|
26 33 48 98 34
|
||||||
|
|
||||||
|
1 79 21 38 44
|
||||||
|
63 71 14 17 87
|
||||||
|
41 76 56 49 59
|
||||||
|
3 18 6 4 77
|
||||||
|
34 19 88 24 10
|
||||||
|
|
||||||
|
78 20 30 54 92
|
||||||
|
25 63 81 0 69
|
||||||
|
46 87 26 56 40
|
||||||
|
90 82 50 84 66
|
||||||
|
96 41 18 29 23
|
||||||
|
|
||||||
|
34 1 59 55 30
|
||||||
|
97 19 82 23 77
|
||||||
|
21 52 56 48 24
|
||||||
|
29 43 28 99 69
|
||||||
|
4 37 84 76 58
|
||||||
|
|
||||||
|
96 10 11 79 40
|
||||||
|
90 29 59 73 84
|
||||||
|
16 62 74 42 92
|
||||||
|
43 32 58 46 34
|
||||||
|
75 12 57 22 15
|
||||||
|
|
||||||
|
29 82 47 16 12
|
||||||
|
78 84 83 0 77
|
||||||
|
51 64 5 37 7
|
||||||
|
49 70 19 69 8
|
||||||
|
67 63 6 43 79
|
||||||
|
|
||||||
|
87 67 52 64 8
|
||||||
|
55 43 82 50 13
|
||||||
|
3 19 94 54 83
|
||||||
|
80 59 15 32 37
|
||||||
|
0 58 12 89 96
|
||||||
|
|
||||||
|
95 31 14 77 83
|
||||||
|
26 68 33 39 85
|
||||||
|
71 56 45 46 30
|
||||||
|
44 93 16 17 52
|
||||||
|
86 8 27 3 25
|
||||||
|
|
||||||
|
27 67 81 30 95
|
||||||
|
48 89 7 4 3
|
||||||
|
82 90 78 85 44
|
||||||
|
22 16 97 92 11
|
||||||
|
15 87 47 79 62
|
||||||
|
|
||||||
|
49 51 35 87 75
|
||||||
|
3 70 8 43 5
|
||||||
|
77 88 73 81 29
|
||||||
|
42 62 50 37 85
|
||||||
|
26 86 14 38 65
|
||||||
|
|
||||||
|
81 9 84 3 37
|
||||||
|
33 32 1 54 45
|
||||||
|
39 83 82 36 2
|
||||||
|
56 28 76 85 40
|
||||||
|
96 69 43 24 71
|
||||||
|
|
||||||
|
83 72 50 46 34
|
||||||
|
15 51 87 44 71
|
||||||
|
8 78 10 94 11
|
||||||
|
67 40 85 93 35
|
||||||
|
17 23 24 0 61
|
||||||
|
|
||||||
|
62 55 47 77 95
|
||||||
|
81 20 35 8 78
|
||||||
|
7 9 89 27 51
|
||||||
|
80 39 33 63 50
|
||||||
|
67 34 4 87 57
|
||||||
|
|
||||||
|
72 88 74 46 91
|
||||||
|
67 66 32 0 9
|
||||||
|
3 69 94 6 81
|
||||||
|
40 95 29 83 20
|
||||||
|
80 68 55 54 2
|
||||||
|
|
||||||
|
72 68 65 91 81
|
||||||
|
52 34 88 46 48
|
||||||
|
66 4 54 27 62
|
||||||
|
83 60 69 26 56
|
||||||
|
19 11 35 22 84
|
||||||
|
|
||||||
|
72 69 92 87 83
|
||||||
|
55 95 85 66 1
|
||||||
|
16 3 86 5 99
|
||||||
|
24 22 29 53 90
|
||||||
|
76 73 48 80 42
|
||||||
|
|
||||||
|
38 22 94 50 20
|
||||||
|
40 52 61 39 62
|
||||||
|
7 35 95 54 66
|
||||||
|
37 59 84 76 2
|
||||||
|
81 85 0 48 6
|
||||||
|
|
||||||
|
90 95 34 93 8
|
||||||
|
46 13 6 58 85
|
||||||
|
91 89 83 80 18
|
||||||
|
56 57 44 99 17
|
||||||
|
21 42 12 74 38
|
||||||
|
|
||||||
|
28 61 78 99 23
|
||||||
|
75 64 37 66 50
|
||||||
|
53 70 89 17 63
|
||||||
|
43 38 71 26 85
|
||||||
|
4 13 2 27 18
|
||||||
|
|
||||||
|
35 12 60 7 29
|
||||||
|
87 65 17 81 10
|
||||||
|
42 62 99 38 51
|
||||||
|
2 57 92 27 89
|
||||||
|
82 58 97 36 72
|
||||||
|
|
||||||
|
43 45 5 99 51
|
||||||
|
88 4 13 39 95
|
||||||
|
44 56 31 33 94
|
||||||
|
37 57 12 3 91
|
||||||
|
50 74 6 76 30
|
||||||
|
|
||||||
|
67 85 56 69 84
|
||||||
|
74 65 61 66 8
|
||||||
|
43 50 55 25 97
|
||||||
|
78 15 49 73 27
|
||||||
|
71 44 93 23 64
|
||||||
|
|
||||||
|
83 38 97 85 76
|
||||||
|
55 90 46 34 12
|
||||||
|
1 52 18 59 48
|
||||||
|
62 63 30 82 92
|
||||||
|
68 95 0 72 84
|
||||||
|
|
||||||
|
40 10 62 77 75
|
||||||
|
93 94 32 27 60
|
||||||
|
26 12 14 35 57
|
||||||
|
88 53 97 95 24
|
||||||
|
66 46 33 3 63
|
||||||
|
|
||||||
|
25 44 90 34 17
|
||||||
|
91 93 42 37 86
|
||||||
|
95 41 82 92 31
|
||||||
|
65 35 52 40 84
|
||||||
|
85 57 71 19 29
|
||||||
|
|
||||||
|
77 38 15 12 9
|
||||||
|
65 78 39 81 33
|
||||||
|
35 64 96 76 71
|
||||||
|
68 93 79 22 40
|
||||||
|
88 87 27 7 29
|
||||||
|
|
||||||
|
10 81 7 92 64
|
||||||
|
60 25 11 6 87
|
||||||
|
34 49 20 13 0
|
||||||
|
48 38 14 61 75
|
||||||
|
71 86 39 37 22
|
||||||
|
|
||||||
|
63 67 82 98 18
|
||||||
|
11 95 4 55 44
|
||||||
|
42 10 84 73 19
|
||||||
|
17 57 53 61 49
|
||||||
|
7 32 24 75 58
|
||||||
|
|
||||||
|
50 90 1 98 41
|
||||||
|
77 4 87 69 19
|
||||||
|
48 44 68 10 17
|
||||||
|
96 66 71 61 45
|
||||||
|
18 86 26 73 16
|
||||||
|
|
||||||
|
5 58 68 34 85
|
||||||
|
44 89 72 21 27
|
||||||
|
0 50 39 94 82
|
||||||
|
23 13 41 81 6
|
||||||
|
83 60 61 22 40
|
||||||
|
|
||||||
|
59 41 63 92 69
|
||||||
|
10 58 29 60 4
|
||||||
|
76 15 46 34 85
|
||||||
|
13 17 88 86 24
|
||||||
|
62 73 19 67 98
|
||||||
|
|
||||||
|
96 69 70 87 80
|
||||||
|
28 27 40 77 9
|
||||||
|
23 52 99 3 60
|
||||||
|
81 53 26 45 35
|
||||||
|
82 33 71 43 67
|
||||||
|
|
||||||
|
30 8 41 71 26
|
||||||
|
97 96 0 45 11
|
||||||
|
61 12 91 7 50
|
||||||
|
22 40 74 55 29
|
||||||
|
53 78 43 15 5
|
||||||
|
|
||||||
|
93 25 12 62 84
|
||||||
|
95 31 87 83 23
|
||||||
|
29 41 6 55 17
|
||||||
|
33 85 42 20 56
|
||||||
|
57 1 65 45 16
|
||||||
|
|
||||||
|
76 86 27 75 96
|
||||||
|
56 63 45 25 77
|
||||||
|
54 44 64 41 13
|
||||||
|
60 46 66 12 67
|
||||||
|
84 59 39 24 5
|
||||||
|
|
||||||
|
79 39 22 84 66
|
||||||
|
76 38 99 21 47
|
||||||
|
52 73 7 45 94
|
||||||
|
70 78 24 16 40
|
||||||
|
48 57 9 13 64
|
||||||
|
|
||||||
|
17 80 28 51 94
|
||||||
|
52 56 24 65 82
|
||||||
|
38 96 21 70 23
|
||||||
|
60 50 40 32 91
|
||||||
|
45 77 37 44 89
|
||||||
|
|
||||||
|
18 3 42 68 66
|
||||||
|
22 35 95 29 65
|
||||||
|
8 99 72 19 5
|
||||||
|
44 80 11 60 76
|
||||||
|
59 90 64 57 94
|
||||||
|
|
||||||
|
66 97 62 49 89
|
||||||
|
4 41 5 2 23
|
||||||
|
54 48 43 45 76
|
||||||
|
68 35 14 1 86
|
||||||
|
34 47 26 92 95
|
||||||
|
|
||||||
|
57 36 52 42 11
|
||||||
|
49 83 94 72 26
|
||||||
|
91 48 50 88 80
|
||||||
|
70 23 81 33 15
|
||||||
|
64 90 2 47 18
|
||||||
|
|
||||||
|
68 11 16 77 28
|
||||||
|
29 56 81 21 63
|
||||||
|
2 88 54 82 40
|
||||||
|
69 93 92 55 70
|
||||||
|
57 51 25 80 3
|
||||||
|
|
||||||
|
10 73 8 27 61
|
||||||
|
74 66 47 54 1
|
||||||
|
52 17 76 5 20
|
||||||
|
70 44 92 59 34
|
||||||
|
26 16 11 81 46
|
||||||
|
|
||||||
|
10 31 95 17 44
|
||||||
|
76 67 19 69 33
|
||||||
|
36 70 25 71 99
|
||||||
|
56 42 53 46 40
|
||||||
|
90 85 81 6 26
|
||||||
|
|
||||||
|
17 32 74 57 64
|
||||||
|
37 82 92 54 59
|
||||||
|
56 87 41 68 73
|
||||||
|
44 98 58 95 53
|
||||||
|
47 29 71 52 31
|
||||||
|
|
||||||
|
19 58 84 14 91
|
||||||
|
75 89 18 67 3
|
||||||
|
11 5 2 24 37
|
||||||
|
62 35 48 56 81
|
||||||
|
54 77 16 70 45
|
||||||
|
|
||||||
|
7 20 41 87 74
|
||||||
|
17 47 45 96 49
|
||||||
|
4 33 89 31 77
|
||||||
|
79 42 52 29 85
|
||||||
|
88 27 63 11 75
|
||||||
|
|
||||||
|
61 87 90 15 17
|
||||||
|
22 82 28 21 93
|
||||||
|
65 98 12 23 24
|
||||||
|
73 70 42 1 94
|
||||||
|
83 79 5 18 55
|
||||||
|
|
||||||
|
78 67 22 88 18
|
||||||
|
2 43 14 56 92
|
||||||
|
61 32 87 20 8
|
||||||
|
28 11 7 12 70
|
||||||
|
21 72 36 74 77
|
||||||
|
|
||||||
|
27 6 97 66 7
|
||||||
|
30 67 12 70 40
|
||||||
|
18 61 78 36 23
|
||||||
|
44 24 85 74 82
|
||||||
|
55 42 51 90 34
|
||||||
|
|
||||||
|
98 9 39 42 44
|
||||||
|
50 54 43 66 57
|
||||||
|
85 58 91 13 11
|
||||||
|
67 5 23 59 70
|
||||||
|
45 41 87 29 20
|
||||||
|
|
||||||
|
97 57 48 42 73
|
||||||
|
37 29 50 49 83
|
||||||
|
55 38 69 13 44
|
||||||
|
52 14 54 94 56
|
||||||
|
24 77 16 39 66
|
||||||
|
|
||||||
|
31 61 44 38 80
|
||||||
|
11 3 0 56 8
|
||||||
|
94 81 1 25 19
|
||||||
|
71 23 36 66 41
|
||||||
|
70 35 77 79 46
|
||||||
|
|
||||||
|
17 96 13 25 48
|
||||||
|
65 28 41 24 81
|
||||||
|
39 87 74 42 5
|
||||||
|
36 35 21 60 40
|
||||||
|
3 83 11 1 34
|
||||||
|
|
||||||
|
50 52 84 38 57
|
||||||
|
15 20 26 3 72
|
||||||
|
48 85 4 88 63
|
||||||
|
39 34 32 42 7
|
||||||
|
86 77 71 94 23
|
||||||
|
|
||||||
|
28 60 13 25 0
|
||||||
|
22 74 20 75 30
|
||||||
|
97 5 21 2 73
|
||||||
|
7 44 14 77 16
|
||||||
|
43 68 76 24 1
|
||||||
|
|
||||||
|
99 85 4 62 67
|
||||||
|
46 86 43 45 77
|
||||||
|
42 21 81 47 57
|
||||||
|
71 35 23 10 29
|
||||||
|
58 60 79 61 48
|
||||||
|
|
||||||
|
33 10 7 61 17
|
||||||
|
97 91 70 75 48
|
||||||
|
81 80 78 34 36
|
||||||
|
26 55 73 77 14
|
||||||
|
85 84 62 9 16
|
||||||
|
|
||||||
|
17 41 3 82 86
|
||||||
|
58 0 51 79 29
|
||||||
|
60 70 61 95 46
|
||||||
|
98 85 1 72 93
|
||||||
|
4 42 89 88 84
|
||||||
|
|
||||||
|
95 16 26 32 29
|
||||||
|
27 37 51 23 55
|
||||||
|
36 10 50 70 57
|
||||||
|
60 79 96 40 9
|
||||||
|
3 43 74 94 31
|
||||||
|
|
||||||
|
15 56 51 72 62
|
||||||
|
8 63 23 90 67
|
||||||
|
93 85 28 70 82
|
||||||
|
33 65 89 4 64
|
||||||
|
19 58 37 88 75
|
||||||
|
|
||||||
|
34 71 60 84 85
|
||||||
|
64 87 92 67 8
|
||||||
|
42 58 4 9 75
|
||||||
|
49 95 26 91 12
|
||||||
|
27 56 74 90 20
|
||||||
|
|
||||||
|
13 46 27 12 97
|
||||||
|
90 25 87 73 41
|
||||||
|
50 66 34 15 94
|
||||||
|
45 99 88 86 21
|
||||||
|
56 37 62 44 29
|
||||||
|
|
||||||
|
77 31 59 94 74
|
||||||
|
19 15 11 23 68
|
||||||
|
0 36 2 98 30
|
||||||
|
44 49 90 83 9
|
||||||
|
13 88 69 66 81
|
||||||
|
|
||||||
|
31 71 58 11 47
|
||||||
|
42 41 10 83 21
|
||||||
|
38 9 51 17 64
|
||||||
|
37 13 93 81 39
|
||||||
|
33 22 98 26 43
|
||||||
|
|
||||||
|
60 89 20 94 2
|
||||||
|
45 34 93 15 30
|
||||||
|
4 16 49 92 28
|
||||||
|
67 75 27 61 70
|
||||||
|
25 84 55 91 88
|
||||||
|
|
||||||
|
85 22 41 43 0
|
||||||
|
21 77 12 64 34
|
||||||
|
30 39 97 36 72
|
||||||
|
56 8 65 82 84
|
||||||
|
76 3 4 17 49
|
||||||
|
|
||||||
|
16 61 63 41 47
|
||||||
|
48 46 37 70 87
|
||||||
|
57 31 36 83 1
|
||||||
|
71 3 93 24 80
|
||||||
|
51 78 91 17 86
|
||||||
|
|
||||||
|
87 72 70 97 58
|
||||||
|
54 16 1 43 46
|
||||||
|
49 28 59 38 51
|
||||||
|
24 15 10 84 94
|
||||||
|
76 86 55 83 26
|
||||||
|
|
||||||
|
93 10 5 1 92
|
||||||
|
99 6 45 79 76
|
||||||
|
74 87 47 25 24
|
||||||
|
50 43 4 21 67
|
||||||
|
81 39 49 12 86
|
||||||
|
|
||||||
|
49 35 22 27 37
|
||||||
|
90 80 68 52 59
|
||||||
|
78 53 23 65 46
|
||||||
|
30 61 75 97 31
|
||||||
|
1 76 66 26 48
|
||||||
|
|
||||||
|
37 11 88 20 99
|
||||||
|
45 96 95 81 39
|
||||||
|
60 55 80 58 53
|
||||||
|
6 23 8 1 46
|
||||||
|
98 89 16 73 78
|
||||||
|
|
||||||
|
0 58 88 69 66
|
||||||
|
82 9 31 97 55
|
||||||
|
22 37 90 79 14
|
||||||
|
44 45 49 43 60
|
||||||
|
93 62 36 57 30
|
||||||
|
|
||||||
|
1 34 89 90 46
|
||||||
|
81 26 5 6 14
|
||||||
|
75 74 62 55 37
|
||||||
|
96 58 78 93 73
|
||||||
|
35 40 13 95 45
|
||||||
|
|
||||||
|
22 57 46 99 42
|
||||||
|
65 39 38 7 81
|
||||||
|
4 1 76 59 8
|
||||||
|
84 60 37 55 40
|
||||||
|
49 31 5 80 30
|
||||||
|
|
||||||
|
29 4 96 50 24
|
||||||
|
61 77 70 88 93
|
||||||
|
12 64 52 25 90
|
||||||
|
67 34 59 95 16
|
||||||
|
79 21 82 6 63
|
||||||
|
|
||||||
|
26 41 52 91 57
|
||||||
|
92 95 33 1 62
|
||||||
|
45 31 87 29 59
|
||||||
|
44 86 99 81 5
|
||||||
|
36 20 58 73 30
|
||||||
|
|
||||||
|
55 96 28 26 17
|
||||||
|
62 51 64 43 49
|
||||||
|
37 41 36 75 42
|
||||||
|
11 94 87 27 63
|
||||||
|
35 23 21 29 4
|
||||||
|
|
||||||
|
99 54 74 83 92
|
||||||
|
27 53 15 8 85
|
||||||
|
94 36 63 29 91
|
||||||
|
58 10 45 38 79
|
||||||
|
9 95 23 98 33
|
||||||
|
|
||||||
|
52 14 99 30 50
|
||||||
|
29 81 41 28 15
|
||||||
|
43 51 61 56 62
|
||||||
|
68 67 93 45 13
|
||||||
|
23 6 70 8 7
|
||||||
|
|
||||||
|
73 78 47 2 7
|
||||||
|
45 16 46 65 21
|
||||||
|
60 54 43 12 1
|
||||||
|
20 23 42 56 81
|
||||||
|
89 80 52 26 32
|
||||||
|
|
||||||
|
79 5 10 11 7
|
||||||
|
87 36 2 70 16
|
||||||
|
99 44 49 43 19
|
||||||
|
46 25 1 18 78
|
||||||
|
55 76 3 73 15
|
||||||
|
|
||||||
|
18 49 71 59 90
|
||||||
|
97 37 23 68 62
|
||||||
|
48 8 14 81 26
|
||||||
|
88 4 22 76 12
|
||||||
|
60 99 64 17 46
|
||||||
|
|
||||||
|
99 25 79 42 33
|
||||||
|
5 28 38 15 11
|
||||||
|
8 78 51 40 65
|
||||||
|
47 0 12 48 67
|
||||||
|
14 98 53 43 86
|
||||||
|
|
||||||
|
74 46 42 86 44
|
||||||
|
83 96 61 38 70
|
||||||
|
97 7 49 9 22
|
||||||
|
65 34 66 90 51
|
||||||
|
0 36 13 85 53
|
||||||
|
|
||||||
|
43 21 64 86 20
|
||||||
|
8 55 85 48 15
|
||||||
|
58 49 87 29 35
|
||||||
|
74 4 37 12 99
|
||||||
|
98 69 75 39 71
|
||||||
|
|
||||||
|
58 65 63 41 87
|
||||||
|
19 49 91 34 37
|
||||||
|
95 10 55 94 82
|
||||||
|
78 71 66 60 96
|
||||||
|
27 11 29 48 72
|
||||||
|
|
||||||
|
9 78 51 18 93
|
||||||
|
71 55 0 5 37
|
||||||
|
24 98 2 70 92
|
||||||
|
85 15 46 91 99
|
||||||
|
60 68 41 86 96
|
197
2021/day04/main.go
Normal file
197
2021/day04/main.go
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
inp := h.StdinToStringSlice()
|
||||||
|
boards := buildBoards(inp[1:])
|
||||||
|
draws := parseDraws(inp[0])
|
||||||
|
//part1(boards, draws)
|
||||||
|
part2(boards, draws)
|
||||||
|
}
|
||||||
|
|
||||||
|
func part1(boards []Board, draws []int) {
|
||||||
|
var winners []Board
|
||||||
|
for i := range draws {
|
||||||
|
for b := range boards {
|
||||||
|
if boards[b].Mark(draws[i]) {
|
||||||
|
winners = append(winners, boards[b])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(winners) > 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for w := range winners {
|
||||||
|
fmt.Println("# Part 1")
|
||||||
|
fmt.Println(winners[w])
|
||||||
|
fmt.Println(winners[w].Score())
|
||||||
|
fmt.Println()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func part2(boards []Board, draws []int) {
|
||||||
|
var winners []Board
|
||||||
|
for i := range draws {
|
||||||
|
for b := range boards {
|
||||||
|
if boards[b].Mark(draws[i]) {
|
||||||
|
winners = append(winners, boards[b])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Remove all winners from boards
|
||||||
|
for i := range winners {
|
||||||
|
for b := range boards {
|
||||||
|
if winners[i].String() == boards[b].String() {
|
||||||
|
boards = append(boards[:b], boards[b+1:]...)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(boards) == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println("# Part 2")
|
||||||
|
fmt.Println("Last Winner")
|
||||||
|
fmt.Println(winners[len(winners)-1])
|
||||||
|
fmt.Println(winners[len(winners)-1].Score())
|
||||||
|
fmt.Println()
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseDraws(inp string) []int {
|
||||||
|
var ret []int
|
||||||
|
pts := strings.Split(inp, ",")
|
||||||
|
for i := range pts {
|
||||||
|
ret = append(ret, h.Atoi(pts[i]))
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
type Spot struct {
|
||||||
|
value int
|
||||||
|
marked bool
|
||||||
|
}
|
||||||
|
|
||||||
|
type Board struct {
|
||||||
|
spots map[h.Coordinate]Spot
|
||||||
|
draws []int
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewBoard(inp []string) Board {
|
||||||
|
b := Board{
|
||||||
|
spots: make(map[h.Coordinate]Spot),
|
||||||
|
}
|
||||||
|
for y := range inp {
|
||||||
|
row := strings.Fields(strings.TrimSpace(inp[y]))
|
||||||
|
for x := range row {
|
||||||
|
v := h.Atoi(row[x])
|
||||||
|
b.spots[h.Coordinate{X: x, Y: y}] = Spot{value: v}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildBoards(inp []string) []Board {
|
||||||
|
var boards []Board
|
||||||
|
var boardStr []string
|
||||||
|
for i := range inp {
|
||||||
|
if inp[i] == "" {
|
||||||
|
// start/end of a board
|
||||||
|
if len(boardStr) == 5 {
|
||||||
|
boards = append(boards, NewBoard(boardStr))
|
||||||
|
}
|
||||||
|
boardStr = []string{}
|
||||||
|
} else {
|
||||||
|
boardStr = append(boardStr, inp[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(boardStr) == 5 {
|
||||||
|
boards = append(boards, NewBoard(boardStr))
|
||||||
|
}
|
||||||
|
|
||||||
|
return boards
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mark adds a number to the draws and returns whether this board has won
|
||||||
|
func (b *Board) Mark(v int) bool {
|
||||||
|
b.draws = append(b.draws, v)
|
||||||
|
for k := range b.spots {
|
||||||
|
s := b.spots[k]
|
||||||
|
if b.spots[k].value == v {
|
||||||
|
s.marked = true
|
||||||
|
b.spots[k] = s
|
||||||
|
return b.Won()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return b.Won()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *Board) Won() bool {
|
||||||
|
for y := 0; y < 5; y++ {
|
||||||
|
if b.CheckRowForWin(y) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for x := 0; x < 5; x++ {
|
||||||
|
if b.CheckColForWin(x) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *Board) CheckRowForWin(y int) bool {
|
||||||
|
for x := 0; x < 5; x++ {
|
||||||
|
if b.spots[c(x, y)].marked == false {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *Board) CheckColForWin(x int) bool {
|
||||||
|
for y := 0; y < 5; y++ {
|
||||||
|
if b.spots[c(x, y)].marked == false {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *Board) Score() int {
|
||||||
|
var unmarked int
|
||||||
|
for y := 0; y < 5; y++ {
|
||||||
|
for x := 0; x < 5; x++ {
|
||||||
|
if b.spots[c(x, y)].marked == false {
|
||||||
|
unmarked += b.spots[c(x, y)].value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return unmarked * b.draws[len(b.draws)-1]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b Board) String() string {
|
||||||
|
var ret string
|
||||||
|
for y := 0; y < 5; y++ {
|
||||||
|
for x := 0; x < 5; x++ {
|
||||||
|
c := c(x, y)
|
||||||
|
marked := " "
|
||||||
|
if b.spots[c].marked {
|
||||||
|
marked = "X"
|
||||||
|
}
|
||||||
|
ret = fmt.Sprintf("%s%s: %2d[%v] ", ret, c, b.spots[c].value, marked)
|
||||||
|
}
|
||||||
|
ret = ret + "\n"
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
func c(x, y int) h.Coordinate {
|
||||||
|
return h.Coordinate{X: x, Y: y}
|
||||||
|
}
|
19
2021/day04/testinput
Normal file
19
2021/day04/testinput
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
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
|
500
2021/day05/input
Normal file
500
2021/day05/input
Normal file
@ -0,0 +1,500 @@
|
|||||||
|
644,38 -> 644,265
|
||||||
|
941,468 -> 941,89
|
||||||
|
807,552 -> 618,363
|
||||||
|
896,510 -> 896,744
|
||||||
|
227,909 -> 227,745
|
||||||
|
24,66 -> 946,988
|
||||||
|
563,529 -> 563,270
|
||||||
|
894,707 -> 359,172
|
||||||
|
146,253 -> 146,569
|
||||||
|
544,683 -> 140,683
|
||||||
|
755,612 -> 755,463
|
||||||
|
394,320 -> 891,320
|
||||||
|
68,616 -> 68,628
|
||||||
|
801,770 -> 801,942
|
||||||
|
650,290 -> 580,360
|
||||||
|
376,18 -> 181,213
|
||||||
|
285,391 -> 805,911
|
||||||
|
57,153 -> 501,153
|
||||||
|
686,301 -> 686,316
|
||||||
|
81,971 -> 683,369
|
||||||
|
75,456 -> 75,355
|
||||||
|
769,59 -> 769,81
|
||||||
|
49,958 -> 49,718
|
||||||
|
492,754 -> 492,256
|
||||||
|
606,133 -> 391,133
|
||||||
|
134,683 -> 134,656
|
||||||
|
195,463 -> 658,926
|
||||||
|
982,498 -> 982,927
|
||||||
|
841,122 -> 889,74
|
||||||
|
968,891 -> 968,189
|
||||||
|
104,941 -> 104,868
|
||||||
|
801,450 -> 272,979
|
||||||
|
212,749 -> 212,366
|
||||||
|
880,928 -> 880,757
|
||||||
|
503,483 -> 283,263
|
||||||
|
792,924 -> 792,540
|
||||||
|
58,87 -> 905,934
|
||||||
|
275,661 -> 36,422
|
||||||
|
475,654 -> 466,645
|
||||||
|
34,946 -> 969,11
|
||||||
|
725,664 -> 725,150
|
||||||
|
837,680 -> 837,952
|
||||||
|
109,987 -> 644,452
|
||||||
|
860,984 -> 860,691
|
||||||
|
672,800 -> 107,235
|
||||||
|
216,888 -> 301,888
|
||||||
|
399,676 -> 718,357
|
||||||
|
957,544 -> 784,544
|
||||||
|
677,743 -> 633,743
|
||||||
|
491,866 -> 77,452
|
||||||
|
967,949 -> 45,27
|
||||||
|
659,699 -> 659,27
|
||||||
|
987,116 -> 696,116
|
||||||
|
465,847 -> 309,847
|
||||||
|
353,19 -> 353,627
|
||||||
|
265,713 -> 592,386
|
||||||
|
541,765 -> 461,765
|
||||||
|
21,409 -> 895,409
|
||||||
|
950,149 -> 766,149
|
||||||
|
856,889 -> 895,889
|
||||||
|
335,962 -> 485,812
|
||||||
|
425,774 -> 400,749
|
||||||
|
71,932 -> 989,14
|
||||||
|
484,974 -> 44,974
|
||||||
|
86,797 -> 86,470
|
||||||
|
876,962 -> 876,384
|
||||||
|
45,631 -> 169,507
|
||||||
|
161,789 -> 523,427
|
||||||
|
791,640 -> 791,581
|
||||||
|
415,170 -> 835,590
|
||||||
|
299,275 -> 988,964
|
||||||
|
105,233 -> 231,359
|
||||||
|
202,226 -> 202,958
|
||||||
|
814,717 -> 618,521
|
||||||
|
185,442 -> 559,68
|
||||||
|
26,149 -> 665,149
|
||||||
|
673,369 -> 247,795
|
||||||
|
171,963 -> 171,46
|
||||||
|
689,801 -> 94,206
|
||||||
|
619,243 -> 619,637
|
||||||
|
426,245 -> 660,11
|
||||||
|
47,503 -> 47,179
|
||||||
|
341,363 -> 487,217
|
||||||
|
371,774 -> 371,871
|
||||||
|
781,794 -> 781,180
|
||||||
|
391,632 -> 92,632
|
||||||
|
517,150 -> 517,715
|
||||||
|
903,10 -> 18,895
|
||||||
|
34,500 -> 426,500
|
||||||
|
82,955 -> 886,151
|
||||||
|
142,297 -> 142,527
|
||||||
|
60,965 -> 36,965
|
||||||
|
250,807 -> 372,685
|
||||||
|
227,393 -> 610,776
|
||||||
|
269,893 -> 269,556
|
||||||
|
969,223 -> 611,223
|
||||||
|
255,92 -> 194,92
|
||||||
|
220,233 -> 958,233
|
||||||
|
144,209 -> 144,979
|
||||||
|
48,413 -> 48,195
|
||||||
|
209,151 -> 648,590
|
||||||
|
867,648 -> 871,644
|
||||||
|
499,555 -> 807,555
|
||||||
|
571,729 -> 865,435
|
||||||
|
683,151 -> 485,151
|
||||||
|
803,26 -> 803,691
|
||||||
|
533,921 -> 300,688
|
||||||
|
625,695 -> 483,553
|
||||||
|
719,370 -> 139,950
|
||||||
|
981,17 -> 16,982
|
||||||
|
367,617 -> 367,636
|
||||||
|
249,644 -> 835,644
|
||||||
|
260,825 -> 260,519
|
||||||
|
275,144 -> 275,315
|
||||||
|
767,314 -> 962,119
|
||||||
|
76,625 -> 76,166
|
||||||
|
403,680 -> 313,680
|
||||||
|
977,21 -> 16,982
|
||||||
|
578,753 -> 271,753
|
||||||
|
212,358 -> 477,623
|
||||||
|
596,220 -> 868,220
|
||||||
|
67,797 -> 935,797
|
||||||
|
181,107 -> 181,379
|
||||||
|
741,332 -> 419,10
|
||||||
|
732,827 -> 732,989
|
||||||
|
835,111 -> 436,510
|
||||||
|
480,328 -> 480,682
|
||||||
|
327,673 -> 327,70
|
||||||
|
911,547 -> 833,625
|
||||||
|
944,509 -> 874,579
|
||||||
|
169,340 -> 731,902
|
||||||
|
156,842 -> 825,173
|
||||||
|
976,40 -> 51,965
|
||||||
|
199,416 -> 916,416
|
||||||
|
51,970 -> 792,229
|
||||||
|
14,577 -> 501,577
|
||||||
|
246,464 -> 246,289
|
||||||
|
641,464 -> 100,464
|
||||||
|
984,11 -> 43,952
|
||||||
|
548,36 -> 156,428
|
||||||
|
519,799 -> 519,43
|
||||||
|
332,364 -> 332,774
|
||||||
|
85,123 -> 85,753
|
||||||
|
778,12 -> 40,750
|
||||||
|
507,56 -> 507,840
|
||||||
|
973,632 -> 670,632
|
||||||
|
895,928 -> 37,70
|
||||||
|
661,784 -> 661,718
|
||||||
|
114,25 -> 938,849
|
||||||
|
428,752 -> 428,543
|
||||||
|
357,270 -> 957,870
|
||||||
|
27,70 -> 899,942
|
||||||
|
85,780 -> 747,780
|
||||||
|
717,565 -> 951,565
|
||||||
|
191,748 -> 651,748
|
||||||
|
679,301 -> 679,417
|
||||||
|
150,266 -> 150,184
|
||||||
|
774,964 -> 64,254
|
||||||
|
34,248 -> 34,279
|
||||||
|
782,610 -> 802,610
|
||||||
|
109,146 -> 822,859
|
||||||
|
825,848 -> 825,666
|
||||||
|
251,718 -> 615,718
|
||||||
|
912,722 -> 289,722
|
||||||
|
729,579 -> 729,889
|
||||||
|
214,756 -> 214,716
|
||||||
|
58,497 -> 58,927
|
||||||
|
62,55 -> 742,55
|
||||||
|
110,429 -> 110,154
|
||||||
|
55,794 -> 638,794
|
||||||
|
182,96 -> 676,96
|
||||||
|
632,334 -> 202,764
|
||||||
|
36,541 -> 36,397
|
||||||
|
191,819 -> 191,277
|
||||||
|
971,491 -> 839,491
|
||||||
|
849,561 -> 538,250
|
||||||
|
176,523 -> 10,689
|
||||||
|
162,638 -> 717,638
|
||||||
|
132,843 -> 646,329
|
||||||
|
873,67 -> 873,389
|
||||||
|
167,631 -> 167,473
|
||||||
|
49,337 -> 465,337
|
||||||
|
550,429 -> 438,429
|
||||||
|
305,720 -> 476,720
|
||||||
|
547,636 -> 547,902
|
||||||
|
21,627 -> 49,627
|
||||||
|
286,70 -> 989,70
|
||||||
|
87,930 -> 896,121
|
||||||
|
659,916 -> 200,916
|
||||||
|
234,589 -> 234,308
|
||||||
|
530,962 -> 90,962
|
||||||
|
366,478 -> 676,788
|
||||||
|
284,520 -> 284,546
|
||||||
|
580,74 -> 146,508
|
||||||
|
561,977 -> 561,237
|
||||||
|
85,150 -> 804,869
|
||||||
|
740,850 -> 159,269
|
||||||
|
458,705 -> 458,639
|
||||||
|
969,563 -> 381,563
|
||||||
|
139,439 -> 139,263
|
||||||
|
135,971 -> 908,198
|
||||||
|
440,632 -> 102,632
|
||||||
|
446,549 -> 446,734
|
||||||
|
24,49 -> 212,237
|
||||||
|
692,882 -> 527,882
|
||||||
|
156,895 -> 156,239
|
||||||
|
359,246 -> 359,603
|
||||||
|
12,349 -> 604,941
|
||||||
|
375,161 -> 732,161
|
||||||
|
674,287 -> 322,287
|
||||||
|
902,957 -> 328,383
|
||||||
|
352,185 -> 352,766
|
||||||
|
222,205 -> 222,419
|
||||||
|
769,815 -> 769,739
|
||||||
|
83,147 -> 880,147
|
||||||
|
136,148 -> 136,279
|
||||||
|
807,241 -> 439,241
|
||||||
|
464,240 -> 478,254
|
||||||
|
37,839 -> 646,839
|
||||||
|
351,316 -> 639,604
|
||||||
|
449,492 -> 449,125
|
||||||
|
69,892 -> 933,28
|
||||||
|
565,161 -> 598,161
|
||||||
|
147,802 -> 905,44
|
||||||
|
809,861 -> 38,90
|
||||||
|
34,80 -> 34,538
|
||||||
|
896,405 -> 582,405
|
||||||
|
474,201 -> 893,201
|
||||||
|
289,64 -> 975,750
|
||||||
|
378,785 -> 375,782
|
||||||
|
709,472 -> 357,472
|
||||||
|
17,14 -> 987,984
|
||||||
|
625,46 -> 647,46
|
||||||
|
20,84 -> 914,978
|
||||||
|
364,811 -> 397,811
|
||||||
|
395,726 -> 628,726
|
||||||
|
831,89 -> 593,89
|
||||||
|
370,562 -> 827,562
|
||||||
|
278,371 -> 609,40
|
||||||
|
904,529 -> 391,16
|
||||||
|
232,829 -> 232,63
|
||||||
|
927,121 -> 194,854
|
||||||
|
547,280 -> 547,895
|
||||||
|
292,904 -> 292,897
|
||||||
|
99,525 -> 99,868
|
||||||
|
371,44 -> 643,44
|
||||||
|
942,74 -> 986,118
|
||||||
|
708,179 -> 110,179
|
||||||
|
485,637 -> 713,637
|
||||||
|
477,512 -> 102,137
|
||||||
|
636,657 -> 727,657
|
||||||
|
686,564 -> 256,564
|
||||||
|
636,169 -> 377,169
|
||||||
|
627,943 -> 627,703
|
||||||
|
987,795 -> 987,758
|
||||||
|
364,827 -> 642,827
|
||||||
|
613,694 -> 864,945
|
||||||
|
910,521 -> 777,654
|
||||||
|
119,394 -> 22,394
|
||||||
|
594,439 -> 515,360
|
||||||
|
177,11 -> 177,73
|
||||||
|
456,628 -> 456,467
|
||||||
|
246,214 -> 594,562
|
||||||
|
47,790 -> 47,491
|
||||||
|
788,21 -> 788,343
|
||||||
|
136,847 -> 136,543
|
||||||
|
958,302 -> 733,302
|
||||||
|
50,981 -> 923,108
|
||||||
|
298,179 -> 298,921
|
||||||
|
962,644 -> 93,644
|
||||||
|
988,671 -> 988,258
|
||||||
|
646,140 -> 646,852
|
||||||
|
721,264 -> 721,563
|
||||||
|
972,407 -> 684,119
|
||||||
|
245,422 -> 401,422
|
||||||
|
16,494 -> 16,16
|
||||||
|
564,72 -> 361,72
|
||||||
|
436,390 -> 166,120
|
||||||
|
511,571 -> 241,571
|
||||||
|
259,215 -> 259,975
|
||||||
|
648,841 -> 898,841
|
||||||
|
918,881 -> 438,401
|
||||||
|
458,561 -> 752,855
|
||||||
|
791,192 -> 319,192
|
||||||
|
383,929 -> 217,929
|
||||||
|
733,26 -> 527,26
|
||||||
|
620,160 -> 620,734
|
||||||
|
818,181 -> 61,181
|
||||||
|
39,21 -> 927,909
|
||||||
|
952,208 -> 952,749
|
||||||
|
194,55 -> 304,55
|
||||||
|
519,673 -> 519,875
|
||||||
|
730,919 -> 733,919
|
||||||
|
963,269 -> 933,299
|
||||||
|
707,112 -> 178,112
|
||||||
|
924,349 -> 264,349
|
||||||
|
910,94 -> 96,94
|
||||||
|
747,289 -> 89,947
|
||||||
|
164,956 -> 164,655
|
||||||
|
264,300 -> 753,789
|
||||||
|
207,672 -> 207,488
|
||||||
|
243,838 -> 812,269
|
||||||
|
455,320 -> 425,320
|
||||||
|
59,964 -> 59,841
|
||||||
|
350,373 -> 526,549
|
||||||
|
604,683 -> 604,83
|
||||||
|
537,281 -> 537,933
|
||||||
|
737,634 -> 737,28
|
||||||
|
92,909 -> 725,276
|
||||||
|
859,335 -> 859,487
|
||||||
|
605,495 -> 371,495
|
||||||
|
783,155 -> 783,930
|
||||||
|
388,591 -> 388,133
|
||||||
|
374,634 -> 472,634
|
||||||
|
963,914 -> 64,15
|
||||||
|
57,435 -> 140,435
|
||||||
|
759,619 -> 105,619
|
||||||
|
326,501 -> 326,821
|
||||||
|
942,136 -> 414,136
|
||||||
|
490,376 -> 490,260
|
||||||
|
377,59 -> 377,773
|
||||||
|
894,169 -> 99,964
|
||||||
|
350,511 -> 726,511
|
||||||
|
787,728 -> 787,750
|
||||||
|
688,11 -> 688,68
|
||||||
|
107,514 -> 183,514
|
||||||
|
861,12 -> 22,851
|
||||||
|
149,49 -> 149,713
|
||||||
|
826,737 -> 890,737
|
||||||
|
299,307 -> 299,549
|
||||||
|
251,648 -> 862,37
|
||||||
|
898,85 -> 412,85
|
||||||
|
936,168 -> 845,168
|
||||||
|
278,677 -> 302,677
|
||||||
|
493,878 -> 493,133
|
||||||
|
539,205 -> 539,522
|
||||||
|
412,495 -> 412,929
|
||||||
|
334,605 -> 334,817
|
||||||
|
68,462 -> 462,856
|
||||||
|
234,134 -> 234,942
|
||||||
|
293,823 -> 678,823
|
||||||
|
852,874 -> 158,874
|
||||||
|
859,612 -> 435,612
|
||||||
|
10,876 -> 613,273
|
||||||
|
370,13 -> 118,13
|
||||||
|
616,774 -> 14,172
|
||||||
|
193,543 -> 81,543
|
||||||
|
784,179 -> 14,949
|
||||||
|
324,533 -> 153,533
|
||||||
|
15,976 -> 976,15
|
||||||
|
943,52 -> 20,975
|
||||||
|
100,34 -> 671,605
|
||||||
|
140,552 -> 140,27
|
||||||
|
448,497 -> 186,497
|
||||||
|
734,355 -> 734,933
|
||||||
|
544,131 -> 259,131
|
||||||
|
193,84 -> 663,84
|
||||||
|
190,949 -> 833,306
|
||||||
|
430,34 -> 328,34
|
||||||
|
21,46 -> 483,508
|
||||||
|
621,202 -> 98,202
|
||||||
|
196,874 -> 889,181
|
||||||
|
106,217 -> 850,961
|
||||||
|
701,891 -> 488,678
|
||||||
|
21,597 -> 894,597
|
||||||
|
249,21 -> 249,614
|
||||||
|
887,808 -> 887,948
|
||||||
|
255,711 -> 913,53
|
||||||
|
173,447 -> 173,78
|
||||||
|
956,224 -> 956,747
|
||||||
|
513,882 -> 48,417
|
||||||
|
772,591 -> 930,591
|
||||||
|
976,98 -> 86,988
|
||||||
|
264,67 -> 264,931
|
||||||
|
987,982 -> 48,43
|
||||||
|
494,514 -> 494,416
|
||||||
|
867,785 -> 556,474
|
||||||
|
350,902 -> 257,902
|
||||||
|
978,977 -> 978,735
|
||||||
|
312,240 -> 371,240
|
||||||
|
890,112 -> 890,662
|
||||||
|
753,327 -> 427,653
|
||||||
|
83,888 -> 927,44
|
||||||
|
142,480 -> 12,480
|
||||||
|
965,39 -> 85,919
|
||||||
|
158,926 -> 158,801
|
||||||
|
439,22 -> 439,860
|
||||||
|
10,26 -> 765,781
|
||||||
|
775,838 -> 775,732
|
||||||
|
871,607 -> 871,288
|
||||||
|
337,850 -> 337,533
|
||||||
|
89,581 -> 89,582
|
||||||
|
524,977 -> 524,88
|
||||||
|
473,283 -> 639,449
|
||||||
|
23,324 -> 23,372
|
||||||
|
671,486 -> 278,879
|
||||||
|
266,98 -> 989,98
|
||||||
|
51,947 -> 634,947
|
||||||
|
47,18 -> 47,43
|
||||||
|
95,239 -> 609,753
|
||||||
|
953,34 -> 71,916
|
||||||
|
243,685 -> 243,427
|
||||||
|
642,537 -> 304,199
|
||||||
|
545,41 -> 914,41
|
||||||
|
112,860 -> 112,159
|
||||||
|
12,12 -> 989,989
|
||||||
|
622,907 -> 648,907
|
||||||
|
230,983 -> 230,941
|
||||||
|
111,868 -> 852,127
|
||||||
|
315,895 -> 799,411
|
||||||
|
771,533 -> 584,720
|
||||||
|
65,492 -> 657,492
|
||||||
|
820,315 -> 820,627
|
||||||
|
710,554 -> 829,554
|
||||||
|
100,967 -> 877,190
|
||||||
|
530,733 -> 530,202
|
||||||
|
880,28 -> 83,825
|
||||||
|
914,448 -> 494,28
|
||||||
|
886,344 -> 966,344
|
||||||
|
782,923 -> 857,848
|
||||||
|
597,632 -> 597,946
|
||||||
|
366,789 -> 366,96
|
||||||
|
568,834 -> 187,834
|
||||||
|
451,687 -> 224,687
|
||||||
|
123,12 -> 914,803
|
||||||
|
734,42 -> 526,42
|
||||||
|
844,116 -> 844,521
|
||||||
|
744,976 -> 744,792
|
||||||
|
337,837 -> 617,837
|
||||||
|
848,139 -> 848,571
|
||||||
|
853,264 -> 112,264
|
||||||
|
986,965 -> 92,71
|
||||||
|
888,892 -> 53,57
|
||||||
|
150,342 -> 150,516
|
||||||
|
457,264 -> 796,264
|
||||||
|
544,595 -> 544,406
|
||||||
|
243,118 -> 482,357
|
||||||
|
138,804 -> 138,646
|
||||||
|
99,80 -> 99,34
|
||||||
|
442,883 -> 442,165
|
||||||
|
428,72 -> 428,826
|
||||||
|
450,815 -> 901,364
|
||||||
|
852,516 -> 852,384
|
||||||
|
13,969 -> 972,10
|
||||||
|
921,50 -> 32,939
|
||||||
|
969,470 -> 969,539
|
||||||
|
691,238 -> 763,238
|
||||||
|
171,733 -> 823,81
|
||||||
|
722,963 -> 21,262
|
||||||
|
849,203 -> 849,151
|
||||||
|
12,99 -> 884,971
|
||||||
|
903,240 -> 148,240
|
||||||
|
633,140 -> 633,202
|
||||||
|
194,393 -> 747,393
|
||||||
|
748,43 -> 126,665
|
||||||
|
182,155 -> 182,298
|
||||||
|
668,814 -> 668,306
|
||||||
|
619,384 -> 255,384
|
||||||
|
166,341 -> 795,970
|
||||||
|
898,870 -> 57,29
|
||||||
|
976,148 -> 976,244
|
||||||
|
386,525 -> 662,249
|
||||||
|
719,67 -> 131,655
|
||||||
|
419,847 -> 188,847
|
||||||
|
953,823 -> 743,823
|
||||||
|
307,299 -> 307,78
|
||||||
|
948,253 -> 756,253
|
||||||
|
926,938 -> 46,58
|
||||||
|
982,618 -> 652,618
|
||||||
|
539,742 -> 539,177
|
||||||
|
531,974 -> 531,781
|
||||||
|
880,922 -> 283,325
|
||||||
|
707,257 -> 707,673
|
||||||
|
327,308 -> 930,911
|
||||||
|
526,170 -> 980,624
|
||||||
|
445,653 -> 445,986
|
||||||
|
842,737 -> 754,737
|
||||||
|
847,982 -> 16,151
|
||||||
|
137,426 -> 292,271
|
||||||
|
126,556 -> 50,556
|
||||||
|
168,766 -> 168,767
|
||||||
|
152,46 -> 363,46
|
||||||
|
50,381 -> 760,381
|
||||||
|
43,943 -> 43,374
|
||||||
|
45,964 -> 956,53
|
||||||
|
37,403 -> 576,403
|
||||||
|
130,317 -> 576,763
|
||||||
|
882,840 -> 179,137
|
||||||
|
572,608 -> 572,274
|
||||||
|
874,977 -> 32,135
|
||||||
|
794,56 -> 730,120
|
||||||
|
812,841 -> 812,440
|
||||||
|
111,66 -> 137,92
|
||||||
|
255,287 -> 255,787
|
||||||
|
121,137 -> 121,63
|
||||||
|
81,811 -> 81,586
|
||||||
|
303,365 -> 910,972
|
||||||
|
177,134 -> 962,919
|
||||||
|
405,41 -> 405,645
|
||||||
|
219,934 -> 441,934
|
203
2021/day05/main.go
Normal file
203
2021/day05/main.go
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||||
|
)
|
||||||
|
|
||||||
|
var minX, maxX, minY, maxY int
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
maxX = h.MIN_INT
|
||||||
|
minX = h.MAX_INT
|
||||||
|
maxY = h.MIN_INT
|
||||||
|
minY = h.MAX_INT
|
||||||
|
inp := h.StdinToStringSlice()
|
||||||
|
lines := parseLines(inp)
|
||||||
|
|
||||||
|
fmt.Println("# Part 1")
|
||||||
|
findDangerSpots(filterStraight(lines))
|
||||||
|
fmt.Println("# Part 2")
|
||||||
|
findDangerSpots(lines)
|
||||||
|
}
|
||||||
|
|
||||||
|
var ventMap map[h.Coordinate]int
|
||||||
|
|
||||||
|
var dangerSpots []h.Coordinate
|
||||||
|
|
||||||
|
func dingMap(c h.Coordinate) {
|
||||||
|
s := ventMap[c]
|
||||||
|
s++
|
||||||
|
if s == 2 {
|
||||||
|
dangerSpots = append(dangerSpots, c)
|
||||||
|
}
|
||||||
|
ventMap[c] = s
|
||||||
|
}
|
||||||
|
|
||||||
|
func findDangerSpots(lines []Line) {
|
||||||
|
ventMap = make(map[h.Coordinate]int)
|
||||||
|
for i := range lines {
|
||||||
|
updateMinMax(lines[i])
|
||||||
|
}
|
||||||
|
for _, l := range lines {
|
||||||
|
// Find all points on this line
|
||||||
|
// All lines are 0 or 45 deg, so slope should always be 0,1,-1,INF,-INF
|
||||||
|
if l.start.X == l.end.X { // INF, -INF: vertical
|
||||||
|
for y := l.lowestY(); y <= l.highestY(); y++ {
|
||||||
|
dingMap(h.Coordinate{X: l.start.X, Y: y})
|
||||||
|
}
|
||||||
|
} else if l.start.Y == l.end.Y { //0: horizontal
|
||||||
|
for x := l.start.X; x <= l.end.X; x++ {
|
||||||
|
dingMap(h.Coordinate{Y: l.start.Y, X: x})
|
||||||
|
}
|
||||||
|
} else { // 1 or -1
|
||||||
|
y := l.start.Y
|
||||||
|
x := l.start.X
|
||||||
|
dingMap(h.Coordinate{Y: y, X: x})
|
||||||
|
|
||||||
|
diffY := -1
|
||||||
|
if l.start.Y < l.end.Y {
|
||||||
|
diffY = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
for x != l.end.X && y != l.end.Y {
|
||||||
|
x += 1
|
||||||
|
y += diffY
|
||||||
|
dingMap(h.Coordinate{Y: y, X: x})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println("Danger Spots:", len(dangerSpots))
|
||||||
|
}
|
||||||
|
|
||||||
|
type Line struct {
|
||||||
|
start h.Coordinate
|
||||||
|
end h.Coordinate
|
||||||
|
|
||||||
|
stX float64
|
||||||
|
stY float64
|
||||||
|
edX float64
|
||||||
|
edY float64
|
||||||
|
|
||||||
|
slope float64
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Line) lowestY() int {
|
||||||
|
if l.start.Y < l.end.Y {
|
||||||
|
return l.start.Y
|
||||||
|
}
|
||||||
|
return l.end.Y
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Line) highestY() int {
|
||||||
|
if l.start.Y > l.end.Y {
|
||||||
|
return l.start.Y
|
||||||
|
}
|
||||||
|
return l.end.Y
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Line) intersects(c h.Coordinate) bool {
|
||||||
|
ptX := float64(c.X)
|
||||||
|
ptY := float64(c.Y)
|
||||||
|
if (c.X == l.start.X && c.Y == l.start.Y) || (c.X == l.end.X && c.Y == l.end.Y) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if c.X < l.start.X || c.X > l.end.X {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if (c.Y < l.start.Y && c.Y < l.end.Y) || (c.Y > l.start.Y && c.Y > l.end.Y) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
// Check if our slope is infinite
|
||||||
|
if l.start.X == l.end.X {
|
||||||
|
if l.start.Y < l.end.Y {
|
||||||
|
return c.X == l.start.X && c.Y >= l.start.Y && c.Y <= l.end.Y
|
||||||
|
} else {
|
||||||
|
return c.X == l.start.X && c.Y <= l.start.Y && c.Y >= l.end.Y
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return slope(ptX, ptY, l.stX, l.stY) == l.slope
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l Line) String() string {
|
||||||
|
return fmt.Sprintf("%d,%d -> %d,%d; [%f]", l.start.X, l.start.Y, l.end.X, l.end.Y, l.slope)
|
||||||
|
}
|
||||||
|
|
||||||
|
func LineFromString(str string) Line {
|
||||||
|
start := h.Coordinate{}
|
||||||
|
end := h.Coordinate{}
|
||||||
|
r := strings.NewReader(str)
|
||||||
|
_, err := fmt.Fscanf(r, "%d,%d -> %d,%d", &start.X, &start.Y, &end.X, &end.Y)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
var l Line
|
||||||
|
if start.X < end.X {
|
||||||
|
l = Line{
|
||||||
|
start: start,
|
||||||
|
end: end,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
l = Line{
|
||||||
|
start: end,
|
||||||
|
end: start,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
l.stX = float64(l.start.X)
|
||||||
|
l.stY = float64(l.start.Y)
|
||||||
|
l.edX = float64(l.end.X)
|
||||||
|
l.edY = float64(l.end.Y)
|
||||||
|
l.slope = slope(l.stX, l.stY, l.edX, l.edY)
|
||||||
|
return l
|
||||||
|
}
|
||||||
|
|
||||||
|
func updateMinMax(line Line) {
|
||||||
|
if line.start.X < minX {
|
||||||
|
minX = line.start.X
|
||||||
|
}
|
||||||
|
if line.start.X > maxX {
|
||||||
|
maxX = line.start.X
|
||||||
|
}
|
||||||
|
if line.end.X < minX {
|
||||||
|
minX = line.end.X
|
||||||
|
}
|
||||||
|
if line.end.X > maxX {
|
||||||
|
maxX = line.end.X
|
||||||
|
}
|
||||||
|
if line.start.Y < minY {
|
||||||
|
minY = line.start.Y
|
||||||
|
}
|
||||||
|
if line.start.Y > maxY {
|
||||||
|
maxY = line.start.Y
|
||||||
|
}
|
||||||
|
if line.end.Y < minY {
|
||||||
|
minY = line.end.Y
|
||||||
|
}
|
||||||
|
if line.end.Y > maxY {
|
||||||
|
maxY = line.end.Y
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseLines(inp []string) []Line {
|
||||||
|
var ret []Line
|
||||||
|
for i := range inp {
|
||||||
|
ret = append(ret, LineFromString(inp[i]))
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
func filterStraight(lines []Line) []Line {
|
||||||
|
var ret []Line
|
||||||
|
for i := range lines {
|
||||||
|
if lines[i].start.X == lines[i].end.X || lines[i].start.Y == lines[i].end.Y {
|
||||||
|
ret = append(ret, lines[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
func slope(x1, y1, x2, y2 float64) float64 {
|
||||||
|
return (y1 - y2) / (x1 - x2)
|
||||||
|
}
|
10
2021/day05/testinput
Normal file
10
2021/day05/testinput
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
0,9 -> 5,9
|
||||||
|
8,0 -> 0,8
|
||||||
|
9,4 -> 3,4
|
||||||
|
2,2 -> 2,1
|
||||||
|
7,0 -> 7,4
|
||||||
|
6,4 -> 2,0
|
||||||
|
0,9 -> 2,9
|
||||||
|
3,4 -> 1,4
|
||||||
|
0,0 -> 8,8
|
||||||
|
5,5 -> 8,2
|
Loading…
Reference in New Issue
Block a user