Merge branch 'master' of ssh://gitea.dvereb.com:1128/dvereb/Advent-of-Code

This commit is contained in:
David Vereb 2021-12-07 08:27:41 -05:00
commit e28632c743
10 changed files with 2076 additions and 0 deletions

BIN
2020/1/a.out Executable file

Binary file not shown.

200
2020/1/data Normal file
View File

@ -0,0 +1,200 @@
1778
1845
1813
1889
1939
1635
1443
796
1799
938
1488
1922
1909
1258
1659
1959
1557
1085
1379
1174
1782
1482
1702
1180
1992
1815
1802
215
1649
782
1847
1673
1823
1836
1447
1603
1767
1891
1964
1881
1637
1229
1994
1901
1583
1918
1415
1666
1155
1446
1315
1345
1948
1427
1242
1088
807
1747
1514
1351
1791
1612
1550
1926
1455
85
1594
1965
1884
1677
1960
1631
1585
1472
1263
1566
1998
1698
1968
1927
1378
1346
1710
1921
1827
1869
1187
1985
1323
1225
1474
1179
1580
1098
1737
1483
1665
1445
1979
1754
1854
1897
1405
1912
1614
1390
1773
1493
1333
1758
1867
1586
1347
1723
1285
394
1743
1252
320
1547
1804
1899
1526
1739
1533
1938
1081
1465
1920
1265
1470
1792
1118
1842
1204
1760
1663
893
1853
1244
1256
1428
1334
1967
1249
1752
1124
1725
1949
1340
1205
1584
548
1947
2002
1993
1931
1236
1154
1572
1650
1678
1944
1868
1129
1911
1106
1900
1240
1955
1219
1893
1459
1556
1173
1924
1568
1950
1303
1886
1365
1402
1711
1706
1671
1866
1403
1816
1717
1674
1487
1840
1951
1255
1786
1111
1280
1625
1478
1453

43
2020/1/main.cpp Normal file
View File

@ -0,0 +1,43 @@
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
int find2(std::vector<int> &numbers)
{
for(auto i = 0; i < numbers.size(); ++i)
for(auto j = i + 1; j < numbers.size(); ++j)
if(numbers[i] + numbers[j] == 2020)
return numbers[i] * numbers[j];
return 0;
}
int find3(std::vector<int> &numbers)
{
for(auto i = 0; i < numbers.size(); ++i)
for(auto j = i + 1; j < numbers.size(); ++j)
for(auto k = i + 1; k < numbers.size(); ++k)
if(numbers[i] + numbers[j] + numbers[k] == 2020)
return numbers[i] * numbers[j] * numbers[k];
return 0;
}
int main()
{
std::ifstream ifs("data");
if(!ifs.is_open())
{
std::cerr << "Couldn't open file." << std::endl;
return -1;
}
std::vector<int> numbers;
for(std::string line; std::getline(ifs, line); )
numbers.push_back(std::atoi(line.c_str()));
std::cout << find2(numbers) << std::endl;
std::cout << find3(numbers) << std::endl;
return 0;
}

2
2020/2/Makefile Normal file
View File

@ -0,0 +1,2 @@
a.out: main.cpp
clang++ -std=c++14 main.cpp -g -O0

BIN
2020/2/a.out Executable file

Binary file not shown.

1000
2020/2/data Normal file

File diff suppressed because it is too large Load Diff

72
2020/2/main.cpp Normal file
View File

@ -0,0 +1,72 @@
#include <algorithm>
#include <fstream>
#include <iostream>
#include <string>
// 6-7 w: wwhmzwtwwk
bool Valid1(const std::string &str)
{
int min, max;
char letter;
std::string password;
auto dash = str.find('-');
auto space = str.find(' ');
auto space_two = str.find(' ', space + 1);
min = std::atoi(str.substr(0, dash).c_str());
max = std::atoi(str.substr(dash + 1, space).c_str());
letter = str.at(space + 1);
password = str.substr(space_two + 1);
// std::cout << "min: " << min << std::endl
// << "max: " << max << std::endl
// << "letter: " << letter << std::endl
// << "pass: " << password << std::endl;
int total = std::count(password.begin(), password.end(), letter);
return (total >= min && total <= max);
}
bool Valid2(const std::string &str)
{
int min, max;
char letter;
std::string password;
auto dash = str.find('-');
auto space = str.find(' ');
auto space_two = str.find(' ', space + 1);
min = std::atoi(str.substr(0, dash).c_str());
max = std::atoi(str.substr(dash + 1, space).c_str());
letter = str.at(space + 1);
password = str.substr(space_two + 1);
bool a = password[min - 1] == letter;
bool b = password[max - 1] == letter;
return a != b;
}
int main()
{
std::ifstream ifs("data");
if(!ifs.is_open())
return -1;
int valid1 = 0;
int valid2 = 0;
for(std::string line; std::getline(ifs, line); )
{
if(Valid1(line))
++valid1;
if(Valid2(line))
++valid2;
}
std::cout << valid1 << " valid1 passwords." << std::endl;
std::cout << valid2 << " valid2 passwords." << std::endl;
return 0;
}

601
2021/4/data Normal file
View File

@ -0,0 +1,601 @@
42,32,13,22,91,2,88,85,53,87,37,33,76,98,89,19,69,9,62,21,38,49,54,81,0,26,79,36,57,18,4,40,31,80,24,64,77,97,70,6,73,23,20,47,45,51,74,25,95,96,58,92,94,11,39,63,65,99,48,83,29,34,44,75,55,17,14,56,8,82,59,52,46,90,5,41,60,67,16,1,15,61,71,66,72,30,28,3,43,27,78,10,86,7,50,35,84,12,93,68
90 8 2 34 41
11 67 74 71 62
47 42 44 1 17
21 55 12 91 6
60 69 75 92 56
49 29 60 45 31
94 51 73 33 67
21 92 53 95 96
2 55 52 8 87
4 36 76 83 42
23 66 50 84 58
62 98 81 76 57
24 2 56 79 6
55 0 16 64 38
12 67 5 97 60
46 64 5 39 62
16 82 13 77 52
18 26 44 0 61
25 7 43 42 50
11 85 30 28 76
51 28 70 65 78
62 88 30 36 96
80 87 4 1 24
63 22 41 79 34
18 15 47 26 67
48 68 92 67 36
54 50 71 98 21
20 91 70 78 76
87 97 44 3 93
84 12 39 96 57
86 12 38 44 1
10 87 74 53 66
14 99 85 48 88
59 33 76 71 31
83 39 2 67 35
62 67 27 96 8
81 23 78 33 48
80 16 0 86 85
26 54 29 32 89
88 77 43 18 46
87 88 13 49 80
78 19 81 56 11
18 55 70 44 48
31 37 24 95 28
20 79 89 94 14
10 31 52 49 79
8 72 61 27 42
73 4 11 43 91
37 44 58 19 97
96 63 90 13 74
71 27 87 40 99
69 29 79 64 67
85 66 4 28 30
23 51 16 49 45
92 12 74 1 75
46 52 40 12 44
0 73 20 86 1
85 32 4 42 2
21 33 56 39 9
49 69 76 98 22
42 81 5 11 2
57 50 77 8 24
85 92 15 39 52
37 70 36 79 67
34 20 16 93 22
49 68 25 4 46
17 57 77 59 54
65 83 18 84 63
36 74 61 22 71
14 0 26 3 98
1 80 93 66 58
38 9 18 60 2
70 46 35 88 11
95 89 85 29 26
82 68 25 15 53
97 80 28 17 7
67 46 54 95 98
38 74 42 57 79
63 29 36 78 6
90 60 84 10 14
18 88 8 96 0
66 56 43 47 11
69 73 14 71 25
27 63 31 44 94
75 95 84 74 13
92 9 98 17 74
46 7 2 51 52
21 60 5 87 15
86 91 65 69 54
61 85 1 62 53
89 80 4 0 68
17 87 52 86 48
3 34 16 25 35
13 38 49 66 50
36 43 65 84 56
9 93 54 92 55
32 2 39 96 98
58 72 52 83 97
12 44 27 24 20
0 3 28 56 69
66 56 37 36 72
35 49 40 43 44
54 21 59 12 65
74 25 22 80 98
27 81 69 97 62
72 81 27 61 74
26 50 79 13 53
49 78 76 70 43
51 64 99 46 67
68 59 71 17 41
97 22 73 30 98
8 54 68 47 23
70 89 41 52 61
81 28 58 90 3
88 40 86 46 43
94 6 46 43 59
41 28 87 31 45
83 26 66 81 1
76 86 15 42 8
67 47 54 4 77
96 56 22 67 2
95 47 90 54 51
78 79 29 82 48
61 81 77 6 24
71 93 98 26 75
95 7 77 94 64
19 79 14 24 5
50 48 4 71 22
35 69 89 54 2
6 51 8 82 58
87 6 85 53 64
50 43 80 61 15
69 41 51 76 0
78 26 37 62 16
12 33 75 58 52
67 18 68 52 42
37 30 49 31 69
93 90 76 9 32
60 84 73 94 17
21 27 66 43 44
89 69 24 14 1
88 33 50 2 63
12 34 6 97 53
28 26 55 8 32
49 19 17 64 86
31 37 81 65 38
96 18 45 19 58
35 43 1 49 41
46 85 92 53 15
3 34 8 14 21
35 68 61 45 39
46 99 52 55 15
74 14 10 62 17
8 66 98 89 91
58 24 44 27 29
28 48 52 18 13
17 35 20 11 49
93 50 31 95 83
27 33 79 44 80
4 96 23 65 68
70 78 31 86 36
99 38 62 95 27
52 74 25 80 41
30 15 47 19 21
77 23 53 9 7
0 83 11 25 42
50 64 76 67 72
75 30 82 15 84
58 17 87 61 33
98 74 44 3 93
5 40 78 24 11
57 17 67 60 25
37 76 28 56 35
66 94 2 90 47
86 10 85 46 45
63 12 7 74 14
21 31 84 51 36
66 20 25 46 41
15 3 18 62 45
35 78 93 2 9
90 9 33 63 41
25 73 35 97 19
99 96 45 71 22
84 43 29 14 88
42 8 1 78 68
98 84 38 95 27
18 32 54 12 96
56 50 2 45 53
14 83 59 72 70
22 41 28 9 78
89 94 50 33 73
31 47 8 35 34
43 92 95 21 51
68 13 53 24 38
80 69 44 87 83
32 82 75 73 91
99 10 22 58 23
86 9 42 81 40
71 25 3 78 54
80 15 83 5 4
58 1 3 11 24
66 51 84 44 25
37 54 12 27 97
38 2 39 85 83
89 91 33 79 59
49 22 12 84 60
34 29 11 92 19
97 41 88 53 38
26 37 8 36 67
91 3 90 52 46
77 35 76 56 20
39 94 37 3 83
78 81 66 29 4
82 41 38 0 73
59 16 88 15 30
34 69 74 90 33
9 47 71 94 10
76 50 15 19 32
49 89 31 21 92
80 12 13 97 93
45 94 35 59 20
18 46 14 36 30
6 78 84 38 99
5 4 90 92 63
34 24 26 75 3
80 39 1 93 55
67 71 30 44 76
38 13 73 21 8
11 47 46 69 29
15 57 95 52 34
45 86 88 80 19
3 5 55 36 90
54 85 44 18 39
57 92 42 25 77
43 0 12 1 24
74 71 83 29 25
56 12 52 33 64
68 94 97 14 15
7 48 24 80 5
54 87 35 1 66
55 50 73 72 36
17 80 87 68 90
8 33 81 1 51
67 61 71 54 95
93 98 27 56 0
19 32 63 6 98
13 38 23 28 8
5 31 66 72 39
99 46 2 64 14
91 83 35 85 10
67 85 49 68 37
8 36 31 81 18
74 61 20 80 50
34 23 42 52 39
21 14 22 58 54
16 14 69 13 81
21 96 62 7 5
95 52 0 67 24
6 30 65 66 86
28 25 85 56 15
4 41 21 86 32
95 23 63 28 2
9 16 37 84 14
92 22 71 42 5
46 65 69 81 57
45 20 46 44 22
62 93 78 58 25
91 38 29 68 24
21 55 71 43 26
64 76 84 80 99
92 67 43 5 12
2 64 46 15 96
95 75 73 38 30
10 65 20 39 26
36 16 25 27 88
9 62 18 58 34
85 80 36 2 48
16 60 75 72 51
39 22 32 61 54
40 44 23 87 53
93 69 56 4 22
73 51 24 53 19
83 98 77 94 59
52 70 15 40 48
60 89 67 92 85
48 72 42 80 22
99 49 11 77 4
28 24 1 63 51
85 93 62 7 78
35 32 3 21 86
36 75 67 79 34
20 8 71 6 5
50 61 14 52 81
26 37 0 80 77
93 47 86 54 94
50 19 68 54 80
81 12 33 87 24
28 40 37 30 31
41 51 15 27 97
67 70 14 77 86
89 57 48 37 27
44 46 29 63 20
74 88 25 68 76
18 28 91 59 58
99 77 62 64 83
22 5 86 37 42
47 69 87 34 89
64 33 18 56 51
30 49 11 79 17
61 80 0 29 57
7 82 87 15 83
76 43 92 1 97
0 46 2 86 6
48 27 29 61 67
53 10 64 93 77
65 16 23 26 87
58 5 25 97 94
43 7 39 69 35
62 81 56 13 28
76 12 37 14 93
90 81 15 55 23
58 40 8 56 76
83 7 78 89 47
65 70 13 48 42
16 69 66 52 46
30 38 20 32 94
91 96 34 23 90
16 24 49 50 86
65 19 56 7 66
80 60 74 71 11
60 77 54 25 22
9 61 68 6 89
15 71 10 84 41
1 47 8 43 63
69 57 85 24 81
54 83 73 52 49
69 96 31 57 44
19 66 24 6 55
91 84 20 3 27
7 9 71 43 75
90 72 15 99 2
73 56 48 28 62
40 75 0 59 31
43 67 44 24 77
98 35 4 3 37
2 85 72 39 49
58 25 91 69 19
34 8 57 42 55
80 21 51 64 30
28 32 82 84 6
33 77 39 13 12
86 21 96 82 94
78 92 42 45 70
31 22 60 80 67
79 27 93 55 65
49 90 73 72 10
98 89 77 88 12
83 3 31 47 21
65 26 93 55 53
5 95 22 8 63
79 88 11 62 25
85 14 77 4 19
41 31 83 26 67
46 98 74 99 2
44 53 70 36 52
21 33 15 57 53
56 91 25 69 10
52 59 73 96 87
65 71 14 37 2
39 89 29 83 64
88 38 45 39 20
99 72 61 96 4
23 24 67 49 80
77 6 65 76 18
59 51 78 33 46
44 22 9 90 83
93 50 2 54 26
68 71 43 85 41
38 20 6 64 24
81 39 33 56 27
98 1 69 30 38
67 52 79 31 0
24 41 82 55 73
33 66 64 20 7
65 9 14 70 94
59 63 65 25 1
36 85 61 82 50
52 3 70 30 43
79 57 31 71 76
19 97 93 77 49
60 45 90 32 74
77 64 58 44 43
71 49 37 21 46
50 67 1 24 15
14 22 0 40 23
65 87 81 64 28
53 80 23 76 77
49 14 50 2 35
85 26 88 94 30
79 18 68 15 45
6 48 38 63 92
51 45 58 4 76
78 40 22 17 55
79 12 66 61 5
68 74 0 93 89
66 4 65 71 77
47 35 38 83 64
53 16 9 56 25
92 81 55 60 33
80 24 73 0 26
26 29 55 76 38
79 52 91 84 39
50 57 37 34 71
33 31 68 92 24
81 95 5 70 8
83 64 11 67 42
97 29 27 4 78
23 10 48 71 81
80 74 86 17 36
61 14 85 21 96
18 8 7 88 25
59 5 28 57 69
64 54 16 70 72
13 75 71 33 2
60 55 46 51 32
23 89 63 96 88
71 66 9 53 65
56 46 29 95 80
44 94 90 3 5
11 99 59 60 78
42 33 81 25 0
46 66 63 82 94
52 73 92 30 24
59 26 50 87 45
79 55 74 17 64
95 43 13 98 18
62 12 24 88 28
23 11 93 51 67
71 0 44 64 96
66 17 84 90 19
38 6 12 75 27
28 73 62 50 51
63 86 29 98 15
46 90 4 58 96
20 78 64 56 82
19 91 23 40 1
78 57 75 43 2
35 60 85 74 30
80 3 63 54 32
82 99 89 25 88
88 13 92 11 72
56 6 35 55 21
8 20 36 60 99
1 96 57 45 12
41 73 50 83 69
42 69 53 76 11
38 74 13 14 86
18 49 51 67 61
26 80 47 16 78
66 46 12 68 79
22 90 72 93 24
55 29 43 28 5
99 47 87 40 51
81 18 70 20 36
0 48 23 46 82
91 74 83 95 54
60 56 38 37 89
87 96 71 50 35
5 11 42 72 3
77 81 36 49 97
71 72 17 34 93
45 81 22 67 23
61 20 94 14 1
85 40 15 36 88
54 91 62 73 9
66 36 39 58 60
96 8 22 49 77
76 64 47 78 30
50 41 12 69 15
7 1 29 72 27
90 12 65 13 39
75 70 47 36 79
31 54 17 10 32
76 92 55 83 40
49 5 20 44 37
16 78 65 5 70
63 72 89 93 66
21 90 46 54 81
7 48 88 60 11
95 0 38 3 26
19 65 66 41 27
7 18 91 52 48
87 55 49 68 71
85 12 4 40 1
57 67 6 11 58
91 85 38 14 21
63 93 37 76 25
68 36 4 24 71
43 31 60 19 95
52 55 13 83 78

75
2021/4/main.py Normal file
View File

@ -0,0 +1,75 @@
# all the numbers called, in order
numbers = []
temp_board = []
boards = []
fills = []
board_index = 0
####
def Victory(board):
for y in range(0, len(board)):
if(board[y] == [True, True, True, True, True]):
return True;
# NOTE(dev): Assumes all columns are the same length
for x in range(0, len(board[0])):
num_true = 0
for y in range(0, len(board)):
if(board[y][x]):
num_true = num_true + 1
if(num_true == len(board[0])):
return True
return False
####
def FindWinner(numbers):
for i in range(0, len(numbers)):
for board_index in range(0, len(boards)):
for y in range(0, len(boards[board_index])):
for x in range(0, len(boards[board_index][y])):
if(boards[board_index][y][x] == numbers[i]):
fills[board_index][y][x] = True
if(Victory(fills[board_index])):
print('Victory with', numbers[i], 'on board', board_index, '!!')
return numbers[i], board_index
#### MAIN EXECUTION ####
with open('data', 'r') as fp:
for i,line in enumerate(fp):
if(i == 0):
numbers = line.strip().split(',')
elif(len(line.strip()) == 0):
if(len(temp_board) > 0): # i.e. skip the first, empty one
# add in the next player board
boards.append(temp_board)
temp_board = []
# create a blank answer board for this player board
for j in range(0,5):
temp_board.append([False, False, False, False, False])
fills.append(temp_board);
temp_board = []
board_index = board_index + 1
else:
# add the next array of numbers to the temporary board object
temp_board.append(line.strip().split())
winning_number,winning_board_index = FindWinner(numbers)
print('Winning Number:', winning_number, ', Winning Board Index: ', winning_board_index)
total = 0
for y in range(0, len(fills[winning_board_index])):
for x in range(0, len(fills[winning_board_index][y])): # assumes size is same for all columns
if(not fills[winning_board_index][y][x]):
total = total + int(boards[winning_board_index][y][x])
print(total * int(winning_number))
# # DEBUG(dev): Show full contents of all boards
# for x in range(0, len(boards)):
# for y in range(0, len(boards[x])):
# for z in range(0, len(boards[x][y])):
# print(boards[x][y][z])

83
2021/4/main2.py Normal file
View File

@ -0,0 +1,83 @@
# all the numbers called, in order
numbers = []
temp_board = []
boards = []
fills = []
board_index = 0
####
def Victory(board):
for y in range(0, len(board)):
if(board[y] == [True, True, True, True, True]):
return True;
# NOTE(dev): Assumes all columns are the same length
for x in range(0, len(board[0])):
num_true = 0
for y in range(0, len(board)):
if(board[y][x]):
num_true = num_true + 1
if(num_true == len(board[0])):
return True
return False
####
def FindWinner(numbers):
indexes = []
winning_indexes = []
for i in range(0, len(boards)):
indexes.append(i)
for i in range(0, len(numbers)):
for board_index in range(0, len(boards)):
if(board_index not in winning_indexes):
for y in range(0, len(boards[board_index])):
for x in range(0, len(boards[board_index][y])):
if(boards[board_index][y][x] == numbers[i]):
fills[board_index][y][x] = True
if(Victory(fills[board_index])):
print('Victory with', numbers[i], 'on board', board_index, '!!')
winning_indexes.append(int(board_index))
indexes.remove(int(board_index))
if(len(indexes) == 0):
return numbers[i], board_index
#### MAIN EXECUTION ####
with open('data', 'r') as fp:
for i,line in enumerate(fp):
if(i == 0):
numbers = line.strip().split(',')
elif(len(line.strip()) == 0):
if(len(temp_board) > 0): # i.e. skip the first, empty one
# add in the next player board
boards.append(temp_board)
temp_board = []
# create a blank answer board for this player board
for j in range(0,5):
temp_board.append([False, False, False, False, False])
fills.append(temp_board);
temp_board = []
board_index = board_index + 1
else:
# add the next array of numbers to the temporary board object
temp_board.append(line.strip().split())
winning_number,winning_board_index = FindWinner(numbers)
print('Winning Number:', winning_number, ', Winning Board Index: ', winning_board_index)
total = 0
for y in range(0, len(fills[winning_board_index])):
for x in range(0, len(fills[winning_board_index][y])): # assumes size is same for all columns
if(not fills[winning_board_index][y][x]):
total = total + int(boards[winning_board_index][y][x])
print(total * int(winning_number))
# # DEBUG(dev): Show full contents of all boards
# for x in range(0, len(boards)):
# for y in range(0, len(boards[x])):
# for z in range(0, len(boards[x][y])):
# print(boards[x][y][z])