├── .gitignore ├── 01-report-repair ├── input.txt └── main.cpp ├── 02-password-philosophy ├── input.txt └── main.cpp ├── 03-toboggan-trajectory ├── input.txt └── main.cpp ├── 04-passport-processing ├── input.txt └── main.cpp ├── 05-binary-boarding ├── input.txt └── main.cpp ├── 06-custom-customs ├── input.txt └── main.cpp ├── 07-handy-haversacks ├── input.txt └── main.cpp ├── 08-handheld-halting ├── GB.cpp ├── input.txt └── main.cpp ├── 09-encoding-error ├── input.txt └── main.cpp ├── 10-adapter-array ├── input.txt └── main.cpp ├── 11-seating-system ├── input.txt └── main.cpp ├── 12-rain-risk ├── input.txt └── main.cpp ├── 13-shuttle-search ├── input.txt └── main.cpp ├── 14-docking-data ├── input.txt └── main.cpp ├── 15-rambunctious-recitation ├── input.txt └── main.cpp ├── 16-ticket-translation ├── input.txt └── main.cpp ├── 17-conway-cubes ├── input.txt └── main.cpp ├── 18-operation-order ├── input.txt └── main.cpp ├── 19-monster-messages ├── input.txt └── main.cpp ├── 20-jurassic-jigsaw ├── input.txt └── main.cpp ├── 21-allergen-assessment ├── input.txt └── main.cpp ├── 22-crab-combat ├── input.txt └── main.cpp ├── 23-crab-cups ├── input.txt └── main.cpp ├── 24-lobby-layout ├── input.txt └── main.cpp ├── 25-combo-breaker ├── input.txt └── main.cpp ├── README.md └── run.sh /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Compiled Object files 5 | *.slo 6 | *.lo 7 | *.o 8 | *.obj 9 | 10 | # Precompiled Headers 11 | *.gch 12 | *.pch 13 | 14 | # Compiled Dynamic libraries 15 | *.so 16 | *.dylib 17 | *.dll 18 | 19 | # Fortran module files 20 | *.mod 21 | *.smod 22 | 23 | # Compiled Static libraries 24 | *.lai 25 | *.la 26 | *.a 27 | *.lib 28 | 29 | # Executables 30 | *.exe 31 | *.out 32 | *.app 33 | 34 | # Project specific 35 | .vscode/ -------------------------------------------------------------------------------- /01-report-repair/input.txt: -------------------------------------------------------------------------------- 1 | 2004 2 | 1823 3 | 1628 4 | 1867 5 | 1073 6 | 1951 7 | 1909 8 | 1761 9 | 1093 10 | 1992 11 | 1986 12 | 1106 13 | 1537 14 | 1905 15 | 1233 16 | 1961 17 | 1760 18 | 1562 19 | 1781 20 | 1329 21 | 1272 22 | 1660 23 | 1367 24 | 1248 25 | 1697 26 | 1515 27 | 1470 28 | 1980 29 | 1884 30 | 1784 31 | 1966 32 | 1778 33 | 1426 34 | 1255 35 | 1089 36 | 1748 37 | 1253 38 | 1870 39 | 1651 40 | 1131 41 | 1623 42 | 1595 43 | 1128 44 | 1014 45 | 1863 46 | 1855 47 | 1203 48 | 1395 49 | 1521 50 | 1365 51 | 1202 52 | 780 53 | 1560 54 | 1834 55 | 1494 56 | 1551 57 | 1398 58 | 1190 59 | 1975 60 | 1940 61 | 1217 62 | 1793 63 | 1310 64 | 1070 65 | 1865 66 | 1307 67 | 1735 68 | 1897 69 | 1410 70 | 1994 71 | 1541 72 | 1569 73 | 1731 74 | 1238 75 | 1193 76 | 1226 77 | 1435 78 | 1159 79 | 1642 80 | 1652 81 | 1908 82 | 1920 83 | 1930 84 | 1068 85 | 1914 86 | 1186 87 | 1795 88 | 1888 89 | 1634 90 | 1750 91 | 1950 92 | 1493 93 | 1353 94 | 1461 95 | 1658 96 | 1856 97 | 1301 98 | 1538 99 | 1948 100 | 1998 101 | 1847 102 | 1880 103 | 1657 104 | 1536 105 | 1457 106 | 1762 107 | 1706 108 | 1894 109 | 542 110 | 1991 111 | 1108 112 | 1072 113 | 1064 114 | 1511 115 | 1496 116 | 1480 117 | 1955 118 | 1604 119 | 1766 120 | 1983 121 | 1713 122 | 1234 123 | 1503 124 | 1583 125 | 1729 126 | 1140 127 | 1006 128 | 1600 129 | 1699 130 | 1280 131 | 1891 132 | 1996 133 | 1375 134 | 1167 135 | 1625 136 | 1129 137 | 1770 138 | 1497 139 | 1620 140 | 1267 141 | 1421 142 | 1399 143 | 1563 144 | 1636 145 | 1293 146 | 1506 147 | 1613 148 | 1958 149 | 1967 150 | 1182 151 | 1050 152 | 1947 153 | 1787 154 | 1774 155 | 1928 156 | 1896 157 | 1303 158 | 1826 159 | 1132 160 | 1254 161 | 1752 162 | 1510 163 | 1705 164 | 1229 165 | 1558 166 | 1989 167 | 1567 168 | 698 169 | 1738 170 | 1357 171 | 1587 172 | 1316 173 | 1838 174 | 1311 175 | 1057 176 | 1644 177 | 1135 178 | 1300 179 | 1134 180 | 1577 181 | 1381 182 | 1806 183 | 1176 184 | 1993 185 | 1769 186 | 1633 187 | 1450 188 | 1819 189 | 1973 190 | 1694 191 | 969 192 | 1987 193 | 1095 194 | 1717 195 | 1933 196 | 1593 197 | 1045 198 | 1355 199 | 1459 200 | 1619 -------------------------------------------------------------------------------- /01-report-repair/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | vector file_to_int_vector(string path) { 5 | int n; 6 | vector arr; 7 | ifstream infile(path); 8 | 9 | while (infile >> n) arr.push_back(n); 10 | return arr; 11 | } 12 | 13 | pair part_one(vector &puzzle, int target) { 14 | set s1; 15 | 16 | for (int elem : puzzle) { 17 | int diff = target - elem; 18 | 19 | if (s1.find(diff) == s1.end()) s1.insert(elem); 20 | else return make_pair(elem, diff); 21 | } 22 | } 23 | 24 | tuple part_two(vector &puzzle, int target) { 25 | for (int elem : puzzle) { 26 | pair pair = part_one(puzzle, target - elem); 27 | if (pair.first + pair.second + elem == target) 28 | return make_tuple(pair.first, pair.second, elem); 29 | } 30 | } 31 | 32 | int main() { 33 | vector puzzle = file_to_int_vector("input.txt"); 34 | 35 | pair p1 = part_one(puzzle, 2020); 36 | cout << p1.first * p1.second << endl; 37 | 38 | tuple p2 = part_two(puzzle, 2020); 39 | cout << get<0>(p2) * get<1>(p2) * get<2>(p2) << endl; 40 | } 41 | -------------------------------------------------------------------------------- /02-password-philosophy/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | struct Policy { 5 | int lower, upper; 6 | char letter; 7 | char password[32]; 8 | }; 9 | 10 | int part_one(vector policies) { 11 | return count_if(policies.begin(), policies.end(), [=](const Policy &p) { 12 | vector filter; 13 | 14 | copy_if(p.password, p.password + strlen(p.password), back_inserter(filter), [p](const char &c) { 15 | return c == p.letter; 16 | }); 17 | 18 | return filter.size() >= p.lower && filter.size() <= p.upper; 19 | }); 20 | } 21 | 22 | int part_two(vector policies) { 23 | return count_if(policies.begin(), policies.end(), [=](const Policy &p) { 24 | return p.password[p.lower-1] == p.letter ^ p.password[p.upper-1] == p.letter; 25 | }); 26 | } 27 | 28 | int main() { 29 | vector policies; 30 | Policy p; 31 | 32 | while (scanf("%d-%d %c: %s\n", &p.lower, &p.upper, &p.letter, &p.password) > 0) 33 | policies.push_back(p); 34 | 35 | cout << part_one(policies) << endl << part_two(policies) << endl; 36 | } -------------------------------------------------------------------------------- /03-toboggan-trajectory/input.txt: -------------------------------------------------------------------------------- 1 | ....#...#####..##.#..##..#....# 2 | ..##.#.#.........#.#......##... 3 | #.#.#.##.##...#.......#...#..#. 4 | ..##.............#.#.##.....#.. 5 | ##......#.............#....#... 6 | .....##..#.....##.#.......##..# 7 | .##.....#........##...##.#....# 8 | .##......#.#......#.....#..##.# 9 | ##....#..#...#...#...##.#...##. 10 | ##........##.#...##......#.#.#. 11 | ..#.#........#...##.....#.....# 12 | ..#.......####.#....#..#####... 13 | .##..#..#..##.#.....###.#..#... 14 | ......###..##.....#.#.#..###.#. 15 | ..#.#...#..##.....#....#.#..... 16 | .....#.#...#.###.#..#.......... 17 | ##.....#...#.#....#..#.#....... 18 | ..#...#...#.........##......#.. 19 | ......#.#...#...#..#...##.#...# 20 | ....#.................##.##.... 21 | ...#......#.............#....## 22 | ##..#..#..........#...##.#.#... 23 | ....#...##....#..#.#........... 24 | ##.#.#.#...#....#........#..#.# 25 | ...###..........#...#...#..##.# 26 | ..##.......###.#......##.##.... 27 | ...........#.#....#.....#.#...# 28 | ..#......##.#...##.#.#......#.# 29 | ..........#.#....#.#..#....#... 30 | ##..##...##.......#.#....#.#.## 31 | .##..#.#..#...........#.#...#.# 32 | #......##......#....####.#....# 33 | ..###......##...#...#.#.......# 34 | .#.##.##....##..#..##...#...... 35 | .#....#..#........#..#.##.#.#.. 36 | ..#.........#.#.###....###.#... 37 | ..#..#.#.#..#..#.##.##...####.. 38 | #..#..#......#..#.#....#.#.#.## 39 | ..#.........#...#..#.#.#..#...# 40 | #..#......###.....##....##..... 41 | #..#.....#.#.#.##.....##...#.#. 42 | ##..#.#...#.........#.#........ 43 | #....#.......#.....#..#..#.#... 44 | ...###.##.###.###.#####..#...#. 45 | .....#..#.#..##...............# 46 | ..#.....###.###.#.....#.#....## 47 | ###.#.........#..#.#.#..#.#..#. 48 | .##.........#..#..##....#.#...# 49 | .#...#........#...#.....#....#. 50 | ####..........###....#.#.#....# 51 | ....##..###....#....#.#...#.... 52 | ..............##......##..#.### 53 | .#...........###.#.#....#...... 54 | ###.#..#..#...#.........##..... 55 | ..#.....##...#.#.....##...#.##. 56 | .###.#........#..#.#...#.#..##. 57 | .......##....##.........##.#..# 58 | #....#...#...##...#.#..#..#..## 59 | ...#...##..#...#...#.#....#.#.# 60 | #.#......#.#...##......#.#...## 61 | .#.###..#.###.#.....#.##.##.#.# 62 | #...#............#...#.##..##.. 63 | ....#..###.......#.....##....#. 64 | .#####..#.....#.....#...#.....# 65 | ..##..#..###.......##.#........ 66 | .#...##.##.....#.##...##...#..# 67 | ......###...#....#....#........ 68 | ....#...#.#....#...#.#.#......# 69 | ....#..##...##.#..#....###..... 70 | ...#...#..#.#...#....#.#..##### 71 | ####....#.....#.........#.#.... 72 | ...###.#.#..#.#..##............ 73 | .##..#####..#...#..#..#.......# 74 | .###......#.#.#..#....#.....#.. 75 | #....##.##..#.#...............# 76 | ...#.#..#........#......#....#. 77 | #.....#....###....#..#.#.#..... 78 | .#..#....#...#.#.....##....#... 79 | ..#.##.#.##.#..#.##.#.....#.#.. 80 | .......#.......###..###..#...#. 81 | .#.......#..#........#.#....... 82 | .#.#...#.....#.##..##.....#.... 83 | #.......##....#......#.....##.. 84 | .#.....#...##...#..##.....#.... 85 | ....#..#.#.......#.#.#......... 86 | ..#....#....##.##..#..##.##.#.. 87 | .#...#....##...#........#....#. 88 | #.#......#...#....#...........# 89 | .#....#..#..###.#.....#..#..... 90 | ..#..................#.....#... 91 | ..#...###..#..####.#..#.#.#.#.. 92 | ...#........##...##..##..#....# 93 | ...#.....#........##..#.....#.# 94 | #....#.....##.##......#...##... 95 | ...#####....#..##..##...#.#.... 96 | ###.........#.#..#..#..##.#...# 97 | ##...#..##...#.##.#........#... 98 | .#....#.#...#..#...#..#.#...... 99 | .#......##.#...#...#..#....#... 100 | #..#.#.#......##.##.####..#.... 101 | .#...#.#.##...##.#...#...#..... 102 | ####.#.........#...##..##....## 103 | .....###........###.##...#.#... 104 | .##.....#.....#....##.....##... 105 | .#.#...#####....##...##.....#.. 106 | ....###..........#......##..#.# 107 | ..#.....#....#..#...#.....##..# 108 | ...##.##.#.######....#.#....##. 109 | ...#.#.#...#..#....##.........# 110 | .#.#...##...#....#.#....##..... 111 | ...#..#.....#.....#.##.....#... 112 | .#.#.#.....#.##.#....#.#....##. 113 | #...#......###...#..###...#.... 114 | ...##.#.#..#........##.......#. 115 | .####.####......#........#..... 116 | ....#..#####....#......####.... 117 | #...##.#..#..#####.#...#......# 118 | #.#....#..#.........###........ 119 | .##.........#....#......#.#.... 120 | ...###.........####.#........## 121 | ..#..#........#.#..##......#..# 122 | .##..#....#...##.####.#...#.... 123 | ......#.......#..#..#.#.##.#... 124 | .###....#.#...#.#.......##..#.# 125 | #...#....#............#####.... 126 | ...#.##......#####..#........#. 127 | ..#...##.....#...#..#.#........ 128 | ...#.#...#...##...#..#....#.... 129 | ..#..##.....#....#.#.###....... 130 | .......##..#...#.............## 131 | .....#.....#..##.##.....#...... 132 | .....##...#......#..##....#.### 133 | .#...#.#.#.#.##.....##..###..#. 134 | ....##..........#.....###...... 135 | ....#...#.#.#..#.......#....#.. 136 | ..###...#...........##..###.... 137 | ...#.##.......#....#....#.#.... 138 | ##...#..##..#.##..........##..# 139 | .##.....#..#......##..####.#.## 140 | ....##..#.#.###......#..#...#.. 141 | ####..#.#....#...#....###.#.#.. 142 | ###......#...##.##..#.##..#..#. 143 | ..#.#..#.#.#.....#...#..#.####. 144 | .###.#...##...##....##......#.# 145 | ..#............#.##..#....#..#. 146 | ###.......#......###..#........ 147 | ....##......###.....#.#..###... 148 | ..#...##...#......#..#......... 149 | #..####.#....#.....###....#.#.. 150 | .#.#.#.......##....###......... 151 | .......#.##.#####....#.#...#### 152 | .#...#....#....#.###..#.....#.. 153 | .###.#.#.###.###.#..####.##.#.. 154 | ....#.........#.#.......##..... 155 | #..#..#.#...........#.#.##..#.# 156 | .#.....#..#...#.....#.##......# 157 | ..###.#............#.....####.. 158 | #.....##..##...#....####....#.. 159 | ...#.....#..................#.. 160 | ....#.###.#..#..#..##..#..##... 161 | ...##.#........#......#...##... 162 | #................##....#...#... 163 | ..##......##.#.##..#....#.....# 164 | .#..#.....#..........##.#.#.... 165 | .....#...####....#..#......#... 166 | ..#......###.#.#.#.#.......#..# 167 | .##......#.......#....###.#.... 168 | #..#.#.#..#...#.#.##..##..#.... 169 | ....#...##..#.#......#.##...#.. 170 | ...###...#.##..#...#....#...... 171 | ##......#.#...#.#.#.........#.. 172 | ..#..........#...###.#.##....#. 173 | ...##.....#.....#...###..#..... 174 | ..####.#.....#.#.....#..#.#.... 175 | .#.....##...##.##.#.....#.####. 176 | .......#.....#...##..........#. 177 | .#...#.#....#####....###.#..#.# 178 | .##.##....##...##.#.....#...... 179 | #......#.##..#..##.#.#.......#. 180 | .#..#....###..#........##...#.. 181 | ..#......##.......###..##...#.. 182 | .#..........#.#.......##.....#. 183 | ....##.....##.#.#.##........##. 184 | ..#.#..###..#..##...#.##...#... 185 | .......#.....#..#...#...#.....# 186 | ##.#...#.#.#.##........#......# 187 | ..###.....##..#....#.......##.. 188 | #####..####...#.#..##.#...#..#. 189 | #...####....#........#....#.... 190 | .#.#.#..#...##....#.......#.#.. 191 | ...#....##..##..#..#..#####.### 192 | ...#......#.#..#......#...####. 193 | .##.....##.##.#.####.#..##...#. 194 | ....#..#..##..##....#....#...## 195 | ##.###........#...##....#.....# 196 | ..#.#.#.......#....#..#....#... 197 | ......##.....##....#...#.....#. 198 | #.#..#.#.......#....#.#.#...... 199 | .....###..#...#.....#..##..#... 200 | ......###.....#.#.#...#...##..# 201 | .#..#.#....##...#...#........#. 202 | #..###.#...####.#...#.......... 203 | .#.##.#..#..##..#..###..##...#. 204 | .......#.#..........#.........# 205 | #......###..##..#....###....... 206 | ..#............#.#........#...# 207 | ..##.#.............#......#..## 208 | .#....#..#.#..#....###..#...#.. 209 | ....##....#..##...###....#....# 210 | .#....###.............#........ 211 | #..#...#..#....#.##.#.....##... 212 | ...........#.....#....#....#... 213 | .##.##.#...#....##......##..##. 214 | ......#.#.##.#..##........#...# 215 | ....##...##...#...#...#.#...... 216 | .#...#....#...#......#.#...#..# 217 | ........##.....#.#..#...##..##. 218 | ##...#.....#.....####...#..#... 219 | .#.#..##.##......#...#.#...#... 220 | ##...##.#......#....#.######.#. 221 | ##.....####.###......#.##.#.... 222 | .#.##....##........#...#..####. 223 | .......#..#....##...#.#...#..#. 224 | ...##..........#..#........#..# 225 | .##.....#...#...#.##.###....... 226 | .##....#...#.#..#.....#...#.... 227 | ..#...#.....#.####.#.........#. 228 | #...#.##...#.#..#.#..#.###.#..# 229 | .##..#.#.##.........####....### 230 | .#..##........#..#.......#..... 231 | ......#.#####.#.........#.#...# 232 | ......#....#.#####...........#. 233 | ..##....##..#.#..#....#......## 234 | #.#......#.##.#.##....#....#.#. 235 | ..#..##.#...#.......##......... 236 | .....##.#...#..........#....... 237 | ...#........#..#...#.....##.### 238 | ....##.........#...#.#.....#... 239 | .......#.#....#...#.......#...# 240 | .#..#...##....#..#...........#. 241 | .#....##.##.#..#..####.#.#..... 242 | .##........#.....#..#......##.. 243 | .#..##......#......#..##..#.... 244 | ###.....##.......#..##.#....... 245 | .....##......#.#...##...##..... 246 | .##....##..#..#####...#...#.##. 247 | ##...##.#....##.#.#.#....##.... 248 | .#.....#...#......#......##.... 249 | ##.#............#...#....#..... 250 | #..#.....#.....##.##.##..#..##. 251 | ......#..............#..#...#.# 252 | ....#.#....##......#..#...#.... 253 | .#...#..#...#......#..##....#.# 254 | .....#......#..##...#.#....#... 255 | #...............#.##..#......#. 256 | .....#..##.#..#.#...###.....#.. 257 | ...#..#..#...#....#..#..##.#... 258 | .#...#...#..#......##...#...... 259 | ....###............#.#.#....#.. 260 | #.#...#..#..#.#....#........#.. 261 | ....#.#.#..#..#....#..#...##.#. 262 | .#....#.#...#....#......#.#...# 263 | ##..#.#.#..#.....#...###....#.# 264 | .##.....#.#...#..........#..#.# 265 | #....#......#....#.#.#...#..... 266 | #.#.....#.###.......#..#..#.#.. 267 | #.....##..#.###...#...##...#.## 268 | .#.##....#.#.....##......###... 269 | .#.......##................#... 270 | .........#........####......#.. 271 | ...##.###..#.....#.#.....##.#.. 272 | ..#....#.#.#.##..........#..... 273 | #..##.....#.............##..... 274 | .##...#..#.......#.......#..#.. 275 | ...#.................#......##. 276 | ....#....#.....#..###.#....###. 277 | ..#.#..#...#..#.....###....#.#. 278 | .....###...#....#....#.#.##..## 279 | ...#...#.........####........#. 280 | .......#..##.........#......... 281 | .#......##.....#.#####...##.... 282 | ....#.###...#.#....##..#......# 283 | .##..#....#.#....#..#.###.....# 284 | ..#...#.#...#.##.....#.#....##. 285 | #.#.#.#.....##...#.#..##..#.... 286 | .#............#.#.#..#...#...#. 287 | ...##.#..#..####.#.###..##..... 288 | .##.....#.......#..##.#...##.#. 289 | #.#...#..#.##...##...####..#..# 290 | ...##.......#.#.#.#.#.#...#..## 291 | ...#.#.##..##..............###. 292 | .....#...#........#...#......#. 293 | ..#..#..##....#..##.#.....#.... 294 | #.....##........#.........##.#. 295 | ###..#....#.##..##............. 296 | .#..#...#.#......#..#..##.....# 297 | ...#.#.#............##........# 298 | ..#.#....#..#....##....#...##.# 299 | ...##...#...#..........##.##### 300 | ....#..#.#.......##....#.#.###. 301 | ##..#..#..#...###.#.....#...... 302 | ....###.#.#.#.##..##.#...#..... 303 | .....####..#.#..#.#......#.#.#. 304 | #.....#...#..#.#.........#..#.. 305 | .##....#.#.####......##..#..##. 306 | ......#.##.#.#..#..#....#.#.... 307 | .#..#...#...#...#..#.....#..... 308 | ..##.#..............#......#... 309 | .....###.##.......#.....#..#... 310 | ..#.#..#..#.......#...##.##..#. 311 | ##.###......#......#.#..#..##.. 312 | ..##.....#..#..#......#..#..... 313 | ...##.......#.#..#.........#.#. 314 | ......##.##.#.......#..#.#..... 315 | #......#........##..#.......#.# 316 | ###....#...#...#.#...#..#..#... 317 | #..###....#....####..#...#..... 318 | ....##..#.##.#....#..##...#.#.. 319 | #.##..#....##..#...#..#.#.#..#. 320 | #.........#.....#...#.......#.. 321 | ...#.....#.#.....#........##... 322 | ..#.##..#......#...#.....##.#.. 323 | ...###....#.....#...#..#.##..#. -------------------------------------------------------------------------------- /03-toboggan-trajectory/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | int traverse(vector> &forest, int x, int y) { 5 | int count = 0; 6 | 7 | for (int i = 0, j = 0; i < forest.size(); i+=y, j+=x) { 8 | if (j >= forest[i].size()) j -= forest[i].size(); 9 | if (forest[i][j] == '#') count++; 10 | } 11 | 12 | return count; 13 | } 14 | 15 | int part_1(vector> &forest) { 16 | return traverse(forest, 3, 1); 17 | } 18 | 19 | long long part_2(vector> &forest) { 20 | vector traversals; 21 | vector> steps = {{1,1}, {3,1}, {5,1}, {7,1}, {1,2}}; 22 | 23 | auto lambda = [&forest](pair p) { return traverse(forest, p.first, p.second); }; 24 | transform(steps.begin(), steps.end(), back_inserter(traversals), lambda); 25 | 26 | return accumulate(traversals.begin(), traversals.end(), 1LL, multiplies()); 27 | } 28 | 29 | int main() { 30 | string line; 31 | vector> forest; 32 | 33 | while (getline(cin, line)) { 34 | vector v(line.begin(), line.end()); 35 | forest.push_back(v); 36 | } 37 | 38 | cout << part_1(forest) << endl; 39 | cout << part_2(forest) << endl; 40 | } 41 | -------------------------------------------------------------------------------- /04-passport-processing/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace std; 4 | 5 | int p1(vector &passports) { 6 | vector keys = {"byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid"}; 7 | 8 | return count_if(passports.begin(), passports.end(), [=](string passport) { 9 | return count_if(keys.begin(), keys.end(), [=](string key) { 10 | return passport.find(key) != string::npos; 11 | }) == 7; 12 | }); 13 | } 14 | 15 | int p2(vector &passports) { 16 | vector exprs = { 17 | "byr:(19[2-9]\\d|200[0-2])", 18 | "iyr:(20(1\\d|20))", 19 | "eyr:(20(2\\d|30))", 20 | "hgt:(1[5-8]\\dcm|19[0-3]cm|59in|6\\din|7[0-6]in)", 21 | "hcl:#([a-f\\d]{6})", 22 | "ecl:(amb|blu|brn|gry|grn|hzl|oth)", 23 | "pid:(\\d{9})(?:\\n|\\s|$)" 24 | }; 25 | 26 | return count_if(passports.begin(), passports.end(), [=](string passport) { 27 | return count_if(exprs.begin(), exprs.end(), [=](string expr) { 28 | return regex_search(passport, regex(expr)); 29 | }) == exprs.size(); 30 | }); 31 | } 32 | 33 | int main() { 34 | string line; 35 | vector lines; 36 | vector passports; 37 | 38 | stringstream ss; 39 | 40 | while (getline(cin, line)) 41 | if (line.size() == 0) ss << '\n'; 42 | else ss << ' ' << line; 43 | 44 | while (getline(ss, line)) 45 | passports.push_back(line); 46 | 47 | cout << p1(passports) << endl; 48 | cout << p2(passports) << endl; 49 | } 50 | -------------------------------------------------------------------------------- /05-binary-boarding/input.txt: -------------------------------------------------------------------------------- 1 | BFBBBBBLLR 2 | BBFFBBFRRL 3 | FBFBFFFRRL 4 | BBFFFBFRRL 5 | BFFBFBFRLL 6 | FFBBBFBLRL 7 | BFFFBFFLLR 8 | FBFFFFBLRR 9 | FBFFBBBRRR 10 | BFFBFFFLLR 11 | BFFFFFBLLL 12 | FFBBFFBLRR 13 | BFFFFFBRLR 14 | FBFBFBFLLL 15 | FFBFBFFLLL 16 | BBFFFFFLLL 17 | FFFBBBFLLL 18 | BBFFBFBLLR 19 | FFBFBFBRRR 20 | BFFBFFFRRR 21 | BBFFBFBRLR 22 | FFFBFBFLRL 23 | BBFFBBBLRR 24 | FBBFFFFLLR 25 | BBBFBBFLLL 26 | BFFFFBBRLL 27 | FBBFBFBRRL 28 | FFBBBFFRRR 29 | BBFFFFBRRR 30 | FBBBBFFLLR 31 | BFFFFFBLRR 32 | FFBBFBFLLR 33 | BFFBFBBLLL 34 | BBFBBBBLLL 35 | FBFBBBFRLL 36 | FFBFFFBLRL 37 | FFFFBBBLRL 38 | BBBBFBFRRR 39 | FFBBFBBRLL 40 | FFFBBBBRRL 41 | FFBFFFBRLR 42 | BFBFBFBLLL 43 | FFFBFFBLLL 44 | BBFBFBBLRL 45 | BBBBBFFLLL 46 | FBBBBFFRRR 47 | FBFFFFBLLL 48 | FFFFBBBRRL 49 | FBFBBBFRRR 50 | FBBFFBFLRL 51 | BFBFFBFLLR 52 | FFBBBFBLLL 53 | BFBFFFFLLL 54 | BBBFFFFLLL 55 | BFBBFBFRLR 56 | BFBBBBFLRL 57 | BBBFBFBLRL 58 | BFFFBFBLRL 59 | BFBBBBBRLL 60 | FBBBFFBRLL 61 | BFBFFBBRRL 62 | BFFBBBFLLR 63 | BFFBFFBRRR 64 | FBFBFBFRRL 65 | FBFBFBFLRL 66 | BBBFFFBRRR 67 | FBFFBBFRRR 68 | FFBBFFFRLL 69 | BFBFBBBLLR 70 | BFFFFBFLLR 71 | FFBBBBFRLR 72 | FFFBFFFRRR 73 | BFBBFFFRLL 74 | BBBFBFFLRL 75 | BFBBFBFLRR 76 | BBBBFBBLRL 77 | FBFBFBFLRR 78 | BBFBFBBLLL 79 | BFBBBFBLRL 80 | BFBBFBFLRL 81 | FFFBBFBLLL 82 | BBBFBFBLLR 83 | FBBBBBFLLR 84 | FFBBBFBRLL 85 | BBBBFBBRRL 86 | FBFFFBBRLL 87 | BBFBBFFRRL 88 | FBFFBFBLLL 89 | BFFBFBBRRL 90 | BFFFBFFRLR 91 | BBFBFBFRRR 92 | FBBFBFFRRR 93 | BBBFBFBLRR 94 | FFBFFBFRLR 95 | FFBFBBBLRL 96 | FFFFBBFRRL 97 | FFBBBFBRLR 98 | FBFBFBBLLL 99 | FBBBFBFRLL 100 | BBBBFBBLLR 101 | BFBFBBFRLR 102 | FBBFBBFLRR 103 | BBBBFBFLRL 104 | FBFBFBFRLL 105 | FFBFBFBLLR 106 | FBFFBBFRRL 107 | BFFFFFFRLR 108 | FFFFBFFRRL 109 | BBFFFBFLRR 110 | FBBFFBFRRL 111 | FFFFBFBLLL 112 | FFBBFFFRRL 113 | BBFBFFFRLL 114 | BFFFFBFRLR 115 | FBFBFBBRRL 116 | FBBFBBFRLR 117 | BFBFFFBRRL 118 | FFFBFFBRLR 119 | BFBFFBFLRL 120 | FBBFBFFRRL 121 | FFBFFFBLLL 122 | FBFFFBFRRR 123 | FBFFFBBRRL 124 | FBFFBFBRLL 125 | BFBFFFFRLL 126 | FFFBBBFLRR 127 | BBFFFFFLRR 128 | BFBBFBBLLR 129 | BFBFFBFLLL 130 | FBBBBFBLLR 131 | BFBBFFFLLR 132 | BFBBFFFRRL 133 | BFFBBFFLLR 134 | BBBFFFFRRL 135 | BBBFBBBLLR 136 | FFFBFBBRLL 137 | FFBFFBBLRR 138 | FFBFBBFLLL 139 | BBBFFBFRLL 140 | BBBFBFFLRR 141 | FBFBFFBRLR 142 | FBBFFBBLRL 143 | BBFBBFFLLR 144 | BBFBBFBRLR 145 | BFBFFBBRLR 146 | BBBBFFBRLL 147 | FFFBBBFRLL 148 | FBBFFFFRLR 149 | BFBBBBFRRR 150 | BBBBFFBLRR 151 | FBBBBBFLRR 152 | FBBBFFBLRL 153 | BFFBBBFRRR 154 | BBBBFBFRLL 155 | BFBBBFBLRR 156 | FFBFFFFLLL 157 | FBFFFFBRLL 158 | FFBFFBBRLR 159 | BFFBBFFLLL 160 | FFBFBFBLRL 161 | FFBFBFFRRR 162 | BBBFBBFLRR 163 | BBBFBBBLLL 164 | BFFFFFFLRL 165 | FBBBBBBRLR 166 | FFFBFBFLRR 167 | FFBBFFBRRL 168 | FBBFBBBRLR 169 | BBBFBBFLLR 170 | FFBFFBFLRR 171 | BFBBFBBRRL 172 | FBFFFBBLRL 173 | BFFBBFBLRL 174 | BBFFBFFLLL 175 | FBBBFBFRLR 176 | BBBBFFFRLL 177 | FFBFBFBLRR 178 | FBBFFFBRRL 179 | FFBBBFFLLL 180 | BBFFFBBLLR 181 | BFFFFBFRRL 182 | FBFFFFBRRL 183 | BFBBFFFRLR 184 | FFFBBBBLLL 185 | FBFBFBBRLR 186 | FFFBFBBRLR 187 | FBFBFFFLRR 188 | BFFFFFFRRR 189 | FFFFBBBRRR 190 | BBFBFFFRRL 191 | FFFBFBBLLL 192 | BFBBFBFLLR 193 | BBFBBBBRRL 194 | BBFFBBFRRR 195 | BBBFFBBLRL 196 | FBFBFFFLLR 197 | BFFFBBBRRR 198 | FFBFFFFLLR 199 | FBBBFBFLLL 200 | FBBBFBBLRR 201 | BBBFBFBRRR 202 | FBBBFBFRRL 203 | BBBBFFBRLR 204 | FBFBBBBLLR 205 | FFFFBBFRLR 206 | BBFBBBFLLL 207 | BBFBBBBLRR 208 | FFFFBFBRRR 209 | FBFFFBFLRR 210 | BFFFBBFLRR 211 | BBBFBFFLLR 212 | BFFBBBBRLR 213 | FBFBBFBLLR 214 | BFBBBFFLRR 215 | BFFBBFFRRR 216 | FFFBFFFRLL 217 | FFBFBBBRRR 218 | BBBFFFBLLR 219 | BBFFFFFLLR 220 | FBBBBFBLRR 221 | FBFBBFFRRL 222 | BFBFBFFRRL 223 | BFFFFBFRRR 224 | FFBFFBBLLL 225 | BFBFBFBRRR 226 | BFFFFFFLLR 227 | FFFBBFBRRL 228 | BFBBBFBRRL 229 | BBFFFBFRLL 230 | BFBBBBBLRL 231 | FBFBBFFLRR 232 | FFBBBFFRLR 233 | FBBBFBBRRR 234 | FFBBBFFRRL 235 | FFBBBBFLLR 236 | BBFBBFBRRL 237 | BBFBBBFRLL 238 | BBFFFFFLRL 239 | BBBFFFBLLL 240 | BBFFFFFRRR 241 | FFBFBBBLRR 242 | FFBBBFFLRR 243 | BFFBFBFRLR 244 | FFBBBFBRRR 245 | FBBBBFBLRL 246 | BBBFBBBRLL 247 | FBFBFFBRRL 248 | BFFFFBBRRL 249 | BBFFBBFRLR 250 | FFBFBFFRLR 251 | BFFFBFBRRR 252 | BBBFBBFRRL 253 | FFFBFFFLRL 254 | FBBFFBFRRR 255 | FFBBBBBLLL 256 | FFBFFBFLRL 257 | FBFBFBBLRR 258 | FFFBFFBRLL 259 | BBBFFFBRRL 260 | BFBFBBBRLL 261 | BBBFFFFLRR 262 | BBFFBFFLLR 263 | FBBFFBFLRR 264 | FBBBFFBLRR 265 | BFBFFBBLLL 266 | FBFFFBBRLR 267 | FBBFBBBLLR 268 | BFBBBBBRLR 269 | FBBBFFFLLL 270 | BFFFBBFLLL 271 | BFFFFBBRLR 272 | FBBFBFBRLL 273 | FBFFBFBLRL 274 | BBBFFFFRLL 275 | FBFFFFFRLL 276 | FBBBFBFLRL 277 | FBFBBFBRRL 278 | FFBFBFFLLR 279 | BBBFFBBLLL 280 | FFBFBBFLLR 281 | BBBFBBFRLL 282 | BFFBFBBLRR 283 | FBBFBBFRRL 284 | FBFFBFFLLL 285 | BFBBFBFLLL 286 | FFBBFFBRLL 287 | BFFFFFFLLL 288 | BFFFFFFRLL 289 | BFBFFFFLRR 290 | FFBBFFFLRR 291 | BBFFBBBRLR 292 | BFFFFBFLRR 293 | FFBFBFFLRR 294 | BBBBBFFLRL 295 | BBFBBBBRLR 296 | BFFBFFBRLL 297 | BFBFBBFLRL 298 | FBFBBFBLLL 299 | BFFBBFFRLR 300 | FFFFBFBRLR 301 | BFBFBFBRLL 302 | BFBBFFBLRR 303 | BBBBBFFRLL 304 | BBFFFBBRLL 305 | BFBFBBBLLL 306 | FBBBFFFLRR 307 | FBBBBBFRRL 308 | BFFBBFBRRL 309 | FFBBFFBLLL 310 | FBFFFBFRLL 311 | BBBFFFBRLL 312 | FFFBBFFLLL 313 | BBFBFBBLLR 314 | FFFBFFBLRL 315 | BFFBBBBLLL 316 | BBFFBFFLRR 317 | FFBBFBFLRR 318 | BBBBFBFRRL 319 | BBFBFBBRRR 320 | BBFFFFBLLR 321 | BBBBFFBLLR 322 | BBBFFBFLRR 323 | FFBFFBBLRL 324 | BBFBBBFRLR 325 | FBFFBFFLRL 326 | FFFFBFBLRL 327 | BFBFFFBLRL 328 | FBBBFBFLRR 329 | BFFFBBBLLL 330 | FBBBFFFRRR 331 | BFBFBFFLLR 332 | BFFBFBFLLR 333 | FFFBBBFRRL 334 | BBBFFBFLLR 335 | FFBFBFBLLL 336 | BFBBBFFRLR 337 | BBBFFBFRRL 338 | FBFBFFFRLR 339 | BFBFBBFRRL 340 | FBFFFFFLRR 341 | BFBFFBBLLR 342 | BBFBFBBRLR 343 | FBBBFFFLRL 344 | BBBBFBBRRR 345 | FFBBBBFLLL 346 | FBFFFBBLLR 347 | FFBBBBBRRR 348 | BFFFBBBLRR 349 | BBFBBBBRLL 350 | BBFBFBFLRR 351 | BFBBFFBLLR 352 | FBBFFBBRLL 353 | FBBBBFFRLL 354 | FBFBFFBLLR 355 | FFBFBBBRRL 356 | FFFBBFBRLL 357 | BFFBBFBLLR 358 | BBBBBFFRRL 359 | BFBBFFBRRL 360 | BFFBFFBRLR 361 | FFBFBBFRRL 362 | FFFFBBFLRL 363 | BBFFFFBLRL 364 | BFBFFFBRLL 365 | BFBFFFFRRR 366 | BBBFFBBRRL 367 | FFFFBBFLLL 368 | BBBFFFFLRL 369 | BBBFBFFLLL 370 | FBFBFFBRLL 371 | FBBFFFBLRL 372 | BFBFBFFLLL 373 | BBBFFFBLRR 374 | FBFBFBFRLR 375 | BFBFBFFLRL 376 | BFFFBBBRRL 377 | BFBFFBBRLL 378 | FFBFFFBRLL 379 | FFBFFBFLLR 380 | FFFBFFBRRL 381 | FFBBFFFLRL 382 | BFBFFFFRRL 383 | FBFFFFFRRR 384 | BBFBBFBLLR 385 | FFBFBFBRLR 386 | BFFFBFFRRR 387 | FBBBBFBLLL 388 | BBFFBBBRRR 389 | BBFBBBBRRR 390 | BBBFBBBLRR 391 | BBFBBFBRLL 392 | BFBFBFFLRR 393 | FBFFFBFLRL 394 | FFFFBFFRRR 395 | BFFBFFFLRR 396 | FBFFBBBRLL 397 | BFFFBFBLLL 398 | FBBFBFBLLR 399 | FFBFFBBRRR 400 | BFBFBBFLRR 401 | BBFFFFBLLL 402 | FBBFFFFRRR 403 | FBFBBBFRRL 404 | FBBFFFBLLR 405 | FBFBBFBRLR 406 | BBFFBBBLLR 407 | FFFBBFFLRL 408 | BBFFBFBRRR 409 | BFBFFFFLRL 410 | FFFFBFBRLL 411 | FBFFFBFRRL 412 | BBBFBBBLRL 413 | FFBBBFFRLL 414 | BBFBFFBRRL 415 | BFFBFFBLLL 416 | BBFBBFBRRR 417 | FBBFBBFLLR 418 | BFFFFFFLRR 419 | FBBBBBBRRR 420 | BBFBBBFRRL 421 | FFFBBBFLLR 422 | FBBBBFFLRL 423 | FBFFBFFRLL 424 | BFBFBFBRLR 425 | FBBBFFFRLL 426 | BBFFFBBRRR 427 | BBFBFBBLRR 428 | BFFFFFBRLL 429 | FBFBFFFLLL 430 | FBFFBFBLLR 431 | BFFBFFBRRL 432 | BFBBFFFLRR 433 | BFBBBFBLLR 434 | FFFBBBBRLR 435 | FFBFFBFRRL 436 | FFBBBFBLLR 437 | BBFBFFBRRR 438 | FFBBBBBRLR 439 | BBFFBBBLLL 440 | BFBBFFBLLL 441 | BFBFBBFRRR 442 | BBBBFFFLLL 443 | FBBFFBBRRL 444 | FFBBBFBRRL 445 | BFBFBBBRRR 446 | FBFBBFFLLL 447 | FFBBFFFLLR 448 | FBBBBBFLLL 449 | FFBFBFFLRL 450 | FFBFFBFRRR 451 | FBBBFBBRLR 452 | BFFFFBFLRL 453 | FFFBFFFLLR 454 | BBFBFFBLLR 455 | FFBBFFBLRL 456 | FFFBFBBLRL 457 | BFFFBBBRLR 458 | BBFFFFBRRL 459 | FBBFFBBLRR 460 | FBFFFFFLRL 461 | BBFFBFFRLR 462 | BBFBFFFRLR 463 | FFFBFBFRLR 464 | BFFFBBFRRL 465 | BBBFFBFLLL 466 | BBFBBBBLRL 467 | BFFFFFBLLR 468 | BFFFFBBLLR 469 | BBBFFBFRRR 470 | BBFFFFFRRL 471 | BBFFFFBRLR 472 | FFBBBFFLRL 473 | BFFFBBBRLL 474 | BFFFBBFRLL 475 | FBFBBBFRLR 476 | BBFBFBFRRL 477 | FBFFBFBRLR 478 | FBFFBFFRRR 479 | FBFFFBBLRR 480 | BFFFBBFLRL 481 | FBFBFFBLRL 482 | FBBBBBBRRL 483 | BFFFBFBRLR 484 | FBBBBFBRLL 485 | BBFFBBFLLR 486 | BBFBBFFLRR 487 | FBFFFBFLLR 488 | FBBBFBBLLL 489 | FFBFFFBLRR 490 | BBFBFFBLRR 491 | FFBFFBBRLL 492 | BFFBBFFRLL 493 | FBFFFFBRRR 494 | FFFBFBBRRL 495 | BBBBFBFLLR 496 | BBFBFFFLRL 497 | BFBFFFFRLR 498 | BBFBFFFRRR 499 | BBBFBBBRRL 500 | BFFBBBBLRR 501 | BFFFBBBLRL 502 | BBFFFBBRLR 503 | FBBBFFBRLR 504 | FBBBFFBLLL 505 | FBBBBBBLRL 506 | BBBFFFBLRL 507 | FBFBFFFLRL 508 | BFBFFBFRLL 509 | BBFFFFBRLL 510 | BBFFFFFRLL 511 | FFFBFFFRRL 512 | BBFFBBFLRR 513 | BBBBFFFRRL 514 | BFFBBBBLLR 515 | BBBBFFFRLR 516 | BBBFFFBRLR 517 | FBBFFBBRLR 518 | BFFBBFBLLL 519 | BBBFBBFLRL 520 | BFBFBBFLLR 521 | BBFBBFFLRL 522 | BFFBBBFRRL 523 | FFFFBBFLRR 524 | FBFFBBBLLR 525 | BFBFBFBLLR 526 | FBBBFFBRRR 527 | FBBBBBFRLR 528 | BBFBFFBRLR 529 | BBFFBFFRLL 530 | FFFBFFBLLR 531 | BBFFBFBLRR 532 | FBFFFBBRRR 533 | BFFBBBBRRR 534 | FBFFBBBRRL 535 | BBFBFBFLLR 536 | FBFBBFFLRL 537 | BBBBFFFRRR 538 | BBFBFFFLLL 539 | BFFFBFBLLR 540 | FBBBBFFLRR 541 | FBFFBBFLLL 542 | FFFFBFBRRL 543 | BBFBFBFLLL 544 | BFBBFFBLRL 545 | BFFFBFBLRR 546 | BBBBFFBRRR 547 | FBFBBFBRRR 548 | FBBFBFBRLR 549 | FBBFBFFLRR 550 | FBFBBBBLRR 551 | FBBFBFFRLR 552 | FBBBBBFLRL 553 | FBBFBFFRLL 554 | FFBBFFBRRR 555 | BFBFBFBLRR 556 | FBBFBBBLRL 557 | FBBBFBFRRR 558 | BFFBFBFRRL 559 | FBBFFFFLRL 560 | BFBBBBFRLR 561 | FFBFBBBRLL 562 | BFFBBBBRRL 563 | BFBBFBBLLL 564 | FBFBFFFRRR 565 | BFBFBFBLRL 566 | FBBFFBFLLR 567 | FFFBFBBRRR 568 | FBBBBFFLLL 569 | FBFBBBBLRL 570 | FBBFBFBLRL 571 | FFBBFBBRRR 572 | FBFBFFBLRR 573 | FBFBFBBLLR 574 | FFFBFBFRLL 575 | FFFFBBFRRR 576 | BFBBBBBLLL 577 | BBFBBBBLLR 578 | FBBFFFFRRL 579 | FBBFBFBLLL 580 | BFFFBBFLLR 581 | FBBBFFBLLR 582 | FFBFFBFLLL 583 | BBBFFBBLLR 584 | BFBFFFFLLR 585 | FBFBBBFLRR 586 | FFBBBBFRRL 587 | FFFFBBBLRR 588 | FFBFFFFRRL 589 | BFBBFFFLRL 590 | BBBFBFBLLL 591 | FBFBBFBLRR 592 | BBFBBFBLLL 593 | BFFBFBBRLR 594 | BFBBFBBRRR 595 | FFBBFBFRLL 596 | BFFBFBFLLL 597 | BFFBBFBLRR 598 | FBBBBFBRRL 599 | BFBFBBBLRR 600 | FBBBBBBLLL 601 | BFFFBBBLLR 602 | BBFBFFFLLR 603 | BBBFFBBRLL 604 | BFFBBBFLRR 605 | BFFBFBFRRR 606 | BBBBBFFRLR 607 | BFFBFFFRLR 608 | FBFFFFFLLL 609 | BFFFBFBRLL 610 | FBBFBBFLLL 611 | FBBFBFBRRR 612 | FBFFBBFLLR 613 | FBBBFBFLLR 614 | FFFBFFFLRR 615 | FFBBBBFRRR 616 | BBBBFBFLRR 617 | FBFBFFBRRR 618 | BFFBFFBLLR 619 | FFBBFBBRLR 620 | FBFBFBBRRR 621 | FFBBBBBLRL 622 | FBBBBBFRRR 623 | FFFBFBFRRL 624 | FFBFBFBRRL 625 | BFBBBFBRLR 626 | BBBFBFFRRR 627 | BFFBBFBRLR 628 | BFFBBBBRLL 629 | FBBBBFFRRL 630 | BBBFBBBRLR 631 | BFFFFFFRRL 632 | FFFBBFFLRR 633 | BBFBFFBLRL 634 | BFFBFBFLRR 635 | BBBFFBBLRR 636 | BFBFFBFRRR 637 | BBBBFFBLLL 638 | FBFFBBBLRR 639 | BBFFBBFLLL 640 | FBFBBBBRRR 641 | BBFFBFBLLL 642 | BBBBFFFLRR 643 | FBFFBBBRLR 644 | BFBFFFBLRR 645 | BBFBBFFLLL 646 | BFFBBFFRRL 647 | BFFFBFFRRL 648 | BBFFFBBLRR 649 | FFBFFFFLRL 650 | FFBFBBFRLL 651 | FBFBFFFRLL 652 | BBFFFBFRLR 653 | FFFBBFBLRR 654 | BFBBBFBLLL 655 | BBFBFBFRLL 656 | BFBFBBFRLL 657 | BFFFFFBRRL 658 | FFBFBBBRLR 659 | BFBBFFBRLR 660 | BFBFBFFRLR 661 | FBBBBBBLRR 662 | FFBBBBFLRL 663 | FFFFBFBLRR 664 | FFBFFFBRRR 665 | FFBFBBFRLR 666 | BBBFFBFLRL 667 | FBBBBFFRLR 668 | BFFBBFBRLL 669 | BFFBBBFRLR 670 | FFFBFFBRRR 671 | BBBFBBBRRR 672 | FBFFBFFRRL 673 | FBFFFBFLLL 674 | BFBBBFFRRL 675 | BBFBFBBRLL 676 | BBFBFBBRRL 677 | FFFBFBFRRR 678 | BFBBFBBLRR 679 | FFFBBBFRRR 680 | BFFBFBBLRL 681 | BFFBFFBLRR 682 | BFBBBFFRRR 683 | FFFBBBFLRL 684 | FFBBFBFRRR 685 | FFBFBFBRLL 686 | FFBFFFBLLR 687 | FBBBBBBRLL 688 | FFFFBFBLLR 689 | FFBBFFFRRR 690 | FFFBFFFLLL 691 | FFBBFBBLLR 692 | FFBBBBFLRR 693 | FBBFFBBLLL 694 | BFBBFBBRLR 695 | FFFBFBBLLR 696 | BBFFBFBLRL 697 | FFBFBBFRRR 698 | BBBBFBBRLR 699 | BBBFBBFRLR 700 | BBFFBFFRRR 701 | FFBBBBBLLR 702 | FBFFBFBLRR 703 | FBBBBFBRLR 704 | FFFFBBFLLR 705 | BFBFBBFLLL 706 | FBBFBFBLRR 707 | FBBFFBFRLL 708 | BBFFFFFRLR 709 | FFBBFBFLRL 710 | BFBFBBBRLR 711 | FBBFBBFRRR 712 | FBFBFBBLRL 713 | BBBFFBBRRR 714 | FBBFFBBRRR 715 | FBFFFFBRLR 716 | FBBFBBFLRL 717 | FFFBBFBRRR 718 | FBFBBBBRLR 719 | FBBFFBBLLR 720 | FFFBBBBRRR 721 | BBBBBFFLLR 722 | FFFFBBBLLL 723 | BFFBBBFRLL 724 | FBFBBFBLRL 725 | BBBBFBFRLR 726 | BBFBFFBLLL 727 | BFBFFBFLRR 728 | BFFFFFBLRL 729 | BBBFBBFRRR 730 | FFBBBBBLRR 731 | FBFFFFFLLR 732 | FBFBBFFRLL 733 | BFBBBBBRRL 734 | FBFBFBBRLL 735 | FBBFBBBRRL 736 | FBFFBBBLRL 737 | BFFFBFFLLL 738 | BFBBBBBRRR 739 | FFFBBFFRRR 740 | BBFBBBFLRL 741 | FFFFBBFRLL 742 | FBFFFFFRLR 743 | FFFFBBBRLR 744 | FBFFBBFRLR 745 | FFFFBBBRLL 746 | BBFFBBBLRL 747 | FFBFBBFLRR 748 | BFBBBBBLRR 749 | BFFFFBBLLL 750 | FBFBBBBRRL 751 | BBBFBFFRRL 752 | BFBBFBBLRL 753 | BFBBBBFRRL 754 | FBFFFBBLLL 755 | FFBBFBBLRL 756 | BBFBFFBRLL 757 | BBBFFFFRRR 758 | FFFBBBBLRR 759 | FFFBBFBLRL 760 | FFFBBBBLLR 761 | BFBFBBBRRL 762 | BBBBBFFLRR 763 | BBBBFBBLLL 764 | BBBBFBBLRR 765 | FFFBBBFRLR 766 | FBBBFFFLLR 767 | BFFFBFBRRL 768 | BBFFFBFLLR 769 | BFBBFBFRLL 770 | BFBBBFFLRL 771 | FFBFFBBRRL 772 | FBFBBFFRLR 773 | BFFFFFBRRR 774 | FBFFFFBLLR 775 | FBBFBFFLLR 776 | FBBBFFFRLR 777 | FBFBFBFLLR 778 | FFFBBFBLLR 779 | BFBFFBFRRL 780 | FFFBBFBRLR 781 | FFBBFBBLRR 782 | FBBBFBBLLR 783 | BBBFFFFLLR 784 | BBBBFBFLLL 785 | BBFFFBFLLL 786 | BFFFBFFLRL 787 | BBFBBFFRLR 788 | BBFFBBFLRL 789 | FBBBBFBRRR 790 | FBBFFBFLLL 791 | FFFBFFBLRR 792 | FFBBFFFRLR 793 | FBBFFFBRLR 794 | BBBFBFBRLL 795 | BFBBFFFLLL 796 | FFFBBFFRLL 797 | BBFFBFBRLL 798 | FFBBBBBRRL 799 | FBFFBBBLLL 800 | FBBFFFBRRR 801 | BFFFBFFRLL 802 | FFBBBFFLLR 803 | FBBFBBFRLL 804 | FBBFFFFLRR 805 | FBBBBBFRLL 806 | BBBFFBBRLR 807 | FBFFBBFLRL 808 | FBBFFFBLLL 809 | BFBBBFFRLL 810 | FFFBBFFRLR 811 | BFBFFFBLLL 812 | FFFFBBBLLR 813 | BFFBFFFLLL 814 | BFBBFFBRRR 815 | BFFBFBBLLR 816 | FFBFFBFRLL 817 | FFFBBFFLLR 818 | FBFFFFFRRL 819 | BFFBBFFLRR 820 | FFBBFFBLLR 821 | FBBBFFBRRL 822 | FBBBFBBLRL 823 | BBFFBFFLRL 824 | BBBBFFBRRL 825 | BFBFFBBLRL 826 | BFBBFBFRRR 827 | FFFBBBBRLL 828 | FBBFBBBRRR 829 | BBBBFFFLRL 830 | FBFFBFBRRR 831 | BBBBFFFLLR 832 | FBBFFBFRLR 833 | FFFBBBBLRL 834 | BBFBBFBLRL 835 | BFBBBBFLLR 836 | BBBFBFBRRL 837 | BFBBBBFLLL 838 | BFBFFFBRRR 839 | FFBBFFBRLR 840 | FBBBFFFRRL 841 | BFFFFBBRRR 842 | FBFBBFBRLL 843 | BFBBFFBRLL 844 | FBBFBFFLRL 845 | BFFBBBBLRL 846 | BFFBFBFLRL 847 | FBBBFBBRRL 848 | BFBBBBFLRR 849 | BFBFFBBRRR 850 | BFFFBBFRLR 851 | BFFBFFBLRL 852 | BFFBBFBRRR 853 | BBFFBBBRRL 854 | BBBBFBBRLL 855 | FBBFBBBLRR 856 | FFBFBFFRLL 857 | FFBFFFFRRR 858 | BFFBBFFLRL 859 | BFBBFBBRLL 860 | BFBFFBBLRR 861 | FBFBFBFRRR 862 | BBFFFBFRRR 863 | BBFBBFFRRR 864 | FFBFBBBLLR 865 | FFFBFBFLLL 866 | BBFFFBBLLL 867 | FFBBFBBLLL 868 | BFBBFFFRRR 869 | BFBFBBBLRL 870 | FBFBBBFLRL 871 | BFBFBFBRRL 872 | FFFBFBFLLR 873 | BBFFFFBLRR 874 | BBFBFBFRLR 875 | FFBBFBFLLL 876 | BFBBBFBRLL 877 | BBBFFBFRLR 878 | BFFFFBFLLL 879 | FFBBBBFRLL 880 | BBFBBFFRLL 881 | BFFFBFFLRR 882 | BBFBBBFLLR 883 | FFBFBBFLRL 884 | BBBBFFBLRL 885 | BFBBBFBRRR 886 | FBBFBFFLLL 887 | FBFFBFFRLR 888 | BFFBFFFLRL 889 | FBFFBFFLLR 890 | FBFBBBBRLL 891 | BBFFFBFLRL 892 | BBFBBFBLRR 893 | BFFFFBBLRL 894 | BBFBFBFLRL 895 | FBBFBBBRLL 896 | FBBFFFFRLL 897 | FFBFBBBLLL 898 | FFBFFBBLLR 899 | BFBBBFFLLR 900 | BBBFBFFRLR 901 | BFFBFFFRRL 902 | BBFFBBBRLL 903 | BBFFBBFRLL 904 | FBBBBBBLLR 905 | BFFBFBBRRR 906 | BBFFFBBRRL 907 | FFBFFFFRLL 908 | FFFBFBBLRR 909 | BBFFBFBRRL 910 | BBFFFBBLRL 911 | FBFFFFBLRL 912 | BFFFFBFRLL 913 | BFFBBBFLLL 914 | BFBBFBFRRL 915 | FBBFFFBLRR 916 | FFBFFFFRLR 917 | FBBFFFFLLL 918 | FBFBBFFRRR 919 | FBFBBFFLLR 920 | FFBFFFBRRL 921 | BFBBBBFRLL 922 | BFFBBBFLRL 923 | FBFFBFBRRL 924 | FFBFFFFLRR 925 | FBBBFBBRLL 926 | BBFBBBFRRR 927 | BFFBFFFRLL 928 | FFFBBFFRRL 929 | BFBFFFBLLR 930 | FBFFFBFRLR 931 | FBFBBBFLLL 932 | FFBBFBFRRL 933 | BBBFBFFRLL 934 | FBFFBFFLRR 935 | BBFBBBFLRR 936 | FFBBBFBLRR 937 | FFFBFFFRLR 938 | FBFBFFBLLL 939 | BFBBBFFLLL 940 | BFFFFBBLRR 941 | FBFBBBFLLR 942 | FBFFBBFLRR 943 | FFBBFBBRRL 944 | BBFBFFFLRR 945 | BBFFBFFRRL 946 | FFBBFFFLLL 947 | FFBFBFFRRL 948 | BBBFBFBRLR 949 | BFBFFFBRLR 950 | FBFBBBBLLL 951 | FFBBBBBRLL 952 | FBBFBBBLLL 953 | BFFFBBFRRR 954 | BFBFFBFRLR 955 | BBBFFFFRLR 956 | FBFFBBFRLL 957 | FFBBFBFRLR 958 | BFFBFBBRLL 959 | BFBFBFFRRR 960 | FBBFFFBRLL -------------------------------------------------------------------------------- /05-binary-boarding/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | int get_seat_id(string seat) { 5 | string row = seat.substr(0, 7), col = seat.substr(7, 3); 6 | 7 | replace(row.begin(), row.end(), 'F', '0'); 8 | replace(row.begin(), row.end(), 'B', '1'); 9 | replace(col.begin(), col.end(), 'L', '0'); 10 | replace(col.begin(), col.end(), 'R', '1'); 11 | 12 | return stoi(row, nullptr, 2) * 8 + stoi(col, nullptr, 2); 13 | } 14 | 15 | int p1(vector seats) { 16 | return *max_element(seats.begin(), seats.end()); 17 | } 18 | 19 | int p2(vector seats) { 20 | sort(seats.begin(), seats.end(), less()); 21 | for (int i = 0; i < seats.size(); i++) 22 | if (seats[i] == seats[i+1]-2) return seats[i]+1; 23 | } 24 | 25 | int main() { 26 | string seat; 27 | vector seats; 28 | 29 | while (getline(cin, seat)) 30 | seats.push_back(get_seat_id(seat)); 31 | 32 | cout << p1(seats) << endl; 33 | cout << p2(seats) << endl; 34 | } -------------------------------------------------------------------------------- /06-custom-customs/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | typedef vector Group; 5 | 6 | int get_anyone(Group group) { 7 | auto lambda = [](const string& a, const string &b) { return a+b; }; 8 | string imploded = accumulate(group.begin(), group.end(), string(), lambda); 9 | return set(imploded.begin(), imploded.end()).size(); 10 | } 11 | 12 | int get_everyone(Group group) { 13 | vector> sets; 14 | 15 | for (string ans: group) 16 | sets.push_back(set(ans.begin(), ans.end())); 17 | 18 | set curr, last = sets[0]; 19 | 20 | for (size_t i = 1; i < sets.size(); i++) { 21 | set_intersection(last.begin(), last.end(), sets[i].begin(), sets[i].end(), inserter(curr, curr.begin())); 22 | swap(last, curr); curr.clear(); 23 | } 24 | return last.size(); 25 | } 26 | 27 | int p1(vector groups) { 28 | return accumulate(groups.begin(), groups.end(), 0, [=](int sum, Group group) { 29 | return sum + get_anyone(group); 30 | }); 31 | } 32 | 33 | int p2(vector groups) { 34 | return accumulate(groups.begin(), groups.end(), 0, [=](int sum, Group group) { 35 | return sum + get_everyone(group); 36 | }); 37 | } 38 | 39 | int main() { 40 | vector groups; 41 | 42 | while (!cin.eof()) { 43 | string line; 44 | vector group; 45 | 46 | while (getline(cin, line) && !line.empty()) 47 | group.push_back(line); 48 | 49 | groups.push_back(group); 50 | } 51 | 52 | cout << p1(groups) << endl; 53 | cout << p2(groups) << endl; 54 | } -------------------------------------------------------------------------------- /07-handy-haversacks/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace std; 4 | 5 | typedef map> BagMap; 6 | BagMap bags; 7 | 8 | bool find_bag(string key, string target) { 9 | if (bags[key].find(target) != bags[key].end()) 10 | return true; 11 | 12 | for (auto child : bags[key]) { 13 | bool found = find_bag(child.first, target); 14 | if (found) return true; 15 | } 16 | 17 | return false; 18 | } 19 | 20 | int count_bags(string key) { 21 | int count = 0; 22 | if (bags[key].size() == 0) return 0; 23 | 24 | for (auto child : bags[key]) 25 | count += (child.second + child.second * count_bags(child.first)); 26 | 27 | return count; 28 | } 29 | 30 | int p2(string target) { 31 | return count_bags(target); 32 | } 33 | 34 | int p1(string target) { 35 | return count_if(bags.begin(), bags.end(), [=](auto const& bag) { 36 | return find_bag(bag.first, target); 37 | }); 38 | } 39 | 40 | int main() { 41 | string line; 42 | 43 | while (getline(cin, line)) { 44 | line = regex_replace(line, regex(" bags contain "), ";"); 45 | stringstream ss(line); 46 | 47 | vector big; 48 | for (string token; getline(ss, token, ';');) 49 | big.push_back(token); 50 | 51 | string temp = regex_replace(big[1], regex(", "), ";"); 52 | stringstream sst(temp); 53 | 54 | for (string token; getline(sst, token, ';');) { 55 | smatch match; 56 | if (regex_search(token, match, regex("(\\d+) (.+) bags?.?"))) 57 | bags[big[0]][match[2]] = stoi(match[1]); 58 | } 59 | } 60 | 61 | cout << p1("shiny gold") << endl; 62 | cout << p2("shiny gold") << endl; 63 | } 64 | -------------------------------------------------------------------------------- /08-handheld-halting/GB.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | enum OpCode {ACC, JMP, NOP}; 5 | 6 | static map opcode_table = { 7 | { "acc", OpCode::ACC }, 8 | { "jmp", OpCode::JMP }, 9 | { "nop", OpCode::NOP } 10 | }; 11 | 12 | struct Instruction { 13 | OpCode opcode; 14 | int value; 15 | 16 | Instruction(string opcode, int value) { 17 | this->opcode = opcode_table[opcode]; 18 | this->value = value; 19 | } 20 | }; 21 | 22 | struct GB { 23 | int accumulator = 0, ip = 0; 24 | vector instructions; 25 | bool exited = false; 26 | 27 | GB(vector instructions) { 28 | this->instructions = instructions; 29 | } 30 | 31 | void step() { 32 | Instruction inst = this->instructions[this->ip]; 33 | 34 | switch (inst.opcode) { 35 | case OpCode::ACC: 36 | this->accumulator += inst.value; 37 | break; 38 | 39 | case OpCode::JMP: 40 | this->ip += inst.value - 1; 41 | break; 42 | 43 | default: 44 | break; 45 | } 46 | 47 | if (++ip >= instructions.size()) 48 | this->exited = true; 49 | } 50 | }; 51 | -------------------------------------------------------------------------------- /08-handheld-halting/input.txt: -------------------------------------------------------------------------------- 1 | acc -8 2 | acc +19 3 | nop +178 4 | jmp +493 5 | acc +7 6 | jmp +267 7 | jmp +604 8 | acc +30 9 | acc +11 10 | acc -17 11 | nop +402 12 | jmp +81 13 | acc +20 14 | acc +19 15 | acc +36 16 | jmp +6 17 | acc +43 18 | acc +6 19 | acc +10 20 | nop +326 21 | jmp +228 22 | nop +371 23 | acc +49 24 | nop +140 25 | acc -11 26 | jmp +3 27 | nop +366 28 | jmp +74 29 | nop +229 30 | jmp +554 31 | acc +12 32 | acc +6 33 | jmp +163 34 | acc +43 35 | acc +23 36 | jmp +310 37 | acc -6 38 | nop +341 39 | acc +50 40 | acc +44 41 | jmp +378 42 | acc +28 43 | acc +29 44 | nop +76 45 | jmp +136 46 | nop +445 47 | acc +27 48 | acc -8 49 | acc +34 50 | jmp +199 51 | acc +39 52 | acc +25 53 | acc -14 54 | acc +1 55 | jmp +189 56 | acc +2 57 | acc -9 58 | jmp -7 59 | acc +28 60 | acc +28 61 | jmp +458 62 | jmp +1 63 | nop +299 64 | jmp +427 65 | acc +10 66 | acc +32 67 | jmp +340 68 | acc +26 69 | jmp +563 70 | jmp +1 71 | acc +9 72 | jmp +42 73 | acc +4 74 | jmp +468 75 | acc +1 76 | acc +3 77 | jmp +258 78 | acc +29 79 | acc +7 80 | acc -5 81 | jmp +288 82 | acc +22 83 | acc +32 84 | acc -6 85 | jmp +173 86 | acc +48 87 | acc +42 88 | acc +26 89 | jmp +380 90 | jmp +126 91 | acc +45 92 | jmp -27 93 | acc +50 94 | jmp +14 95 | jmp +472 96 | acc -19 97 | jmp +363 98 | acc +19 99 | acc -8 100 | acc +25 101 | jmp +450 102 | acc -7 103 | acc +27 104 | acc +44 105 | acc +17 106 | jmp +487 107 | jmp +89 108 | nop +216 109 | nop +345 110 | acc -1 111 | acc +37 112 | jmp +455 113 | jmp +294 114 | acc +20 115 | acc +38 116 | jmp +419 117 | acc +17 118 | acc +17 119 | jmp +125 120 | jmp +81 121 | acc +37 122 | acc -8 123 | acc +9 124 | acc +31 125 | jmp +218 126 | acc +24 127 | acc +28 128 | acc -4 129 | acc -12 130 | jmp -40 131 | acc +40 132 | nop +359 133 | nop +182 134 | nop +306 135 | jmp +296 136 | acc -8 137 | jmp +1 138 | nop +43 139 | acc -14 140 | jmp +239 141 | acc +13 142 | acc +10 143 | jmp +1 144 | jmp -36 145 | acc -16 146 | acc +2 147 | jmp +344 148 | jmp +442 149 | acc +35 150 | acc +2 151 | acc +27 152 | acc +17 153 | jmp -27 154 | nop +478 155 | acc +6 156 | acc +7 157 | jmp +454 158 | nop -145 159 | acc +20 160 | acc -6 161 | jmp +182 162 | nop +251 163 | jmp -37 164 | acc +26 165 | jmp +300 166 | acc +29 167 | acc +44 168 | acc +32 169 | nop +56 170 | jmp +31 171 | acc -16 172 | jmp +53 173 | acc -9 174 | jmp +84 175 | jmp +1 176 | nop +30 177 | acc -15 178 | jmp +262 179 | acc -19 180 | jmp +163 181 | jmp +441 182 | acc +27 183 | jmp +449 184 | acc +42 185 | acc +45 186 | acc +21 187 | acc +22 188 | jmp +338 189 | acc +24 190 | jmp +301 191 | acc +42 192 | acc +42 193 | acc +26 194 | jmp +348 195 | jmp +361 196 | acc -5 197 | acc -19 198 | acc +4 199 | jmp -117 200 | jmp +254 201 | jmp +1 202 | acc +47 203 | acc -3 204 | jmp +271 205 | jmp +388 206 | acc +2 207 | acc -17 208 | acc +37 209 | jmp -73 210 | acc +37 211 | acc +34 212 | jmp +1 213 | jmp -148 214 | jmp -56 215 | jmp +103 216 | acc -5 217 | acc +23 218 | acc +3 219 | jmp +405 220 | nop +255 221 | acc +14 222 | nop -41 223 | acc +12 224 | jmp +94 225 | acc +22 226 | acc +30 227 | jmp -107 228 | acc +12 229 | acc -2 230 | jmp +65 231 | acc +35 232 | acc -4 233 | jmp -174 234 | nop -159 235 | acc +47 236 | jmp -52 237 | acc +35 238 | jmp +73 239 | acc +1 240 | acc +19 241 | acc +35 242 | acc +15 243 | jmp -59 244 | jmp +312 245 | acc +20 246 | acc +25 247 | acc +45 248 | jmp -4 249 | acc -4 250 | nop -160 251 | acc -8 252 | acc +31 253 | jmp +166 254 | acc +20 255 | acc +16 256 | acc -1 257 | jmp +234 258 | acc +0 259 | jmp -45 260 | acc +47 261 | acc +17 262 | nop -187 263 | nop +206 264 | jmp +17 265 | acc +36 266 | acc +0 267 | acc +7 268 | jmp +263 269 | acc +32 270 | acc -6 271 | nop +35 272 | jmp -101 273 | acc +49 274 | nop -60 275 | jmp +118 276 | acc -1 277 | acc -7 278 | nop -94 279 | acc +21 280 | jmp +82 281 | nop +216 282 | acc +5 283 | nop -99 284 | jmp -47 285 | acc +31 286 | acc +2 287 | acc +26 288 | acc +27 289 | jmp -224 290 | acc +15 291 | acc +48 292 | jmp +220 293 | nop +152 294 | jmp -69 295 | acc +4 296 | acc +24 297 | jmp +200 298 | acc +14 299 | jmp +126 300 | acc +48 301 | acc +47 302 | acc +10 303 | jmp +26 304 | acc +16 305 | jmp -203 306 | acc +21 307 | jmp -158 308 | acc -15 309 | acc -13 310 | jmp -94 311 | jmp -136 312 | nop -247 313 | acc +16 314 | jmp -130 315 | acc +31 316 | jmp +115 317 | jmp -159 318 | acc +7 319 | acc +50 320 | jmp +52 321 | acc +22 322 | acc +26 323 | jmp +249 324 | acc -18 325 | jmp +1 326 | jmp -251 327 | nop +254 328 | jmp -127 329 | acc +37 330 | jmp -93 331 | nop +73 332 | acc +11 333 | acc +36 334 | jmp +277 335 | acc +29 336 | acc +16 337 | jmp -88 338 | nop +8 339 | acc +18 340 | acc +47 341 | acc -9 342 | jmp +184 343 | jmp -142 344 | acc +50 345 | jmp +287 346 | jmp -250 347 | jmp -296 348 | jmp -83 349 | acc +13 350 | acc +29 351 | acc +28 352 | acc +16 353 | jmp +40 354 | acc +33 355 | acc -13 356 | jmp +43 357 | nop +275 358 | acc +24 359 | nop -257 360 | nop -65 361 | jmp -112 362 | acc +4 363 | acc +38 364 | jmp -193 365 | jmp +1 366 | acc -18 367 | acc +15 368 | jmp -223 369 | acc -18 370 | jmp -55 371 | jmp -207 372 | acc -6 373 | jmp -215 374 | acc +16 375 | acc +44 376 | jmp +1 377 | acc +47 378 | jmp -35 379 | acc +47 380 | acc +47 381 | acc +35 382 | jmp +144 383 | jmp +1 384 | acc +45 385 | acc +25 386 | jmp -293 387 | acc +32 388 | jmp -381 389 | nop +65 390 | jmp +1 391 | acc +2 392 | jmp -74 393 | acc -13 394 | acc -9 395 | acc +4 396 | jmp -251 397 | jmp +1 398 | jmp +71 399 | acc -12 400 | acc +7 401 | acc +15 402 | jmp +11 403 | jmp -68 404 | acc +33 405 | jmp -330 406 | jmp +48 407 | acc -15 408 | acc -11 409 | jmp +97 410 | acc -9 411 | acc -10 412 | jmp +100 413 | acc +29 414 | acc +21 415 | jmp -134 416 | acc -18 417 | acc +38 418 | jmp +67 419 | jmp -12 420 | acc +27 421 | acc +26 422 | acc -8 423 | acc -2 424 | jmp -124 425 | jmp +165 426 | nop -245 427 | acc -16 428 | acc +25 429 | acc -19 430 | jmp -328 431 | nop -182 432 | acc -7 433 | acc +46 434 | jmp -250 435 | acc +45 436 | acc -7 437 | nop -256 438 | acc -2 439 | jmp +21 440 | acc +21 441 | acc +37 442 | jmp +156 443 | nop +32 444 | jmp -195 445 | nop -355 446 | acc -14 447 | nop -302 448 | acc +48 449 | jmp -407 450 | acc +50 451 | acc -9 452 | acc +47 453 | jmp -110 454 | acc +31 455 | acc +37 456 | acc +15 457 | jmp -162 458 | acc -14 459 | jmp -437 460 | acc +44 461 | jmp +1 462 | acc +24 463 | jmp -139 464 | jmp -362 465 | acc +40 466 | jmp -41 467 | acc +38 468 | jmp -231 469 | acc +31 470 | acc +23 471 | jmp +135 472 | acc -19 473 | acc +15 474 | jmp +148 475 | acc +16 476 | acc -18 477 | acc -3 478 | acc +1 479 | jmp -189 480 | acc -12 481 | acc -6 482 | acc -18 483 | nop -454 484 | jmp +83 485 | nop -190 486 | jmp -17 487 | acc -7 488 | acc +34 489 | acc -1 490 | jmp +94 491 | acc +42 492 | jmp +34 493 | nop -150 494 | nop +90 495 | nop -126 496 | jmp -161 497 | acc +5 498 | acc +11 499 | acc +20 500 | acc +38 501 | jmp -97 502 | acc +49 503 | acc +29 504 | acc +26 505 | jmp -36 506 | acc +4 507 | acc -14 508 | acc +30 509 | acc +42 510 | jmp -192 511 | jmp -336 512 | acc +34 513 | acc +31 514 | acc +2 515 | acc +33 516 | jmp +65 517 | acc +4 518 | jmp -459 519 | nop -399 520 | acc -6 521 | nop -256 522 | jmp -420 523 | acc -12 524 | acc -17 525 | jmp -276 526 | acc +45 527 | acc +40 528 | jmp -180 529 | acc +50 530 | jmp -501 531 | acc +17 532 | jmp -232 533 | acc +12 534 | jmp -109 535 | nop -291 536 | nop -345 537 | jmp +100 538 | acc +36 539 | acc +2 540 | acc -2 541 | jmp +1 542 | acc +23 543 | nop -299 544 | acc +24 545 | acc +30 546 | jmp -476 547 | acc +0 548 | acc +6 549 | acc +49 550 | jmp +6 551 | nop -461 552 | jmp -539 553 | nop -62 554 | acc +48 555 | jmp -526 556 | jmp -365 557 | acc +47 558 | acc +10 559 | acc +32 560 | jmp -490 561 | nop -148 562 | acc +42 563 | acc +5 564 | jmp -358 565 | acc -5 566 | jmp -101 567 | jmp -502 568 | acc +15 569 | acc +45 570 | nop -399 571 | jmp +1 572 | acc +31 573 | acc +47 574 | acc +49 575 | jmp -269 576 | acc +6 577 | acc +45 578 | acc -8 579 | acc -6 580 | jmp +36 581 | jmp +51 582 | acc +39 583 | jmp -64 584 | acc +47 585 | jmp +1 586 | acc -8 587 | jmp -102 588 | acc -8 589 | jmp -202 590 | jmp -18 591 | acc +1 592 | jmp -484 593 | acc +35 594 | acc +30 595 | acc +49 596 | jmp -562 597 | jmp -515 598 | acc -13 599 | nop -6 600 | jmp -369 601 | acc +27 602 | acc +18 603 | nop -477 604 | acc -10 605 | jmp -430 606 | jmp +1 607 | acc +7 608 | nop -111 609 | jmp -445 610 | jmp +12 611 | jmp -50 612 | acc +7 613 | acc +3 614 | nop -433 615 | jmp -390 616 | acc -5 617 | acc +50 618 | jmp -67 619 | acc +45 620 | acc -10 621 | jmp -446 622 | jmp -496 623 | jmp -17 624 | acc +14 625 | acc +33 626 | jmp -239 627 | acc +3 628 | acc -3 629 | acc +27 630 | acc -3 631 | jmp -162 632 | jmp -16 633 | acc +23 634 | acc +26 635 | acc +25 636 | jmp -346 637 | acc +40 638 | acc +45 639 | acc +42 640 | acc -4 641 | jmp +1 -------------------------------------------------------------------------------- /08-handheld-halting/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "GB.cpp" 3 | using namespace std; 4 | 5 | GB p1(vector instructions) { 6 | GB gameboy(instructions); 7 | set ips; 8 | 9 | while (ips.find(gameboy.ip) == ips.end() && !gameboy.exited) { 10 | ips.insert(gameboy.ip); 11 | gameboy.step(); 12 | } 13 | return gameboy; 14 | } 15 | 16 | GB p2(vector instructions) { 17 | vector copy = instructions; 18 | 19 | for (int i = 0; i < instructions.size(); i++, instructions = copy) { 20 | switch (instructions[i].opcode) { 21 | case OpCode::NOP: 22 | instructions[i].opcode = OpCode::JMP; 23 | break; 24 | 25 | case OpCode::JMP: 26 | instructions[i].opcode = OpCode::NOP; 27 | break; 28 | 29 | default: 30 | break; 31 | } 32 | 33 | GB gameboy = p1(instructions); 34 | if (gameboy.exited) return gameboy; 35 | } 36 | } 37 | 38 | int main() { 39 | vector instructions; 40 | 41 | for (string line; getline(cin, line);) { 42 | stringstream ss(line); 43 | vector tokens; 44 | 45 | for (string token; getline(ss, token, ' ');) 46 | tokens.push_back(token); 47 | 48 | Instruction i = Instruction(tokens[0], stoi(tokens[1])); 49 | instructions.push_back(i); 50 | } 51 | 52 | cout << p1(instructions).accumulator << endl; 53 | cout << p2(instructions).accumulator << endl; 54 | } 55 | -------------------------------------------------------------------------------- /09-encoding-error/input.txt: -------------------------------------------------------------------------------- 1 | 24 2 | 27 3 | 31 4 | 3 5 | 26 6 | 29 7 | 14 8 | 16 9 | 25 10 | 15 11 | 32 12 | 6 13 | 41 14 | 22 15 | 2 16 | 1 17 | 12 18 | 8 19 | 7 20 | 4 21 | 48 22 | 13 23 | 47 24 | 34 25 | 5 26 | 18 27 | 33 28 | 11 29 | 45 30 | 3 31 | 9 32 | 10 33 | 14 34 | 21 35 | 16 36 | 15 37 | 17 38 | 20 39 | 19 40 | 6 41 | 22 42 | 23 43 | 12 44 | 8 45 | 7 46 | 26 47 | 24 48 | 13 49 | 25 50 | 27 51 | 29 52 | 18 53 | 28 54 | 35 55 | 42 56 | 30 57 | 31 58 | 32 59 | 14 60 | 33 61 | 21 62 | 46 63 | 36 64 | 37 65 | 15 66 | 19 67 | 40 68 | 63 69 | 20 70 | 22 71 | 38 72 | 67 73 | 34 74 | 39 75 | 43 76 | 41 77 | 53 78 | 29 79 | 44 80 | 45 81 | 76 82 | 84 83 | 50 84 | 35 85 | 55 86 | 42 87 | 56 88 | 74 89 | 48 90 | 73 91 | 49 92 | 58 93 | 88 94 | 51 95 | 63 96 | 64 97 | 69 98 | 68 99 | 70 100 | 71 101 | 77 102 | 78 103 | 86 104 | 85 105 | 95 106 | 90 107 | 114 108 | 138 109 | 83 110 | 91 111 | 136 112 | 206 113 | 153 114 | 97 115 | 121 116 | 119 117 | 109 118 | 115 119 | 120 120 | 131 121 | 139 122 | 137 123 | 141 124 | 207 125 | 181 126 | 155 127 | 163 128 | 173 129 | 176 130 | 174 131 | 210 132 | 180 133 | 305 134 | 192 135 | 212 136 | 369 137 | 303 138 | 228 139 | 206 140 | 224 141 | 234 142 | 229 143 | 317 144 | 251 145 | 280 146 | 350 147 | 278 148 | 296 149 | 318 150 | 379 151 | 328 152 | 336 153 | 382 154 | 497 155 | 354 156 | 372 157 | 386 158 | 440 159 | 398 160 | 418 161 | 524 162 | 587 163 | 479 164 | 430 165 | 453 166 | 707 167 | 696 168 | 812 169 | 697 170 | 664 171 | 596 172 | 574 173 | 771 174 | 722 175 | 682 176 | 1175 177 | 690 178 | 758 179 | 1140 180 | 726 181 | 826 182 | 784 183 | 816 184 | 897 185 | 992 186 | 883 187 | 1066 188 | 909 189 | 1112 190 | 1179 191 | 1170 192 | 1296 193 | 1318 194 | 2088 195 | 1238 196 | 1380 197 | 1300 198 | 1995 199 | 1372 200 | 1466 201 | 1416 202 | 1448 203 | 1896 204 | 1510 205 | 1542 206 | 2112 207 | 1986 208 | 1725 209 | 1780 210 | 3008 211 | 1949 212 | 1975 213 | 3412 214 | 2282 215 | 2721 216 | 2408 217 | 2734 218 | 2828 219 | 2864 220 | 3018 221 | 3459 222 | 2672 223 | 2788 224 | 2820 225 | 2882 226 | 2958 227 | 3228 228 | 3322 229 | 4231 230 | 3267 231 | 4670 232 | 3505 233 | 3674 234 | 4957 235 | 4257 236 | 4683 237 | 4383 238 | 5522 239 | 4690 240 | 5129 241 | 5080 242 | 5406 243 | 5460 244 | 5492 245 | 5554 246 | 6247 247 | 8175 248 | 5608 249 | 10162 250 | 8195 251 | 9663 252 | 6495 253 | 6589 254 | 6772 255 | 7888 256 | 10278 257 | 8803 258 | 9763 259 | 8640 260 | 13803 261 | 9073 262 | 10928 263 | 10182 264 | 9770 265 | 10540 266 | 10486 267 | 10866 268 | 10952 269 | 11046 270 | 14411 271 | 14422 272 | 12103 273 | 17541 274 | 16981 275 | 18573 276 | 13084 277 | 18918 278 | 24897 279 | 14660 280 | 16528 281 | 17876 282 | 17443 283 | 17713 284 | 18843 285 | 19255 286 | 19559 287 | 19952 288 | 24908 289 | 20310 290 | 35824 291 | 21352 292 | 25363 293 | 24036 294 | 23149 295 | 31188 296 | 25187 297 | 26763 298 | 27744 299 | 29612 300 | 39565 301 | 38870 302 | 40023 303 | 32103 304 | 57441 305 | 38795 306 | 38814 307 | 35156 308 | 36968 309 | 38098 310 | 39207 311 | 39511 312 | 44501 313 | 41662 314 | 43459 315 | 64233 316 | 91977 317 | 47185 318 | 65558 319 | 48336 320 | 51950 321 | 54799 322 | 66614 323 | 90745 324 | 82970 325 | 71310 326 | 76912 327 | 67259 328 | 69071 329 | 74667 330 | 79760 331 | 72124 332 | 73254 333 | 86696 334 | 134559 335 | 86163 336 | 120357 337 | 85121 338 | 115595 339 | 109017 340 | 95521 341 | 146374 342 | 99135 343 | 100286 344 | 103135 345 | 106749 346 | 121413 347 | 140513 348 | 136330 349 | 138569 350 | 139383 351 | 141195 352 | 172859 353 | 142325 354 | 145378 355 | 151884 356 | 157245 357 | 171817 358 | 186982 359 | 198656 360 | 171284 361 | 237704 362 | 180642 363 | 202270 364 | 194656 365 | 195807 366 | 243648 367 | 240330 368 | 305405 369 | 209884 370 | 276843 371 | 274899 372 | 310386 373 | 275713 374 | 279764 375 | 302623 376 | 483245 377 | 287703 378 | 393312 379 | 297262 380 | 309129 381 | 367091 382 | 471520 383 | 412154 384 | 375298 385 | 455541 386 | 376449 387 | 382912 388 | 668211 389 | 470706 390 | 493069 391 | 450214 392 | 484783 393 | 585285 394 | 486727 395 | 977852 396 | 550612 397 | 555477 398 | 578336 399 | 590326 400 | 584965 401 | 596832 402 | 606391 403 | 673711 404 | 664353 405 | 1135059 406 | 957433 407 | 788603 408 | 942268 409 | 973281 410 | 1005691 411 | 759361 412 | 1021318 413 | 920920 414 | 934997 415 | 1378929 416 | 1476397 417 | 971510 418 | 1037339 419 | 1042204 420 | 1796700 421 | 1963894 422 | 1133813 423 | 1163301 424 | 1175291 425 | 1344326 426 | 1385435 427 | 1280102 428 | 1338064 429 | 1423714 430 | 1934652 431 | 2482088 432 | 1760113 433 | 1730871 434 | 2285793 435 | 1680281 436 | 1972336 437 | 2306355 438 | 2421133 439 | 1906507 440 | 2008849 441 | 2013714 442 | 3844847 443 | 2171152 444 | 2761778 445 | 3586788 446 | 2501365 447 | 2297114 448 | 2338592 449 | 3330221 450 | 2618166 451 | 2665537 452 | 3010973 453 | 5061092 454 | 3103995 455 | 3411152 456 | 3440394 457 | 3490984 458 | 4269450 459 | 4310828 460 | 3652617 461 | 3878843 462 | 4807720 463 | 3915356 464 | 3920221 465 | 4022563 466 | 6889816 467 | 4468266 468 | 8460337 469 | 6088153 470 | 6806858 471 | 4635706 472 | 4915280 473 | 4956758 474 | 6931378 475 | 6270783 476 | 8936320 477 | 6114968 478 | 6515147 479 | 6544389 480 | 6851546 481 | 7093011 482 | 7143601 483 | 7675180 484 | 7531460 485 | 7572838 486 | 7794199 487 | 8383622 488 | 7835577 489 | 7942784 490 | 8490829 491 | 11275124 492 | 9103972 493 | 11150853 494 | 9550986 495 | 9592464 496 | 9872038 497 | 11227541 498 | 11071726 499 | 12385751 500 | 12630115 501 | 14768191 502 | 13658748 503 | 13944557 504 | 13395935 505 | 13995147 506 | 15248018 507 | 14818781 508 | 15104298 509 | 19658746 510 | 20778527 511 | 18696436 512 | 16219199 513 | 15778361 514 | 23309610 515 | 23546133 516 | 18654958 517 | 18976010 518 | 20622712 519 | 22502153 520 | 26625262 521 | 20943764 522 | 31323497 523 | 36048062 524 | 25015866 525 | 28477529 526 | 27054683 527 | 27340492 528 | 27391082 529 | 28214716 530 | 29923079 531 | 39319148 532 | 30882659 533 | 31997560 534 | 39640200 535 | 34433319 536 | 34474797 537 | 61865879 538 | 37630968 539 | 39277670 540 | 45995450 541 | 39598722 542 | 39919774 543 | 45959630 544 | 43445917 545 | 64397876 546 | 47998447 547 | 54445765 548 | 53230582 549 | 59097375 550 | 62648035 551 | 68134490 552 | 60805738 553 | 76950116 554 | 58137795 555 | 69563279 556 | 62880219 557 | 77550742 558 | 73710989 559 | 68908116 560 | 106136242 561 | 72105765 562 | 76908638 563 | 121018014 564 | 79197444 565 | 106093952 566 | 79518496 567 | 83365691 568 | 145084606 569 | 96676499 570 | 115878617 571 | 120785830 572 | 107676347 573 | 111368377 574 | 151624261 575 | 118943533 576 | 136591208 577 | 127045911 578 | 134985984 579 | 127701074 580 | 154459380 581 | 131788335 582 | 141013881 583 | 142619105 584 | 148426612 585 | 156427134 586 | 149014403 587 | 281505291 588 | 158715940 589 | 180042190 590 | 189459643 591 | 239295604 592 | 191042038 593 | 228464834 594 | 236664447 595 | 300828020 596 | 219044724 597 | 226619880 598 | 298985723 599 | 255534741 600 | 245989444 601 | 373035355 602 | 290504275 603 | 259489409 604 | 268714955 605 | 272802216 606 | 280802738 607 | 283632986 608 | 291045717 609 | 394416056 610 | 305441537 611 | 307730343 612 | 371084228 613 | 338758130 614 | 599549062 615 | 380501681 616 | 573630236 617 | 410086762 618 | 501267050 619 | 527168722 620 | 519872744 621 | 528204364 622 | 517665597 623 | 373803594 624 | 586244275 625 | 574156492 626 | 532291625 627 | 540292147 628 | 578243753 629 | 1028435772 630 | 685943218 631 | 856423727 632 | 574678703 633 | 596487254 634 | 613171880 635 | 644199667 636 | 646488473 637 | 709842358 638 | 986975474 639 | 1101325214 640 | 906095219 641 | 1106448117 642 | 937255484 643 | 914095741 644 | 891469191 645 | 1145463505 646 | 1049957222 647 | 947960086 648 | 948482297 649 | 1152400245 650 | 1072583772 651 | 1106970328 652 | 1118535900 653 | 1299115098 654 | 1600147354 655 | 1510582995 656 | 1828724675 657 | 1221167176 658 | 1209659134 659 | 1323014238 660 | 2220425353 661 | 1594970770 662 | 2066495986 663 | 1820190960 664 | 1797564410 665 | 1805564932 666 | 1998439519 667 | 1851351225 668 | 1839429277 669 | 2355122639 670 | 2169649473 671 | 3405079861 672 | 2542930856 673 | 2021066069 674 | 2662983240 675 | 2179554100 676 | 2225506228 677 | 2328195034 678 | 3219606695 679 | 2821314530 680 | 2430826310 681 | 2532673372 682 | 3060596453 683 | 2804629904 684 | 4702322845 685 | 3392535180 686 | 3415161730 687 | 3617755370 688 | 3603129342 689 | 6150428742 690 | 3644994209 691 | 4167624311 692 | 3860495346 693 | 4009078750 694 | 4190715542 695 | 4200620169 696 | 5337303276 697 | 5865226357 698 | 5593269825 699 | 7921464859 700 | 4405060328 701 | 7032917100 702 | 5845988040 703 | 5252140840 704 | 4963499682 705 | 5491422763 706 | 6135802714 707 | 9136416972 708 | 6219791634 709 | 9692042932 710 | 7770753653 711 | 7018291072 712 | 7220884712 713 | 7248123551 714 | 7505489555 715 | 7654072959 716 | 11223632642 717 | 7869574096 718 | 8199794292 719 | 8391335711 720 | 8605680497 721 | 10556769507 722 | 12509713835 723 | 13364023478 724 | 10454922445 725 | 9368560010 726 | 11337410803 727 | 10215640522 728 | 10743563603 729 | 11099302396 730 | 11711214397 731 | 12355594348 732 | 13238082706 733 | 13440676346 734 | 14672364031 735 | 26678759052 736 | 14469008263 737 | 14726374267 738 | 18613137699 739 | 15159562514 740 | 19911008689 741 | 16069368388 742 | 22571234870 743 | 21724154358 744 | 16997016208 745 | 17974240507 746 | 19584200532 747 | 19823482455 748 | 20112123613 749 | 21314942918 750 | 20467862406 751 | 27406779191 752 | 23656316868 753 | 21842865999 754 | 22810516793 755 | 28113040377 756 | 25593677054 757 | 27909684609 758 | 28167050613 759 | 36515230030 760 | 29195382530 761 | 35653568920 762 | 34310574799 763 | 41753874688 764 | 31228930902 765 | 48279174226 766 | 48580902783 767 | 44534671151 768 | 65410191556 769 | 48377547015 770 | 37558441039 771 | 40052062938 772 | 77474556756 773 | 40579986019 774 | 50977567406 775 | 42310728405 776 | 44653382792 777 | 70220413014 778 | 47436543053 779 | 67744160932 780 | 53503361663 781 | 54789059584 782 | 56076735222 783 | 84732292565 784 | 60424313432 785 | 63505957329 786 | 65539505701 787 | 93030929807 788 | 68787371941 789 | 71280993840 790 | 77610503977 791 | 78138427058 792 | 79869169444 793 | 80632048957 794 | 82211823831 795 | 82890714424 796 | 155612983814 797 | 162342796542 798 | 117656956067 799 | 175242753638 800 | 105077696224 801 | 92089925845 802 | 107860856485 803 | 242986914570 804 | 108292421247 805 | 119042867364 806 | 150999195772 807 | 154171708264 808 | 330855737452 809 | 143677932759 810 | 129045463030 811 | 136820499541 812 | 140068365781 813 | 238503698238 814 | 148891497817 815 | 165102538255 816 | 162080993275 817 | 160501218401 818 | 162843872788 819 | 270203653027 820 | 201933581788 821 | 225949377314 822 | 197167622069 823 | 199950782330 824 | 224120563588 825 | 200382347092 826 | 211132793209 827 | 285711997358 828 | 227335288611 829 | 291889335818 830 | 616567734810 831 | 265865962571 832 | 283217171294 833 | 269113828811 834 | 272723395789 835 | 276888865322 836 | 493822917606 837 | 472137234815 838 | 324924866063 839 | 309392716218 840 | 432284646302 841 | 322582211676 842 | 323345091189 843 | 360011494857 844 | 397118404399 845 | 467799544359 846 | 400333129422 847 | 397549969161 848 | 411083575539 849 | 424502910680 850 | 411515140301 851 | 546002694133 852 | 493201251182 853 | 496449117422 854 | 608142037357 855 | 669404211075 856 | 595305607465 857 | 541837224600 858 | 549612261111 859 | 582116112007 860 | 600233956511 861 | 632737807407 862 | 648269957252 863 | 682593706533 864 | 631974927894 865 | 720132180837 866 | 645927302865 867 | 893999086583 868 | 1019657177658 869 | 1093907121755 870 | 868132673781 871 | 1328274218194 872 | 809065109462 873 | 822598715840 874 | 836018050981 875 | 904716391483 876 | 1078565229429 877 | 1315437788302 878 | 1038286342022 879 | 1131728373118 880 | 1091449485711 881 | 1123953336607 882 | 1214853919414 883 | 1149846217622 884 | 1264709818540 885 | 1232208884405 886 | 1264712735301 887 | 1454573643734 888 | 1536691319377 889 | 1940793482580 890 | 1529197290299 891 | 1454992412327 892 | 2151385550776 893 | 2353724130324 894 | 2397329964080 895 | 1631663825302 896 | 3808297774058 897 | 1645083160443 898 | 3851903607814 899 | 2116851571451 900 | 1943002733505 901 | 2578945748934 902 | 2129735827733 903 | 2215402822318 904 | 2223177858829 905 | 2877292044848 906 | 2273799554229 907 | 2364700137036 908 | 2719705147628 909 | 2793910025600 910 | 2496921619706 911 | 3996363962338 912 | 2984189702626 913 | 2991683731704 914 | 6843587339518 915 | 3086656237629 916 | 3606377963103 917 | 3276746985745 918 | 3761399653035 919 | 3574666558807 920 | 3588085893948 921 | 3761934731894 922 | 3774818988176 923 | 4708681576667 924 | 4836556719079 925 | 4072738561238 926 | 5855692734679 927 | 5374213664554 928 | 4438580681147 929 | 4496977413058 930 | 5550546539974 931 | 4638499691265 932 | 5481111322332 933 | 5216626767334 934 | 5290831645306 935 | 6661322796436 936 | 5975873434330 937 | 6070845940255 938 | 6363403223374 939 | 6674742131577 940 | 6693034200732 941 | 8103355376161 942 | 6851413544552 943 | 7162752452755 944 | 11601333133902 945 | 8483500564843 946 | 9243046054226 947 | 7847557549414 948 | 11266705079636 949 | 9077080372412 950 | 8569715974296 951 | 11406239274653 952 | 8935558094205 953 | 9135477104323 954 | 10614373125595 955 | 9855126458599 956 | 9929331336571 957 | 14352103871657 958 | 11654234868680 959 | 17307407326327 960 | 13526155676129 961 | 12046719374585 962 | 14174201316416 963 | 13038145354951 964 | 17646796346708 965 | 13544447745284 966 | 19098172512825 967 | 14014165997307 968 | 15010310002169 969 | 25440906396052 970 | 16331058114257 971 | 16417273523710 972 | 20731315241092 973 | 17505274068501 974 | 17705193078619 975 | 18071035198528 976 | 18790684552804 977 | 18864889430776 978 | 18990603562922 979 | 38038722567419 980 | 19784457795170 981 | 23455487012700 982 | 25084864729536 983 | 23700954243265 984 | 28554757747453 985 | 25572875050714 986 | 31109180553479 987 | 31828829907755 988 | 31191244091992 989 | 39455072393359 990 | 31719359075926 991 | 29024475999476 992 | 32515584070670 993 | 31341368116426 994 | 34036251192876 995 | 32748331637967 996 | 33922547592211 997 | 35210467147120 998 | 35576309267029 999 | 63939575729959 1000 | 36861719751332 -------------------------------------------------------------------------------- /09-encoding-error/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | pair sum_of_two(vector &numbers, int start, int range) { 5 | set m; 6 | 7 | for (int i = start; i < start+range; i++) { 8 | int sub = numbers[start+range] - numbers[i]; 9 | if (m.find(sub) == m.end()) m.insert(numbers[i]); 10 | else return {numbers[i], sub}; 11 | } 12 | return {-1, -1}; 13 | } 14 | 15 | int p2(vector numbers, int invalid) { 16 | for (int i = 0, j = 1, s = numbers[i];;) { 17 | if (s == invalid) { 18 | vector::iterator start = numbers.begin() + i, end = numbers.begin() + j; 19 | return *min_element(start, end) + *max_element(start, end); 20 | } 21 | s += s < invalid ? numbers[j++] : -numbers[i++]; 22 | } 23 | return -1; 24 | } 25 | 26 | int p1(vector &numbers) { 27 | for (int i = 25; i < numbers.size(); i++) { 28 | pair res = sum_of_two(numbers, i-25, 25); 29 | if (res.first == -1) return numbers[i]; 30 | } 31 | return -1; 32 | } 33 | 34 | int main() { 35 | vector numbers; 36 | for (int n; cin >> n;) numbers.push_back(n); 37 | 38 | int invalid = p1(numbers); 39 | printf("p1: %d\np2: %d", invalid, p2(numbers, invalid)); 40 | } -------------------------------------------------------------------------------- /10-adapter-array/input.txt: -------------------------------------------------------------------------------- 1 | 144 2 | 10 3 | 75 4 | 3 5 | 36 6 | 80 7 | 143 8 | 59 9 | 111 10 | 133 11 | 1 12 | 112 13 | 23 14 | 62 15 | 101 16 | 137 17 | 41 18 | 24 19 | 8 20 | 121 21 | 35 22 | 105 23 | 161 24 | 69 25 | 52 26 | 21 27 | 55 28 | 29 29 | 135 30 | 142 31 | 38 32 | 108 33 | 141 34 | 115 35 | 68 36 | 7 37 | 98 38 | 82 39 | 9 40 | 72 41 | 118 42 | 27 43 | 153 44 | 140 45 | 61 46 | 90 47 | 158 48 | 102 49 | 28 50 | 134 51 | 91 52 | 2 53 | 17 54 | 81 55 | 31 56 | 15 57 | 120 58 | 20 59 | 34 60 | 56 61 | 4 62 | 44 63 | 74 64 | 14 65 | 147 66 | 11 67 | 49 68 | 128 69 | 16 70 | 99 71 | 66 72 | 47 73 | 125 74 | 155 75 | 130 76 | 37 77 | 67 78 | 54 79 | 60 80 | 48 81 | 136 82 | 89 83 | 119 84 | 154 85 | 122 86 | 129 87 | 163 88 | 73 89 | 100 90 | 85 91 | 95 92 | 30 93 | 76 94 | 162 95 | 22 96 | 79 97 | 88 98 | 150 99 | 53 100 | 63 101 | 92 -------------------------------------------------------------------------------- /10-adapter-array/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | typedef unsigned long long ull; 5 | 6 | ull p2(vector &adapters) { 7 | ull dp[10000]; 8 | 9 | for (int adapter: adapters) { 10 | if (adapter == 0) dp[adapter] = 1; 11 | else if (adapter == 1) dp[adapter] = dp[adapter-1]; 12 | else if (adapter == 2) dp[adapter] += dp[adapter-1] + dp[adapter-2]; 13 | else dp[adapter] = dp[adapter-1] + dp[adapter-2] + dp[adapter-3]; 14 | } 15 | return dp[adapters[adapters.size() - 1]]; 16 | } 17 | 18 | int p1(vector &adapters) { 19 | map m; 20 | 21 | for (int i = 1; i < adapters.size(); i++) 22 | m[adapters[i] - adapters[i-1]]++; 23 | 24 | return m[1] * m[3]; 25 | } 26 | 27 | int main() { 28 | vector adapters = {0}; 29 | for (int n; cin >> n;) adapters.push_back(n); 30 | 31 | sort(adapters.begin(), adapters.end()); 32 | adapters.push_back(adapters[adapters.size() - 1] + 3); 33 | 34 | printf("p1: %d\np2: %llu\n", p1(adapters), p2(adapters)); 35 | } -------------------------------------------------------------------------------- /11-seating-system/input.txt: -------------------------------------------------------------------------------- 1 | LLLLLLLLLL.LLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLL.LL.LLLLLLLLLLL.LLLLLL.LL.LLLL.LLLLLL.LLLLLLL 2 | LL.LLLLLLL.LLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LL.LLLL.LLLLLL.LLLLLLL 3 | LLLLLL.LLLLLLLLLLLLLLLL.LLL.L.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.L.LLLLLLL 4 | LLLLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL 5 | LLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLL.L.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL 6 | LLLLLLLLLL.LLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLL 7 | LLLLLLLLLL.LLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLL.LLLLLLL 8 | LLLLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL 9 | L.L....L...L..LLLLLL.L.LLL..L...L.....L.L...L..L.LL.....L..L..LL...L........L..LLLLLLL.L......L.. 10 | LLLLLLLLLL.LLLLLLLL.LLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL 11 | LLLLLLLLLLLLLLLLLLLLLLL.LLLL..LLLLLLLL.LL.LLLLLLL.LLLLLLLLLLLLLL.LL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLL 12 | LLL.LLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.L.LLLLLLL.LLLLLLLLLLLLLL 13 | LLLLLLLLLLLLLLL..L.LLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL 14 | LLLLLLL.LLLLLLL.LLLLLLL.LLLLL.LLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL 15 | LLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLL 16 | LLLLLLLLLL.LLLL.LLLLLLLLLL.LL.LLLLLLLL.LLLLLLLL...LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL 17 | LLLLLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLLLL..LLLLLL.LLLLLLLLLLL.LLLLLL.LLLLLLLLL.LL.LLLLLLLLLLLLLLLLLLL 18 | ..L...L..LL.L....LL.L...LLLL......L...L....L...L.L...L..L..L...L.....L..L...................LLL.L 19 | LLLLLLLLLLLL.LLLLLLL.LL.LLLLL.LLLLLLLL.LLLLLLLLL.LLLLL..LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL 20 | LLLLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LL.LLLL.LLLLLL.LLLLLLL 21 | LLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLLLLL.LLLLLLL 22 | LLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL.L.LLLLLL.LLLLLLLLLLL.LLLL..LLLLLL.LLLLLLL 23 | LLLLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL 24 | LL..LL.....LLL......LL.........L...L..L......L.....LL........LLLL.....L..................LL....L. 25 | LLLLLLLLLL.LLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLL.L.LLLLLLLLLLLLL.LLLLL.LLLLLLLLLL.LLLLLLL.LLLLLLL 26 | LLLLLLLLLLLLLLLLLLL.LLL.LLL.L.LLLLLLLLLLLLLLLLLL.LL.L.L.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL 27 | LL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLL.LL.LLLLLL. 28 | LLLLLLLLLL.LLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLL 29 | .LLLLLLLLLLLL.L.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL 30 | ...L..L...L.....L....LL..L.....L.L..L...LLLL..L....LL.L....L.L.L......LL...L...L..LLLL.L..L...... 31 | LLLLLLLLLL.LLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLL.LLLLLLLLLLL.LLLLLL...LLL.LLLLL.LLL.LLL.LLLLL..LLLLLLL 32 | LLLLLLLLLL.LLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLL.LLLLLLLLLL.LLLLLLL 33 | LLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL 34 | LLLLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLL.LL.LL.LLL.LLLLL..LLLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLL 35 | L.LLLLLLLLLLL.L..LLLLLL.LLLLL.LLLLLLLL..LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL 36 | .L....LL....L......LLL...L..L..L.L.L.LLL.L.L........L....L..LL......L......L.L..LLLL.L.L..L...... 37 | LLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL..LLLLLLL..LL.LLLLLLLLLL 38 | LLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL 39 | LLLLLLLLLL..LLL.LLLLL.L.LL.LL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLL 40 | LLLLL.LLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLL.L.LLLLLLLLL.LLLLL.L.LLLLLLLLLLLLLL 41 | LLLLLL.....L......L.......L..L.LLL...L.L...LLL....L.......L.L..L...LL....LL.L...L...LLL.L...L..LL 42 | LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL 43 | LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.L.LLLLL 44 | LLLLLLLLLLLLLLL.LL.LLLL.LLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL 45 | LLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLL 46 | ....L..L.L.L...L.....L...LLL.....L.......L..LLL.LL...L.....L..L.L...L.L.L...LL...LL.L....LL.....L 47 | LLLLLLLLLL.LLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLL.LLL.LLL 48 | LLL.LLLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLL.LL.LLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLL.LLLLLLL 49 | LLLLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLL.L.LLLLLLLLLLL.LLLLLL.LLLLLL..LLLLLLLLLLLLLL 50 | LL.LLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LL.LLLL..LLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLL 51 | LLLLLLLLLL.LLLL.LLLL.LL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLL.L.LLLLL 52 | LLL.LLLLLL.LLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLL.LL.LLLLLL..LLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLL.LL.L 53 | LLLLLLLLLL.LLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL 54 | ......L......LLL......L.LL...L..L.L.L..L.L.......L.L....L..LL.......L......L.....L.LLLLLL...L...L 55 | LLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLL..L.L.LLLLL 56 | LLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL 57 | LLLLLLLLLL.LLLL.LLLLL.L.LLL.L.LLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL 58 | LLLLLLLLLL.LLLL.LL.LLLL.LLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLL..LLLLL.LLLLLLL 59 | LL.LLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLL 60 | .LLLLL.LLL.LLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLL.LL.LLLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL 61 | LLLLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLL.LLL.LL.L.LLLL.L.LLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL 62 | LLLLLLLLLL.LLLLLLLLLLLL.LLLL..LLL.LLLL.LLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL 63 | LLLLLLLLLLLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.L.L.LLLLLLL.L.LLLLL.LLLLLL.LLLLLLL 64 | .L....L...L..LL.....L.LL...L.L..LLL...L..L..L..L..L.LLLLL....LLLL.........L..L..L..L..L...LL....L 65 | LLLLLLLLLL.LLLL.LLLLLLL.LLLL..LLLLLLLLLLLLLLLLL..L.LLLL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLL 66 | LLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLL.L.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLLL.LLLLLLL 67 | LLLLL.LLLL.LLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL..LLLL 68 | LLLLLLLLLL.LLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL 69 | LL.LLLLLLLLLLLL.LLLLLLL.LLLLL.LLLL.L.L.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLL 70 | LLLLL.LLLL.LLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLL 71 | ..L.L...L.L........L.......L......LLLLL......L.LLL.LL.........L.L....L..L.L.L...L..LL.L......LL.. 72 | LLLLLLLLLL.LL.L.LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLL 73 | LLLLLLLLLL.LLLL.LLLLLLLLL.LLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.LL.LLLLLLL.LLLLLL.LLLLLLL 74 | LLL.LLLLLLLLL.L.LLLLLLL.LLLLLLLLLLLL.L.LLLLLLLL..LLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL.L.LLLLLLLLLLLLL. 75 | LLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLLLLL.LL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL 76 | LLLLLLLLLL.LLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.L.LLLLLL.LL.LLLLLL.LLLLLLL.LL.LLL.LLLLLLL 77 | LLLLLLLLLLLLLLLLLLLLLLL.LL.LL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL 78 | LLLLLLLLLL.LLLLLLLLLL.L.LLLLL.LLLLLLLL.LLLLLLLLL.LLL.LL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLL 79 | LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LL.LLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLL 80 | LLLLLLLL.L.LLLL.LLLLLLL.LLLL..LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLL.LLLL.LL 81 | .....LL.L...L..L.L..LL.L.......L...L...LLL.L.L..L.LL.L...LL..L.LL.LLL......LL.L..L.LL......L..... 82 | LLL.LLLLLL.LLLLLLLLLLLL.LLLLLL..LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLL.LLLLLLLL..L 83 | LLLLLLLLLL.LLLL.LLLLL.L.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.L..LLLLLL.LLLLLLL.LLLLL.LLLLLLLL 84 | LLLLLLLLLL.LLL..LLLLLLL.LLLLL.LLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL 85 | LLLLLLLLLL.LLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLL..LLLLLL.LLLLLLLLL.L.LLLLL.LLLLLLLL.LLLLLLL 86 | LLLLLLLLLL.LLLL.LLLLLLL.LLLLL.LLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLL 87 | LLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLL.LL.LLL.LLLLLLLLL.LLLLLLLLLL.LLLLLLL 88 | LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL 89 | LL.LLLLLLLLLLLL.LLLLLLL.LLLL..LLLLLLL..LLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL 90 | LLLLLLLL.L.LLLLLLLLLLLL.LLLLLLLLLLLLL..LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLL.LLLLLLL 91 | LLLLLLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLLLLLL.LLLLLLL.LLLLLL.LLLLLL.L.LLLLLLLLL.LLLLLLL.LL.LLL.LLLLLLL 92 | LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL 93 | LLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLL.LLLLL.LLLLLL.L.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLL.LL.LLLLLL. -------------------------------------------------------------------------------- /11-seating-system/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | typedef vector> Ferry; 5 | 6 | Ferry initial_ferry; 7 | vector> adjacency = { 8 | {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, 9 | {1, 0}, {1, -1}, {0, -1}, {-1, -1} 10 | }; 11 | 12 | int count_occupied(Ferry &ferry) { 13 | int count = 0; 14 | for (auto row: ferry) for (char c: row) if (c == '#') count++; 15 | return count; 16 | } 17 | 18 | bool is_valid(int i, int j) { 19 | return i >= 0 && j >= 0 && i < initial_ferry.size() && j < initial_ferry[i].size(); 20 | } 21 | 22 | pair get_immediate(int i, int j, pair k) { 23 | return {i + k.first, j + k.second}; 24 | } 25 | 26 | pair get_visible(int i, int j, pair k) { 27 | do { i += k.first, j += k.second; } 28 | while (is_valid(i, j) && initial_ferry[i][j] == '.'); 29 | return {i, j}; 30 | } 31 | 32 | int run(pair strategy(int i, int j, pair k), int rule) { 33 | Ferry ferry = initial_ferry; 34 | bool has_changed = false; 35 | 36 | do { 37 | Ferry temp_ferry = ferry; 38 | has_changed = false; 39 | 40 | for (int i = 0; i < ferry.size(); i++) { 41 | for (int j = 0; j < ferry[i].size(); j++) { 42 | 43 | int adjs = count_if(adjacency.begin(), adjacency.end(), [=](const pair k) { 44 | pair adj = strategy(i, j, k); 45 | return is_valid(adj.first, adj.second) && ferry[adj.first][adj.second] == '#'; 46 | }); 47 | 48 | if (ferry[i][j] == 'L' && adjs == 0) { 49 | temp_ferry[i][j] = '#'; 50 | has_changed = true; 51 | } 52 | 53 | else if (ferry[i][j] == '#' && adjs >= rule) { 54 | temp_ferry[i][j] = 'L'; 55 | has_changed = true; 56 | } 57 | } 58 | } 59 | ferry = temp_ferry; 60 | } while (has_changed); 61 | 62 | return count_occupied(ferry); 63 | } 64 | 65 | int main() { 66 | for (string line; getline(cin, line);) 67 | initial_ferry.push_back(vector(line.begin(), line.end())); 68 | 69 | printf("p1: %d\np2: %d\n", run(get_immediate, 4), run(get_visible, 5)); 70 | } -------------------------------------------------------------------------------- /12-rain-risk/input.txt: -------------------------------------------------------------------------------- 1 | W1 2 | F91 3 | W3 4 | F82 5 | N1 6 | E2 7 | N4 8 | R90 9 | F25 10 | N2 11 | F75 12 | E4 13 | R90 14 | F91 15 | R90 16 | F64 17 | L90 18 | E1 19 | L90 20 | S2 21 | L180 22 | S2 23 | E3 24 | N2 25 | E5 26 | L90 27 | N2 28 | R90 29 | F30 30 | L90 31 | N1 32 | F37 33 | S1 34 | E5 35 | F3 36 | E2 37 | F59 38 | W3 39 | L270 40 | S5 41 | W5 42 | S4 43 | F84 44 | N5 45 | R180 46 | E4 47 | F31 48 | L90 49 | E2 50 | F77 51 | L90 52 | N5 53 | F17 54 | N4 55 | N4 56 | W2 57 | F45 58 | S1 59 | F92 60 | E1 61 | F33 62 | L270 63 | F21 64 | L90 65 | E1 66 | F81 67 | N5 68 | F20 69 | E2 70 | R90 71 | N4 72 | W3 73 | L180 74 | S2 75 | F33 76 | E5 77 | F87 78 | R90 79 | N2 80 | F29 81 | E3 82 | S4 83 | L90 84 | E4 85 | R90 86 | S2 87 | F65 88 | L90 89 | F69 90 | W2 91 | N4 92 | F73 93 | R180 94 | S3 95 | R90 96 | N3 97 | R90 98 | W1 99 | L180 100 | F96 101 | N3 102 | W2 103 | L180 104 | S5 105 | F29 106 | E3 107 | S4 108 | W1 109 | F53 110 | E1 111 | L90 112 | E5 113 | F26 114 | E3 115 | R270 116 | E2 117 | S2 118 | W2 119 | F43 120 | W2 121 | F53 122 | F74 123 | R180 124 | N5 125 | W3 126 | S4 127 | F70 128 | R90 129 | W4 130 | F56 131 | L90 132 | S5 133 | R180 134 | E4 135 | S4 136 | F80 137 | S1 138 | F91 139 | R90 140 | S4 141 | F88 142 | L90 143 | S5 144 | R90 145 | E2 146 | S1 147 | F37 148 | N1 149 | R90 150 | F92 151 | W5 152 | F14 153 | N2 154 | E5 155 | S2 156 | F89 157 | L180 158 | N4 159 | E4 160 | L90 161 | F32 162 | E4 163 | R90 164 | F99 165 | N3 166 | L180 167 | F78 168 | S1 169 | R270 170 | W1 171 | F11 172 | S4 173 | F47 174 | N4 175 | L90 176 | F17 177 | R90 178 | E4 179 | S3 180 | F14 181 | S1 182 | R90 183 | N3 184 | F52 185 | W3 186 | S5 187 | L180 188 | F41 189 | R90 190 | F62 191 | W1 192 | R90 193 | E4 194 | F1 195 | W5 196 | F86 197 | W1 198 | N5 199 | F5 200 | S1 201 | E5 202 | F67 203 | W3 204 | F97 205 | E1 206 | L90 207 | S2 208 | E1 209 | R90 210 | F82 211 | E3 212 | N2 213 | F16 214 | L90 215 | W2 216 | F35 217 | R180 218 | N2 219 | E3 220 | N4 221 | W4 222 | F13 223 | S5 224 | E1 225 | S5 226 | L90 227 | E5 228 | F65 229 | E5 230 | L90 231 | S4 232 | E3 233 | W4 234 | N1 235 | R90 236 | N5 237 | F93 238 | R90 239 | S5 240 | R90 241 | L90 242 | F86 243 | E3 244 | F90 245 | E4 246 | N2 247 | E4 248 | R180 249 | W5 250 | R90 251 | E3 252 | F98 253 | F56 254 | L90 255 | F68 256 | L90 257 | N3 258 | F35 259 | S1 260 | W5 261 | F25 262 | L180 263 | F7 264 | R270 265 | F84 266 | R90 267 | S4 268 | E5 269 | S3 270 | L270 271 | F33 272 | W3 273 | R90 274 | W5 275 | N3 276 | E4 277 | R90 278 | W2 279 | F100 280 | E5 281 | S2 282 | L90 283 | F6 284 | E1 285 | L90 286 | S1 287 | F17 288 | N3 289 | E1 290 | S3 291 | F78 292 | R90 293 | W5 294 | N4 295 | L90 296 | F13 297 | W5 298 | R90 299 | F7 300 | F74 301 | R90 302 | E4 303 | F28 304 | L90 305 | S5 306 | R90 307 | F77 308 | S2 309 | E2 310 | N3 311 | F30 312 | E1 313 | R90 314 | W2 315 | S2 316 | F62 317 | E2 318 | L90 319 | E2 320 | F56 321 | L90 322 | F61 323 | S1 324 | F14 325 | W3 326 | F23 327 | L90 328 | E3 329 | S3 330 | L270 331 | S5 332 | F97 333 | E5 334 | S1 335 | F96 336 | W2 337 | F61 338 | L180 339 | F25 340 | L90 341 | W4 342 | F100 343 | W4 344 | F14 345 | W4 346 | S5 347 | R90 348 | F67 349 | E1 350 | R90 351 | F89 352 | W5 353 | S3 354 | W2 355 | N2 356 | F64 357 | L180 358 | S4 359 | R270 360 | F47 361 | E1 362 | S1 363 | E4 364 | N1 365 | R90 366 | N2 367 | E5 368 | F97 369 | N3 370 | E5 371 | S5 372 | R180 373 | E5 374 | F34 375 | L90 376 | W1 377 | W1 378 | N3 379 | R90 380 | F17 381 | N1 382 | F75 383 | S4 384 | W5 385 | N2 386 | W1 387 | N2 388 | L90 389 | W3 390 | N2 391 | F1 392 | N1 393 | W3 394 | R90 395 | F18 396 | E4 397 | N4 398 | F18 399 | N4 400 | F73 401 | W4 402 | F61 403 | W3 404 | R90 405 | N5 406 | L90 407 | N4 408 | F70 409 | E4 410 | F10 411 | L90 412 | F33 413 | N5 414 | L90 415 | W4 416 | L180 417 | E2 418 | F41 419 | E1 420 | S4 421 | E4 422 | L90 423 | F28 424 | N2 425 | W4 426 | S2 427 | F86 428 | R180 429 | S3 430 | W3 431 | S3 432 | W2 433 | F55 434 | W1 435 | F18 436 | W2 437 | F18 438 | L90 439 | S4 440 | W1 441 | L90 442 | F47 443 | L90 444 | S4 445 | F39 446 | N5 447 | L180 448 | S3 449 | W5 450 | F95 451 | W1 452 | R90 453 | E2 454 | N3 455 | L90 456 | S4 457 | F77 458 | S1 459 | W4 460 | S5 461 | E4 462 | R90 463 | W1 464 | R90 465 | W3 466 | W2 467 | N4 468 | F1 469 | W1 470 | N5 471 | F55 472 | E4 473 | N4 474 | W5 475 | L90 476 | F90 477 | E4 478 | R90 479 | E2 480 | R90 481 | S5 482 | F44 483 | N2 484 | E3 485 | R90 486 | F64 487 | W1 488 | L180 489 | L180 490 | F55 491 | L90 492 | F15 493 | S2 494 | E1 495 | R270 496 | F10 497 | R90 498 | W4 499 | F43 500 | E1 501 | F7 502 | N2 503 | W3 504 | F10 505 | N1 506 | L270 507 | N2 508 | L90 509 | E2 510 | R90 511 | F28 512 | W2 513 | N5 514 | F70 515 | R90 516 | E3 517 | E3 518 | F75 519 | W4 520 | L90 521 | S2 522 | R90 523 | F83 524 | L270 525 | E1 526 | F87 527 | R180 528 | N3 529 | L90 530 | F30 531 | L90 532 | E1 533 | N5 534 | F87 535 | N4 536 | R90 537 | F51 538 | W5 539 | N3 540 | R90 541 | S5 542 | F98 543 | W4 544 | N2 545 | E2 546 | L90 547 | E4 548 | S1 549 | E5 550 | F60 551 | N1 552 | L180 553 | E1 554 | F10 555 | R90 556 | W5 557 | F90 558 | W5 559 | F9 560 | S1 561 | W3 562 | F9 563 | E2 564 | S4 565 | L180 566 | F61 567 | W2 568 | N3 569 | F35 570 | R90 571 | E4 572 | N3 573 | W4 574 | L90 575 | E1 576 | L90 577 | S1 578 | F62 579 | S5 580 | W1 581 | N5 582 | L180 583 | F76 584 | W3 585 | L90 586 | W4 587 | L90 588 | N2 589 | E3 590 | N5 591 | E1 592 | N2 593 | F13 594 | S1 595 | F20 596 | W5 597 | L90 598 | S1 599 | F89 600 | S3 601 | L90 602 | W2 603 | L90 604 | F48 605 | W5 606 | N1 607 | R90 608 | F93 609 | L90 610 | E4 611 | L90 612 | N2 613 | F100 614 | W5 615 | S5 616 | W1 617 | S1 618 | E2 619 | S1 620 | W4 621 | R90 622 | S2 623 | F99 624 | W2 625 | F80 626 | L90 627 | F78 628 | N4 629 | L90 630 | F67 631 | S1 632 | L90 633 | F23 634 | W3 635 | N1 636 | W5 637 | F76 638 | R270 639 | F51 640 | L90 641 | W2 642 | N1 643 | E3 644 | S3 645 | L90 646 | F83 647 | L90 648 | F46 649 | S5 650 | L180 651 | N3 652 | E3 653 | F49 654 | E5 655 | N4 656 | W5 657 | L90 658 | E3 659 | R90 660 | S4 661 | F54 662 | E1 663 | F49 664 | N4 665 | L180 666 | E3 667 | L90 668 | R90 669 | F95 670 | W2 671 | N2 672 | F12 673 | R180 674 | E4 675 | R90 676 | N5 677 | L180 678 | S3 679 | W3 680 | S1 681 | F22 682 | W1 683 | F18 684 | L90 685 | F35 686 | R90 687 | F3 688 | S4 689 | L90 690 | F53 691 | W5 692 | F58 693 | L90 694 | S2 695 | F48 696 | S5 697 | R180 698 | F67 699 | L180 700 | W1 701 | S3 702 | L90 703 | F33 704 | F34 705 | R90 706 | F54 707 | W2 708 | L180 709 | S5 710 | W4 711 | R90 712 | F80 713 | W4 714 | S1 715 | W4 716 | F35 717 | E1 718 | F48 719 | N3 720 | L270 721 | F78 722 | N4 723 | S4 724 | F11 725 | S1 726 | W3 727 | L90 728 | W1 729 | F26 730 | R180 731 | E3 732 | F43 733 | S4 734 | R180 735 | W3 736 | N2 737 | F80 738 | W4 739 | F29 740 | W5 741 | W1 742 | R270 743 | N3 744 | L90 745 | F17 746 | W4 747 | F49 748 | S4 749 | S1 750 | F47 -------------------------------------------------------------------------------- /12-rain-risk/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | const long double PI = acos(-1.L); 5 | 6 | struct Ship { 7 | int x = 0, y = 0, dir = 1; 8 | pair waypoint = {10, 1}; 9 | 10 | map> d { 11 | {0, {0, 1}}, {1, {1, 0}}, {2, {0, -1}}, {3, {-1, 0}} 12 | }; 13 | 14 | void rotate_ship(int angle) { 15 | dir = (dir + angle / 90 + 4) % 4; 16 | } 17 | 18 | void rotate_waypoint(float angle) { 19 | float s = sin(angle * PI / 180.0), c = cos(angle * PI / 180.0); 20 | int new_x = waypoint.first * c - waypoint.second * s; 21 | int new_y = waypoint.first * s + waypoint.second * c; 22 | waypoint.first = new_x; 23 | waypoint.second = new_y; 24 | } 25 | }; 26 | 27 | void p2(Ship &ship, pair action) { 28 | if (action.first == 'N') 29 | ship.waypoint.second += action.second; 30 | 31 | if (action.first == 'S') 32 | ship.waypoint.second -= action.second; 33 | 34 | if (action.first == 'E') 35 | ship.waypoint.first += action.second; 36 | 37 | if (action.first == 'W') 38 | ship.waypoint.first -= action.second; 39 | 40 | if (action.first == 'L') 41 | ship.rotate_waypoint(action.second); 42 | 43 | if (action.first == 'R') 44 | ship.rotate_waypoint(-action.second); 45 | 46 | if (action.first == 'F') { 47 | ship.x += (ship.waypoint.first * action.second); 48 | ship.y += (ship.waypoint.second * action.second); 49 | } 50 | } 51 | 52 | void p1(Ship &ship, pair action) { 53 | if (action.first == 'N') 54 | ship.y += action.second; 55 | 56 | if (action.first == 'S') 57 | ship.y -= action.second; 58 | 59 | if (action.first == 'E') 60 | ship.x += action.second; 61 | 62 | if (action.first == 'W') 63 | ship.x -= action.second; 64 | 65 | if (action.first == 'L') 66 | ship.rotate_ship(-action.second); 67 | 68 | if (action.first == 'R') 69 | ship.rotate_ship(action.second); 70 | 71 | if (action.first == 'F') { 72 | ship.x += (ship.d[ship.dir].first * action.second); 73 | ship.y += (ship.d[ship.dir].second * action.second); 74 | } 75 | } 76 | 77 | int main() { 78 | Ship s1, s2; 79 | 80 | for (string line; getline(cin, line);) { 81 | pair action = {line[0], stoi(line.substr(1, line.length()-1))}; 82 | p1(s1, action); p2(s2, action); 83 | } 84 | 85 | printf("p1: %d\np2: %d\n", abs(s1.x) + abs(s1.y), abs(s2.x) + abs(s2.y)); 86 | } -------------------------------------------------------------------------------- /13-shuttle-search/input.txt: -------------------------------------------------------------------------------- 1 | 1001796 2 | 37,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,41,x,x,x,x,x,x,x,x,x,457,x,x,x,x,x,x,x,x,x,x,x,x,13,17,x,x,x,x,x,x,x,x,23,x,x,x,x,x,29,x,431,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,19 -------------------------------------------------------------------------------- /13-shuttle-search/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | typedef unsigned long long ull; 5 | 6 | ull modular_multiplicative_inverse(ull a, ull mod) { 7 | for (ull i = 1; i < mod; i++) 8 | if (a % mod * i % mod == 1) return i; 9 | return 1; 10 | } 11 | 12 | ull CRT(vector a, vector n) { 13 | ull M = accumulate(n.begin(), n.end(), 1ULL, multiplies()), Y = 0; 14 | 15 | for (int i = 0; i < n.size(); i++) { 16 | ull p = M / n[i]; 17 | Y += a[i] * modular_multiplicative_inverse(p, n[i]) * p; 18 | } 19 | return Y % M; 20 | } 21 | 22 | int p1(vector n, int earliest) { 23 | int id, wait = INT_MAX; 24 | 25 | for (int bus: n) { 26 | int dist = ceil(earliest / double(bus)) * bus - earliest; 27 | if (dist < wait) { wait = dist; id = bus; } 28 | } 29 | return id * wait; 30 | } 31 | 32 | int main() { 33 | int earliest; 34 | string line, token; 35 | cin >> earliest >> line; 36 | 37 | vector a, n; 38 | stringstream ss(line); 39 | 40 | for (int i = 0; getline(ss, token, ','); i++) { 41 | if (token[0] != 'x') { 42 | n.push_back(stoi(token)); 43 | a.push_back(stoi(token) - i % stoi(token)); 44 | } 45 | } 46 | printf("p1: %d\np2: %llu\n", p1(n, earliest), CRT(a, n)); 47 | } -------------------------------------------------------------------------------- /14-docking-data/input.txt: -------------------------------------------------------------------------------- 1 | mask = 1000XX0X0X0X0011XX11110110X101101X01 2 | mem[17353] = 91550 3 | mem[3346] = 113780395 4 | mem[25928] = 15887 5 | mask = 1100X110000111X1X010X101X01110110X01 6 | mem[22673] = 365674634 7 | mem[56387] = 707 8 | mem[59272] = 66101 9 | mask = 00110000X1011011111X1X100X1001111000 10 | mem[26721] = 1906961 11 | mem[6434] = 1547 12 | mem[38772] = 3670902 13 | mask = 1X0110X001101011X011000011000010X100 14 | mem[14129] = 9885418 15 | mem[16579] = 19578559 16 | mem[17948] = 222711 17 | mem[39312] = 3696 18 | mem[28037] = 4392 19 | mask = 1XX01010010100101010X10X0X100X110X0X 20 | mem[27174] = 34330 21 | mem[38975] = 1673 22 | mem[53860] = 43706522 23 | mem[24314] = 129 24 | mem[46690] = 2122756 25 | mem[51409] = 300 26 | mask = X0X00100X110101XX1110000001000X01101 27 | mem[16769] = 6839 28 | mem[4773] = 197670 29 | mem[16306] = 9387 30 | mem[23109] = 18936748 31 | mask = X001X00001111X11X11XX1000001001X1111 32 | mem[9277] = 2126 33 | mem[19599] = 2620 34 | mem[35796] = 1119795 35 | mem[43013] = 7907629 36 | mem[34780] = 73089 37 | mem[43625] = 1251 38 | mem[45268] = 35981183 39 | mask = 11X0XX100X01001010101000X000X00X0001 40 | mem[28057] = 87060 41 | mem[57943] = 156869 42 | mem[34328] = 441008 43 | mem[19172] = 974642 44 | mem[13455] = 140868162 45 | mem[10479] = 1478 46 | mem[3348] = 610 47 | mask = 1X0011X0000X00X111111X0011001100XX00 48 | mem[20706] = 371595403 49 | mem[32191] = 61238 50 | mem[32541] = 121 51 | mask = 000101X1X110X01X1010X1XX011XX0110110 52 | mem[2502] = 3004 53 | mem[42813] = 50475 54 | mem[6736] = 218863 55 | mem[57229] = 542 56 | mask = X00011110X101011X01100X11011010X100X 57 | mem[29838] = 6609 58 | mem[63501] = 76 59 | mem[35757] = 447 60 | mem[19646] = 1841 61 | mem[50155] = 10989663 62 | mask = 10011000X01110XX1111X10XX00000101001 63 | mem[16439] = 1250783 64 | mem[50267] = 12877 65 | mask = 000X0X011110101X101X010X1X1100X0X1X1 66 | mem[55873] = 29485206 67 | mem[3857] = 932873 68 | mem[53144] = 49937201 69 | mem[45634] = 3973 70 | mem[62141] = 84958 71 | mask = 10001X110XX01011X1100X011010110110XX 72 | mem[27094] = 64589302 73 | mem[20130] = 1670 74 | mem[42036] = 39179827 75 | mem[31787] = 25295623 76 | mem[39027] = 1380 77 | mem[53488] = 593805 78 | mem[27469] = 6270971 79 | mask = 0101000001111011101110XXX010X0100010 80 | mem[34667] = 1338 81 | mem[2529] = 49045 82 | mem[40550] = 149 83 | mem[56292] = 14155 84 | mask = 1100111X0X0110X11111111010X001001111 85 | mem[6465] = 8116 86 | mem[45171] = 158525709 87 | mem[10613] = 1661122 88 | mem[37037] = 19153 89 | mask = 1X0000X1111X1010X1110101100001X10101 90 | mem[3530] = 361 91 | mem[15560] = 140278839 92 | mem[62028] = 12515878 93 | mem[20628] = 11032 94 | mem[48912] = 111176 95 | mem[47515] = 605 96 | mask = X00111001XX11011X1111X000100X0X0X010 97 | mem[4615] = 738 98 | mem[672] = 1477 99 | mem[16686] = 24069368 100 | mask = 110011100XX10000X0X00XX0X11100X10111 101 | mem[12619] = 1252770 102 | mem[954] = 590503 103 | mem[16403] = 1087106 104 | mem[11529] = 24258 105 | mem[11701] = 160993242 106 | mem[42676] = 64764346 107 | mem[7626] = 316 108 | mask = X001100XXX111X111X1111X000X0X0011100 109 | mem[42659] = 2822 110 | mem[40278] = 2173727 111 | mem[32236] = 13461 112 | mem[8739] = 49532769 113 | mem[23981] = 6272019 114 | mem[26083] = 7424 115 | mask = 1X001110010X101110111001100X0101XX01 116 | mem[5207] = 285084 117 | mem[46863] = 202944 118 | mem[29623] = 74688785 119 | mem[39251] = 2480123 120 | mem[21934] = 128729 121 | mem[17298] = 74932253 122 | mem[3243] = 2421447 123 | mask = 100001000X11100X1X110010XX1010XX010X 124 | mem[45668] = 70363 125 | mem[5250] = 19909279 126 | mem[20889] = 8027 127 | mem[61368] = 422881 128 | mask = 1010110X0X111X1111110000X01100XX010X 129 | mem[7264] = 4257 130 | mem[62228] = 4486 131 | mem[11135] = 31885819 132 | mem[50978] = 523114 133 | mem[12827] = 9872 134 | mask = 10X011010110X011001X11001X1100X11101 135 | mem[15425] = 38832030 136 | mem[7190] = 3685311 137 | mem[4442] = 111088 138 | mem[46774] = 679 139 | mem[48679] = 30399 140 | mask = 101100X111011111X1111100X1X100001001 141 | mem[21055] = 143042 142 | mem[44782] = 112377326 143 | mem[62184] = 8230 144 | mem[49662] = 512539 145 | mem[26324] = 73321 146 | mem[17454] = 107773 147 | mem[63437] = 73219244 148 | mask = 10000111011110111X1000XX1010X1X0X111 149 | mem[36342] = 1818 150 | mem[18094] = 47648232 151 | mem[52003] = 776369 152 | mask = 11001X100XX0X01111111XX0110111X00110 153 | mem[29103] = 5339928 154 | mem[36458] = 988421275 155 | mem[749] = 185734229 156 | mem[33969] = 29427002 157 | mask = 10X1X0X111X11XX11X11110011XX00011100 158 | mem[18473] = 197816 159 | mem[140] = 1537228 160 | mem[5706] = 1016744730 161 | mem[21968] = 425238881 162 | mem[2299] = 7217883 163 | mem[36197] = 66 164 | mask = 100110X10X11X011111111X100110X110X00 165 | mem[5148] = 3669 166 | mem[50092] = 313576115 167 | mem[1719] = 23750788 168 | mem[62734] = 2882 169 | mem[49010] = 14217157 170 | mask = 1X0XXX00011X10111X1110000011101X0X1X 171 | mem[24047] = 11171624 172 | mem[34404] = 251169353 173 | mem[23056] = 3568348 174 | mem[2599] = 9449217 175 | mask = 0X0X11X1011010111X101X00X111X0001100 176 | mem[49530] = 1917 177 | mem[23017] = 4137 178 | mem[42892] = 209824 179 | mem[44196] = 2282 180 | mem[340] = 416390430 181 | mem[40836] = 4717162 182 | mask = 1101X000XX1010111011XX1X0000100X0000 183 | mem[20534] = 116 184 | mem[51190] = 846413 185 | mem[43522] = 88862477 186 | mem[56757] = 7097 187 | mask = 00000101111XX01110X0X00000111000110X 188 | mem[20975] = 25703 189 | mem[11316] = 7721 190 | mem[56239] = 29785 191 | mem[51862] = 145224773 192 | mem[3358] = 10907 193 | mem[13070] = 77929 194 | mask = 0X0011110110X0111X1XX11001100X0X11XX 195 | mem[22991] = 231 196 | mem[33217] = 2826 197 | mem[34404] = 509 198 | mask = 100X11X00000X0X11111000XX000X01010X0 199 | mem[18012] = 4386 200 | mem[56514] = 16103818 201 | mem[46863] = 7016934 202 | mem[53389] = 2025015 203 | mem[5646] = 77832170 204 | mask = 110011X00001X0X11111X100X0000100X01X 205 | mem[38058] = 327471 206 | mem[7489] = 247743521 207 | mem[41341] = 980157 208 | mask = 10X01XX000X1001X1111X000X101000111X1 209 | mem[2278] = 1003775 210 | mem[4957] = 695497071 211 | mem[27026] = 83380 212 | mem[58747] = 3055795 213 | mem[35663] = 424302 214 | mem[55675] = 1400 215 | mem[59995] = 15450 216 | mask = 0X011001001X1X1X10110100011011001011 217 | mem[18012] = 105413272 218 | mem[18353] = 2478 219 | mem[10658] = 33943560 220 | mem[64129] = 97108 221 | mem[16290] = 585316720 222 | mem[38816] = 26080808 223 | mask = 100X1X10XXX0101X101X000X00111011011X 224 | mem[37923] = 340333740 225 | mem[34920] = 429908705 226 | mem[955] = 1727757 227 | mem[65269] = 221055157 228 | mem[10891] = 523742 229 | mem[7264] = 21158973 230 | mask = 10XX1100011X10111X1100X00000X0111111 231 | mem[61904] = 63495 232 | mem[57943] = 33076 233 | mem[20097] = 836033572 234 | mem[12549] = 55029 235 | mem[3024] = 3602462 236 | mask = 110X0000011010X11011X0X0101X10XX000X 237 | mem[14134] = 1542 238 | mem[802] = 10323 239 | mem[51543] = 171365721 240 | mem[12827] = 3980 241 | mask = 1000X100011110X1111100X100XXX0X001X1 242 | mem[8136] = 449831 243 | mem[1281] = 999072275 244 | mem[20796] = 332579 245 | mem[443] = 131455 246 | mem[12894] = 18123 247 | mem[50922] = 5177801 248 | mask = 100XXX0001101011X1110X000001101011XX 249 | mem[18244] = 930 250 | mem[672] = 89370 251 | mem[42478] = 50196 252 | mem[35527] = 16 253 | mem[61716] = 105683782 254 | mask = 1000XX00011010111X110X0X1011101XX110 255 | mem[6775] = 3861120 256 | mem[843] = 312 257 | mem[2688] = 196099 258 | mem[37141] = 377569 259 | mem[33497] = 825 260 | mem[32589] = 1629649 261 | mask = 10X100011X1X1011X01110XX11X01100X100 262 | mem[20624] = 315487 263 | mem[31408] = 72488 264 | mem[63467] = 13483 265 | mem[2471] = 177211433 266 | mem[45598] = 62138 267 | mem[25301] = 6365509 268 | mask = 110011X0000111001X110110X00XX00001X0 269 | mem[42036] = 7869 270 | mem[55966] = 14443044 271 | mem[27440] = 100934729 272 | mem[19003] = 2085 273 | mem[15653] = 2142716 274 | mem[23117] = 1021 275 | mem[45011] = 5295150 276 | mask = X100101X0000X01111111001110X010X111X 277 | mem[57308] = 11803 278 | mem[2240] = 961172 279 | mask = 100011X0011010111X1XX100101010XXX1X0 280 | mem[2444] = 243334769 281 | mem[12549] = 40175975 282 | mask = X0011001X011111110110XX00X0X00X11011 283 | mem[24834] = 363054 284 | mem[32941] = 83666205 285 | mem[16403] = 444996 286 | mask = 1100X1100001XXXX101X01001X101000010X 287 | mem[56757] = 6879 288 | mem[4442] = 2107238 289 | mem[25399] = 14684 290 | mem[38582] = 330023 291 | mem[59557] = 299 292 | mem[34404] = 357591660 293 | mask = 0100X11101100011111XX1X000100011111X 294 | mem[19990] = 405059382 295 | mem[50770] = 21723749 296 | mem[47204] = 310 297 | mem[55142] = 353841 298 | mem[31516] = 46662 299 | mem[59748] = 154981 300 | mask = 100X111001X010111X110X1X101110X01111 301 | mem[25989] = 412990662 302 | mem[44019] = 11063 303 | mem[5207] = 25633 304 | mem[23445] = 2402831 305 | mem[30252] = 60933 306 | mask = 100X111001001X10X0100XXX0011011X10X0 307 | mem[45485] = 5697187 308 | mem[39779] = 21767171 309 | mem[34966] = 498 310 | mem[13640] = 123685 311 | mask = X001X00X0XX11X1111111001X111X11111X0 312 | mem[30646] = 77071 313 | mem[40278] = 15164 314 | mem[48949] = 2547 315 | mem[49010] = 168697055 316 | mem[52212] = 836232 317 | mask = X00011000111101111X100X100100X00XX1X 318 | mem[13958] = 872 319 | mem[28057] = 130528 320 | mem[9891] = 1464 321 | mask = 00X10000000X11111111X0100X1X0X111111 322 | mem[29510] = 29331 323 | mem[16403] = 265384902 324 | mem[46270] = 55500 325 | mem[35558] = 149875 326 | mem[42316] = 8508705 327 | mem[12894] = 281336 328 | mask = 10X011XX01X00011001110X11111X00X1XX0 329 | mem[15463] = 114059 330 | mem[64253] = 5760 331 | mem[34294] = 38569 332 | mem[1677] = 5097 333 | mem[22991] = 502 334 | mem[44522] = 326097 335 | mem[8172] = 37 336 | mask = 00010000X0001X1111111011011101X1X110 337 | mem[39779] = 1142 338 | mem[29838] = 85552455 339 | mem[42813] = 5712091 340 | mem[45115] = 58778 341 | mem[13319] = 855 342 | mem[2440] = 410159 343 | mask = X101101101X01111101010X110X110000010 344 | mem[41886] = 1753 345 | mem[57501] = 961519277 346 | mem[48943] = 1352369 347 | mask = 1000011X01111X1111101XX0000X101XX110 348 | mem[840] = 954719 349 | mem[53875] = 11370 350 | mem[45011] = 5033013 351 | mem[45230] = 850083 352 | mem[20455] = 862 353 | mask = 1X00010XX111101X111110000X111011X1X0 354 | mem[34148] = 99301330 355 | mem[26648] = 7719906 356 | mem[18244] = 110630512 357 | mask = 1100X11000X11X0X1111100X0X00X010XX11 358 | mem[50401] = 1733252 359 | mem[26875] = 37568501 360 | mem[35663] = 508001 361 | mem[14749] = 1838 362 | mask = X1010XX001111011101X0000X001XX100010 363 | mem[63359] = 5414799 364 | mem[35329] = 251023948 365 | mem[26907] = 876247525 366 | mask = X000X0X1111XX0100111XX10101X011X1100 367 | mem[23165] = 20505666 368 | mem[7340] = 1068126 369 | mem[5630] = 2429 370 | mem[55672] = 30150 371 | mask = 1000X11X011X101111101X0XX0101X1010X0 372 | mem[19212] = 6837122 373 | mem[14758] = 38425 374 | mem[19003] = 119768 375 | mask = 10000X01111110X0X1111110XXX110011X10 376 | mem[33194] = 61265858 377 | mem[13147] = 3274970 378 | mem[41650] = 4162 379 | mem[42478] = 1225726 380 | mem[63031] = 112464577 381 | mask = X0X10000X101101111110011X11101111100 382 | mem[35647] = 5788908 383 | mem[42040] = 48997 384 | mem[62673] = 1901 385 | mem[39850] = 1010636 386 | mask = 11X010X0010100101X1XXX0001001111010X 387 | mem[20116] = 50 388 | mem[57943] = 17495168 389 | mem[28763] = 19897421 390 | mem[21657] = 923815 391 | mem[4802] = 86976237 392 | mask = 1X0011X001100011XX1X100X101110100110 393 | mem[13898] = 4734170 394 | mem[1595] = 82201 395 | mask = 1001X0010011X111111X1X0X1X1100011000 396 | mem[44782] = 14922 397 | mem[54309] = 1336 398 | mem[23027] = 194803 399 | mem[24035] = 29316023 400 | mask = 1100111000010101X011X00011100X00010X 401 | mem[50916] = 1751 402 | mem[47305] = 2707 403 | mem[14464] = 13519228 404 | mem[33044] = 10744 405 | mem[53730] = 4920479 406 | mem[37037] = 859 407 | mask = X100111X0X10001111111100X11110001110 408 | mem[58049] = 939221 409 | mem[1924] = 17 410 | mem[61135] = 358315072 411 | mem[21809] = 5281 412 | mem[39141] = 1817 413 | mem[51543] = 136115569 414 | mem[50155] = 300797 415 | mask = 110010X000X1110010X100X0111X001X00XX 416 | mem[50279] = 14014916 417 | mem[12124] = 68328623 418 | mem[44199] = 313076 419 | mem[64321] = 4725 420 | mem[20842] = 108600115 421 | mem[37411] = 4492927 422 | mask = X1001X11000010111111XX0X100X11000011 423 | mem[28505] = 8712 424 | mem[37967] = 35824634 425 | mem[23027] = 241 426 | mem[17252] = 20614619 427 | mem[24389] = 10076 428 | mask = X101000001X01011X011X0X10X1100101X10 429 | mem[61716] = 8801 430 | mem[34944] = 1881 431 | mem[4710] = 8504 432 | mem[56313] = 14501 433 | mem[5654] = 14055781 434 | mem[22490] = 90967 435 | mask = X0X1110X01101011111101001100001X1101 436 | mem[21158] = 463323 437 | mem[18946] = 15357 438 | mem[57000] = 2534149 439 | mem[15029] = 194259123 440 | mem[38305] = 441356 441 | mask = 11001110010X000X101000XX010000111111 442 | mem[53389] = 1383160 443 | mem[938] = 1952336 444 | mem[64009] = 15833 445 | mask = 00X11X0011X11011111111000X10001X11X1 446 | mem[6272] = 13767595 447 | mem[54734] = 510 448 | mem[33438] = 1925 449 | mem[36878] = 260095 450 | mask = 110X11100111X0001X000001011001X01011 451 | mem[47847] = 2621 452 | mem[49530] = 526 453 | mem[17284] = 1326861 454 | mem[17082] = 5186894 455 | mem[18302] = 13617528 456 | mem[7269] = 1111687 457 | mask = 110011100001X11X101X1X101010X01X0100 458 | mem[60461] = 2942 459 | mem[35460] = 327 460 | mem[28055] = 375226 461 | mask = 0011111X01101111111010XXX101X101100X 462 | mem[41886] = 113214 463 | mem[17284] = 85512736 464 | mask = 0X01X111X1101X1110100101011110011XX1 465 | mem[40617] = 603263 466 | mem[10573] = 33216107 467 | mem[22356] = 26505 468 | mem[6272] = 45384662 469 | mask = 10101X0001111011X11X000111X1X1100X0X 470 | mem[7936] = 47932 471 | mem[16185] = 5024 472 | mem[52003] = 1045816 473 | mask = 0XXX1X1101101X111X1001X000110001110X 474 | mem[32145] = 91132 475 | mem[55966] = 3856425 476 | mem[42185] = 24094 477 | mem[36708] = 277 478 | mask = 1101100XX11X1011111110X0100X10X0000X 479 | mem[31516] = 5220059 480 | mem[35747] = 2317 481 | mem[7864] = 3365 482 | mem[55570] = 45702 483 | mask = 110110010X1110X1X111000X0000101X1X00 484 | mem[44696] = 47285061 485 | mem[28866] = 23561 486 | mem[56107] = 8116244 487 | mem[41437] = 2106148 488 | mask = 110011X00011001111XX100X11001010010X 489 | mem[45954] = 58871 490 | mem[61135] = 3411 491 | mem[17541] = 3200218 492 | mem[38985] = 233678515 493 | mem[41259] = 166543015 494 | mem[2350] = 34876506 495 | mask = 11X01X00X0X00001111XX00101X0X0100010 496 | mem[23027] = 474324 497 | mem[6434] = 53973 498 | mem[40128] = 16133 499 | mem[36404] = 5183 500 | mask = 1100111000XX00111X11110X11X00X10000X 501 | mem[10063] = 9539320 502 | mem[843] = 671 503 | mem[4773] = 140929 504 | mem[19139] = 133212046 505 | mem[20975] = 795877 506 | mask = 100X0X00011X101111X101000010X0001000 507 | mem[932] = 2504742 508 | mem[25530] = 1425628 509 | mask = 10X001X00X1X1X011X1100110X1X1011X000 510 | mem[8358] = 313827173 511 | mem[7256] = 1152512 512 | mem[6697] = 60311 513 | mem[15728] = 6743 514 | mem[64009] = 43785 515 | mem[43325] = 2846 516 | mask = 100X1X00011X1011111X000000X0X01X1X00 517 | mem[46292] = 1644 518 | mem[1988] = 1949 519 | mem[40476] = 111556 520 | mask = 100011X0X11XX01110111X001001X010111X 521 | mem[43625] = 120590 522 | mem[63878] = 417 523 | mem[1924] = 4511945 524 | mem[36404] = 2609999 525 | mem[8758] = 30953 526 | mem[896] = 56891660 527 | mem[37141] = 770 528 | mask = 100011X001X0X0111X11100000XXX0010X10 529 | mem[19084] = 9020 530 | mem[39875] = 31650099 531 | mask = 10101110011000110011XX11X110011X1010 532 | mem[13319] = 1038 533 | mem[46337] = 51363384 534 | mem[61871] = 3928 535 | mem[15595] = 224135 536 | mem[56790] = 39964747 537 | mem[54731] = 1878594 538 | mem[53872] = 4678318 539 | mask = 00X11001001110111011X0X001X111110X11 540 | mem[39549] = 14142886 541 | mem[26096] = 7903442 542 | mem[43322] = 8676 543 | mem[17353] = 509961 544 | mem[49320] = 11303 545 | mask = 1X0100000X00X011X01X011000X0X0111000 546 | mem[48878] = 209296 547 | mem[29990] = 394600 548 | mask = 100000000X10101X11110XX0101011000011 549 | mem[843] = 542527866 550 | mem[63601] = 10350671 551 | mem[9659] = 3514 552 | mem[33969] = 266 553 | mem[2863] = 15309 554 | mask = 10X0X000011X10XX01100101100XX01X0010 555 | mem[56350] = 2980026 556 | mem[45422] = 7205 557 | mem[26310] = 10221 558 | mem[40386] = 358165 559 | mem[55012] = 32294336 560 | mask = X1001X10000111001011X1001011X0010110 561 | mem[25508] = 86175837 562 | mem[26087] = 58400593 563 | mem[48996] = 27712 564 | mem[3272] = 2146 -------------------------------------------------------------------------------- /14-docking-data/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace std; 4 | 5 | typedef unsigned long long ull; 6 | 7 | ull sum_alloc(map &mem) { 8 | ull sum = 0; 9 | for (auto const& m: mem) sum += m.second; 10 | return sum; 11 | } 12 | 13 | void p2(map &mem, string mask, int addr, ull value) { 14 | string res = bitset<36>(addr).to_string(); 15 | vector f; 16 | 17 | for (int i = 0; i < 36; i++) { 18 | if (mask[i] == 'X') { res[i] = 'X'; f.push_back(i); } 19 | else if (mask[i] == '1') res[i] = '1'; 20 | } 21 | 22 | for (int i = 0; i < pow(2, f.size()); i++) { 23 | string perm = bitset<36>(i).to_string().substr(36-f.size(), f.size()); 24 | 25 | for (int j = 0; j < perm.size(); j++) 26 | res[f[j]] = perm[j]; 27 | 28 | mem[bitset<36>(res).to_ullong()] = value; 29 | } 30 | } 31 | 32 | void p1(map &mem, string mask, int addr, ull value) { 33 | string res = bitset<36>(value).to_string(); 34 | 35 | for (int i = 0; i < 36; i++) 36 | if (mask[i] != 'X') res[i] = mask[i]; 37 | 38 | mem[addr] = bitset<36>(res).to_ullong(); 39 | } 40 | 41 | int main() { 42 | map mem1, mem2; 43 | 44 | for (string line, mask; getline(cin, line);) { 45 | smatch match; 46 | 47 | if (regex_match(line, match, regex("mask = (.+)"))) 48 | mask = match[1]; 49 | 50 | else if (regex_match(line, match, regex("mem\\[(\\d+)\\] = (.+)"))) { 51 | p1(mem1, mask, stoi(match[1]), stoi(match[2])); 52 | p2(mem2, mask, stoi(match[1]), stoi(match[2])); 53 | } 54 | } 55 | 56 | printf("p1: %llu\np2: %llu\n", sum_alloc(mem1), sum_alloc(mem2)); 57 | } -------------------------------------------------------------------------------- /15-rambunctious-recitation/input.txt: -------------------------------------------------------------------------------- 1 | 14,1,17,0,3,20 -------------------------------------------------------------------------------- /15-rambunctious-recitation/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | int play(vector &numbers, int target) { 5 | unordered_map m; 6 | 7 | for (int i = 0; i < numbers.size(); i++) 8 | m[numbers[i]] = i; 9 | 10 | for (int i = numbers.size(), now=0, last;; i++) { 11 | last = now; 12 | now = m.find(last) != m.end() ? i - m[now] : 0; 13 | m[last] = i; 14 | 15 | if (i+1 == target) return last; 16 | } 17 | } 18 | 19 | int main() { 20 | string line, token; 21 | getline(cin, line); 22 | 23 | stringstream ss(line); 24 | vector numbers; 25 | 26 | for (int i = 0; getline(ss, token, ','); i++) 27 | numbers.push_back(stoi(token)); 28 | 29 | printf("p1: %d\np2: %d\n", play(numbers, 2020), play(numbers, 30000000)); 30 | } -------------------------------------------------------------------------------- /16-ticket-translation/input.txt: -------------------------------------------------------------------------------- 1 | departure location: 45-609 or 616-954 2 | departure station: 32-194 or 211-972 3 | departure platform: 35-732 or 744-970 4 | departure track: 40-626 or 651-952 5 | departure date: 44-170 or 184-962 6 | departure time: 49-528 or 538-954 7 | arrival location: 36-448 or 464-956 8 | arrival station: 48-356 or 373-972 9 | arrival platform: 25-118 or 132-954 10 | arrival track: 43-703 or 719-965 11 | class: 29-822 or 828-961 12 | duration: 25-131 or 151-967 13 | price: 44-784 or 794-958 14 | route: 25-498 or 511-951 15 | row: 44-905 or 916-973 16 | seat: 26-756 or 777-960 17 | train: 36-803 or 819-954 18 | type: 33-318 or 335-967 19 | wagon: 46-558 or 570-969 20 | zone: 47-249 or 265-972 21 | 22 | your ticket: 23 | 73,167,113,61,89,59,191,103,67,83,163,109,101,71,97,151,107,79,157,53 24 | 25 | nearby tickets: 26 | 852,748,166,696,714,108,222,229,152,731,513,879,551,837,291,384,156,72,78,685 27 | 617,653,290,113,846,782,621,607,231,117,411,920,442,249,434,597,528,702,201,684 28 | 385,424,169,712,795,477,167,935,838,445,515,304,108,229,194,304,930,655,470,389 29 | 479,117,603,349,748,540,834,406,882,502,841,296,470,476,523,50,62,673,228,100 30 | 943,616,662,858,840,616,156,152,943,284,588,861,582,215,747,392,374,826,895,730 31 | 430,83,846,100,267,447,159,90,478,160,985,164,513,424,802,72,798,420,493,668 32 | 235,668,884,544,660,212,114,875,343,861,190,904,676,585,191,484,825,835,284,803 33 | 164,691,481,839,421,868,897,615,373,835,949,664,154,316,870,414,306,719,446,654 34 | 427,695,216,218,834,949,497,395,599,585,99,156,721,515,696,862,429,659,645,307 35 | 438,782,442,72,703,865,903,471,112,623,58,276,481,832,141,341,777,721,468,344 36 | 555,653,944,292,870,94,696,926,544,830,424,343,61,51,119,584,444,296,700,572 37 | 350,232,822,454,284,477,294,70,896,474,238,352,754,157,619,447,271,71,834,402 38 | 56,410,604,157,579,266,483,826,92,266,819,920,658,888,473,311,403,431,672,853 39 | 353,10,862,588,837,547,686,104,79,877,158,676,497,894,380,821,99,246,69,663 40 | 317,609,343,863,900,70,62,163,416,100,83,874,834,687,237,746,938,146,215,654 41 | 538,235,384,313,604,573,63,883,866,92,728,588,409,282,798,349,429,800,454,622 42 | 88,512,392,70,229,686,887,643,727,318,858,349,96,274,723,475,393,97,290,605 43 | 860,526,514,898,935,85,856,580,297,826,466,429,584,483,928,65,79,225,385,490 44 | 478,399,152,571,240,728,467,930,496,878,285,675,779,5,72,336,442,411,794,939 45 | 678,231,165,54,100,596,663,469,161,835,293,699,475,229,572,282,624,847,892,990 46 | 699,730,307,901,853,477,482,597,214,663,829,486,64,699,814,919,194,311,868,554 47 | 513,579,845,113,185,888,555,579,353,248,722,245,245,482,763,412,512,574,539,626 48 | 456,749,526,93,678,282,585,308,245,485,938,616,867,114,239,446,727,885,376,617 49 | 936,835,988,56,942,822,839,520,185,878,84,523,293,301,406,557,156,745,926,849 50 | 423,85,476,928,985,186,551,278,424,86,744,744,434,160,435,77,667,386,685,301 51 | 90,167,540,448,889,919,894,378,237,533,186,408,86,900,498,384,217,184,244,621 52 | 115,394,587,752,558,675,489,932,838,596,941,728,485,925,111,693,571,639,684,546 53 | 943,605,192,609,347,388,480,439,448,584,486,695,229,783,614,488,237,854,558,844 54 | 411,215,396,674,829,314,923,846,94,63,690,572,721,64,4,189,421,945,845,300 55 | 515,379,934,841,350,443,226,231,93,859,819,69,112,84,437,825,870,916,831,431 56 | 614,473,583,476,586,703,419,184,683,660,298,949,858,682,931,356,340,271,412,523 57 | 892,413,849,194,248,341,192,60,442,381,887,243,185,473,588,790,78,666,110,336 58 | 556,97,930,495,380,491,726,419,166,60,933,133,942,419,290,80,422,946,185,472 59 | 583,415,947,719,384,697,544,919,356,544,290,310,790,920,749,777,492,50,617,580 60 | 407,65,665,78,507,269,89,874,901,314,622,698,112,308,927,656,832,226,307,783 61 | 994,876,489,748,70,662,216,249,581,64,442,683,696,280,118,274,836,310,399,681 62 | 303,94,602,827,355,245,99,155,313,444,820,651,310,702,838,943,92,60,386,699 63 | 211,570,889,698,848,934,187,105,470,907,99,349,294,724,155,573,665,63,929,277 64 | 374,63,287,107,517,577,819,721,86,673,581,354,511,94,110,169,703,730,613,756 65 | 265,925,881,780,238,91,51,867,891,231,174,67,898,236,474,433,520,658,932,391 66 | 84,779,860,82,212,858,749,223,152,225,118,220,306,471,380,61,698,4,88,730 67 | 931,902,981,492,594,60,335,166,301,233,274,797,666,236,191,217,924,310,107,673 68 | 861,158,884,670,486,752,944,249,928,301,269,218,935,878,289,186,379,712,881,314 69 | 95,81,672,616,409,184,306,436,871,355,422,821,877,676,716,408,187,848,520,687 70 | 902,311,189,799,246,341,474,477,544,89,476,226,666,483,272,830,531,153,55,51 71 | 947,220,594,212,673,593,437,820,899,855,884,667,934,440,503,50,947,465,118,592 72 | 194,724,887,730,934,465,841,427,693,487,526,236,538,468,828,652,175,386,781,90 73 | 473,285,392,249,339,748,796,898,481,237,901,152,883,665,94,442,791,624,229,606 74 | 802,346,724,949,99,659,213,58,263,722,600,622,924,947,163,877,160,723,348,494 75 | 801,268,937,11,60,265,118,929,109,152,470,832,697,110,161,396,604,101,97,99 76 | 316,924,302,190,386,675,938,62,681,724,777,234,199,445,288,466,480,869,97,244 77 | 512,294,587,690,420,102,512,929,876,786,754,337,544,285,784,81,575,425,298,376 78 | 479,652,918,435,773,492,618,936,298,99,82,477,780,466,523,945,98,511,162,755 79 | 673,472,653,427,652,431,551,260,409,440,351,778,75,309,747,889,726,169,221,890 80 | 512,376,753,527,224,554,660,871,311,296,833,400,379,192,696,294,410,741,606,664 81 | 923,348,343,297,304,225,827,83,876,672,219,722,550,600,389,820,229,673,297,544 82 | 689,492,515,299,466,920,387,239,307,405,375,867,226,302,877,461,477,421,519,702 83 | 73,524,544,243,58,495,884,164,992,97,220,434,538,583,51,218,719,247,280,407 84 | 277,552,925,51,168,316,404,899,903,941,376,103,436,917,722,19,355,698,407,298 85 | 316,114,89,623,672,167,95,935,685,686,193,654,303,713,234,783,747,626,868,392 86 | 195,72,901,486,241,159,60,58,442,211,837,217,352,279,516,156,833,661,442,265 87 | 872,267,101,83,349,513,486,533,241,113,236,445,885,672,833,675,854,931,574,165 88 | 479,448,730,617,289,185,585,308,784,91,90,53,661,632,307,722,116,539,794,412 89 | 105,483,64,795,482,486,737,853,483,723,679,726,570,744,376,307,382,854,348,608 90 | 134,443,920,418,553,753,217,624,311,75,555,382,597,297,309,855,153,89,778,583 91 | 579,653,681,819,110,830,50,303,604,783,249,339,835,929,229,108,19,926,516,949 92 | 74,496,584,170,115,297,93,497,921,916,571,846,782,597,437,744,458,347,110,607 93 | 903,488,448,355,377,852,872,773,511,731,429,81,393,228,518,192,625,61,490,239 94 | 118,168,576,220,670,495,921,716,438,112,671,782,751,339,928,65,293,592,266,270 95 | 237,841,409,525,584,381,422,238,2,731,404,803,220,877,295,821,918,919,946,727 96 | 387,528,847,619,498,782,745,68,444,597,545,315,580,794,700,660,343,936,718,57 97 | 877,799,432,495,87,318,489,379,461,598,418,658,595,403,82,894,298,237,837,77 98 | 587,310,599,886,784,417,232,450,947,405,478,576,52,936,300,862,783,189,377,918 99 | 113,390,605,584,870,542,308,791,300,603,883,798,586,841,685,777,782,587,895,151 100 | 304,724,215,414,873,841,617,619,861,400,308,479,455,104,620,545,159,783,654,235 101 | 802,311,157,465,159,882,393,377,745,436,724,427,854,102,174,422,169,700,380,447 102 | 91,862,280,399,464,396,407,134,117,678,903,307,341,747,875,243,550,728,926,555 103 | 496,861,940,577,441,80,285,241,553,390,937,271,467,410,408,870,977,752,354,579 104 | 553,894,294,731,326,414,406,83,828,654,82,170,667,112,853,94,188,434,527,295 105 | 803,557,169,672,82,655,464,350,157,399,691,160,745,975,902,428,877,891,213,108 106 | 340,383,887,112,719,519,683,853,190,899,161,793,850,403,437,52,890,802,593,609 107 | 229,722,783,899,785,247,434,587,936,248,609,265,84,853,831,544,861,780,781,469 108 | 301,312,675,897,263,397,392,476,928,67,467,653,697,861,288,231,623,246,669,839 109 | 273,339,78,861,339,212,703,402,285,419,11,931,880,415,246,622,72,934,227,525 110 | 861,696,672,414,265,154,246,375,585,478,110,853,406,277,311,112,612,394,274,415 111 | 896,868,338,782,467,314,60,925,224,585,267,297,984,169,272,683,390,347,784,292 112 | 917,516,424,213,802,385,310,871,154,325,872,190,898,476,61,513,464,919,211,97 113 | 468,682,520,538,695,419,404,350,598,121,495,300,858,421,542,822,778,76,283,275 114 | 752,71,896,151,851,842,606,608,667,257,97,744,288,317,233,778,618,276,487,492 115 | 345,191,426,858,306,398,691,230,755,472,614,381,937,850,607,729,477,889,625,215 116 | 288,622,864,902,719,732,219,830,858,356,288,841,830,248,184,667,198,550,663,498 117 | 246,428,5,690,693,745,238,223,153,220,193,852,744,192,596,575,832,944,585,401 118 | 296,542,87,338,732,437,800,874,309,843,58,732,665,103,80,430,850,532,673,286 119 | 374,239,653,794,918,829,725,927,534,151,745,354,575,676,681,941,749,860,70,467 120 | 60,185,832,191,373,841,845,292,797,811,82,883,270,931,552,218,575,690,239,190 121 | 778,74,518,267,374,227,110,73,855,679,916,796,339,661,551,989,683,829,151,67 122 | 437,824,70,295,752,600,522,113,624,784,188,921,488,882,889,389,266,732,337,928 123 | 803,345,300,869,232,868,703,247,796,217,834,17,599,919,856,277,160,468,287,55 124 | 302,856,395,248,848,223,81,54,679,695,580,821,558,280,827,691,746,385,896,476 125 | 948,556,343,921,383,925,97,174,937,311,166,585,394,600,686,491,698,389,274,921 126 | 240,749,50,291,430,603,899,545,156,403,456,386,658,703,382,73,337,315,929,681 127 | 922,101,625,668,376,664,223,657,298,175,889,544,752,802,621,926,847,513,88,518 128 | 905,676,474,340,847,430,108,303,725,62,578,419,747,70,660,405,218,891,181,487 129 | 406,420,674,67,931,297,314,942,586,396,245,623,551,652,250,590,77,100,657,558 130 | 542,490,61,750,223,888,224,941,875,581,222,527,217,223,864,574,287,182,528,475 131 | 830,305,239,924,316,337,289,289,431,344,898,167,594,926,785,795,933,558,290,932 132 | 934,873,488,729,756,240,933,130,51,489,512,621,79,671,408,229,102,872,68,523 133 | 377,70,584,213,131,275,489,433,689,747,50,753,88,217,439,470,597,835,390,904 134 | 353,580,851,791,888,841,937,234,835,74,598,555,582,422,337,352,64,338,433,870 135 | 750,701,156,249,725,857,354,703,126,851,660,243,623,492,695,76,490,844,335,886 136 | 859,216,380,425,490,479,936,445,326,938,574,418,848,489,87,386,800,97,303,673 137 | 303,902,73,898,619,403,540,355,55,236,161,708,940,920,83,79,246,356,922,887 138 | 318,79,157,888,586,213,526,659,318,945,570,496,947,799,419,779,128,860,154,440 139 | 168,554,934,573,594,528,512,522,398,294,738,89,474,104,833,583,849,338,306,666 140 | 521,522,591,924,558,657,554,488,93,590,378,152,194,190,193,727,403,509,291,395 141 | 943,50,379,392,427,422,916,894,273,473,68,284,341,514,847,301,494,295,384,134 142 | 876,797,487,698,194,571,714,59,665,655,78,79,108,281,293,891,849,898,387,551 143 | 182,923,483,524,426,94,237,602,690,493,884,434,411,551,750,528,625,396,249,526 144 | 343,495,784,355,794,494,240,678,191,719,848,753,243,148,115,211,842,750,390,622 145 | 153,552,548,284,164,694,383,283,821,580,376,312,887,861,247,881,259,279,345,868 146 | 443,152,228,853,438,343,654,85,850,290,277,58,524,114,5,300,936,668,602,112 147 | 884,976,606,239,900,872,863,397,306,866,866,864,938,586,905,594,497,899,394,828 148 | 889,241,241,512,877,231,879,229,474,424,275,888,539,590,831,982,725,407,248,154 149 | 193,727,107,544,476,402,856,673,132,388,848,748,751,335,407,424,837,93,916,526 150 | 655,395,931,744,405,780,75,286,429,679,580,876,543,525,932,670,699,920,138,936 151 | 745,20,297,266,223,478,353,843,893,52,655,473,74,655,248,689,745,222,702,160 152 | 664,778,443,923,750,547,431,892,864,211,289,471,442,626,848,73,546,126,187,219 153 | 692,685,289,479,378,238,884,443,317,151,787,877,109,482,850,753,945,621,352,689 154 | 64,291,294,577,241,112,557,744,84,690,315,113,854,109,625,996,269,486,662,576 155 | 920,287,623,161,315,621,348,492,664,281,946,381,606,752,309,992,186,184,68,895 156 | 879,577,107,432,654,870,439,467,419,236,447,549,219,353,485,936,213,412,823,288 157 | 790,665,747,494,525,863,421,425,871,391,422,601,215,242,609,784,214,727,869,162 158 | 750,551,756,373,100,356,222,373,857,50,236,52,116,858,930,948,668,730,936,827 159 | 485,899,839,584,622,867,242,373,654,209,169,87,80,349,538,271,820,222,483,620 160 | 221,164,293,687,656,595,724,419,2,893,385,940,656,112,113,835,407,524,703,777 161 | 164,598,491,834,416,271,216,688,945,92,652,266,872,50,733,291,796,310,900,873 162 | 230,918,93,892,376,412,470,679,823,526,353,426,474,609,674,114,876,540,278,221 163 | 438,310,918,228,141,874,228,89,51,58,861,553,425,603,154,862,849,657,553,889 164 | 686,557,153,875,423,549,620,484,391,156,921,68,223,309,219,472,718,625,591,164 165 | 656,487,240,520,276,439,239,888,834,95,132,65,413,557,90,303,299,890,247,590 166 | 436,228,868,491,696,403,118,939,819,698,64,819,237,780,341,849,306,52,791,929 167 | 692,440,848,418,886,298,88,154,790,595,755,662,307,587,866,837,50,722,398,384 168 | 124,894,570,311,428,938,52,661,348,703,599,624,441,168,588,606,292,105,819,582 169 | 682,374,296,591,117,388,221,386,307,933,830,548,584,480,918,689,671,912,935,81 170 | 76,621,821,578,90,348,68,279,66,613,288,268,518,238,881,583,830,514,382,410 171 | 99,385,317,864,265,831,801,209,374,413,420,117,939,802,590,651,433,380,931,858 172 | 495,849,430,229,349,63,214,682,477,238,868,516,435,341,188,749,595,785,888,893 173 | 56,215,279,246,832,71,802,870,663,102,872,879,137,752,393,675,784,56,55,928 174 | 396,691,335,448,492,402,243,780,665,753,782,556,383,799,332,409,162,389,936,719 175 | 827,838,579,286,265,164,875,847,699,596,694,799,948,542,117,356,83,678,798,699 176 | 375,897,425,188,653,838,177,837,317,878,522,801,308,230,830,626,926,842,292,592 177 | 90,932,56,266,335,830,675,64,193,828,930,902,946,520,483,232,738,521,842,577 178 | 802,466,400,207,929,314,236,246,356,70,350,309,281,153,616,839,388,389,307,881 179 | 434,57,466,435,292,221,398,558,729,553,169,215,880,781,988,860,835,467,688,701 180 | 525,475,270,552,225,169,106,190,236,700,266,413,414,651,167,283,527,615,282,233 181 | 843,161,441,605,856,336,269,938,617,925,165,394,601,446,628,341,603,603,387,429 182 | 392,573,550,931,56,938,167,742,342,589,495,940,286,934,794,467,550,939,853,77 183 | 54,476,748,674,355,665,576,440,480,85,88,317,898,679,459,836,843,436,388,436 184 | 936,588,98,238,899,655,474,878,778,290,747,976,378,443,845,948,583,245,519,623 185 | 429,277,97,694,678,701,600,902,667,312,478,581,921,522,520,872,299,773,480,164 186 | 543,684,242,572,825,400,59,226,77,902,78,604,720,890,684,71,242,99,864,594 187 | 494,163,588,211,794,75,458,161,292,679,488,575,226,401,75,947,729,938,690,885 188 | 831,578,112,240,979,229,93,928,841,281,437,285,620,581,346,240,235,874,242,387 189 | 836,95,374,822,843,211,306,82,945,690,24,114,543,470,58,218,117,658,617,724 190 | 402,881,248,485,703,574,898,655,233,597,487,412,495,458,872,346,273,727,86,190 191 | 849,439,853,939,859,616,669,243,875,671,650,76,218,747,299,699,883,930,545,884 192 | 104,513,76,170,591,587,403,896,693,487,703,836,710,92,231,228,830,226,288,53 193 | 740,389,110,755,491,555,574,421,294,478,445,428,519,796,622,74,97,302,50,783 194 | 381,381,626,868,621,468,850,345,101,719,266,851,490,519,727,222,106,263,943,442 195 | 289,313,317,783,448,698,74,117,83,834,835,432,595,74,533,475,356,872,189,106 196 | 234,488,117,901,831,995,471,888,268,725,799,375,750,222,488,516,522,103,662,157 197 | 537,377,58,550,599,237,356,170,848,157,492,794,270,852,355,318,382,677,112,71 198 | 473,277,749,593,311,888,278,670,376,463,732,779,99,486,552,356,113,597,376,871 199 | 583,377,216,477,71,163,664,888,339,798,436,996,378,443,747,830,315,272,592,574 200 | 555,618,188,831,85,465,479,380,94,737,802,337,882,431,302,217,543,187,654,388 201 | 527,93,943,549,891,70,792,589,899,409,393,234,703,350,378,517,783,347,546,783 202 | 292,17,90,653,417,314,158,231,839,155,448,849,936,497,877,111,488,294,478,861 203 | 116,664,74,652,619,395,798,445,831,718,80,245,94,601,432,109,489,873,229,795 204 | 214,109,436,871,558,516,946,239,223,936,601,667,392,208,441,420,308,598,602,798 205 | 751,599,623,784,462,701,70,443,286,274,348,296,221,546,248,469,589,415,65,690 206 | 699,341,904,475,682,860,614,68,581,245,422,283,847,117,428,693,340,476,669,522 207 | 880,237,66,52,879,346,597,603,679,840,530,924,378,340,667,586,384,57,90,526 208 | 609,305,214,869,350,679,872,617,207,587,415,113,865,106,225,400,285,214,287,730 209 | 899,309,274,74,114,399,76,598,308,521,200,541,441,876,57,277,885,887,894,548 210 | 410,186,317,307,402,436,483,920,470,753,492,66,553,844,283,604,755,197,554,315 211 | 697,662,727,593,644,890,315,448,396,214,676,73,575,314,285,747,862,618,835,423 212 | 872,893,379,848,216,65,940,288,51,757,231,653,542,570,352,479,831,838,619,440 213 | 576,695,665,304,745,793,470,306,609,555,842,431,860,662,284,897,659,784,598,512 214 | 699,66,190,276,741,538,833,548,430,921,686,387,161,437,96,281,424,413,307,513 215 | 300,295,224,432,663,617,285,519,94,573,721,754,476,429,688,86,647,75,192,593 216 | 617,53,289,551,755,90,137,304,493,67,446,408,95,618,796,700,847,720,106,118 217 | 936,545,337,172,384,602,690,344,59,347,102,581,551,115,404,480,821,586,59,243 218 | 709,269,57,265,412,601,273,64,74,859,782,725,945,598,224,671,942,289,756,781 219 | 476,5,219,93,306,693,94,374,929,95,350,680,302,226,939,274,681,528,75,850 220 | 585,427,411,440,335,166,887,754,174,920,574,72,304,553,865,921,596,523,587,438 221 | 354,379,277,6,167,777,802,414,942,695,723,158,221,393,191,52,432,314,852,298 222 | 160,266,997,690,590,432,890,302,857,526,284,237,394,464,189,169,289,687,247,52 223 | 673,265,387,920,574,859,659,158,882,268,886,316,310,114,312,347,539,818,590,419 224 | 751,163,435,521,314,394,70,540,403,238,160,827,819,422,659,920,426,605,479,745 225 | 476,719,519,151,997,422,301,684,944,383,275,93,656,392,218,729,513,626,493,293 226 | 597,698,549,620,512,901,991,778,272,512,415,416,466,216,667,527,901,605,662,413 227 | 79,286,729,312,829,93,431,69,52,269,218,513,52,788,350,231,288,777,435,542 228 | 394,589,93,90,162,375,295,799,84,939,160,461,239,213,856,798,547,374,337,723 229 | 54,720,751,852,431,380,834,902,947,358,219,746,558,749,598,477,882,270,92,732 230 | 669,625,938,604,397,935,889,557,240,313,272,928,861,577,671,447,519,331,864,546 231 | 749,579,600,398,692,447,443,56,623,998,165,871,233,213,284,527,683,583,242,588 232 | 439,469,853,24,386,65,193,518,83,409,353,213,916,486,224,573,76,385,439,672 233 | 66,383,943,871,373,992,861,605,514,675,693,593,864,351,853,557,401,88,88,862 234 | 597,439,484,431,378,271,796,344,713,899,597,870,59,277,784,512,588,66,897,868 235 | 840,93,744,484,183,88,687,922,607,842,95,573,605,246,799,241,583,600,428,352 236 | 65,835,163,404,940,826,822,514,858,851,778,578,266,238,435,281,694,286,283,388 237 | 687,869,54,272,536,266,572,853,478,726,403,722,919,943,840,756,828,248,466,164 238 | 346,624,314,495,277,923,198,102,834,891,309,475,118,342,489,687,245,548,409,440 239 | 846,621,557,158,674,574,395,298,582,679,211,869,79,376,894,2,343,302,51,335 240 | 558,439,61,466,350,106,111,668,298,291,282,905,835,547,101,20,604,899,55,655 241 | 545,158,686,541,587,829,477,780,543,858,288,684,307,439,159,829,517,654,424,790 242 | 293,224,902,822,696,391,520,346,620,525,86,293,468,557,279,307,978,939,720,275 243 | 291,279,439,678,338,932,345,545,747,676,72,393,498,936,302,889,16,515,689,900 244 | 74,583,858,572,751,590,526,864,556,67,56,294,213,394,195,235,719,383,885,275 245 | 549,877,439,272,625,599,748,214,381,731,744,515,823,226,667,939,108,395,658,476 246 | 58,223,60,217,349,164,273,903,836,686,823,587,518,597,314,291,73,466,223,675 247 | 170,444,651,429,476,159,421,575,614,920,99,447,278,571,84,83,312,727,904,338 248 | 98,106,349,683,749,282,830,661,648,538,282,307,528,70,291,547,848,600,443,593 249 | 781,350,616,698,589,581,185,724,104,147,68,69,522,490,606,695,653,799,897,318 250 | 151,234,940,295,751,160,388,246,517,941,485,898,654,602,803,494,619,2,102,353 251 | 631,429,731,95,781,652,383,862,54,240,691,157,616,292,272,596,386,234,702,390 252 | 528,51,994,96,189,472,291,831,156,169,56,623,471,663,108,212,354,385,725,652 253 | 249,751,657,270,187,604,839,331,216,779,802,355,296,822,899,237,447,187,168,926 254 | 669,749,235,489,540,161,426,820,166,779,9,427,225,91,863,527,657,297,577,59 255 | 51,164,116,586,547,102,890,410,440,192,921,592,484,825,423,375,191,347,284,399 256 | 344,831,469,295,77,864,474,438,802,232,514,947,468,580,473,142,444,547,597,158 257 | 281,598,527,933,338,237,161,237,934,933,704,517,698,98,663,495,605,677,57,856 258 | 887,95,395,701,221,728,574,400,730,427,167,94,56,860,784,444,847,662,780,980 259 | 582,888,545,385,422,487,382,900,223,829,873,435,217,653,314,932,488,976,584,930 260 | 433,940,609,308,671,377,828,114,604,544,107,102,215,290,428,168,145,352,230,946 261 | 309,382,394,693,613,549,666,918,473,832,220,169,848,874,292,343,161,782,492,160 262 | 281,847,880,890,196,297,212,664,698,653,375,905,546,354,106,606,828,249,300,940 263 | 780,382,592,406,875,798,434,685,300,633,69,314,101,557,311,214,661,381,881,783 264 | 524,578,295,141,389,162,299,79,596,873,443,576,841,747,539,80,731,345,603,347 265 | 212,244,336,831,799,434,570,933,949,662,114,891,903,656,408,835,682,451,853,229 266 | 267,156,408,933,373,401,589,578,739,653,306,723,430,220,593,580,748,194,403,271 267 | 487,851,152,636,434,528,851,63,575,606,284,695,658,783,337,223,90,489,189,948 268 | 100,288,70,516,904,187,648,153,271,409,725,314,686,889,285,701,443,306,439,544 -------------------------------------------------------------------------------- /16-ticket-translation/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace std; 4 | 5 | typedef unsigned long long ull; 6 | 7 | struct Rule { 8 | string name; 9 | pair r1, r2; 10 | 11 | Rule(string name, pair r1, pair r2) { 12 | this->name = name; 13 | this->r1 = r1; 14 | this->r2 = r2; 15 | } 16 | }; 17 | 18 | struct Ticket { 19 | vector fields; 20 | 21 | Ticket(vector fields) { 22 | this->fields = fields; 23 | } 24 | }; 25 | 26 | bool is_in_range(Rule &r, int n) { 27 | return (n >= r.r1.first && n <= r.r1.second) || (n >= r.r2.first && n <= r.r2.second); 28 | } 29 | 30 | ull p2(vector &rules, vector &tickets) { 31 | ull mul = 1; 32 | vector>> vec; 33 | 34 | for (int i = 0; i < rules.size(); i++) { 35 | vector fields; 36 | vec.push_back({tickets[0].fields[i], set()}); 37 | 38 | for (int j = 1; j < tickets.size(); j++) 39 | fields.push_back(tickets[j].fields[i]); 40 | 41 | for (int j = 0; j < rules.size(); j++) { 42 | auto l = [&](const int &field) { return is_in_range(rules[j], field); }; 43 | 44 | if (count_if(fields.begin(), fields.end(), l) == tickets.size() - 1) 45 | vec[i].second.insert(rules[j].name); 46 | } 47 | } 48 | 49 | sort(vec.begin(), vec.end(), [=](const pair> &a, const pair> &b) { 50 | return a.second.size() < b.second.size(); 51 | }); 52 | 53 | map assigns {{*vec[0].second.begin(), vec[0].first}}; 54 | 55 | for (int i = 1; i < vec.size(); i++) { 56 | vector s; 57 | set_difference(vec[i].second.begin(), vec[i].second.end(), vec[i-1].second.begin(), vec[i-1].second.end(), inserter(s, s.begin())); 58 | assigns[s[0]] = vec[i].first; 59 | } 60 | 61 | for (auto a : assigns) 62 | if (a.first.find("departure") != string::npos) 63 | mul *= a.second; 64 | 65 | return mul; 66 | } 67 | 68 | int p1(vector &rules, vector &tickets) { 69 | int sum = 0; 70 | 71 | for (int i = 1; i < tickets.size(); i++) { 72 | for (int field: tickets[i].fields) { 73 | auto lambda = [&](Rule &rule) { return is_in_range(rule, field); }; 74 | if (!count_if(rules.begin(), rules.end(), lambda)) { 75 | sum += field; 76 | tickets.erase(tickets.begin() + i--); 77 | } 78 | } 79 | } 80 | return sum; 81 | } 82 | 83 | int main() { 84 | vector rules; 85 | vector tickets; 86 | 87 | for (string line; getline(cin, line);) { 88 | smatch m; 89 | 90 | if (regex_match(line, m, regex("(.+): (\\d+)-(\\d+) or (\\d+)-(\\d+)"))) { 91 | Rule r(m[1], {stoi(m[2]), stoi(m[3])}, {stoi(m[4]), stoi(m[5])}); 92 | rules.push_back(r); 93 | } 94 | 95 | else if (line.length() && !regex_match(line, m, regex("your ticket:|nearby tickets:"))) { 96 | stringstream ss(line); 97 | vector fields; 98 | 99 | for (string token; getline(ss, token, ',');) 100 | fields.push_back(stoi(token)); 101 | 102 | tickets.push_back(Ticket(fields)); 103 | } 104 | } 105 | 106 | cout << "p1: " << p1(rules, tickets) << endl; 107 | cout << "p2: " << p2(rules, tickets) << endl; 108 | } -------------------------------------------------------------------------------- /17-conway-cubes/input.txt: -------------------------------------------------------------------------------- 1 | #......# 2 | ##.#..#. 3 | #.#.###. 4 | .##..... 5 | .##.#... 6 | ##.#.... 7 | #####.#. 8 | ##.#.### -------------------------------------------------------------------------------- /17-conway-cubes/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | typedef tuple Cube; 5 | typedef tuple Hypercube; 6 | 7 | bool is_active(set &cubes, int x, int y, int z) { 8 | return cubes.find(make_tuple(x, y, z)) != cubes.end(); 9 | } 10 | 11 | bool is_active(set &cubes, int x, int y, int z, int w) { 12 | return cubes.find(make_tuple(x, y, z, w)) != cubes.end(); 13 | } 14 | 15 | void next2(set &cubes, int limit) { 16 | set dupes = cubes; 17 | 18 | for (int x = -8 -limit; x <= 8 + limit; x++) { 19 | for (int y = -8 -limit; y <= 8 + limit; y++) { 20 | for (int z = -8 - limit; z <= 8 + limit; z++) { 21 | for (int w = -1-limit; w <= 1+limit; w++) { 22 | int active = 0; 23 | 24 | for (int dx = -1; dx <= 1; dx++) { 25 | for (int dy = -1; dy <= 1; dy++) { 26 | for (int dz = -1; dz <= 1; dz++) { 27 | for (int dw = -1; dw <= 1; dw++) { 28 | if (dx == 0 && dy == 0 && dz == 0 && dw == 0) continue; 29 | if (is_active(cubes, x+dx, y+dy, z+dz, w+dw)) active++; 30 | } 31 | } 32 | } 33 | } 34 | 35 | bool act = is_active(cubes, x, y, z, w); 36 | 37 | if (act && !(active == 2 || active == 3)) { 38 | dupes.erase(make_tuple(x, y, z, w)); 39 | } 40 | 41 | else if (!act && active == 3) { 42 | dupes.insert(make_tuple(x, y, z, w)); 43 | } 44 | } 45 | } 46 | } 47 | } 48 | cubes = dupes; 49 | } 50 | 51 | void next(set &cubes, int limit) { 52 | set dupes = cubes; 53 | 54 | for (int x = -8 -limit; x <= 8 + limit; x++) { 55 | for (int y = -8 -limit; y <= 8 + limit; y++) { 56 | for (int z = -1 - limit; z <= 1 + limit; z++) { 57 | 58 | int active = 0; 59 | 60 | for (int dx = -1; dx <= 1; dx++) { 61 | for (int dy = -1; dy <= 1; dy++) { 62 | for (int dz = -1; dz <= 1; dz++) { 63 | if (dx == 0 && dy == 0 && dz == 0) continue; 64 | if (is_active(cubes, x+dx, y+dy, z+dz)) active++; 65 | } 66 | } 67 | } 68 | 69 | bool act = is_active(cubes, x, y, z); 70 | 71 | if (act && !(active == 2 || active == 3)) { 72 | dupes.erase(make_tuple(x, y, z)); 73 | } 74 | 75 | else if (!act && active == 3) { 76 | dupes.insert(make_tuple(x, y, z)); 77 | } 78 | } 79 | } 80 | } 81 | cubes = dupes; 82 | } 83 | 84 | int main() { 85 | string line; 86 | // set cubes; 87 | 88 | // for (int i = 0; !cin.eof(); i++) { 89 | // getline(cin, line); 90 | // vector slice(line.begin(), line.end()); 91 | 92 | // for (int j = 0; j < slice.size(); j++) 93 | // if (slice[j] == '#') cubes.insert(make_tuple(i, j, 0)); 94 | // } 95 | 96 | set cubes; 97 | 98 | for (int i = 0; !cin.eof(); i++) { 99 | getline(cin, line); 100 | vector slice(line.begin(), line.end()); 101 | 102 | for (int j = 0; j < slice.size(); j++) 103 | if (slice[j] == '#') cubes.insert(make_tuple(i, j, 0, 0)); 104 | } 105 | 106 | cout << cubes.size() << endl; 107 | 108 | // for (int i = 0; i < 6; i++) { 109 | // next(cubes, i+1); 110 | // cout << cubes.size() << endl; 111 | // } 112 | 113 | for (int i = 0; i < 6; i++) { 114 | next2(cubes, i+1); 115 | cout << cubes.size() << endl; 116 | } 117 | } -------------------------------------------------------------------------------- /18-operation-order/input.txt: -------------------------------------------------------------------------------- 1 | 9 + (8 + 3 + (4 + 6) + 7 * 7) 2 | 4 * 3 + 8 + (2 * 7 + 8 * 8 * 4) 3 | 7 + 2 + 4 + 5 + 2 4 | ((9 + 6 * 4 * 4 * 7 * 5) + 3 * 5 * 7 * 2) * 9 + 9 * (3 * (8 * 2 * 9 * 2 * 5 + 8) + (7 * 2 * 7) * 2) 5 | 7 * (9 + 5 * (5 + 5 * 6) + (7 + 2 + 4 + 2)) + 9 6 | 6 + 5 * 3 * (3 + (3 + 6 + 4) * 7 + 6 + (7 * 6) * 2) + 5 7 | (5 + (3 * 2 * 7 + 7) + (7 * 5) + 2) * 3 + 3 * 5 8 | 5 + (6 * 7 * 6 * 7 + (2 * 7 * 2 * 9 * 6 * 2) * (8 * 5 * 7 * 2 + 6)) + (9 * 8 + 6 + (7 + 8 + 2 + 3 * 8 * 8) + 5) 9 | 5 * 3 * 2 * 8 + 8 10 | 5 * ((3 * 8) + 4 + 4) + 8 + 9 11 | 4 + (7 * (4 + 2 + 5 * 5 * 2 + 3) + 6 * 3) 12 | (2 + 3 + 7 * 6 + 6 + 5) * 5 * 3 + (2 * 3 * 8 * 8) + 8 * (8 * 5) 13 | 9 + ((8 * 9 * 2) * 7 + 9 * 9) 14 | 3 * (2 + 2) + 3 15 | 4 + (9 * 7) + 9 * 2 16 | 4 * 3 * 2 + (7 + 8 + 3 * 5 * (7 * 8 * 3 + 4 + 5 + 4) * 6) * 3 * 5 17 | 7 * 7 * 5 + 8 + 5 18 | (5 * 7 * 5 * (6 * 3)) + 4 * 9 * 4 19 | 5 * 7 * 8 * (9 + 6 * (4 * 2 + 8) + 5) 20 | (5 * 8) * (2 * 6 * 2 + 3 + 8 * 8) 21 | (5 + 2 + 9 * 9 + 7 * 4) + 6 * 8 + 2 22 | 5 + 3 + 2 * 7 * 4 23 | 2 + (4 * 7 + 3 * 9 + (2 * 2)) * (5 * 2 * 6) 24 | 6 + 2 + 5 * 5 * 5 * ((3 + 9 * 3 + 4 * 5 + 5) * 4 + 2 * 3 + 3 + 3) 25 | 4 * 5 + ((3 * 8 * 3 + 7 + 8 * 9) * 9 + 9 * 6 + 6 + 9) 26 | (3 * (6 * 4) + 9) * ((6 * 2 * 5 + 8 * 5 + 7) + 7 + 8 * 6) 27 | 5 * ((7 + 5) * 2 + (2 + 4) * 2 * 2) 28 | (2 + 6 + 2) * (9 * 9) * (8 + 9 + 7 * (7 * 8 * 6)) * 8 + 7 * 2 29 | 8 + (7 * (2 + 8) * 7 + 3 * 9 * 3) * 9 * 2 30 | 4 * 8 * 2 + (4 + 7 + (6 + 9)) + 7 31 | 3 * 5 * 2 * (7 * 2 * (9 + 4 + 9 + 2 + 2 * 2) * 5) 32 | (5 * 5 * 4 + 8) + 6 + ((5 + 5 + 2) + (5 + 6 + 2 * 4) * 2 * 9 * 4) + 7 + 4 * (6 + (6 * 6 + 7 * 3 + 5 * 3) * (6 + 6 * 9) * (3 * 7 + 8 + 2 * 5) + 4 + 7) 33 | 4 * 6 * (9 + 7 + 6 * 3) + 4 34 | (2 + 6 * 7 + 5 * 9 + 4) + (3 + 4 + (3 * 3 * 6 * 2) * (9 * 3 * 9 + 7 + 9 + 2) * 9) 35 | (4 + 8 * 6) * 9 * 9 + 7 * 6 * 4 36 | 5 + 9 * 6 * (7 + 8 + (8 * 9 + 3) * 3 + 3) * 2 37 | 3 * 3 * 9 + 5 * 9 + 4 38 | (9 * (4 * 4 + 8 * 9 + 2)) + 7 + 9 39 | 2 * 6 * (7 + 2) * ((6 * 6 + 4 + 4 * 8) + (9 * 2) * 7 * 4 + 7 + 7) + 6 + 4 40 | (3 + 9 * 7 + 2) + 9 * (4 * 8 * 3 * 3 + 8) + 6 41 | (3 * 7 + 4 * 5) * 4 42 | 2 * (9 * 6) + 4 * 8 + ((6 * 2 + 6 * 3 + 8) + 6 + (3 + 5 * 9 * 4 + 8 * 8) * 3) 43 | (7 + 9) + 2 44 | ((5 + 9 + 6 * 5 + 3 + 2) + (5 + 8 + 2 * 3 + 7) * (8 * 4 * 9 + 3) + 9) + 2 + 4 45 | 3 * 5 46 | (4 * 5 * 3 * 9 * 6) + (4 * 2 * 7) * 6 + 3 * 7 * 8 47 | 8 + 9 * 8 + 4 + (3 * (5 + 7 + 3 * 2 * 4) + 7) 48 | 8 + (4 * 2 * 2 * 9 + (3 + 5 * 7 + 6)) 49 | 8 * 9 + 5 * (5 * 8) + 4 + 3 50 | 9 + ((9 + 8 + 4) + (8 * 5 + 8 * 3 + 2) * 9) * ((6 * 2 * 5 + 8) + 5 + 9) + 5 51 | 3 * 2 + 8 * 7 + 3 * 2 52 | (8 + 8 * 7) * 9 + (8 * 2 * 7 * (3 + 6 + 6 + 4 + 3) * 6 + 6) 53 | 5 * 8 + 4 * (9 * 8 + (5 * 6 + 5 + 5 + 4 * 6) * 9 + (9 * 6)) + (9 + (3 + 9 + 9)) 54 | 3 * 6 * (2 * (5 + 2) + 9) 55 | 3 * 4 * 7 * (6 * (7 + 6) * 5 * 5 * (8 + 2 + 6)) + 4 56 | 5 * 4 + (3 * 9 * 6 * 2 * 5 * 2) 57 | (2 * 2 + 6 + 8) * 5 + 3 58 | 7 + 5 + 5 * (2 + 3 + 5) * (3 + (5 + 9 + 8 + 2 + 4)) * (4 * 8) 59 | ((2 * 7 * 6 + 4 * 4 + 4) + (7 + 6) + (5 + 6 + 6 + 6) + (7 + 6 + 6) * (4 + 4 * 8 + 2 * 9) + 2) * 7 + 5 * ((7 * 3 + 6 * 2) + 4) * 3 60 | 4 * ((7 + 4 * 2 * 9 + 5 + 6) + 3) * 5 + (5 * (4 * 6 * 6) + 2 * 2 + 9) + 3 61 | ((5 + 3) * 6) + 9 * 3 + (9 + 4 + (8 + 5 + 8 * 6) + 4 * 5) + 2 62 | 5 + 5 * (8 + 9) + ((8 + 9 * 5 + 6 + 4 * 7) + 5) 63 | 6 * 8 + ((8 + 7 * 4) * 4 + 5 * 2 + 8) * 7 64 | 7 * 6 + ((4 + 3 + 3) * 5 * 5 + (9 + 9 * 8 + 2 + 2 * 8) + 3 * 4) * (8 + 6 + 8 + 2 + (5 + 9 * 5 * 5)) + 5 * 9 65 | 3 + 9 + (9 + 9 + 6 + (6 * 7 * 6) + 6) * (3 + 3 + 3 + 6) + 2 + 6 66 | (8 * 2 * 6 * 9) + (9 * 6) * 2 * 5 67 | (9 + 7 + 8) + 6 * (4 * 8 * 5 + 4 * (3 + 8 + 6)) + 7 68 | 3 * (5 * 6 + 5 * 8) + 9 + 6 + 5 * 5 69 | (6 + 4 * 7 + 7 * (2 * 3 * 8 + 5 + 4 + 4)) * 4 + 6 + 4 70 | ((2 * 2 + 7 + 5) + (3 + 6) + 6) * 9 71 | 3 + 7 + 6 * (8 * 5 * 8) + 2 + 4 72 | 7 + 8 * 5 + 9 * (4 * (4 * 6 * 8 * 5) + 6) + 9 73 | 4 + 7 + 6 * 3 + (9 * 3 + (2 + 6 * 6 * 3 * 9 * 7) + (2 * 3 + 6) + 8 + (6 * 2)) + (5 + 4 * 4) 74 | 7 + 6 + (9 + (8 + 3 + 9) + 4 * 3 * 4) + (9 + (2 + 4 * 5 + 5 * 8 + 2) * 8) 75 | 5 + 8 * (3 * 4 + 6 + 5) 76 | 7 * ((5 + 3 * 2 + 5) * (9 * 2 + 2 * 7 + 7 * 6) * (2 + 7 + 2 * 9)) * 8 * 7 * 7 + 2 77 | 5 + 8 * 4 + (4 * 9 + 5 + 4 + 8 * (6 * 9 + 9 * 5 + 9)) 78 | 9 * 4 * (6 + (9 + 3 * 7 * 3 * 3 + 8)) 79 | 3 + 3 * (9 + 3 * 5 + (9 + 9 * 2)) 80 | (7 + 8 * 8 * 9 + 5) * 9 * 3 + 6 81 | 2 + (7 * 7 * 6 + 2 * 6 * 4) * (3 + 6 * 7 * 5 + 4 + 3) 82 | (7 + 8) + 7 * 5 + 8 83 | 5 * 5 * 4 + 4 * (6 + 2 * 9) + 6 84 | 5 * 2 85 | 2 * 3 * 3 * 8 + (4 * 5 + (6 + 5 * 3 * 6 + 2)) + 8 86 | ((7 + 5 * 8) * 5 * 9 * 2 + (4 + 9 * 4 + 8 + 3) + 3) + (5 * (4 * 6) * 9 * 8) * 8 * ((6 + 2) * 5 * 6) + 5 + 6 87 | 7 * 7 * ((8 + 2 + 5) + (5 * 8 * 8 * 3 + 8) + 9 * 3 + 4) * 2 88 | 9 + (8 * 8 * (2 * 6 * 5 * 9 + 3)) 89 | ((5 * 8 + 8 * 6 + 2 * 2) * 7 * 8 * 9 * (3 * 6) * 6) + 5 + ((9 * 5 + 6) * 6 * 3 * 5 * 2) 90 | 6 * ((3 * 2) * (6 * 5 * 6 * 3 + 2 + 8) * 2 + 2 + 2) * 2 * 9 91 | 7 + 4 * 9 92 | 3 * ((6 * 6) + (8 * 5 * 8 * 9 + 9) + (8 * 6) * (3 + 3 + 7 * 5 * 2 * 2) * (4 * 5 + 3)) 93 | (3 * 5) + 5 * 3 + 2 * 5 94 | 3 + (3 * 3 * (5 + 8 * 9 * 8 + 5) + 4 * 6 + 7) * 8 95 | 2 * 3 + 5 + 5 * (8 * 4 + 7) 96 | 9 + (3 + 2 * (3 + 7 * 4 + 8 + 7 + 5) + 4 + 3 * 9) + (2 + (2 + 5 * 2 + 3 * 8 + 3) + 8) + 7 * 7 97 | 7 * 8 * 2 + 3 98 | ((2 * 2 * 5 + 6 + 2 + 9) * 3 + 8 + 9 + 4 * 7) + 5 + 6 + 8 99 | (6 * 8 + (2 + 9 + 8) + 3 + 7) + ((4 * 6 * 4) * 5 + 8) + 6 * 2 + (2 + (4 + 8 * 6) + 6 * 5 + 7) + 7 100 | 3 * 3 + 6 + (8 * 9 * 5 * 4 * 8 * 2) * 8 * 5 101 | (7 + 2 + (3 * 2 * 8)) + 5 * (6 + (7 * 7 * 6 + 2 * 9 + 9) + 4) + 2 * 3 * ((6 * 6 * 7 + 2 + 8) + 7 + (4 * 5) * 2) 102 | (9 * 8 + 6 * 4) * 3 * 5 * (9 + 3) * 7 103 | (4 * 2) + (3 * 4) + (3 + (5 * 7 + 7 + 2 * 9 + 5) * (8 + 5 * 4)) + 5 104 | (5 * (5 + 9 + 6 * 5) + 2 * (2 + 6 + 4 * 7)) + 3 + 7 + 9 * 3 105 | (3 * 7 + (9 + 4 + 2 + 8 * 8 + 3)) + 2 * (3 * 4 + 5 * 4 + 7) * 9 + 5 * 3 106 | ((8 + 7 + 6 + 5 * 9) * (3 * 3 * 2 * 2 + 8) * (5 + 7 * 7) + (6 + 8 * 3 + 2 + 4) * 4 * 7) + ((8 * 6) * 2) 107 | (3 + 5) * (3 + 7 * 4 + 3 * 6 * (7 * 3)) * 7 + 3 108 | ((4 + 5 + 3 * 7 + 6 * 3) + 4 + 9) + 5 * 9 * 8 * 4 * 8 109 | 5 + (8 * 3 * 4) + 9 * 8 + 7 110 | 2 * (6 * 6) + (9 + 9 * 6 * 5 * 6 * 4) + 6 * (4 + 7) * (5 * 8 + 3 + 7 * 9 + 7) 111 | (7 * 2 + (7 + 6 + 4 * 4) * (2 * 9 * 6 + 8 + 7 + 7) + (8 + 3 * 2 + 5 * 6 + 6)) * 4 + 5 * ((2 + 2 * 2) * (3 * 9 * 9 + 7 + 8) + (6 * 3 * 8 * 8) + (5 + 4 + 4 + 3)) + 5 112 | 6 + (5 * (9 * 8 * 6) + 4) * 5 * 2 113 | 7 + (7 + 2 * 5 + (7 * 5 + 3)) 114 | 2 + 8 * 7 + 9 * 2 + 2 115 | 9 + 8 * ((3 * 5 + 5) * 6 * (8 * 9 + 5 * 6) * 9 * 5) + 2 + 7 116 | 5 * 9 * (4 + (4 + 6 * 4 * 3 * 7) + 9) + 8 + 7 117 | 6 * 7 + 9 + 7 * 2 + (4 + 6 + (4 + 6 + 4 + 3 + 6 + 4) + (2 * 9 * 5) + 4) 118 | 5 * 2 + 4 * 7 + 8 * (6 + 5 * (6 * 3 + 2 * 7 + 8 * 9) + 4 * 3) 119 | 3 * (5 + (8 * 6 * 7 + 3 * 5) + (3 + 7 + 7 + 4)) + 5 + 6 120 | 9 * 5 + 6 * (3 + 8) * 7 + (7 + 2 * 5 * 8 * 7) 121 | (9 + 2) * (3 + 4 * (4 * 4 + 7 + 8)) * 4 * 3 + (4 + 6 + 4 * 4 + (4 + 3)) 122 | 8 + 6 + (4 + 5) * 2 + 9 123 | (5 * 7) * 8 + (7 * (8 * 6) * 6 + 7 * (8 + 7 * 5 * 7 * 3 + 7)) 124 | (3 + 5 * 5 * (2 * 4 * 4) * 9) * ((6 * 8 + 2) * 4 * 8 * 7 + 4) * 3 * (5 * 5 * 9 * 8 + 8) + 5 125 | 6 + (8 + 9 + 7 + (7 * 5)) + 7 + ((4 * 7 * 9 * 5 + 4) * 6 * 6 + 4 * 4) * 5 126 | (3 + 7 * 4) + 3 + 9 * 7 127 | 9 + 3 * 9 * (3 + 2 + 5) * ((7 * 9 * 8 + 7 * 6 * 7) + 6) + 5 128 | (9 + 9 + 8 * 8 * 8) + 5 * 2 + (2 + 4 + 3 + 7 + 5) * 2 129 | (5 * 7) * 5 + (5 * 7 + 9 * (7 * 5 * 8 + 5 * 8 + 4) * 6 * 3) 130 | (5 + (4 * 3 + 4 * 9 * 8 + 2) * 9 * 2 + 9 * 4) * 6 * 4 * 2 131 | ((2 * 7 + 5 + 6) + 8 + 9 * 7 * (4 + 6 * 7 * 3)) * 5 + 3 * 5 + 4 + ((6 + 8 + 2) * 4 + 4 * 8 * 9 * 8) 132 | 5 + 8 * 3 + 4 + 4 * ((9 * 6 + 7) * 5 * 3 + 6 + 6) 133 | 3 + ((5 * 2 + 7 * 5 * 4) * 6 * 6 * 9 + 6) + 6 * 8 + 3 + 6 134 | (3 + (3 * 3 + 5 * 9 + 2) * (4 * 2) * 4 + 3) + 2 * ((6 + 2 + 4 + 3) * 5 + 3 * 8) 135 | 7 + 5 + 4 + 9 * 3 * 7 136 | 5 * ((6 + 5) * 4 * (5 * 4 + 4 + 8 + 5) * 3) + 3 137 | (2 + 2) * 8 + 9 138 | 9 + 6 + 4 * 2 * (5 * 7 * 3 + (8 + 2 * 4 + 6 * 8 * 9)) 139 | 4 * 3 + 2 + (8 * (7 * 8 * 5) + (4 * 5 * 2 + 9 + 2) + 5) 140 | 8 * 8 * 2 + (2 * 6 * (7 + 2)) 141 | 4 + ((5 * 2 * 2 * 9 * 9) + 7 * 2 + 8) * 9 + 8 142 | 6 + (4 * 5 + 8 + 8 * 9 * 5) * ((3 + 8 * 5 + 5 + 3 + 9) + 6 + (8 * 6 * 8 * 9) * (5 + 2 * 5)) + (5 + 5 + 9 * 3 * (2 * 3 + 9 * 5 + 9) * 6) 143 | 7 * 9 * (5 * (6 * 5 * 8 * 4 + 8) * (2 + 2 + 9 * 3) + 5 + 6 + 4) * 9 + 6 144 | 3 + 9 + (5 * 6 * 4 * (4 + 8)) * 9 * (8 + 4 * 7 + 8 * 4) + 4 145 | 8 + 2 + (3 + (6 * 2 + 5 + 8) + 5 + 2) 146 | 6 + 4 * (4 + 6 + 3 * (4 * 3) * 2) 147 | 9 + 2 * ((5 + 5 + 5) + 2 + (2 * 4 * 9 + 2)) + (5 * 2 + 7 * 7 + 9) + 7 148 | ((4 + 9 + 8 * 3) * 7 * 2 * 6 * 8) * 2 * 5 149 | 3 + (9 * 3 + 9) + 2 150 | 2 + 5 * ((2 + 6 * 2 + 3 * 4 * 3) * 2 * 7 * 5) * 4 + 8 151 | ((4 * 6 * 7) + 3 * 9 * 2 + (6 * 2 * 9) + 5) * 2 + (4 * (6 + 2) + 5 + 5 + (3 * 8 + 2 + 9 * 7 * 7)) + 8 152 | 9 + (5 * (2 + 8 + 8 + 4 * 7 + 9)) + 7 * 8 153 | (4 * (2 + 3 * 2 * 2 * 3) + 9 + 9 * 7 * 3) * 3 + 5 * 9 154 | ((2 + 6 * 3) + 3 + 4 * 4 + 5) * 3 * (8 + 9 * 8 * 2) * 4 155 | 6 * (4 + 2 * 9 + (9 * 6 + 4)) * 3 + 5 + 8 156 | 9 * ((9 * 2 * 4) * 8 + (3 + 6 * 7 * 9 * 8 * 3)) + 8 * 6 157 | 5 * 4 + 6 + ((5 + 8 * 5 + 3 + 7) * 4) * 8 + 8 158 | (3 * 8 + 8 + (7 * 9) + 6 * 8) + 5 + 2 + (9 + 4 * 3 * 8 * 9 + 8) * 2 159 | 8 * ((7 * 7 + 6) * 5 * 9 + 9) + 6 160 | ((5 + 7 + 9) + 4) + 2 + ((2 + 5 * 6 * 8 + 2) * (3 + 3 * 4) + 5 * (4 + 6 + 9 * 6 + 4 * 3) + 6) + 9 161 | 8 * (3 + 3 * 3 * (2 + 5 + 9)) + 7 + 5 + 8 * 8 162 | (2 * 4 * 4 * 4 + 7 * 2) * 6 * 9 163 | 4 * 7 + ((5 * 4) * 3 + 6 + 3 * 9) 164 | 2 * 3 * 3 * 9 + 8 * ((7 + 7 + 9) * 6) 165 | 2 * ((2 * 6 + 5 * 9 * 9 * 8) + 2 + 4) + 7 + 2 166 | 2 + 4 + 7 167 | 2 * 9 + 6 * 4 168 | 7 * 8 + 7 + 4 + ((9 + 3 * 5 + 6 * 6) * 9 + (2 + 8 * 5 + 7 + 6 + 6) * 9 + 5 * 2) 169 | 2 * 5 + 4 + (4 * 6) + (7 + 5 * 3) 170 | ((8 + 8 + 6 * 5 + 9 + 3) * 5 * (6 * 5 + 7 * 6 + 5) + 7) + 8 + 4 * 7 * 3 + 7 171 | (8 * 7 + 4 + 9 + 2 * 9) * ((7 * 2 + 3 * 7 + 4 * 5) + 9) * 7 * 4 + 4 + 9 172 | (8 + 3 + 4 + 3 + 7) + ((4 * 6) * (3 * 2 + 6) + 6) * 9 * 5 + 3 173 | 9 * 8 + (5 + 3 + 4 * 8 + 5) + 3 * 9 174 | 2 + (2 * 2 + (4 + 8 * 4 + 9 * 5) * (6 + 2 * 9 * 6 + 4 + 3) + (3 * 6 + 6 * 5 * 2 * 9) * 3) 175 | (6 * 9 * 4) + (4 + (6 + 3) + 2 + 7 * 2) 176 | (2 * 5 + 7) + (4 * (8 * 9) * 7) * 6 * 5 177 | 9 * (9 + (4 * 5) * 7 * 7 + 3) + 8 178 | 6 * ((6 * 3) + (4 * 6 * 4) + 4 * 3 + (7 * 4)) + (8 * 4) * 2 + (5 * 3 + 7 + 9 * (8 * 2) * 9) 179 | 2 + (7 * (7 * 2) * 4 * 5 * 8) + 8 * 8 * 9 + 5 180 | (7 * 2 + 6 * 4 * 3 + 7) + 9 181 | 8 + 7 + (2 * 9) 182 | 9 * 3 * 2 + (4 + 7 * 4 + 5) 183 | (5 + (7 + 3 * 8) * (5 * 9 * 2) * 3 + 7) + 5 + 6 184 | 2 + (7 * 7 * 7 + 2 + 5 * 8) * (4 + 3 * 5) * 3 185 | 9 + (4 + 9 + (8 + 4 * 2 + 4 + 3 + 2) * 6 + 7) 186 | 6 + (9 * 6 + 2) * (5 * 2 * 8 + 5 + (5 + 7 + 4 * 2 * 4) + 8) 187 | 2 * (8 * 2 + (5 + 4) + 2 * 9 * 9) * 6 * 3 + (8 * 2 * 4 + 8 * 4) 188 | 4 * (2 + 2 * 6 + 6 + 4) 189 | (3 + 9 + 2 + 2 + 8 * 7) + 8 * 5 * (5 + 2 + 3 * 9 * 5) * (2 * 2 * 2 * 5) 190 | 8 * 2 * 2 * 7 + 7 + (8 * 7 + 7 + 3 + 4) 191 | 3 + 9 + (3 * 7 * 2 * (2 * 2 * 4 * 8 * 6 * 3) * 3 * 4) 192 | 3 + 7 + 8 * 5 * 2 193 | 5 + (2 * 7 * 3 * 7 + 5 * 3) * 3 194 | 3 * 4 + 8 * 7 195 | (2 * (5 + 8 + 5 * 6) * 6) * ((5 * 7 + 5) * 2 + 3 + 2 * (3 * 5)) + 7 * 5 196 | (9 + 4 * 7) * 8 * 7 + ((5 * 7) + 7 + 9 + 8 + 7) 197 | 5 * (8 * 4 + 9) * 5 + 7 * 3 + 7 198 | 3 + (6 * 3) * (3 * 4 * 2) + 3 * (7 * 6 + 8 * 3 * 3 + 7) * 9 199 | (7 + 6 + 3) + 7 + 8 + 9 * ((6 + 3 + 8) * 7 + 5 * 2) 200 | 2 * 6 * 5 * 5 * ((9 + 5) + 8 * (8 + 6 * 4 * 4 * 8 * 7) * 2 + 9 + 2) 201 | 4 + 3 + 7 * (6 * 2) 202 | (5 * (2 * 6 * 6) + 9 + 6 + 5) * 5 203 | ((3 + 6 + 2 * 4 + 9) * (4 * 7 * 3) + 2 + 3) * 5 * 8 * 4 * 3 + 9 204 | (4 + 9 + (5 * 4) + 9 + 2 * 4) * 3 + 4 + 8 + (3 + 8 + 3 * 9 * 3 + (3 * 5 + 3 * 5 * 2)) 205 | 2 + (8 + 9 * (2 * 9 * 8 * 5 + 9)) * 8 + 3 206 | (9 + 4 * (6 + 9 + 9 + 8 + 4) + 6 + 6 * 4) * 4 * 5 207 | 3 + ((2 * 4 + 7 * 6 * 5 * 3) * 7) * 9 + 8 208 | ((7 + 8 + 9 * 4 * 4) + 4 * 9 * 6 + 7 * 8) + 2 + 5 209 | 7 + 7 * (7 * 9) + (8 * 3 * 6) 210 | (8 * 3 * 2) + 3 * ((8 * 7 * 3 * 4 * 4 * 8) * 2 + 4 * 8 + 4 * 5) 211 | 9 * 3 212 | ((5 + 5 + 8 + 3 + 6) + 3) + 4 213 | 5 * 5 * 5 + (6 * 2 * 6 + (8 * 9 * 5)) * 8 * (4 + 4 + 9 * 9 + 8 * 2) 214 | 7 + ((9 + 2) + (4 + 6) + 9 + (7 * 8 + 7) + 9 + 2) + 8 * 3 + 3 + 9 215 | 4 * 3 + (7 * 3 * 2) * 5 216 | 8 + (7 + 9 + 9 * 8) * (7 * 7 * 5 + 3 * 2) 217 | 8 + 6 + (2 * 6 + 4 + 3) + 4 * 8 + 8 218 | 2 * 7 + 8 * 9 + (9 * 3 + (4 + 2 * 9 + 2 * 5 * 5) + (3 * 2 * 5 + 6) * 4) 219 | (5 * 2 + 4 + 2 + 9 + 2) * (2 + 3) * (8 * 5 * 9 * 6) 220 | 8 + 8 * 6 221 | ((4 * 2) + 3 + 5) * 6 222 | 4 + 9 * (6 * 6 * 8 + 4 + 8 * 2) + (5 * (4 + 4 * 6) * (8 + 7 + 8)) 223 | (8 + 2 + 2 + (9 * 4 + 7 + 8) * 3 * 9) + 2 * 7 224 | (7 * 7 + 5) + 4 + 9 * ((5 * 8 * 8 + 6 + 8 + 8) * 5 + 8 + (3 + 6 + 6 * 8 * 7) + 6 + (7 + 8 * 9 * 8 * 8)) * 8 225 | 7 + ((8 + 8) * (5 * 6 * 8 * 8 * 7 * 6) * 3 + 7) * 8 * 8 * 5 + 4 226 | 4 + 6 + ((3 * 8 + 8 + 2) * 8 + 6 * 2 * 3 * 7) 227 | 2 * (3 * 2 * 9 * (6 * 9 * 6 + 8)) * 3 * 8 + (9 * 8 + (2 * 4 * 2) + 9) 228 | 7 + (5 + 5 + (8 * 9 * 2 * 5 + 6 + 5) + 5 * 9 + 9) + 4 * 6 * (6 + 7 + 5) 229 | 6 + (8 + 6 + 5 * 7) * 8 + (2 * 8 + 3) 230 | 8 * 5 + ((6 * 6) + 6 * (4 * 8) * 2 + (3 * 4 + 7 + 3)) + ((5 + 7 * 8 * 7 + 8) * 2 * 3 + 2 * 4 + 7) + 9 231 | 7 * (5 + 5 + 7 + 2 + 6) + (6 * (8 * 8 + 4 * 4 + 3) * 8 * 4 + 4) + (3 * (9 + 6 * 4 + 2 + 4 + 2) + 9 * 3) * 7 232 | 8 + (6 + 6 * (4 + 7 + 8 * 3 * 2 + 7) * 4 * 6) + 3 + 5 233 | 5 * 6 + 3 * 9 + 6 + (6 + 9 * 8) 234 | 5 + ((3 * 2 * 5 * 8 + 3 + 7) + 8 + 9 * 4 * 3 + 5) + 5 + 9 + 9 * (5 * 5 + 5 + 6) 235 | 8 + 4 + (2 * 6) + (7 + 3 * 7 + 7 + 8) * 3 236 | (7 * 7 + 2) + 4 * (7 + 5) + 4 + 9 * 9 237 | 3 + 5 + (8 + 4) + 5 238 | 3 + 5 * (8 + 6 * (6 + 5 + 2 + 9 * 5 * 6) + 2) 239 | 2 + ((8 + 6 * 6 * 6 + 9 * 5) + 3 + (5 + 8 + 7 + 5) + 5 + 7) 240 | ((5 * 3 * 9 + 7 + 6) + 5 * 7 * 4 * (8 * 7 + 7 + 6 * 4 + 7)) + 8 241 | 8 + 5 + 3 + (8 * 3 * 8 + 9) + (8 + 8 + 8 * (5 + 4 + 3) + 8) 242 | 9 + ((5 * 6) + 5 + (6 * 8 + 4 * 8 + 5) + 2 * 7) + 8 * ((7 * 6 * 9 + 3) * 3 * (9 * 7 + 4) * (7 * 2 * 8 + 6)) * 7 243 | 9 * 3 * (7 * 7 * 6) * 4 + 3 * (8 + 7 + 8) 244 | ((4 + 7 * 7) + (4 + 8 + 4 * 8) + 5 * 5) + 4 + (4 * 4 * 9 * 6) + 3 * 4 245 | ((3 * 3) + 7 + (3 + 4 * 3 + 5 * 7) + 9 + 8 * 4) * 6 * ((8 + 4) + 2) * 9 * 9 + 7 246 | (4 * (3 * 6 + 7 + 6)) + 3 * (5 * (7 + 9 * 5 + 2 + 7 * 3) + 7 * 7 * 4) + 4 247 | 4 * (9 + 8 + 6 * 8) 248 | 3 * ((6 * 7 + 8 * 3 + 8 + 2) + 8 + 3 * 5) * 2 + 4 + 7 + 6 249 | 4 * 5 * (7 + 8 * 8) * 6 * 6 + 2 250 | 5 + (2 + 6 * (4 + 2 + 3 * 7 * 8)) * (6 + (2 * 6 * 6 + 8 * 6 * 2) * 7 * (4 * 4 * 3 + 7) * 4 * 6) 251 | 8 * (4 + 8 * (9 * 9 * 8 + 4 + 5 + 8) + 8 * 7 * 3) * 3 + 6 252 | 6 + 5 * (9 * 4 * 4 + 5 * 2) 253 | 7 + (3 + 5 + 9 * 5 + 2) + 9 * 2 + ((5 * 5 * 9 * 3 * 4) * 4) * ((2 * 6 * 5 + 2) + 4 * 2) 254 | 2 * 2 + 8 * ((3 * 5 * 6 + 4 + 4 + 5) + 5 * 8 + 6 + 6) * 4 255 | 4 + 7 256 | 5 + 5 + 5 * (7 + (3 * 8 * 5) + (9 * 2 * 7) * 7 + 4) + (8 * 8 + 5 + (9 + 9 + 8 * 4) + (7 + 8 + 7 * 7 + 2) + 2) 257 | (9 * 3 * (2 + 9 + 5 * 2 + 8)) * 5 * 2 + 5 258 | (5 * (8 * 8 + 8 + 3) * 6 * 2 * 2 + 6) + (9 * 9 + 6 * 9 + 8 + 2) + 8 + 2 + 7 + 6 259 | 3 * 3 * 6 + (7 + 2 * 9 * 5 * 7 + 3) 260 | 5 + ((3 + 2 + 3 * 8 + 5) * (9 * 8 + 8 + 5 * 5)) * (6 + 5 * 3 * 2 + (9 * 9 + 4 + 4 + 2)) 261 | 8 * (7 + 6 + 8 + 8 + 6 * 9) * 6 + 2 * (7 + (4 + 8 * 3) * 3 + 3 + 8) + 4 262 | 6 + (9 + (9 * 8 + 8 * 8 + 5 * 5) + 7 + 4 * (2 + 8 * 3 * 5 * 9 + 8)) 263 | ((2 * 5) + 2 * 3 + 4 + (4 + 6) * 4) + 3 264 | 8 * 9 + (4 + 2 + 9 + (2 * 2 * 7 * 6 + 3)) + 8 + (2 * 7 * 9 + 9) + 7 265 | 7 * (8 * 6 * 8 * 6 * 5 + 9) * 8 + (9 * 2 + 6 + 5 * 9) + 7 266 | (7 * 9) * 5 * (2 * 2 + (9 + 7 + 8) * 3) 267 | 9 * (6 + 4 + 2 * 3) * 9 + 3 268 | 9 * (7 + (8 + 8)) + 3 269 | 3 * 4 + (7 * (2 * 6) + 3) * (5 * 2 * 8) + (9 + 8 * 4) + 6 270 | 2 * 2 + (8 + (7 * 7 * 4 + 4) * 4 * (2 * 6 + 8 * 3) + (6 + 6 + 7 * 9)) 271 | 5 + ((7 * 2 + 2) * (2 + 3 + 6) * (7 + 3 + 8 + 7 * 9) * (2 + 5) + 7 * 6) 272 | 2 + 2 * 9 + 2 + 9 + ((6 * 9 + 6 + 8 * 7 * 6) + 8 * 8 + (5 * 4 + 3 * 7 * 8) + 4 + (8 + 7 + 7 + 6)) 273 | 2 * (9 * 3 * 7 + 6) * 8 * 6 * 4 274 | 2 + ((8 * 6 + 2 * 2 + 6) + 8 * 7 * (8 * 9) * (5 * 6 * 7) * 7) + 7 * 8 275 | 5 + (7 * 8 * 8 + 9) * 6 + (2 + 3 * 7 + 7) * (8 * 7 + 9 * (5 * 2 + 6 * 9 * 4 + 9) + 2 + 6) 276 | (2 + 4 * 9 + 4 * 9) * 4 * 6 * 9 + 8 277 | 7 + (4 * (6 + 3 * 5 + 8 + 6) + 5) * 4 278 | 4 * ((7 * 7 * 2 * 4) + 7 * 5 * (7 * 9) + 9) 279 | 3 + 7 + (7 * 4 * 3 * 5 * 9) * 4 + 5 + 5 280 | 8 + (2 + 4 * 2 * 3 + (3 * 4)) + 5 + 5 + 3 * 2 281 | (4 * (5 * 5) + (9 + 3 * 2 + 5 + 4 * 2) + 5) + 3 282 | (7 * 7 * (3 + 2 + 3 + 6 + 9 + 7) * 2 * 3) * (2 + 4) * 9 * (7 * 3 + 8 + 5) * 7 + 7 283 | 5 + (4 * 5 * 7) * 8 + 9 284 | (4 * (7 + 9 + 7 + 3 + 9 + 3) * 8 * 3 * 7 + 4) * 9 + 4 285 | 8 + 7 + 9 + 9 * 8 * ((7 + 5 * 9) * 7 * (3 + 9 + 4 + 2 * 5 * 9) * (9 * 6 + 2 * 9)) 286 | 5 * ((7 * 5 + 9 * 6 + 5 + 8) * 2) * 5 + 3 * 7 287 | 5 + ((8 * 6 + 5 + 2 + 8 + 8) * 8 + 6 + 2 + 5) 288 | 2 * 8 + (3 + (9 * 2 + 8 + 7 + 4 * 4)) * 6 289 | 3 + 7 * ((4 + 7 * 3 + 6) + 5) * 8 + 3 + 7 290 | 5 + 2 + 3 291 | 5 + 6 * 9 * ((6 + 4 * 7) * 2 * 5 + 9 * 8) 292 | 3 + (9 * 2) + 2 * (7 * 4 + (4 * 5 + 3 * 2) * 4 * 8 + (3 * 2 * 7 * 6 + 5 * 6)) * 8 293 | (9 + 8 * 6 * 4 * (5 * 5)) + ((3 * 6 + 7 + 5 * 6) * 3 * (4 * 2 * 4) * 7 * (6 * 3 + 4 * 4)) * 4 + 9 294 | 6 * 2 * 9 + (3 * (8 * 8 * 5 + 7 * 4 * 6) + (6 * 4 * 6)) 295 | (7 * (5 + 2 * 4 * 7) * 7 * 8 * 6) * 5 296 | 7 + 8 * 2 * 2 + (8 * 6 + 2 * 9 + 5) * 7 297 | 8 + (5 + 2 + 4 * 7) * (8 * 7 + 6 + 6) + 4 298 | 8 * (9 + 2 + (2 + 4)) 299 | 8 + ((2 + 5) + 4 * 9 + 7 * 5) * 3 * 9 300 | 6 * 8 * ((6 * 9) * 6 + 5 + 6 * 9) * 9 * 6 + 6 301 | 3 + 4 + 7 + 9 + (7 + 8 * 6 + 3) + 2 302 | 6 + 2 * 3 * (2 + 8) + 9 303 | 2 * 5 + (5 * 5 * 6 * 7 + 8 + (2 * 9 * 4)) + 2 + 4 304 | 7 * 2 + (4 * 7 + 6 + 7 * (7 + 8 * 9 + 3)) * (3 * (9 * 7 + 9) * 6 + 2 + (8 * 8 + 8 + 6) + 6) 305 | 2 + (3 * 6 + 3 * 9) + 6 306 | 6 + 7 + 6 + (6 * 2 * 8) * 5 307 | (9 * 4 + (3 + 8 + 9) * 5 * (3 * 3 * 4 * 3)) * 9 + 7 308 | (6 + (5 + 6) + 9 + (8 * 7 + 7)) + 2 * 8 * 8 309 | 2 + 2 * 9 + ((8 + 5 * 2 + 9 + 7 + 4) * 9 * 2 * 9) * 3 310 | 6 * ((2 + 6) * 6) 311 | (7 + (3 * 5)) * 7 * 7 * 9 + 6 * 4 312 | 4 * (3 * 3 * (5 + 5 + 6 + 3 + 8 + 3)) + 9 + 5 + (9 * 2 * 4 + 6) + 3 313 | 2 * ((6 * 3 + 8 + 4 + 5) * (2 + 9 + 8 + 6 + 4 * 6)) 314 | (5 + 4 * 4) * 8 + 6 315 | (7 * 3 + 7) + 4 * 4 + 9 * (9 * 3 * 2 + 2) 316 | 6 * 4 * 7 + 2 + ((4 + 8 * 4 + 2 * 5 + 9) * (9 * 6 + 8 * 6 * 7 + 2) + (7 + 4 + 2 * 3 + 3) * (2 + 5 * 3) * 3) + 8 317 | (4 + 8 * 5 + 5 * 6) + 8 + 7 * 4 * 4 * 8 318 | 4 * (6 * 2 + (8 * 6 * 3 * 9 + 9) * 8) + 4 + 6 319 | 4 + 3 * ((3 * 6 * 2 + 3 * 7) + 2 * 6) 320 | (4 * 6 * 4 * 5 * 6) * 5 * 6 * ((7 * 6 * 6) + (8 + 9 + 2 * 3 * 3 + 4)) * 4 321 | ((3 + 3 * 7 * 6 * 2 + 8) + 2 * (4 + 6 * 8) + 8 * 7 + 9) * 5 + 8 + 4 322 | (6 + 5 + 6 + (4 * 6 * 8) + 7 + 8) + 8 + 7 + 7 323 | ((3 + 6 + 9 * 6 + 8) + 5 + 7) * 3 * 8 324 | 7 * 3 * 4 * 3 + 6 * (9 * 7 + (4 * 7 + 3 + 8 * 4)) 325 | 3 + 9 + 6 * (5 + (7 * 3) * 2 + 7 * 9) * (5 + 2 * (4 + 9) * (4 + 3 * 2 + 4 + 3) + 9 + 7) 326 | 2 + (4 + 7 + (3 + 2)) + 8 * 6 * 6 + 2 327 | (8 + 3 + (2 * 5 + 6 + 8) + 8) * 6 328 | 2 * ((6 + 2) + 4 + 5 + 5) 329 | 7 * (5 * (6 + 9 + 2)) + (9 + 9 + 5 * (5 + 4 + 9 * 4 * 3)) * 7 + (9 * 5 * 5 * 2 * 6 + 7) 330 | (2 * 9 * (9 * 6) * 6) + 8 * 4 331 | ((4 * 2) * 5 * 4 + 6) * 6 + 6 + 9 * 6 332 | 3 + 6 333 | 7 + 7 + ((8 * 7 + 8) + 9 * 4 + (9 + 3 * 5)) + 3 + (7 * 4 + 4) 334 | ((6 * 7 * 3 * 6 + 3) + (6 + 8 + 4) + (7 + 9 * 3) * 4) + 3 + 6 + 5 335 | (9 + 6) + 9 + 5 * 3 * 9 + 3 336 | 9 * ((4 * 8 + 6 * 9 + 5 * 5) * 3 + 6 + 3 * 7) * 8 + 2 * 9 * (9 + 4 * 5 * 9 * 7 * (3 + 7 * 6)) 337 | 6 * 7 * 4 * 4 * 4 * (5 * 8 * 4 * 6) 338 | 2 * 8 + (3 * (8 * 7 * 3 * 5 * 8) + 5 * 6) * 5 * (2 + 8) * 7 339 | 5 + 7 + 9 * (3 * 4 * 9 * 7 * 9) + 7 340 | 2 * (8 * 8 + 4 + 3 * 6 * 5) 341 | 3 + 6 * (5 + 6 * 7 + 6 + 6 + 9) + 2 * 2 342 | (5 * 9 * (2 + 6) * 5 + 9) * 4 343 | (5 * 9 * (8 + 4 * 3 + 5) + 7 + 4 * 9) + (7 + 9 + (9 * 4 + 7 * 2 * 7) + (9 + 9 + 7 * 7 * 8) * 5) * (5 * (3 * 6 + 5 + 4 + 6 + 9)) * 4 344 | 4 + 6 * 4 * ((7 * 5 * 7) * 8 + 9 * 8) * 6 345 | 7 + 5 * 2 + (5 + 8 * (8 * 9)) + (5 * 2 * 4 * 5 * 5) * 9 346 | (2 + 5 + 6 * 9 + 4 * 5) + 2 * 9 * 3 + 3 * 5 347 | 7 * 7 * 8 + 3 348 | ((8 * 6 * 7 + 9 + 4) * (8 + 7) * 5) + 3 + 6 + (2 * 8 * 4 + 2 * 6 * 8) + (6 + 4 + 3 + 5 * (4 * 9 + 2 + 7 * 2 + 7) + 4) * 8 349 | (9 * (2 * 5) * (6 + 5 * 5 + 4) + 9) + 2 + 8 + 4 * 5 350 | 4 * 6 + (5 + 6 + (4 * 2) * 7) + 3 351 | 9 + (2 * 8 + 7 * (3 + 8)) * (5 + 3 * 2 * 2 * (4 + 7 + 6 + 3 * 5)) * 3 + 2 352 | 4 + 5 + ((6 + 9 + 2 * 9 + 6 + 6) * 5 * 6) + 5 * 8 + (9 + 4 * 8) 353 | 4 * (4 * 2 + 2 + (9 * 6 * 7 + 4 + 7) * (9 * 2 * 7)) + ((8 + 7) * (4 * 9 * 8 + 3 * 7)) * 5 + (6 + 5 + (2 * 9 * 2)) + 3 354 | (7 * 6 + 3 + (5 + 6 * 8) + 5) + (3 * (8 * 5 * 8 * 3 * 5 + 9) * 7 * 8) + 7 * 6 * 5 355 | 9 + (5 + 3 + 2) 356 | (5 + 8 + 9) * 2 357 | 6 * 3 + (2 * 8 * 3 * 3 * 6) * 2 358 | 5 + 4 * (8 * 6 + 9) * 4 + 9 359 | 2 * 5 * 3 + 6 + 6 + 6 360 | (4 * 7 + 9 * 2 * 7 * 3) + 8 + 4 * ((4 + 5 + 6 * 5) * 3 * 5) * 6 * 8 361 | 2 + ((3 * 4 * 8) * 4 * (9 + 9 + 5 * 4 * 6) + 7) * 8 + (4 + 3) * (8 * 4 * 8 * 5 + 4 + 6) 362 | 7 * (8 + (9 + 2) * 5 * 9 + 5 + 3) + 4 363 | 9 * 9 + (4 + (5 + 3 + 4 * 2 * 9) + 2 * 6 * 5 * 5) + 5 + 4 + (8 + 2 + 8) 364 | 7 * 8 * ((7 + 8) + (6 * 8) + 2 + 8 * (7 + 4 + 6 + 3) + (7 * 4)) + (6 * 2 + (7 + 5 + 8 * 3 + 6) * 2) + 5 365 | 4 + ((8 + 2 + 4 + 4) + 8 + 9) * 8 + 7 + 4 366 | 5 + 6 + (2 * (6 + 9 * 2) + 2 * 5 + 5 * 6) + 9 367 | ((7 * 8 + 3 * 3 + 6) + 8) * 9 * 7 + 6 368 | 8 * 6 + 3 369 | 8 + (9 + (9 + 4 * 9) + 9 + 8 + (9 * 8 + 5) + 4) * 8 370 | 4 + (2 + (7 * 8 + 2 + 9 * 3) * 5 * 4 * (4 * 6) * 5) * 5 * 7 * 3 + 7 371 | 2 + 9 * 3 * 4 372 | ((6 + 2) + 6) + 4 * 5 373 | 5 + 9 * 9 * 9 + (8 + 9 + (7 * 2) * (7 + 3) * 6 * 6) 374 | 7 * 2 * 3 + (6 + 9 + 9) 375 | (9 * 6 * 2 * 2 + 8) * 5 + 2 376 | 5 * (3 + 4 * 9 * 9) * (3 + 8 + (3 * 2 + 9 + 3 + 5) + 3) * (8 + 2) 377 | 5 + 2 * (4 * 6) * 2 * 2 * 2 378 | 5 + 3 * 2 * (9 + 6 * 6 + 9) * 3 -------------------------------------------------------------------------------- /18-operation-order/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace std; 4 | 5 | typedef unsigned long long ull; 6 | 7 | ull calc_RPN(queue q) { 8 | stack res; 9 | 10 | while (!q.empty()) { 11 | if (isdigit(q.front())) res.push(q.front() - '0'); 12 | else { 13 | ull a = res.top(); res.pop(); 14 | ull b = res.top(); res.pop(); 15 | res.push(q.front() == '+' ? a+b : a*b); 16 | } 17 | q.pop(); 18 | } 19 | return res.top(); 20 | } 21 | 22 | ull shunting_yard(vector tokens, bool equal_op) { 23 | queue q; 24 | stack s; 25 | 26 | for (char token : tokens) { 27 | if (isdigit(token)) 28 | q.push(token); 29 | 30 | else if (token == '(' || (!equal_op && token == '+')) 31 | s.push(token); 32 | 33 | else if (token == '*' || (equal_op && token == '+')) { 34 | while (!s.empty() && (s.top() == '+' || (equal_op && s.top() == '*'))) { 35 | q.push(s.top()); s.pop(); 36 | } 37 | s.push(token); 38 | } 39 | 40 | else if (token == ')') { 41 | while (s.top() != '(') { 42 | q.push(s.top()); s.pop(); 43 | } 44 | s.pop(); 45 | } 46 | } 47 | 48 | while (!s.empty()) { 49 | q.push(s.top()); s.pop(); 50 | } 51 | return calc_RPN(q); 52 | } 53 | 54 | int main() { 55 | ull p1 = 0, p2 = 0; 56 | 57 | for (string s; getline(cin, s);) { 58 | s.erase(remove_if(s.begin(), s.end(), ::isspace), s.end()); 59 | vector exprs(s.begin(), s.end()); 60 | 61 | p1 += shunting_yard(exprs, true); 62 | p2 += shunting_yard(exprs, false); 63 | } 64 | printf("p1: %llu\np2: %llu\n", p1, p2); 65 | } -------------------------------------------------------------------------------- /19-monster-messages/input.txt: -------------------------------------------------------------------------------- 1 | 12: "b" 2 | 120: 113 12 | 68 106 3 | 101: 12 12 | 106 12 4 | 104: 12 59 | 106 101 5 | 98: 12 78 | 106 125 6 | 87: 106 12 | 12 109 7 | 102: 12 95 | 106 71 8 | 27: 12 84 | 106 127 9 | 69: 68 106 | 101 12 10 | 75: 3 106 | 79 12 11 | 128: 12 74 | 106 17 12 | 0: 8 11 13 | 118: 12 113 | 106 101 14 | 122: 120 106 | 51 12 15 | 109: 106 | 12 16 | 97: 106 28 | 12 125 17 | 70: 106 28 | 12 34 18 | 82: 106 40 | 12 38 19 | 123: 83 12 | 85 106 20 | 129: 61 106 | 126 12 21 | 105: 106 37 | 12 47 22 | 86: 57 12 | 18 106 23 | 35: 12 87 | 106 78 24 | 42: 106 2 | 12 88 25 | 18: 12 76 | 106 67 26 | 45: 12 101 | 106 52 27 | 59: 109 12 | 106 106 28 | 55: 12 9 | 106 33 29 | 32: 12 115 | 106 35 30 | 54: 106 28 | 12 23 31 | 21: 106 82 | 12 102 32 | 33: 12 15 | 106 10 33 | 56: 106 1 | 12 98 34 | 110: 109 68 35 | 100: 80 12 | 58 106 36 | 24: 34 12 | 78 106 37 | 63: 12 72 | 106 32 38 | 13: 113 106 | 59 12 39 | 11: 42 31 40 | 60: 28 12 | 78 106 41 | 46: 107 12 | 89 106 42 | 107: 106 81 | 12 62 43 | 112: 106 101 | 12 4 44 | 124: 106 23 | 12 52 45 | 53: 56 12 | 90 106 46 | 116: 106 23 | 12 28 47 | 125: 106 12 48 | 47: 94 106 | 26 12 49 | 67: 4 12 | 78 106 50 | 30: 28 106 | 34 12 51 | 94: 59 106 | 101 12 52 | 61: 100 106 | 27 12 53 | 10: 106 4 | 12 4 54 | 127: 14 106 | 13 12 55 | 77: 106 86 | 12 63 56 | 71: 106 124 | 12 48 57 | 117: 106 111 | 12 45 58 | 15: 43 106 | 23 12 59 | 58: 65 106 | 54 12 60 | 80: 14 106 | 124 12 61 | 73: 52 12 | 113 106 62 | 88: 77 12 | 46 106 63 | 5: 108 106 | 118 12 64 | 89: 5 12 | 122 106 65 | 99: 28 106 | 125 12 66 | 26: 106 125 | 12 52 67 | 113: 12 12 68 | 41: 50 12 | 6 106 69 | 62: 106 110 | 12 103 70 | 48: 12 43 | 106 34 71 | 50: 124 106 | 49 12 72 | 114: 91 12 | 117 106 73 | 121: 87 12 74 | 39: 106 87 | 12 23 75 | 4: 12 106 76 | 103: 106 4 | 12 52 77 | 106: "a" 78 | 119: 106 64 | 12 93 79 | 74: 41 12 | 7 106 80 | 31: 12 129 | 106 128 81 | 34: 106 106 82 | 28: 106 106 | 106 12 83 | 49: 78 12 | 28 106 84 | 93: 34 12 | 34 106 85 | 37: 97 12 | 70 106 86 | 92: 75 106 | 16 12 87 | 6: 10 12 | 20 106 88 | 22: 59 109 89 | 7: 66 106 | 123 12 90 | 95: 73 12 | 22 106 91 | 1: 12 52 92 | 23: 12 106 | 106 106 93 | 25: 69 106 | 39 12 94 | 44: 12 34 | 106 23 95 | 57: 99 12 | 54 106 96 | 65: 52 12 | 78 106 97 | 16: 106 104 | 12 22 98 | 36: 12 59 | 106 28 99 | 38: 20 12 | 60 106 100 | 83: 109 101 101 | 29: 12 105 | 106 53 102 | 91: 12 96 | 106 76 103 | 126: 106 114 | 12 19 104 | 81: 108 106 | 116 12 105 | 78: 12 12 | 106 106 106 | 14: 12 101 107 | 84: 44 106 | 104 12 108 | 64: 12 34 | 106 68 109 | 9: 106 83 | 12 67 110 | 111: 106 87 | 12 78 111 | 115: 87 109 112 | 3: 43 106 | 34 12 113 | 108: 43 106 | 28 12 114 | 51: 87 12 | 125 106 115 | 90: 106 36 | 12 121 116 | 2: 21 12 | 29 106 117 | 68: 12 106 | 106 12 118 | 40: 24 106 | 22 12 119 | 85: 12 28 | 106 87 120 | 52: 106 109 | 12 106 121 | 20: 113 106 122 | 76: 12 23 | 106 113 123 | 17: 12 92 | 106 55 124 | 19: 106 119 | 12 25 125 | 8: 42 126 | 72: 12 69 | 106 30 127 | 43: 109 109 128 | 66: 39 12 | 112 106 129 | 79: 68 12 | 59 106 130 | 96: 109 87 131 | 132 | bbbaabaaababbaabbbabbbbbaabbabab 133 | bbbbbbbbbaaaabbaabbaabaa 134 | abaaabaaabaaaaaaaabbaaab 135 | abaaaaababaaaaaababbbabb 136 | bababaaaababbaabbbbbabaa 137 | babaaababaababbbbaabbaabbaaabbbabbabbbaa 138 | aabaaaaabaaababaaaabbbbbaababaaabbabbbba 139 | babbbaaababaaabbaababbabaabbaabb 140 | ababbabbbbabababaaaaababbaabaabb 141 | ababbaabbbbbbabaaaabbbaabababbabbbbbbaaaaaabababbbabbbba 142 | aaabbabababbaababbbabaab 143 | bbaababaaaabbbaaabbabbbbabaaaaaaabaaababbbaaababbabababb 144 | aaaababbbaaaabaabbaaabbabbabbbbbbbabbaaaaabbbaaabbbaabbbbbbaaaba 145 | bbaaabbaabbabbabbbaabbababbbbbaabbbabaaa 146 | aaaaaabbabbabbabbbabbbabaaababab 147 | bababaabbbbabaabbaaaabaabaaaaabaababbbaabbbaaabaabbbbabababaaaaababbbbbb 148 | baababaaababaaababbbabaa 149 | ababbbabbababbabbbabbbaa 150 | babaaaaaabaabbabaaaababbaabbabbbaabbaabbabbabbbbabbbabbbbabbbaab 151 | bbabababbaabbababababaaabbbaaababbbbabaa 152 | bbbaabaabaababaabababbabbaaabbbabbbababaaaabaabbaaaaaabbabbbbaba 153 | abbabbaaabbbbbaaaabaababbabaaabbbaabbaaa 154 | ababbaababbbabbbababbaba 155 | abbaaaabbbbaababbbbbabbbababbaaa 156 | bbabbabaababbbabbbaabaaa 157 | abaababbabbbbbaaababbbba 158 | baabbbaabbababbabaabbbab 159 | bbbaabaaaabbbbaabbbabbbb 160 | abababbaaaabbbbbbbbbaabababababa 161 | aaabaabbababbbaaaaaabaabbabaaabaaaababababaabaabaaaaababbbaaaabbaabbaaab 162 | babaabbababbabaabbabbbaa 163 | baaaabbabaabbbaabbbaaaba 164 | babbaababbaaabaabbbaaabbaaaaabababbababa 165 | ababaaaaaaababbabbbabbaa 166 | bbbbbaababaaaaabbabbabaabaabaabababaaabaabaababbbabbabbb 167 | aaaaaaaabaababbbbaaaaaaa 168 | abaabbabaaababaabbaabbbbaaabbbbbbabaaaaa 169 | baababbbabbaababbbbbaabb 170 | abaaabbaababaaabbbbaababababaaaabbbbaaaa 171 | abbabaaabbabbaaababaabab 172 | babaabbaaaaabaabaaabaabbbaaabaababababbbabbaaaba 173 | abbaaaabbaaababababbbbaabbaaaaababbaaaabbaabaaab 174 | bbaaabbbaabbbaabbaaabbba 175 | bbbaabaaaaaababbbaaabaaa 176 | ababbbabbbabbaabbbaabbaa 177 | bbaababbbaaababbaaabbbaabaabbababaaaabbbbaaabbaabbababaabaabaabb 178 | bbababbbabbbabbabbaabbbbabbabbabbbbabbbaabababbb 179 | baaaaabbaabaaaabbbbbaaab 180 | abbbbaabbbabbbabbaaabaab 181 | baabbaabbbaababaababbabbbabbabbb 182 | bbbbababbbbbbaaaabbbbaabaabaabbaaabbbaaa 183 | aabbbabbbbbaabaaabbbbaabaababbaaabbbaaab 184 | aaabbbbbbabbaabbbbaaaabb 185 | baababbbbabbbaababbaaaba 186 | abbbbbaabbabbabababaaabaaabbaabb 187 | bbbaabbbbaaaaabbbbbaabaabaababbbaabbabab 188 | baabbaaabbbaabbabbbabbab 189 | baabababbabbaabaaaaababbabaababa 190 | babbabaababbbaabababaaba 191 | abbbabbaaaaabbbbaabbaababbaaabaabbaabbbaabaabaaa 192 | ababbbabaababbaababbbaabababbbababaabbabaaaabbba 193 | abbbbaaaabbaabbbbaababbbabbbababbbbbbbaabbabaaabbbbaabaa 194 | bbaaabbabbbabababbbaabba 195 | bbbaaabbbabbaabbbbbaaabb 196 | babbabaaabbabbababbbaaab 197 | bbabbabbbbaaaaabbabaabbaaabbbbab 198 | abababbabbbbabbbbabaabbb 199 | aababbaabbaaabbbaaaaaaba 200 | abbbbabbbabbbaaabaaabbbb 201 | aaabaababbaaabaabaabababaababbbbbbabaaab 202 | aaabbabaaaabbbaababaabaaabbbaabbbbbaaaaa 203 | abbbabbabbbbbaababbabbababbbbabbbaaaaaabbbbabbbbbaabbaaaabbbbbbb 204 | bbbbbaabbbababbabaaaaabbaabaaabb 205 | baaaaaabaabbbaaaaabbbbab 206 | bbaaabbababaabaaabaaabababaaaabb 207 | abbaaaaaaaaaabbbaaaaababaaaabbbaabbababb 208 | babaabababbabbbbabbabbabbabaabbbababbbbaabbbbabbbaaababb 209 | aaabaaaabbaabbbbaabaaaba 210 | bbbbbbbbbabaaaaaabababab 211 | abbbbaaaaaababbaababbbababbaabbbabbaabaa 212 | aabbaabaabaaabbabbabbabbaaabbaabbaaaabab 213 | bbabababababbaabbaaabaaa 214 | aabaababaaaaaabbbababbaa 215 | abaabaabbaabbbaaabaabaabbabbbaaabababbababbbbbbbaabbabbb 216 | aabbabaaabbbbaabbaabbabb 217 | abbaaaaabbababbbabbabbbbbbbaababbabbbbabbaaabbabbbbbaaab 218 | abbaababbabbbbaaaabaabaa 219 | bbaaaaabbaababaabaabababbbbbababbaaabbaa 220 | aaabbbaabbabbaababaaaabb 221 | abbabaaabababaaaaaaaaaba 222 | aaabbabaabbabaabbbbbaaab 223 | abbbbabbbbababbaababaabb 224 | bbbabababaaabababbbbbaabbababaabaaaaaaba 225 | bbababbaaaababaaabbbabab 226 | aabbaabaaaabaaaabaabbabaabaaaabb 227 | abaaabbaabbbbbaabbbbbabb 228 | aabbabaababbabaabbaabbabbaababaabbababbaaabbaabbaabbbbab 229 | bbaabbabbabaaaaababbbabb 230 | aababbbaabaabbabbbabbaabababbaaabbbbbbabbaababbabbaabababbabbbabbbbbaaaa 231 | abaaababbaabababaabaabbabbbbaabababbabbaabaabbba 232 | aaabbaabbabbaaabbababaab 233 | babbbbaaabbbbbabbbbabbba 234 | aaaaababaaaaaabbaaabaabb 235 | babaabaababaaabbabaaaaaaabbaaaabbbababaabaabbbab 236 | aabaaaabaaababbabbbaabbb 237 | aaabbabbabbabbbbaaabaaaabbbabaabbaaabaabbabaaabaabaaabbb 238 | abbabbbbabbabbbbabbaaaabbabbabba 239 | aaabbaabaaababbbababbaaabaabababbababbabaaaabaaaabbbabaa 240 | babbaaabbbaabbbbbabbbbab 241 | bababaaaabbaaabbaaabbbabbabababbaaabababbbbabbbaabaababa 242 | aaababaaabbaabbbabbaabbaabbaaaaabbbababaabbaaabb 243 | baabbabbabaababaabbbabbaabaaabaabaabaabbbaabaaba 244 | aaaababbbbbaabababbbaabaabbabaaababaabaaabbbaaaa 245 | ababaaaababbabaaaaabbbbbaaababaaabababab 246 | abaaababbbbbabbbabbbbabbaaaabaabbaaabaab 247 | aaabbabababbaababaabbbba 248 | bbbbbababaaababaabbaaaababbaabbaaabaaaaababbabba 249 | babaaababbbbbaaabbabbaabbbabbabbbbbaababbabbbababbbbbbbabbbaaababababbaa 250 | abbbbbababbbabbbbbbabababaaababbbbabaaaabaabaaaa 251 | babbaabbbabaaababbbababaabbaaaabbbaabbabaabbabaaaabaaabbaabbaaabbbbaaaba 252 | baaaabbaaabaaaabaaaaabaababaabbabbbbbbab 253 | ababbbabbbabbbbbabbaaaaabbbaaabaabbbbbbb 254 | aababbaabaaaabbabbaabbbbaabaaaabaaabbabaaabaabbaaabababb 255 | aababbaaaaabbbaaaabaaaabbbaababbbbaababaababababbaaabbbbabbbaabb 256 | aabaaaaaaabbbbbbaabaaaaa 257 | ababbbbbaaaaaaababaaaaaabbaaabbbabababaabaabaaaaaabbaabb 258 | bbaaabbbbbbbbbbaaaaabbaa 259 | aaabaababaaababbbbbbbaabaababbaaaabbabbbaabababa 260 | bbabbaaaabaaaabaabbababb 261 | baaaabbbbaaabababaaababbaabbaaabaaabbbba 262 | baaaabbbabbaabbbbbbbbaaabababbbb 263 | bbbbbaaabaabbbaababbbbba 264 | baaaabbaababaaabababbaaa 265 | baababbaabbabaabbbbbaaab 266 | baaaabbabbabbaaaaaabbaababaababbababbbba 267 | abbbabbbabaabaabaaaaaabbbabaabaaababaaabbabbaaaabaaabbbb 268 | abbbbbaaabbabaabaabbbaba 269 | bbbbababbabbaaabbbaababbababaaabbaaababa 270 | baabbaabbbabbbabbbabbbababaaaabababbabab 271 | babaaaaababbaaabbbbbabaa 272 | baababaabbabbababababaaaabaaababaaabbaaa 273 | abbaababaabbaabaaababaaa 274 | bbaaabaaabbbbabbabaaaabaabbbbbaabbaaaaba 275 | babaaaaabbaabbababbbabbbaaababbaaabaaabb 276 | babbbaaaabbabbababbaabbabbabaaba 277 | babbbaabbbaababbbaaabbab 278 | aaabbbbbbbbaaabbabababbaababbababababbaa 279 | ababaaaababbbaabbaabbbbbbaaaabab 280 | baababbaabbbbaaabaaabbbb 281 | aaabaabaaaabbbbbabbabaaaaaabbababaabaabaaaabbabaaabaabaaababaaba 282 | bbabbabbaabbabaabbbbaabb 283 | babbaaabaabbbbaaabbbabbaaaababab 284 | aabbabaabbabbbabbbbabaab 285 | aabaaaaaaabaabaaaababbabbbaaaabbaabaababbbbaaabaabababbb 286 | babaabbabbbababaaaaabbbbbbbabbba 287 | bbbaaabbbbabbbbbbaabaaaa 288 | aaabaabaaabbbbbabbbabbab 289 | abbaabababbaaaaabbbaababbabbbbaabaaabababbbbabbaaaabbbbaababbbbabaaaabab 290 | ababaaaabababbbababaaaab 291 | abbbbbababbaabaaaaabbaaabbbabbbaaaabbbabaabababa 292 | bbbbbaabbbbaababbbbbabaa 293 | ababbbaaabbbaabbbaabbbbbbabbbbbbbaaabbabbabaabbaabaabbaa 294 | baaaabaaabbbbabaababbbaa 295 | bbababbaaaaaababbbaabbabbbaaabbabbbaabba 296 | aaaababbabbbbbababaabbaa 297 | bbbaaaabbbbbabbabbbbbababaaabbaabaabbabb 298 | abbbbabaaaababaaaaaabaab 299 | bbaabbabaabbbaababbabaabaabbbbaababbbaabaaabaabaaaababbb 300 | bbbbbaabaababbaabbbbbaabbbbababb 301 | abaaabbabababbbabbbbaaaaabbaabaabaabbaaaaaabbaba 302 | abbaabbababbaabaabaaabbb 303 | aaabbabbabbabaabaaababbb 304 | bbbbababaababbaabbbbaaab 305 | baababaaaaaaaaabbabaaabababbbaabbabbbaba 306 | aaabbababaaababbbbbbababbabaabaabaababaababaaaab 307 | baaaaaababbbabaabaaaaaaaababaabaaabaabaaabbababa 308 | bababbabbbabbabaabbbbaabaabbabab 309 | aaaaabbbaabbbbbaabbbaaab 310 | baaababbaaaaaabbaaaabbbbbbaaabbababbbabb 311 | baaaaabbaaaaaaaaaababaaa 312 | aaabaaaaaabbbabbbababbabaabbbabbaabbabbbbbabaaab 313 | babaaabaaaabbabbaaabbaababababbbbbaabbaa 314 | babbbabaaabbbababaaaaaaa 315 | abbbbaabaababbaaabbbbbaaababbbbbbbbaaaba 316 | aabaaaabaabaababaabbbabbbababaaaaaabbaaa 317 | bbabbbbbabbaaaaabbaaabbabbabaabb 318 | abbabaaababbbaabbbabbbba 319 | abababbaabbbabbbbbabbababaaaabbbbaaabbab 320 | bbabbbababbaaaabbbababbbbaaababbbbabbbaa 321 | bbaabbbbaaabaaaabbababbabbbbbbbbaaaababa 322 | bbabababbbaaabbbababaaabaaaaabbbaaaaaabbabbbbbabaaabaaabbaaabbba 323 | abbbaabababaaaaaaaababaaaaaabbbbbbabbbbbabbbbbbbbaabbaaaaabbbbab 324 | bbbaaaabaaaaabbbbbbbaaab 325 | bababbabbbaaabaaabaababbbaababbabaaaabaabbbbaabb 326 | aaaabbbbbaaaaaabababbbba 327 | aababbaaabbaababababbbabaababbaaabbbaabbaabbabbb 328 | baaaababbbabbaaaaababaab 329 | babbbaaabbaababbabbababa 330 | aabbaaaaababaababbaaaabb 331 | babbabaabbabbabaabbbbaaababbaaaa 332 | abaaaabaabbaaaaaaabbabab 333 | bbaabbbbaaababbaabbabbbbaabbbaabbaaaaaabbabababa 334 | bbaaaaaaabaababbbabababa 335 | baaaabbbaaabbbbbbbabbbba 336 | bbaaaaabaababbaabbbbbbbbbabbaababbbbbbba 337 | baabbbaabbaaaaabaabaababbabaaaaaaaaabbabbbbbabaa 338 | babaabaaabbbbbbbaaaaabbabbbbaaaababaabaabbbbbbabaaaabbaabbbbbbaabaabaaab 339 | babbbaabbbbaabaaaaababaaaaabbaabbbabaaba 340 | bbababbbaaabbbbbbbaaaabb 341 | ababbbbbaaababaaaabbbaaa 342 | ababbaabbbabbbbbaaabaaab 343 | abbabaaaaaabbabbabbaababaabbabba 344 | abbaaaaabbaabbbbaaaaababbbbbbaabbbbabbbaaaabbbab 345 | baaaaabbabbbabbbabbbbaabbabbabaabbaaaaababbaaabbabbbbbbb 346 | bbaaabbbbaaaaababbbaabba 347 | aaabaaaaaabbbbbabaabbbaabaabaababaabaabb 348 | aabaababbaaaabaaaaabaaaababaaabbbabbabab 349 | aaabbaababbbbbababbabbbbbbbbabaa 350 | bbababbbbaababbababbbaaabaabbabb 351 | bbaabbbbbabbaabbbaaabbab 352 | abbbbabbaaabbbaaaaaaabaaabbbabbbabbaababbababbaaaababbbaabaaaabb 353 | abbbbabaaabbabaaaaabaabaabbbbabbbabababababbabba 354 | abbbabbbababaaaaaabababb 355 | baaaaaabbabbabaaabababab 356 | aabbbaababbbbaabaabbabba 357 | aabaaaababaaababbbababaa 358 | ababbbbbaababbabbbaaabab 359 | abbabbaaababbaababbbaaab 360 | aaaabaabaabaabbbbbbabbaa 361 | bbaabbabbaabbbbbababbbba 362 | aaaaabbbaaaaaabbbbaaabbabbbaabaaaabbabbb 363 | abbabbabababbabbbaabbbab 364 | bbaaabbbaaaaabbbaabbabaaaabaabbb 365 | baababbabaaabbbabbbabbba 366 | aabaaabbbbabaaabbaabbabbbbaaababaabababb 367 | bbaaaaaaababbabbbbbabbba 368 | bbaababaabbbbaabbbbabbab 369 | bbabababbbabbaaababbbbaaabaabbabaababbaabbbbaabbbbabaaaa 370 | abbbbbaabbbbbabaaabbabbabaabbbbabbabaaaababaaabbbbaabbabbbbbbabbbbbaabbb 371 | aaababaababbaabaabbaababbaaaaababbabaabaaabababb 372 | bbaaabaaaaaabbbbbbbbaaaaabbbbbaabbbbabbabbabaaabbaaabbaababbbbbb 373 | abbbaababbbaababbabababa 374 | aaaaaaabbaaaabbababbbaaababaaabbabbbabaabbbaabbaababbbba 375 | bbbbaaaaabbbbababababbabbabbabbb 376 | abaababbabbabaaabbbbaaab 377 | baaaaaabbabbabaababbaababababbbb 378 | bbbaaaabababaaaaaabbabab 379 | aaabbaabbaaaaababbaaabbaabaababbaaaaaaabbaaaabbbbbaabbba 380 | baabababaababbabaabbbbab 381 | abbbaababbbaaaabaaabbbbbaaaabbaababababbbbaaaababbbbbabb 382 | aabaabbabaaababbbabbabab 383 | aaababbaaaabbaabaabaabbb 384 | aaababbaaaaaabaaabbaaaaabbbabbab 385 | abbbbbababaabaabbababbbb 386 | aaaabbbbbbababbabbaaabaaaabbbaaa 387 | bbabbaababbaaaaabbabbbbbabbaaabaaaaaaaba 388 | bbababbaaaaaababaaabbbbbbbabbbabbbaabaaa 389 | abababbaaabbbaabbabbbaaabbaabababbaababb 390 | bbabaabaaaabababbbbaabaaabbbabbbbbaabbaaabbbbabaabbbbaaa 391 | baaaaabbbaaaabbabbbbabababaabaabababbabaaaabbbba 392 | bbbbababbbabbaaaaaaabbbbbaababbabaaabbba 393 | ababbabbbabaaaaaabaaaaaabbbbbbba 394 | aaaaabababaaaaaaabbbbabbabaaabaabaaaaaba 395 | aabbbaababbabaababbbabaa 396 | abaabbabaabbaabababaabaabbbbabababbababbabaabbaa 397 | bbbbbbbbbabaabaaaaabaababaababbbababaaaabbbbbbbaabbaaabaaababbbbbabaabbb 398 | abbabbbbabbbabbaaaabaaab 399 | bbbbbbaabaabababbaaaabbbbaaabbaa 400 | ababbbababbbbbaabbaababababbbbba 401 | bababbbabaabbaabbbbbaaab 402 | baabbaabaaaaabaaabababab 403 | abbabbbbaaabbabbaaabbaabbbbbbbbbbaabaabababbabaabbbbaaab 404 | babbaaabbbabbbbbbbbbbbbbaababaab 405 | babbbbaababaaabaababbbba 406 | aaaaabaaabbbbaaabbabbbabaababbbbbaaabaaa 407 | abababbabaabaabaabbabbba 408 | aaaaaabbaababbaaaaaaababbbaabbabaaabbbbaabaaabbbbbbaaaba 409 | ababbbbbabbabbbbabaabbabbabaaabbabaabbabaaababbb 410 | bbaaaaabaabaababaaabaabaabbbbabbbaabbaaa 411 | baaabababbaaabbaaabbbbab 412 | baaaabaabaaaabaaaaaaabababababbabbbbaabaaaabbaabaabaabbbbaabbaaa 413 | aababbabaabbbabbbbbabaab 414 | baabbaabbaaaaabaabaababa 415 | baaababbaaabbabbabbbaabb 416 | baabbbaabbbbaaaaaaabaaab 417 | bbabababbabbbaaaaabaaaba 418 | abbabaababbaabbbaabbaaab 419 | babbaabbaaabbababbababaa 420 | bbabbababbababbbaaabaabb 421 | bababbbaaaabaababaaaabbaabaabbbb 422 | bbbbababbabaaabaabbbbaaabbbaabaaababaaaaabbaaabbbabbbbabaaaababa 423 | ababbaabababbbababbabbbbbbaaabaabbabbbba 424 | aaabaabaaabbaababbbbabbabbbbbbab 425 | babaaaaaababbabbbbbbaaab 426 | bbbbbababbaabbabbaaabaaa 427 | bbababbaabbbbbaabbabbaababbaaaaabbbabaaa 428 | bbabbababbababbbbabbbabb 429 | aaaaababbbbaaabbbababbbaaaabbbaabbbbabbbaaaababaabbbbbbbaaaabaababbbabaa 430 | bbbbaabaababaaabbaaaaaaa 431 | abbabaaaabbbbbaabaabaaab 432 | bbbaaaabbaaababbbaaaaaaa 433 | babbabaabababbabbbaababbabbbaaab 434 | abababbababaaabbaabaabaa 435 | bbabbababbbbbbbbabbaabaa 436 | bbbbaababbbbabbbabbbbbba 437 | aaabbabaabaaabbaababbabbababbbbbaababbba 438 | bbaababbabbbbaabaaabbabbabbaaaaabbaabbbaabbbbbbb 439 | aaaababbbbbbbabaaaababaaabbabbbbabaabaaa 440 | bbababbbababaaabaabbabab 441 | aabaaaabaabbabaabaaabaab 442 | bbaaaaaaaaaababbabaaaabb 443 | aaabbabbbbbbaabaabaabbbb 444 | aaaaabbbabbbbbabaabaaaba 445 | abbbabbbbbbababababbbaaaabbabbbbbabaabbb 446 | abbaaaabbbabbabaababbaaa 447 | abbaababaaabbbbbbabaaabaabbbbbaaabbbaaaaaabababbbababbbbaaaabbabaabaabaa 448 | bbabbababbaabbababbabbabbbbbababaabbbaba 449 | bbabbbababbaaaabaabaababbabababbababbbba 450 | ababbbbbbbabbabbbabbabba 451 | aaabaaababbaababaabaaaaabababaaabaabaabaaababaaaaababbbaabbabaabbbbbabaabaabbbabbababaababaabbaa 452 | aaaaababbabbabaabbbbbabb 453 | aababbaababaaabaaabbabab 454 | bbaaaaabbbababababaababa 455 | aabaaaabaaababaabbaabbba 456 | ababbbbbabaabaabbaabbaabbabbbbab 457 | abbbbabbababbabbabaaaabaaabaabaabaaabbba 458 | abbaaaababbbbaaaabbaabbbaabaaaba 459 | abbbabbabbbbbaabbbabbbbbaaaababa 460 | ababbabbbaaaaabaababaaba 461 | abbaaaaabbbbaabaaabaabaa 462 | bbbaaabbbabbbbaaabbaaaaabaaabbbb 463 | aaaaabababbaabababbababa 464 | aabaababbababbbabbabaabbbbbbbababababaababbaabaaaaaabbbababbabaaaabbabbaaababbabbabbbaaabababaab 465 | aaaaababbbbbabbbbbaabbbbbbaaaababaaaabab 466 | bbaabababbaaaaaababbabbb 467 | bbbaaabbabbbbaaabaaabbba 468 | bbbbbaaabaabbabaabbbbaaaabaabbaabbaaaabb 469 | abbbbbabbaaaabbbbabaaabbaaaaaabbabaaaaababbaaabb 470 | bababbabaababbaaabaababbabaabaaa 471 | bbbbabbbbbaababbbbaaaaabbabbaabbbbababbbaaabaaaaaabbabbb 472 | bababbabababbbabbabbaaabbbaaabbbababaaaabababbabbbabaabb 473 | abaabbabbbbbbaabbaaaabbbabbbbaabbabaaabbbaabbabbbabbbbbbbaaabaaa 474 | baaabababbbaaaabbababbabbabbabaaabbbaaab 475 | bbbaabaabbabbabbaabaaaaa 476 | abaabbabbbababbaaaaabbaa 477 | aabbbbbaabbbabbbaaabaabb 478 | babaaababaabababaabbabba 479 | bbbbabbbbaabbabaaaabbaabbbbaaaabbaaaaaabbaabbaaaaaabbaaabbbbaabbbaaaabab 480 | bbaababaabbbabbbbaaabaab 481 | abaababbbabbaabbbabababa 482 | ababbbababaaaaabbbabaaaa 483 | bbbbbbbbabbbbaababbabbaaaabbbbbabababbbaabbbaaaa 484 | abbabbbbbabbbaaabbbbbbbbaabaabaa 485 | abbabbbbaabbaababaabbababbaababbbaabababaabbbabaaaaabbaa 486 | bbabbbbbbabbbbaabaabbabb 487 | abaaaabaaabbaabaabababaa 488 | aaaaabbbbaaababbbbaabaaa 489 | abbabaaabbaaabbbbababaab 490 | ababbabbbbabababbaabbbba 491 | aaababaabbabbababbbabbaa 492 | bbbbaabaaaabbababbbabbbb 493 | babbaaabbbbbababaaaababa 494 | baababbabaaaabbaabbbbabaaabaabbb 495 | bababbaaabbbbabbbbbaaaaabababaaabbabbaaababbbbbbaababbaabbbbabaaabaabaaabbaaabbaabaababa 496 | bbabbabaaabaabbaaabbbbab 497 | aabbaabaabbabaaaaaaabbaaabbbabaaabbbaaab 498 | abaabbabababaaaababababa 499 | baaaaaaaabaaabbbabbbbaaabbbabaabaaaabaaa 500 | aabaababbbbbbbaaaaaabbab 501 | abbbbbabaaaaaaaabaaabababbbabbbaabbbaaaa 502 | bbbbbaababbbbabbaabbabba 503 | abbabaababaabaabaababaaa 504 | aaababaaabbbaababbabababbbbbaaababaabaaa 505 | aaaaaaaaaabbabaaaababaaa 506 | aaabbabbbabaaabbbbababaa 507 | baaaaabbbbbbbbbbababbbbbaabbaaab 508 | baaaaaabaabbabaabbbbbaabbbababbbbbbbaaab 509 | bbbbbbabaaaaabbbabbaabbbbbabbbbbbabbbbbababbbaabbbbabbaa 510 | babbaabaaaaabaabbabaabbbbbbaaaaaaaababab 511 | bbaababbabbaababbbabbabaababbaaabbbabbaa 512 | aaababaaababbaabaaaaabba 513 | bbbbbbbbaaaababbbbaabaaa 514 | bbababbabbbbbbaaaabaabbb 515 | bbbaaabbaaabbaabbaaaaaaa 516 | aaababbaaaabbababbabbbbbbaabbaabbbbbaaab 517 | babbaababaababbbbbbbaaaabbaaabaabbaabbba 518 | bbbaababbaaaabbbbababaab 519 | bbaababbbbaabbbbbbaabbaa 520 | babaaaaaabbabaaaabbabaabbbbbbabbaabbbbab 521 | baabbbbbabbbbabaaaababbb 522 | baabbabaabbaabbbbabbabbb 523 | abbaabbbaaababbaabbbbbabbbaabbababababbabbbbbbabbabaababaabbbbbb 524 | aaaabbbbaabbbaabbaaaaabbabbbbaaababaaaaaabbbaabb 525 | baababbbbbaababaabbabbaabbbbababbabbaabaaaaababbbaabbbbaabababaa 526 | baabababaabbbbaabbabbbaa 527 | aaaaaaabbaaababbaaaabaab 528 | aabaababaaabaaaabbbbbbaaaaaabaaa 529 | baabbaabaaaababbbbaaaabb 530 | abbabbbbaaabbaababbbabab 531 | aaabbababbabababaabbabab 532 | babaabaaaaaaabaabbaababbaabbbbbaaabbbbaaabbababbbabaabbbbbabaabbbbababaa 533 | bbbbabbbaabbbbbabaabaabb 534 | aaabbbaaaaabbabababbbaabbababaaaabaabbaa 535 | baaaaababababbbabaabaababaaabbab 536 | aaaaaaababbbabbababaaabbaaaababaabbbbbba 537 | abbbaabaabaaabbaaabbaabb 538 | aabbaabababaabaabbaabbaa 539 | bbababbbabababbabbaabbaa 540 | bbbbbababbabbaababbbbabaaaaaabbbaabababaaaabaaab 541 | baaababbababbaabbbaabaab 542 | baabaababaabbabaaabbaaaaabaaaabb 543 | abbabbbbababbaabbbababaa 544 | bbbbaabababaaabbaababbaababbaaabbbaaabab 545 | aabaababbaababaabaaaabbbabbaaabb 546 | babbbaaababbaaabbababbbababbbbab 547 | bbabbbababaaabaaababbabbbbaaaaaababbbbbb 548 | aaaaaaababbabbbbabaaababbaabababbbbaaaba 549 | abababbabaababaabbababaa 550 | baaaabbbbbabbaabbabaaabababaaabbabaababbabaabbba 551 | bbbbabbbbbaabbbbbbaaaabb 552 | bbababbbabaabaababbaaabb 553 | bbaaabaababaaabababbabab 554 | baaaaabbaaaababbaababbbb 555 | aaaabbbbabbbbaaababbbbbb 556 | abbbbbaaabbabbaabbbbbaaaababbbbaaababbba 557 | abbbbaaababaabaaabaabbbb 558 | abaabaabbaabbaabaaabbabaaabbabba 559 | ababaaababbbbabbaaababaabaabbbaaaabbaaaa 560 | babbbbaaabaaababababbbabaaaaabba 561 | bbabbbababbaabbbaaaabbbbabbaaaaaabaabbaababbbbbb 562 | aabbaabbbaababbaabbabbbbabaabaaaabbaaababaaaabbb 563 | bbbbbbaaabaaaaaaaaaaabba 564 | abaaabaaabbaabbbababaaaaaabbbbab 565 | bbaaabbbbaabababbbbababababaabaaabaaaababbaaabba 566 | baababaabbbaaabbaaabbabbaaaaaaaaaaabaaaaaabbabab 567 | bbaabbbbbabbabaabaabaabb 568 | bbbaababaaaaaaaababbbaabaababbbbbaaaabab 569 | baabbabaabbbabbabaabaabaababbbabbaabbbaabbababbbbabbbababbbbbabbbbabaaaa 570 | baabbbbbabbaababbbbaaaabaababbaabbbbabbbabaaabaaaaabababbabbbbabababaabbbaabaaab 571 | abaaabababbbbababaabbbaaaababaaaaabaabaa 572 | bababababbbabbaaabbaaabb 573 | baaaaabbabbbbaabaabaaaba 574 | aaaaababbbaabbbbbababaaaaaababbabbaaaabbbbbabbaa 575 | bababaaaaaaaababababbbba 576 | bbaaabbaaaaaaaaaaababaaa 577 | babbaabbabbbabbbbbbbabbbabbabbbb 578 | babbbaaaaaaaaaaabbaabaab 579 | abbabbaabbabbababbbbaaaaabbaaaba 580 | abbabbababbaaaaabbaaabbaabbaabbabbbbaaab 581 | aaababbababaaabbbaaaabab 582 | aaaaaaabababbabbabbaabbbaabbbbbb 583 | abbbaabaababaaaaaaaabbaa 584 | abaaabbabbbbaaaabbbababb 585 | bbbbbaababbbbabbbabaaaaabbbbbbaaabbabaababaabaaabbaaaababaabbbba 586 | baabbbbbabbbbaaabbabbbabbaabababbbbbbabbbabbabba 587 | aaaaabbbbabbabaaaaababbb 588 | babbbbaabbbbbaabbbabbbbbabbbbbaabbbbbbaaaabbaaaa 589 | abbabaaaaaababaabbabbbabaabbbbbaabbbabbbbabbbbba 590 | abbaabbbbbabbaaaaabbbabbaabbabaaaababbbaaababaab -------------------------------------------------------------------------------- /19-monster-messages/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace std; 4 | 5 | bool has_digits(string rule) { 6 | return any_of(rule.begin(), rule.end(), ::isdigit); 7 | } 8 | 9 | ptrdiff_t count_matches(vector &messages, string rule) { 10 | return count_if(messages.begin(), messages.end(), [&](const string& message) { 11 | smatch m; 12 | return regex_match(message, m, regex(rule)); 13 | }); 14 | } 15 | 16 | string unfold_rule(map &rules, int idx) { 17 | string dup_rule = rules[idx]; 18 | 19 | while (has_digits(dup_rule)) { 20 | smatch m; 21 | regex_search(dup_rule, m, regex("(\\d+)")); 22 | 23 | size_t pos = dup_rule.find(m[1]); 24 | dup_rule.replace(pos, m[1].length(), "(" + rules[stoi(m[1])] + ")"); 25 | } 26 | 27 | dup_rule.erase(remove(dup_rule.begin(), dup_rule.end(), '"'), dup_rule.end()); 28 | dup_rule.erase(remove(dup_rule.begin(), dup_rule.end(), ' '), dup_rule.end()); 29 | 30 | return dup_rule; 31 | } 32 | 33 | int p2(map rules, vector messages) { 34 | rules[8] = "(42)+"; 35 | 36 | string left = "42", right = "31", fullstr = "42 31"; 37 | 38 | for (int i = 0; i < 3; i++) { 39 | left += " 42"; right += " 31"; 40 | fullstr += (" | " + (left + " " + right)); 41 | } 42 | rules[11] = fullstr; 43 | 44 | rules[0] = unfold_rule(rules, 0); 45 | return count_matches(messages, rules[0]); 46 | } 47 | 48 | int p1(map rules, vector messages) { 49 | rules[0] = unfold_rule(rules, 0); 50 | return count_matches(messages, rules[0]); 51 | } 52 | 53 | int main() { 54 | vector messages; 55 | map rules; 56 | 57 | for (string line; getline(cin, line);) { 58 | smatch m; 59 | 60 | if (line.empty()) 61 | continue; 62 | 63 | if (regex_match(line, m, regex("(\\d+): (.+)"))) 64 | rules[stoi(m[1])] = m[2]; 65 | 66 | else 67 | messages.push_back(line); 68 | } 69 | 70 | printf("p1: %d\np2: %d\n", p1(rules, messages), p2(rules, messages)); 71 | } -------------------------------------------------------------------------------- /20-jurassic-jigsaw/input.txt: -------------------------------------------------------------------------------- 1 | Tile 2311: 2 | ..##.#..#. 3 | ##..#..... 4 | #...##..#. 5 | ####.#...# 6 | ##.##.###. 7 | ##...#.### 8 | .#.#.#..## 9 | ..#....#.. 10 | ###...#.#. 11 | ..###..### 12 | 13 | Tile 1951: 14 | #.##...##. 15 | #.####...# 16 | .....#..## 17 | #...###### 18 | .##.#....# 19 | .###.##### 20 | ###.##.##. 21 | .###....#. 22 | ..#.#..#.# 23 | #...##.#.. 24 | 25 | Tile 1171: 26 | ####...##. 27 | #..##.#..# 28 | ##.#..#.#. 29 | .###.####. 30 | ..###.#### 31 | .##....##. 32 | .#...####. 33 | #.##.####. 34 | ####..#... 35 | .....##... 36 | 37 | Tile 1427: 38 | ###.##.#.. 39 | .#..#.##.. 40 | .#.##.#..# 41 | #.#.#.##.# 42 | ....#...## 43 | ...##..##. 44 | ...#.##### 45 | .#.####.#. 46 | ..#..###.# 47 | ..##.#..#. 48 | 49 | Tile 1489: 50 | ##.#.#.... 51 | ..##...#.. 52 | .##..##... 53 | ..#...#... 54 | #####...#. 55 | #..#.#.#.# 56 | ...#.#.#.. 57 | ##.#...##. 58 | ..##.##.## 59 | ###.##.#.. 60 | 61 | Tile 2473: 62 | #....####. 63 | #..#.##... 64 | #.##..#... 65 | ######.#.# 66 | .#...#.#.# 67 | .######### 68 | .###.#..#. 69 | ########.# 70 | ##...##.#. 71 | ..###.#.#. 72 | 73 | Tile 2971: 74 | ..#.#....# 75 | #...###... 76 | #.#.###... 77 | ##.##..#.. 78 | .#####..## 79 | .#..####.# 80 | #..#.#..#. 81 | ..####.### 82 | ..#.#.###. 83 | ...#.#.#.# 84 | 85 | Tile 2729: 86 | ...#.#.#.# 87 | ####.#.... 88 | ..#.#..... 89 | ....#..#.# 90 | .##..##.#. 91 | .#.####... 92 | ####.#.#.. 93 | ##.####... 94 | ##..#.##.. 95 | #.##...##. 96 | 97 | Tile 3079: 98 | #.#.#####. 99 | .#..###### 100 | ..#....... 101 | ######.... 102 | ####.#..#. 103 | .#...#.##. 104 | #.#####.## 105 | ..#.###... 106 | ..#....... 107 | ..#.###... -------------------------------------------------------------------------------- /20-jurassic-jigsaw/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace std; 4 | 5 | int main() { 6 | map>> tiles; 7 | 8 | for (string header; getline(cin, header);) { 9 | smatch m; 10 | regex_search(header, m, regex("(\\d+)")); 11 | 12 | for (string row; getline(cin, row);) { 13 | if (row.length() == 0) break; 14 | tiles[stoi(m[1])].push_back(vector(row.begin(), row.end())); 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /21-allergen-assessment/input.txt: -------------------------------------------------------------------------------- 1 | mkjpn thcplhm tpxdzq qxhd dfsq qtknmm jhtfzk dvcjmq tpz qsdghc vkpmd dbdn brfs njcv jjg tnzvnp bpqrrdb sqh bzcrknb kclnn sfgh kxjsf jtlz vrhvx xrnsn gvpngn fkknnz zhkdtddq vrcftz pcbqsh msnsgq hvglp xgjm hjz bnbc zshrcq slmlzp dfhxp gglvtn mhxtp mvmf pssbvc xft kvmptmt vcckp nrxzqj dlbq jlts bcnck rgxrc bxqmgp bpmsnjn qbgbmc cthzp krhn vvggzmg nhvprqb hjktppx mgkhhc pvfzv thbdl cxgx bbbqhzd fbpt pfhxb bggpt (contains fish, nuts, dairy) 2 | jsvkgd psvl ksx rrjf mhlcc xgjm sqtgl bggpt nsz sdbx pvfzv rq zjvbr xrnsn gglvtn qxhd krhn rzl jpgkr bnbc lxpjfm vcckp mpglxr bzcrknb hqd jhtfzk hjz pssbvc thbdl vbb nrm mkjpn bcnck hcth dvcjmq vvggzmg tpxdzq lmrlqk flz qbgbmc mgkhhc hjktppx fksvlk zmh xzj ksshkz bpmsnjn vphc mbnt xzcv vscggm (contains wheat, sesame, nuts) 3 | qbgbmc cflbh xskhqd brjqh hs zmh pmtst bpqrrdb mqqkzm vkpmd zshrcq gffd rrjf mgkhhc gglvtn hlrgr fkknnz vrcftz dlbq qxhd lhzc vphc rzl srgxk sfgh bcnck thcplhm tpxdzq bzcrknb tkzfd vcckp qgcz rzghm hsjbrtb bxqmgp ksx jlts ffbs mhlm zjvbr nrjzkkm dqtx lmrlqk hjn czkxxl qrdfl nhvprqb vrhvx msnsgq rgxrc dbldp qcbxh trzlmqf fhfkm nrm xzcv jhtfzk gslb tcmstb nkd vscggm hjktppx hcth sffdm cfjmgx jgkbk sdxhc dbdn srhnq (contains fish, dairy, sesame) 4 | mfc fksvlk rbhgzmz bpmsnjn fzxj jqqrhv tkzfd xsvg fplft pmtst bggpt nsz vphc mpglxr zmh nmcbrfk rzghm qbgbmc mjmgh mqqkzm cxx zhkdtddq rq dbldp rrjf hjz thbdl brfs tpxdzq sqtgl psvl vcckp lqhpfv hsjbrtb vrcftz vrhvx dlbq tnzvnp kcsvcx pvfzv jskt jjg lmrlqk fsmcb jhtfzk nrm bpqrrdb xrnsn dvcjmq nhvprqb lxpjfm mgkhhc lhzc lqjn djqtzrd sdxhc nzp tbvdtmk (contains nuts, dairy) 5 | cqvkj bmcnz rgxrc rstbdq fzxj gxhzfx mgkhhc jhtfzk kclnn mtzg pcbqsh thcplhm vkpmd flz zmh qgcz xzcv rjqtbf nhvprqb ksx cflbh xgjm chktg sdxhc tmrn mvmf qxhd ffbs jpgkr mpglxr tpz krhn httqgkb kxjsf bcnck nrm slxzz lqjn hsjbrtb qcbxh ttss tpxdzq bssmcp fsmcb rzghm cxgx qbgbmc bhvpf xzj qgxclcj bzcrknb sqtgl hrlqk vxs pmtst hjz dblx tcmstb kcsvcx fmfc vbb brfs tbvdtmk hlrgr jnsvhc qrdfl rq xsvc gcgcf lqhpfv fbpt jskt tnsff cthzp hs kvrvb mprgc mjmgh qtknmm dbldp mqqkzm nsz jsvkgd xxxkmp (contains peanuts) 6 | tbvdtmk rsqljl gvpngn plxpx nsz kcsvcx mfc pssbvc chktg njcv vphc rrjf bmcnz ttss mknn hsjbrtb vkpmd zmh dqtx thbdl hjz vcckp nhvprqb qgcz mbnt bbtkr vzqbc bzcrknb qnblnhj nkd lmrlqk jqxdxv pcthv lxmmz fmfc rbhgzmz jnsvhc jtlz jhtfzk lqhpfv fbpt qbgbmc tpz jskt hjn tnzvnp cthzp cxgx mpglxr thcplhm jqqrhv jsvkgd drzsm trzlmqf (contains dairy, fish, eggs) 7 | xskhqd hjktppx qnblnhj mpglxr tpxdzq jnsvhc fhfkm qbgbmc qxhd nhvprqb nrm xgjm nrjzkkm cflbh rpfc rzghm dqtx tcxgh npc dfsq nzsr jlts sfgh bmcnz jsxqhlt cfjmgx vcckp mjmgh sqh jsvkgd ttss qcbxh hvglp thbdl qrdfl msnsgq bzcrknb dtdjfv jhtfzk slxzz mgkhhc pnlrzz jskt xzj srhnq zshrcq cxx mkjpn qgcz lxmmz bpqrrdb bpmsnjn pcbqsh tnsff qtknmm vrhvx zmh dbldp (contains nuts) 8 | tcmstb pfhxb mgkhhc qnblnhj gxhzfx rzl bggpt mknn nzsr qbgbmc gffd bhvpf fsmcb pxpjqdh bmcnz fplft cqvkj npvggv dbdn mkjpn ztdkd hjz bknvm kclnn jhtfzk vcckp qcbxh hvglp psvl zhkdtddq fkknnz vzqbc plxpx pssbvc lqhpfv hs nhvprqb ttss nrm fbpt sdbx jsvkgd mprgc qlhcpd vphc sffdm xzj hlrgr tkzfd dtdjfv rstbdq vkpmd fqrhng bnbc bbtkr lmrlqk pcbqsh mhlcc mtzg mhlm mfc qtknmm fhfkm xrnsn hrlqk hjktppx lhzc gglvtn hjn vvggzmg kvrvb nmcbrfk mjmgh zjvbr ffbs bzcrknb fksvlk xxxkmp trzlmqf (contains shellfish) 9 | drzsm jpgkr pfhxb pmtst hvglp zmh nrm fksvlk rzl dtdjfv bpqrrdb mjmgh mgkhhc mqqkzm bggpt vkpmd nhvprqb rjqtbf tpz sqh cthzp gslb mtzg njcv bbbqhzd ffbs kxjsf gxhzfx fhfkm lsbsj bssmcp hlrgr sfgh rrjf plxpx psvl fsmcb vcckp qsdghc jtlz kvrvb bmcnz rstbdq qbgbmc hsjbrtb jlts dvcjmq sqtgl thdsm mhlm bzcrknb gglvtn lxmmz mpglxr dqtx rbhgzmz tnzvnp xft sffdm jhtfzk (contains fish, wheat) 10 | hsjbrtb gxhzfx tnzvnp nrjzkkm jgkbk sffdm hrlqk zmh rq flz bggpt pssbvc zc hcth pvfzv fbpt vrhvx qbgbmc xsvc xrnsn pmtst bcnck npc srgxk httqgkb tbvdtmk nkd bzcrknb tmrn cflbh bbbqhzd hlrgr bknvm qgxclcj qlhcpd plxpx bhvpf lxmmz lhzc kxjsf czkxxl dbldp dfsq pfhxb jsvkgd nhvprqb qcbxh slmlzp lmrlqk ksshkz gffd jqxdxv xzj xskhqd dblx trzlmqf nzp nsz tkzfd thbdl rbhgzmz drzsm gglvtn dfhxp jhtfzk tcxgh bmcnz qxhd jrm vcckp kcsvcx nzsr jnsvhc thcplhm xxxkmp mhlcc ksx kvrvb mgkhhc nmcbrfk thdsm rzl fsmcb brfs bxqmgp (contains peanuts, dairy, sesame) 11 | lxpjfm dvcjmq qbgbmc qnblnhj hjn mhlm gvpngn kvrvb mknn jhtfzk lhzc kxjsf fkknnz zmh jtlz vcckp hjz thcplhm dbdn gffd mgkhhc bggpt gcgcf cflbh rpfc mfc zjvbr hjktppx bmcnz mhxtp rzghm mvmf nhvprqb rjqtbf qgxclcj qxhd cxx tkzfd xft mjmgh lmrlqk bxqmgp djqtzrd (contains fish, nuts) 12 | cqvkj gcgcf qxhd mprgc dfsq rstbdq krhn mbnt fplft vxs tcmstb nhvprqb drzsm jlts bmcnz mkjpn npc vcckp lmrlqk xsvg zmh bnbc slmlzp bpmsnjn pcthv thcplhm mpglxr mjmgh xskhqd lxmmz fqrhng srhnq rsqljl dbldp fkknnz gslb lxpjfm bzcrknb tcxgh bxqmgp kxjsf jsvkgd vrcftz qgcz qbgbmc zc cxgx pnlrzz jhtfzk dvcjmq jtlz pcbqsh vphc hqsbg lhzc rbhgzmz cxx sffdm hvglp sqtgl lqjn pssbvc slxzz tnzvnp jqxdxv hjz (contains wheat) 13 | srhnq rbhgzmz ksshkz lxpjfm hrlqk qtknmm dbldp qbgbmc sqtgl mhlm bggpt bzcrknb xsvg nkd zmh lsbsj srgxk mjmgh rq nhvprqb bxqmgp bssmcp kcsvcx rsqljl gslb bcnck sdbx sdxhc mgkhhc pxpjqdh thcplhm qgcz jnsvhc jjg jsxqhlt xsvc trzlmqf mhxtp psvl jhtfzk kvmptmt fksvlk hjz qcbxh bbtkr cthzp jrm (contains shellfish, peanuts) 14 | thbdl xsvg tpz rjqtbf vcckp fqrhng pmtst xxxkmp dlbq dvcjmq sqh jtlz jhtfzk gxhzfx nhvprqb gglvtn vphc rgxrc xrnsn bbtkr xzcv mknn jnsvhc npvggv zjvbr bzcrknb pnlrzz bpmsnjn hqd fzxj lqjn fbpt ffbs jskt vrhvx hrlqk hs jrm bhvpf bknvm mgkhhc pcthv pvfzv nmcbrfk zmh hjz lqhpfv dbdn krhn sfgh hqsbg dblx npc lhzc gzpxtbb xft psvl qnblnhj (contains wheat, dairy) 15 | thcplhm zmh tmrn xzcv vkpmd trzlmqf tbvdtmk xsvc qlhcpd sfgh jhtfzk rbhgzmz rrjf nhvprqb lmrlqk ffbs pxpjqdh tpz cfjmgx jqxdxv hjktppx sdxhc dtdjfv hsjbrtb npvggv bmcnz thdsm vcckp bzcrknb tnsff njcv qbgbmc hjz qgcz tcxgh rjqtbf vscggm pfhxb bpmsnjn nsz ttss qcbxh rsqljl dfhxp psvl sdbx tcmstb lqhpfv flz nzsr jpgkr bknvm qxhd (contains eggs) 16 | ksshkz rgxrc mprgc jqxdxv vkpmd rzghm qbgbmc xrnsn lqjn hjktppx qtknmm jjg dbldp jrm gbkbj sfgh chktg nmsbbqc mhlm ffbs nsz gxhzfx bzcrknb hvglp nzp sdxhc fzxj dlbq hsjbrtb mtzg jsvkgd tbvdtmk srhnq tnsff jhtfzk mhlcc sdbx jskt dfhxp jtlz qcbxh zmh pmtst brfs sqh bxqmgp jpgkr qgcz qrdfl fkknnz cfjmgx kvrvb ztdkd kxjsf bggpt gglvtn gvpngn vphc nkd bbtkr pcbqsh qsdghc rsqljl nhvprqb vcckp bpmsnjn mpglxr lxmmz gffd gcgcf zc fsmcb djqtzrd plxpx cxx fbpt bmcnz kclnn mgkhhc fhfkm npc hrlqk pnlrzz cxgx (contains wheat) 17 | ztdkd bssmcp xskhqd kcsvcx vrcftz pssbvc tpz lqjn thcplhm bpqrrdb slmlzp flz zmh hs sdxhc czkxxl xxxkmp tkzfd mhlm mjmgh mgkhhc hjktppx jsvkgd vcckp dfsq gzpxtbb jtlz rzghm brjqh gbkbj cflbh vrhvx bmcnz sdbx bknvm tnsff qbgbmc jnsvhc jlts qgxclcj pnlrzz bxqmgp djqtzrd nkd lxpjfm bbtkr nzsr zhkdtddq jsxqhlt qsdghc sqh fbpt nmsbbqc qlhcpd vxs xsvg jqqrhv nrjzkkm mfc dtdjfv rzl fkknnz mhlcc jpgkr srgxk mpglxr msnsgq sqtgl mqqkzm cqvkj qtknmm rq ffbs nhvprqb jhtfzk lhzc qcbxh dbdn xzcv mbnt cxgx qxhd pmtst hjz (contains eggs, dairy) 18 | jjg mhlm xgjm dlbq tkzfd bhvpf jskt jsvkgd dfhxp mqqkzm npc tnsff slxzz nrjzkkm bxqmgp mgkhhc qrdfl rjqtbf zjvbr hjktppx tbvdtmk vkpmd qbgbmc tmrn tpxdzq plxpx pmtst mhlcc bnbc hjz tpz nzsr rzl mknn dtdjfv lqjn mfc nrm jnsvhc bmcnz nhvprqb lsbsj xzj fplft fbpt pcthv cflbh fqrhng qlhcpd kclnn kvmptmt bpmsnjn mprgc vcckp pxpjqdh srhnq tnzvnp gvpngn xxxkmp gzpxtbb hvglp gslb ffbs hqsbg kvrvb qgcz bzcrknb nrxzqj pfhxb zc qsdghc gcgcf vrhvx rgxrc xrnsn jhtfzk (contains dairy, fish) 19 | mvmf mhlcc rgxrc bggpt hjz brjqh mhxtp vrcftz mjmgh vcckp xxxkmp bnbc npc nhvprqb qgxclcj jpgkr fbpt fsmcb npvggv vvggzmg hqsbg psvl bbbqhzd rpfc rzghm fhfkm jrm pssbvc pfhxb xzcv zmh vrhvx flz rq fplft mtzg jtlz bxqmgp srhnq jhtfzk nsz cthzp lhzc djqtzrd bknvm mknn cflbh qnblnhj hqd jqqrhv nrxzqj kvrvb cxgx dblx gxhzfx sqh mgkhhc sdxhc nkd msnsgq jsvkgd plxpx gslb bpqrrdb rrjf ksx qsdghc bzcrknb tbvdtmk hcth vbb tkzfd ttss xsvg bpmsnjn zc lxpjfm (contains fish) 20 | bmcnz gffd hrlqk thdsm jgkbk xzcv thbdl gxhzfx bhvpf bggpt kvrvb jsxqhlt hsjbrtb fsmcb qbgbmc hlrgr xsvg sqtgl hvglp gvpngn tcmstb dbdn hjz nhvprqb jsvkgd pssbvc gbkbj mgkhhc nrjzkkm dqtx zhkdtddq srgxk qgxclcj xxxkmp fksvlk ztdkd lqhpfv pnlrzz bpqrrdb fmfc chktg pxpjqdh kclnn zmh mhlm jqqrhv mvmf xsvc httqgkb srhnq rjqtbf jpgkr rpfc hjktppx jhtfzk pcbqsh cthzp bzcrknb vbb bxqmgp rrjf vzqbc slmlzp jrm dtdjfv vphc mpglxr jjg (contains nuts, shellfish) 21 | qgcz vcckp qgxclcj sfgh hqsbg xzcv dblx lqhpfv gvpngn jhtfzk gzpxtbb dfhxp fqrhng gglvtn bmcnz nhvprqb bhvpf zshrcq nzp cxgx tcmstb lsbsj njcv nrjzkkm pfhxb nzsr vrcftz qbgbmc mpglxr hjz ztdkd gffd vscggm jqxdxv fplft vkpmd mgkhhc thdsm chktg rstbdq nrxzqj fsmcb dtdjfv bzcrknb xskhqd qlhcpd (contains peanuts, eggs) 22 | jskt cflbh fksvlk lhzc bbbqhzd jsxqhlt lmrlqk xzcv mknn jlts dfsq xrnsn mgkhhc bpmsnjn qxhd hlrgr xzj dvcjmq mhlm vrcftz rbhgzmz nrm bcnck nhvprqb bzcrknb chktg vzqbc vbb kvmptmt gglvtn hqsbg tnzvnp jtlz zmh zjvbr qnblnhj jqxdxv xxxkmp hs xft gffd hjz jhtfzk rjqtbf pssbvc jqqrhv cxx fplft gslb qbgbmc bbtkr kclnn bggpt dblx qrdfl zc (contains sesame) 23 | hcth kclnn rq nmcbrfk srhnq lmrlqk xsvc bzcrknb kvmptmt dvcjmq qbgbmc bbtkr tcmstb bssmcp jpgkr jqqrhv npc thcplhm xsvg qgcz nrm lhzc vrhvx nzp ztdkd dfhxp zhkdtddq mprgc zc hjz vcckp tkzfd rzghm dbldp plxpx pcbqsh vbb mhlm tpxdzq sqh mvmf pxpjqdh jrm brfs qrdfl mbnt mhlcc vphc nhvprqb srgxk psvl fkknnz hrlqk mhxtp gffd jhtfzk qnblnhj mpglxr pcthv rstbdq zmh sqtgl jgkbk gglvtn fplft bpmsnjn hjktppx qcbxh gzpxtbb rrjf thbdl httqgkb (contains nuts, shellfish) 24 | lsbsj mhlm bssmcp jqqrhv cxx qrdfl rsqljl bbtkr kvmptmt vrcftz vcckp rq dblx nrjzkkm pssbvc sdbx lmrlqk xsvc vscggm bzcrknb pcthv sqh xskhqd fhfkm tcxgh qgcz fqrhng hjn rbhgzmz sdxhc qxhd vxs dfsq hrlqk npvggv psvl zshrcq mbnt nhvprqb qnblnhj tnzvnp pxpjqdh hjktppx rgxrc jskt fplft qlhcpd tmrn fzxj mtzg nrm bmcnz nsz mgkhhc zmh mhxtp zjvbr nmsbbqc dbldp fmfc pnlrzz gcgcf xzcv rrjf zhkdtddq nzsr bnbc gxhzfx sfgh ttss dlbq slmlzp kclnn nkd kcsvcx vkpmd jhtfzk qbgbmc hqd nzp mknn httqgkb mprgc gslb bpmsnjn (contains dairy, nuts) 25 | bggpt fzxj xrnsn vcckp bbbqhzd fhfkm czkxxl slmlzp nrxzqj fbpt brfs ztdkd zc jjg dvcjmq hqd jqqrhv qbgbmc mtzg cxx jhtfzk nmcbrfk tmrn hcth jpgkr cxgx fplft nhvprqb nsz zhkdtddq gffd xsvg jlts gcgcf rzghm pxpjqdh bhvpf bknvm bpqrrdb sffdm bpmsnjn qxhd qsdghc lsbsj gbkbj pcthv gslb tpz mprgc kvrvb bbtkr xzcv ffbs brjqh rpfc jtlz bnbc krhn zshrcq qgxclcj fkknnz lqhpfv mknn pfhxb mhlcc bzcrknb fqrhng cfjmgx hvglp plxpx zmh dtdjfv hjz pvfzv slxzz jnsvhc npvggv pmtst tpxdzq vzqbc sfgh psvl dbdn qgcz qlhcpd msnsgq (contains wheat, sesame, eggs) 26 | pcthv pxpjqdh nzsr hrlqk gvpngn jjg mqqkzm rgxrc chktg xsvg dbdn jqqrhv zmh sdbx slxzz flz lsbsj qbgbmc tkzfd sqh vphc qcbxh xzcv xzj bzcrknb tbvdtmk trzlmqf bbbqhzd nhvprqb vcckp jskt drzsm gglvtn fzxj bcnck dfsq jhtfzk tnsff bpmsnjn mfc cflbh kvmptmt mhlm mgkhhc qnblnhj jsvkgd vbb sfgh xrnsn hsjbrtb srhnq pnlrzz kxjsf npc (contains fish) 27 | pfhxb zmh lxmmz jqqrhv zshrcq qrdfl njcv jsxqhlt vrcftz xgjm qsdghc qbgbmc gffd hjz npvggv dtdjfv gxhzfx mjmgh mgkhhc jhtfzk nzsr mprgc tpxdzq vcckp sqtgl mtzg qxhd lsbsj jqxdxv rsqljl cflbh slmlzp drzsm bzcrknb gvpngn tpz pnlrzz jpgkr hqsbg vbb vvggzmg (contains shellfish, sesame) 28 | lsbsj pmtst bzcrknb qgcz qbgbmc slxzz cfjmgx gvpngn vrhvx jhtfzk jrm dblx hsjbrtb kclnn dlbq sfgh rjqtbf mqqkzm mgkhhc fplft gzpxtbb lqhpfv ztdkd bcnck hqd sdbx jgkbk gcgcf sdxhc vcckp zmh fhfkm hcth hjz nzp rzl zhkdtddq zc xsvg jsxqhlt slmlzp mhlcc vvggzmg thcplhm hjn qcbxh fbpt (contains dairy, nuts, shellfish) 29 | lqhpfv brjqh qrdfl kxjsf bssmcp hjn pfhxb httqgkb rsqljl zmh nrm jqqrhv rzl dfsq ttss rzghm jhtfzk mprgc pmtst lqjn bggpt hqd rgxrc tcmstb mjmgh pcthv xgjm lhzc sffdm dqtx hjz qbgbmc bzcrknb psvl fbpt kvmptmt mgkhhc fplft bbbqhzd zshrcq bcnck zhkdtddq qlhcpd brfs qcbxh cfjmgx vrcftz krhn bnbc tpz mvmf jnsvhc nmsbbqc dtdjfv pxpjqdh dfhxp nzp gcgcf fsmcb gslb bhvpf bpmsnjn bknvm hsjbrtb mkjpn vcckp drzsm xzcv (contains peanuts, nuts, sesame) 30 | njcv qtknmm brjqh hsjbrtb xsvg tpz kvrvb vrhvx tmrn hvglp xft gffd zc vzqbc dqtx qbgbmc nhvprqb nsz nrxzqj djqtzrd mpglxr zhkdtddq sqh jrm rrjf dblx fplft cflbh vkpmd vcckp rpfc zshrcq xxxkmp mjmgh vxs mhxtp fbpt fkknnz sfgh jsvkgd nmsbbqc mgkhhc dlbq xzj pnlrzz ksx sffdm gcgcf rjqtbf xskhqd tnsff jlts jgkbk xzcv hs zmh fmfc xsvc slxzz slmlzp rq msnsgq dbldp fksvlk dtdjfv pfhxb jjg httqgkb jhtfzk lsbsj ksshkz czkxxl nzp brfs hjn rzl vvggzmg nmcbrfk trzlmqf vrcftz bpmsnjn fsmcb bzcrknb cxx cxgx vbb qsdghc (contains sesame, shellfish, dairy) 31 | hqsbg vxs tnzvnp vzqbc ttss httqgkb jqqrhv cflbh cxx fmfc nhvprqb bpmsnjn vcckp tpxdzq dqtx mjmgh mpglxr thcplhm xzcv zhkdtddq bknvm mtzg fzxj hqd xzj jqxdxv fksvlk hs slmlzp pcthv zshrcq pcbqsh bggpt bhvpf qlhcpd dfsq rstbdq npc jlts kvmptmt gvpngn mbnt kxjsf bcnck qnblnhj vbb qbgbmc xsvg nrm fkknnz lmrlqk dfhxp dbdn bzcrknb msnsgq tnsff brjqh ffbs hjz kcsvcx bbtkr lhzc nkd xft mgkhhc dlbq mfc jhtfzk fqrhng gbkbj pvfzv jrm sfgh lxmmz ztdkd bssmcp vphc mqqkzm mknn gglvtn jjg (contains nuts, shellfish, sesame) 32 | jhtfzk jqxdxv gglvtn cxx lhzc gxhzfx bbbqhzd gzpxtbb dbdn vkpmd slmlzp bbtkr zc lmrlqk vrcftz vvggzmg hjz vcckp rgxrc hsjbrtb tnzvnp qgcz bggpt sdxhc xft jjg dtdjfv thbdl ffbs hqsbg xzcv zmh nhvprqb rbhgzmz qlhcpd nzsr ttss xzj pnlrzz rrjf mprgc rzghm drzsm fsmcb mkjpn fzxj fqrhng bnbc djqtzrd brfs mpglxr pvfzv bssmcp xsvg nrxzqj pcthv lxpjfm xsvc hlrgr vrhvx chktg tbvdtmk fkknnz bzcrknb kcsvcx pcbqsh vscggm mjmgh qbgbmc vbb lsbsj (contains sesame) 33 | slmlzp gglvtn nhvprqb fhfkm vcckp rzghm dbdn xxxkmp msnsgq dvcjmq cxgx dfhxp qtknmm bxqmgp tcmstb xft vbb hs jhtfzk qbgbmc bzcrknb chktg ffbs xzcv pssbvc dtdjfv lxpjfm jnsvhc cxx vrcftz npc jlts mbnt mgkhhc lsbsj hjz pcthv xzj zc fmfc rstbdq pnlrzz tnzvnp drzsm nmsbbqc cqvkj rbhgzmz gbkbj gvpngn (contains peanuts, dairy, sesame) 34 | nkd ksshkz dbdn nhvprqb zmh mhlm sffdm dlbq vbb mbnt mprgc lqjn dbldp hjn mtzg thbdl dqtx mqqkzm lmrlqk thcplhm zshrcq vrcftz rzl tbvdtmk dfsq kvrvb qtknmm mgkhhc msnsgq cqvkj xrnsn vzqbc rjqtbf pcbqsh pcthv bmcnz fplft rrjf ttss bnbc httqgkb fqrhng sfgh rgxrc xgjm bzcrknb lhzc brfs bbtkr sqtgl mkjpn bknvm mhlcc hjz mpglxr plxpx rstbdq tkzfd pnlrzz dvcjmq nmsbbqc jhtfzk bxqmgp kclnn kcsvcx hs xsvc qbgbmc dfhxp vkpmd hlrgr cflbh cthzp (contains nuts) 35 | qtknmm gglvtn flz sffdm gffd vvggzmg xsvc qgxclcj lqjn zjvbr kcsvcx lhzc bmcnz npc httqgkb cxgx hs mtzg vcckp dbdn dtdjfv bnbc tpxdzq lxmmz sdxhc mkjpn fmfc mfc plxpx kvrvb pfhxb vscggm fhfkm kxjsf hsjbrtb vphc xzcv bzcrknb cfjmgx slxzz nhvprqb vxs ksshkz xgjm jnsvhc qrdfl hjn hqd qbgbmc jrm qsdghc bpqrrdb jsxqhlt qcbxh zmh jlts xrnsn jtlz hjktppx gvpngn tcmstb kvmptmt jskt cthzp ztdkd xft brfs tcxgh mhlcc jhtfzk mbnt nrm mgkhhc hlrgr slmlzp xsvg zshrcq pcthv sqh tnzvnp hrlqk tpz rstbdq (contains fish, nuts) 36 | rsqljl ksx hjktppx thcplhm jrm tcmstb dfsq ttss mgkhhc fsmcb dvcjmq nsz qgcz rstbdq bcnck gxhzfx rzl vcckp chktg qbgbmc tnsff gglvtn httqgkb brfs zc trzlmqf lxmmz fksvlk npc zmh pcthv mhlcc plxpx rzghm qnblnhj hs hlrgr bhvpf slmlzp qrdfl cxgx mknn gcgcf bbtkr hjz bxqmgp jsxqhlt vphc jhtfzk sdxhc qcbxh nzp njcv czkxxl kvrvb dqtx rgxrc xft bzcrknb qxhd pvfzv fhfkm fplft rpfc dlbq msnsgq mvmf jjg hqsbg fmfc tnzvnp kxjsf mhlm pssbvc pnlrzz jlts fkknnz kcsvcx (contains eggs, peanuts, shellfish) 37 | cxgx nhvprqb jnsvhc npc bnbc jhtfzk ttss hcth qlhcpd hjz dfsq tpz slxzz bxqmgp mfc qsdghc cthzp mtzg hlrgr jrm vrhvx krhn tpxdzq bknvm nsz vbb njcv gxhzfx fzxj mprgc gglvtn fkknnz thbdl vzqbc mqqkzm xzcv xsvg xxxkmp jpgkr pnlrzz kclnn vcckp zjvbr cqvkj ztdkd xsvc fsmcb bssmcp hqd cfjmgx bpqrrdb qtknmm gslb cflbh thcplhm qbgbmc jqxdxv lhzc bhvpf msnsgq lmrlqk zmh tmrn rgxrc mhlcc mgkhhc vscggm qgxclcj trzlmqf tbvdtmk tnzvnp (contains nuts) 38 | hjn ksx fplft jhtfzk jnsvhc qgcz rzl xgjm zjvbr kvmptmt bxqmgp tpz sqh gzpxtbb dvcjmq pvfzv bbtkr hlrgr bggpt pxpjqdh tpxdzq tbvdtmk lmrlqk lxmmz jgkbk mkjpn fzxj gffd qcbxh vrcftz rpfc gvpngn mgkhhc jskt rrjf mhlm rq ffbs kclnn nhvprqb djqtzrd httqgkb tnzvnp bzcrknb tcmstb cxx zmh qgxclcj dlbq vcckp npc hcth rstbdq cfjmgx zhkdtddq chktg nsz kxjsf brfs bmcnz xzj nzsr thbdl gxhzfx dblx lqjn fkknnz gcgcf sfgh hjz fbpt mbnt tmrn vscggm dbldp gbkbj hs dtdjfv cflbh (contains shellfish, eggs, nuts) 39 | nrm fksvlk nzp vzqbc hcth mgkhhc cthzp jhtfzk cxgx xskhqd bnbc fsmcb hjz vcckp jrm qnblnhj zjvbr dfsq pvfzv xzj dvcjmq ffbs sqtgl bbtkr bggpt mfc pxpjqdh nhvprqb hs xsvc fkknnz gzpxtbb bcnck lqhpfv hjktppx hqsbg bmcnz tnzvnp lhzc bzcrknb slxzz zmh thbdl (contains wheat, shellfish, fish) 40 | gcgcf hjz ksx hqd jlts lxpjfm vbb mprgc cflbh nrm xsvc kclnn jqxdxv gxhzfx zshrcq rzghm vphc kvrvb gbkbj xsvg npvggv bssmcp qbgbmc fqrhng bzcrknb njcv nzsr kvmptmt ksshkz lhzc vrhvx lxmmz dtdjfv ztdkd mgkhhc jskt bbbqhzd pssbvc fksvlk fhfkm rgxrc cqvkj zhkdtddq bbtkr jrm vvggzmg tpxdzq pcbqsh fsmcb fplft dqtx nmsbbqc ttss vcckp pmtst qnblnhj tbvdtmk qcbxh pfhxb tkzfd jtlz xft nrjzkkm hvglp hrlqk kxjsf mbnt nhvprqb rjqtbf rzl vrcftz thbdl rstbdq tcxgh brfs dlbq jhtfzk dvcjmq jnsvhc mvmf xrnsn vzqbc fbpt nmcbrfk jpgkr kcsvcx jsxqhlt cfjmgx hcth djqtzrd srhnq (contains shellfish, sesame, peanuts) 41 | zmh jsxqhlt nhvprqb pssbvc nzp kvrvb qbgbmc jhtfzk fhfkm cfjmgx bzcrknb vvggzmg pcbqsh sdxhc krhn qxhd pfhxb xzj fplft fzxj tcmstb nsz brfs hjz hlrgr tcxgh slmlzp kvmptmt mgkhhc nmsbbqc mpglxr xsvg kxjsf zjvbr vzqbc vrhvx tpz lmrlqk (contains sesame, peanuts, shellfish) 42 | chktg bpqrrdb fqrhng fkknnz jsxqhlt xzj zmh mbnt jjg vscggm xft bnbc mgkhhc hrlqk hqd mhlm dvcjmq nmsbbqc gslb cxx hlrgr tmrn vphc jrm fsmcb sdxhc hqsbg vrcftz bknvm sffdm qbgbmc srgxk bbtkr hvglp pvfzv bzcrknb xsvc hjz zshrcq nhvprqb hcth zhkdtddq nrm qnblnhj fzxj kxjsf sqh pxpjqdh njcv ztdkd thbdl tpxdzq kvrvb fhfkm hjktppx krhn ksshkz vrhvx mknn vcckp hs pssbvc lxpjfm npvggv vkpmd bbbqhzd bssmcp nzp httqgkb kclnn npc cthzp djqtzrd cqvkj srhnq cflbh jqqrhv nrjzkkm dfhxp (contains sesame) 43 | vrhvx rsqljl bbbqhzd cxgx bcnck vvggzmg bnbc qbgbmc nsz rgxrc bzcrknb nzp rbhgzmz mhlcc qcbxh thbdl nkd xxxkmp rpfc tnzvnp jlts jjg msnsgq nzsr vcckp bggpt qxhd zjvbr tpxdzq jhtfzk vzqbc thdsm zc qnblnhj zmh lqjn gxhzfx trzlmqf npc chktg hjn cflbh jqqrhv sqh kvmptmt qgxclcj lxpjfm mtzg cqvkj dbdn vphc lxmmz mjmgh srgxk nhvprqb hjz nmsbbqc fhfkm xsvg (contains dairy, nuts) -------------------------------------------------------------------------------- /21-allergen-assessment/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace std; 4 | 5 | set intersect(set s1, set s2) { 6 | set res; 7 | set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(res, res.begin())); 8 | return res; 9 | } 10 | 11 | string p2(map> &allergens) { 12 | string res = ""; 13 | for (auto const& a : allergens) res += *a.second.begin() + ","; 14 | return res.substr(0, res.size() - 1); 15 | } 16 | 17 | int p1(vector> foods, set allergens) { 18 | return accumulate(foods.begin(), foods.end(), 0, [&](int sum, const auto &food) { 19 | set safe; 20 | set_difference(food.begin(), food.end(), allergens.begin(), allergens.end(), 21 | inserter(safe, safe.begin())); 22 | return sum + safe.size(); 23 | }); 24 | } 25 | 26 | void calculate_allergens(map> &allergens) { 27 | auto lambda = [](const auto &ingredients) { return ingredients.second.size() != 1; }; 28 | 29 | while (any_of(allergens.begin(), allergens.end(), lambda)) 30 | for (auto const& a1 : allergens) 31 | if (a1.second.size() == 1) 32 | for (auto const& a2 : allergens) { 33 | if (a1.first == a2.first) continue; 34 | allergens[a2.first].erase(*allergens[a1.first].begin()); 35 | } 36 | } 37 | 38 | int main() { 39 | vector> foods; 40 | map> allergens; 41 | 42 | for (string line, res; getline(cin, line);) { 43 | smatch m; 44 | if (regex_match(line, m, regex("(.+) \\(contains (.+)\\)"))) { 45 | stringstream ss(m[1]); 46 | set ings, alls; 47 | 48 | for (string token; getline(ss, token, ' ');) 49 | ings.insert(token); 50 | foods.push_back(ings); 51 | 52 | res = regex_replace(string(m[2]), regex(",\\s"), " "); 53 | stringstream sst(res); 54 | 55 | for (string token; getline(sst, token, ' ');) { 56 | if (allergens.find(token) != allergens.end()) 57 | allergens[token] = intersect(allergens[token], ings); 58 | else 59 | allergens[token].insert(ings.begin(), ings.end()); 60 | } 61 | } 62 | } 63 | 64 | calculate_allergens(allergens); 65 | set values; 66 | for (auto const& a : allergens) values.insert(*a.second.begin()); 67 | 68 | cout << p1(foods, values) << endl; 69 | cout << p2(allergens) << endl; 70 | } -------------------------------------------------------------------------------- /22-crab-combat/input.txt: -------------------------------------------------------------------------------- 1 | Player 1: 2 | 41 3 | 26 4 | 29 5 | 11 6 | 50 7 | 38 8 | 42 9 | 20 10 | 13 11 | 9 12 | 40 13 | 43 14 | 10 15 | 24 16 | 35 17 | 30 18 | 23 19 | 15 20 | 31 21 | 48 22 | 27 23 | 44 24 | 16 25 | 12 26 | 14 27 | 28 | Player 2: 29 | 18 30 | 6 31 | 32 32 | 37 33 | 25 34 | 21 35 | 33 36 | 28 37 | 7 38 | 8 39 | 45 40 | 46 41 | 49 42 | 5 43 | 19 44 | 2 45 | 39 46 | 4 47 | 17 48 | 3 49 | 22 50 | 1 51 | 34 52 | 36 53 | 47 -------------------------------------------------------------------------------- /22-crab-combat/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace std; 4 | 5 | deque get_deck() { 6 | deque deck; 7 | 8 | for (string line; getline(cin, line);) { 9 | if (any_of(line.begin(), line.end(), ::isalpha)) continue; 10 | if (line.empty()) break; 11 | deck.push_back(stoi(line)); 12 | } 13 | return deck; 14 | } 15 | 16 | int get_score(deque d) { 17 | int score = 0; 18 | for (int turn = d.size(); !d.empty(); turn--) { 19 | score += d.front() * turn; 20 | d.pop_front(); 21 | } 22 | return score; 23 | } 24 | 25 | void recursive_combat(deque &p1, deque &p2) { 26 | set, deque>> turns; 27 | 28 | while (!p1.empty() && !p2.empty()) { 29 | if (turns.find({p1, p2}) != turns.end()) { 30 | p2.clear(); 31 | return; 32 | } 33 | turns.insert({p1, p2}); 34 | 35 | int top_p1 = p1.front(), top_p2 = p2.front(); 36 | p1.pop_front(); p2.pop_front(); 37 | 38 | if (top_p1 <= p1.size() && top_p2 <= p2.size()) { 39 | deque rec1 = p1, rec2 = p2; 40 | 41 | for (int i = 0; i < p1.size() - top_p1; i++) rec1.pop_back(); 42 | for (int i = 0; i < p2.size() - top_p2; i++) rec2.pop_back(); 43 | 44 | recursive_combat(rec1, rec2); 45 | 46 | if (!rec1.empty()) { 47 | p1.push_back(top_p1); 48 | p1.push_back(top_p2); 49 | } 50 | else { 51 | p2.push_back(top_p2); 52 | p2.push_back(top_p1); 53 | } 54 | } 55 | else { 56 | if (top_p1 > top_p2) { 57 | p1.push_back(top_p1); 58 | p1.push_back(top_p2); 59 | } else { 60 | p2.push_back(top_p2); 61 | p2.push_back(top_p1); 62 | } 63 | } 64 | } 65 | } 66 | 67 | void combat(deque &d1, deque &d2) { 68 | if (d2.front() > d1.front()) 69 | swap(d1, d2); 70 | 71 | d1.push_back(d1.front()); 72 | d1.push_back(d2.front()); 73 | d1.pop_front(); d2.pop_front(); 74 | } 75 | 76 | int p2(deque d1, deque d2) { 77 | recursive_combat(d1, d2); 78 | return !d1.empty() ? get_score(d1) : get_score(d2); 79 | } 80 | 81 | int p1(deque d1, deque d2) { 82 | while (!d1.empty() && !d2.empty()) 83 | combat(d1, d2); 84 | 85 | return !d1.empty() ? get_score(d1) : get_score(d2); 86 | } 87 | 88 | int main() { 89 | deque d1 = get_deck(), d2 = get_deck(); 90 | printf("p1: %d\np2: %d\n", p1(d1, d2), p2(d1, d2)); 91 | } -------------------------------------------------------------------------------- /23-crab-cups/input.txt: -------------------------------------------------------------------------------- 1 | 792845136 -------------------------------------------------------------------------------- /23-crab-cups/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | typedef unsigned long long ull; 5 | 6 | struct Node { 7 | ull value; 8 | struct Node *next; 9 | 10 | Node(ull value) { 11 | this->value = value; 12 | this->next = NULL; 13 | } 14 | 15 | void add_node(Node* node) { 16 | node->next = this->next; 17 | this->next = node; 18 | } 19 | 20 | void insert(vector nodes) { 21 | nodes[nodes.size() - 1]->next = this->next; 22 | this->next = nodes[0]; 23 | } 24 | 25 | vector remove() { 26 | vector pickup = {this->next, this->next->next, this->next->next->next}; 27 | this->next = pickup[pickup.size() - 1]->next; 28 | return pickup; 29 | } 30 | }; 31 | 32 | void play(map hash, Node* head, int turns) { 33 | for (int i = 0; i < turns; i++) { 34 | vector nodes = head->remove(); 35 | int dest = head->value - 1; 36 | 37 | auto lambda = [&](Node* node) { return node->value == dest; }; 38 | while (find_if(nodes.begin(), nodes.end(), lambda) != nodes.end() || dest == 0) 39 | dest = dest ? dest - 1 : hash.size(); 40 | 41 | hash[dest]->insert(nodes); 42 | head = head->next; 43 | } 44 | } 45 | 46 | map build_circular_linked_list(Node* head, string input, int size) { 47 | map hash; 48 | hash[head->value] = head; 49 | head->next = head; 50 | 51 | for (int i = 1; i < size; i++) { 52 | head->add_node(new Node(i >= 9 ? i+1 : input[i] - '0')); 53 | head = head->next; 54 | hash[head->value] = head; 55 | } 56 | 57 | head = head->next; 58 | return hash; 59 | } 60 | 61 | ull p2(map hash, Node* head) { 62 | play(hash, head, 10000000); 63 | return hash[1]->next->value * hash[1]->next->next->value; 64 | } 65 | 66 | string p1(map hash, Node* head) { 67 | string concat = ""; 68 | play(hash, head, 100); 69 | 70 | for (Node* n = hash[1]->next; n->value != 1; n = n->next) 71 | concat += to_string(n->value); 72 | 73 | return concat; 74 | } 75 | 76 | int main() { 77 | string line; 78 | getline(cin, line); 79 | 80 | Node* h1 = new Node(line[0] - '0'); 81 | Node* h2 = new Node(line[0] - '0'); 82 | 83 | map m1 = build_circular_linked_list(h1, line, 9); 84 | map m2 = build_circular_linked_list(h2, line, 1000000); 85 | 86 | cout << p1(m1, h1) << endl; 87 | cout << p2(m2, h2) << endl; 88 | } -------------------------------------------------------------------------------- /24-lobby-layout/input.txt: -------------------------------------------------------------------------------- 1 | nwwwwwsewewwwwsenwwnewwwnw 2 | nwnwnwesenwnwnwnenwnwsesewwnwnenwnwnwnw 3 | eeeeenwnwesesweeeew 4 | newswseswseeswneseeseseswsesesesenewse 5 | nweeeswnwseeseeeeeeewneseeene 6 | nwnwnwnwnwsewnwneewnwwwsewwwnwsw 7 | nwsesenwnenwwewwwneseswsewswwwwww 8 | wsenwswsesewswseswseseenesesenweseswnesw 9 | nenenenenwneweneneswwnenenenesenenesese 10 | nenwnenenesenenenenene 11 | neneswnenenwnwnwnwnenwnenwenene 12 | wswnwswswseswswseswnwswswsweseseswswnesw 13 | seneeseseswnewseseseseneswneseseseseseew 14 | swneeenesweswswnenwnwnweneneswesew 15 | nwswewewwwewwnewwseswww 16 | nwnwswnwswsesewneswwseeeeneweswew 17 | nwsweeeswsweeneeswnenwneeswene 18 | swnwseswswnwswswswneswneswweswwswwwswse 19 | nwnwenenwneswnwneswnwnwnewsenwnesenwne 20 | neneswswswnwesenwwnewneweeenweswnenw 21 | wnwnwwnwnwnwnwseneswseswnwnenw 22 | newnenweneseewsewswsewseneswneswwsw 23 | nenenwwnenwnwsenwnenwsenewnwseenenene 24 | senwweswswswneswswsweswwswswswswswswsw 25 | nesenwswsesewneeswesew 26 | nenenenenenewneneneesewneneene 27 | nwenwswnenenwneneneswwenwnenenwneenew 28 | neeneswwnenenenenesenenene 29 | nesweenenenweeeseeweweneenenese 30 | nwnwnwnwnwnenwswnwnw 31 | ewwnesweseseeswwnwseseneeswswwnwsw 32 | wnwwsewsewwwwwwswwenwewnwnw 33 | wneneseswnwnenesweseeeswnenenenwnew 34 | wesweenwwneswnwsweeeeenwsweee 35 | nesewnwnwnwsenwnenwwnwswwnwnwnwwwnw 36 | eneeeeenwsweeee 37 | nwneneneswnwnwneseenenenesewnenwnwnene 38 | seswsewseseseneeseseenwswseneesesesew 39 | seeesesewseseewseesene 40 | nenenenwseneswnenenenenenenenwswnese 41 | enwswwswnweswswwswwwneswesewnweesw 42 | nenenwnwnenenesenwenwnenewsenesenwswnwne 43 | nwnesenewnenenenenenenenenwnenwsenese 44 | eeswneeeweenwenwsweweseenewne 45 | nwwnewnwswsenwnewswsewswnewe 46 | wseneewwsenwnenewwneseeneseeee 47 | eseneseseswneesewnesewesesesesesese 48 | swneneeneeswneneswswneneneeneswenenwe 49 | swswswswswswswswsweseswswneswswnwnwese 50 | senenwewnwswnenwsenenwneswnwnwnwnwnwnwnw 51 | sweesweeenwsenenewneeeneenwene 52 | sesweswseseswswswneswnwwsweswseswnwswwne 53 | newwswseewnewneneseswsewnwsewwwnwsw 54 | swwwewnwswswswsesenwswwneseneswswswsw 55 | eswseswseswneneseswwseseswnwswseseseswwse 56 | swnwenwnwnwewnewsewswnwwswsewneswnwnw 57 | eeeenweeneswweseneeeeesenwe 58 | nwsenwswseseseseseswsesweseseswsenwsese 59 | wneesesenwnwswswwwwesenwseeneseneesw 60 | senwneneswwnesewwnwneeneenesenwnenenwne 61 | nenenwnwwswnenenenenwnenenesenenwwsenw 62 | nwwnwswnwenwwwnwenwnesenw 63 | nwnwnwnwwsenenwwsenwswswnenenwnenwe 64 | nwswnwnenwneenenenwnwswnwsenwnwnwnenwnwe 65 | swnwnwsenwnwwwswnwwwenwwenenenwswnw 66 | wwnesewswswswswseswnwnwwneswwwswswe 67 | swwenenesenewnesenewenw 68 | swwswsewnwwswswenwneeeswswswswnwnwswe 69 | senwnwnenwsenwnewwwsenwnwsesenenenwnwnenw 70 | swswnesenwwnwnweswnwnweeneneenenwwnw 71 | seswwswwswwneswsw 72 | eseweeseeseneweeeseweeenese 73 | eneewwseseeeneeeeewsweenesee 74 | nwsweenwswneewweswswseswnwsesenene 75 | wswswwneseswwnwswwswnewwwwnwwese 76 | wsweeneenwnweswneswneseseewneee 77 | eneseseseswseseesesesese 78 | nwnwwnwnewnwnwsenwseseeneswswnenwsenw 79 | seswswswseneswswsesewwswnwnwswsesenesene 80 | swsweswswswwswswswswenwswswsw 81 | swwnewwswswnwwswswswwswswswnwsweswe 82 | wneseneenwswnenwsewnesenwsweenwwnw 83 | eewneswseesweeweswesenwnwnewne 84 | weneeneesesweenenwnweesw 85 | nwneeneneneneneweneenewseeneneswe 86 | swswsenenwseswseswnwswse 87 | wwseneswnwsewnesenwwwnenenenwswwsw 88 | nwnwnenwewsesenwwwnwswnwewwesew 89 | nwseneeseeneeeeenenenenwne 90 | wsenwewnwsenwwnwweenwwwnenwww 91 | seswsenwwswswneswseneswswsesewswseswneswsw 92 | wswswnewswwwenw 93 | neswnenwneneswnesewwwnwenenwneswnenee 94 | enwswwswnenenwnenwswsewnenwswenwenee 95 | seseeeseesewsesesee 96 | wswnewwwwnwwwewwnwswwseswww 97 | wenwnwnwnwsesenwnwnwnwsenwsenewswnwnw 98 | nwnwenwswsenwnwnwwnwnwnwnwnwnwnwnw 99 | sewswnewsesesewnwneseseeneesenesewse 100 | senweswsenwneeeseenwewsweseeeee 101 | swewenenwenenwseswwnenwswneneswnwnw 102 | swseeseswneswenewswnwnwnewneewwesw 103 | senwwnwnwnenenwseneenenewnwnwnwnenwnesew 104 | nwwsewnwwnwnwnewneenenwnwseneneswseswse 105 | nwwsewwwnenenenwnwenwswswswnwwewse 106 | nweswneeeswseneeseeeseseesesenwsw 107 | nwnwswnwnwnwnwnwwenwnewnwse 108 | swwseseswenesewnewseswswwne 109 | eeeeneneeneseweeweeeswenenwe 110 | seseseeseswsesewesewnenenwseswsese 111 | nwenwnewwewnwsenwnwswwnwnwwesenesw 112 | neeneenewnenenenenewneneweeseee 113 | seesweseseeseseeeseseesenew 114 | wenewnwseswwwswwwswneswwswswwwswse 115 | senwnwnwnenenwswnwnwnwnweneneswswnwenwnw 116 | wsenwnwnwnwnwnwwenwnwnwneswnenwsenwnwnw 117 | swseswswswnweseswswswswseseswsw 118 | wneneewnwswseewswseeewneeswew 119 | swsweswseseswnwswswwswswswswsene 120 | swseswswsewneswswswswswswswswswswneswne 121 | sesesesesenesesesesewsenenwsesesesewse 122 | weeneesenenenewneeenenenenee 123 | nwnwnwnwnenwsenwnwneeswnwnwnwnewseenww 124 | ewewesesesewseseneswse 125 | enenwnwnweseswsewneenewwneneswseswwse 126 | nenenenwsenenweweneeneneswneneseenene 127 | wweswswwswswswenesweswswwnwe 128 | enenenesenwnenenenewee 129 | nwwnwnwwnwnwnewesese 130 | nwsewsesenwswswnwneeneseenwenw 131 | swnwnwnwwswnwenwewnwwsweeswnwnew 132 | eeneswseswswnwsewseseswswsesenwseswsesw 133 | newsewnwwnwwswnwwsenw 134 | enweseewseswenweneseeswneeeew 135 | nwnwnwnwnwwsewswnwnwnwwewnwsenwnew 136 | sewswseneneseneseswwwswseseswnesewnesese 137 | ewwswwwwwseswnesewenwwnwwwnwww 138 | wseesenewnwsweswwwsenenwnwwwww 139 | neeneneeeewnesenesenewwwnenenese 140 | eeeeewnweseneneeseeswneeeewe 141 | seseneseseseswsesewswsesese 142 | wswwenwwwnwneswwnwnenwnwnwswwnwnw 143 | seseswenweswseswswswswnwsesenw 144 | wswnwsenwswwwenwswesweneseneseesenw 145 | swnewwwenwsenwwwnesw 146 | swseseseswsesesesesesenwsewseeseswsenene 147 | wenenesweenweeeseneweneneenesw 148 | nwsenwnenwnenwnwnwnwnwnwnwnwnewsenenwse 149 | seseeeswsewsesenesenwseeswse 150 | swnwnewwnwnesewnwnwnwnwwnwnwnwse 151 | eseeeneneeneweeneeee 152 | wneswneenwswseeeeeswneneeneseenwne 153 | seswsesesesesesesesesenwnwnwsenwseswsene 154 | nenenenenewneneneenesenenene 155 | newswweswseewnwnwnwsew 156 | senwnwsesewnwnwenwnwwneeseseswwwsww 157 | eswnwswenenwweneseeeswswee 158 | seesewneeenenenwwenwnwseswswnwesee 159 | swneenwwneneewswneseeewseswwnwnw 160 | newewewwwwwsewwe 161 | nwweswnewwsesweswswwswswnewwww 162 | sewnesweswswwswswswswwsweneswswnwsw 163 | seneenenenenesenwnewnwwseseneswnewenee 164 | nwswswneewnewswewwwsweswswswwnwswe 165 | nenwneswswnwneswsweneenenwnenesw 166 | nenwneneseeswswnenwewnenenesenwnenwnw 167 | swswsweswswseswswnwswswswswenw 168 | swneseswnwseswswswseenwswwswswswswswsw 169 | seneseesesewsesesesesesesesesewsenewse 170 | sweeseswnwsesesewenwnwnwsenwseeenwe 171 | nwnwsenwnwnwseewnwnwwnwnwnwnwnwsenwnenesw 172 | seswweneswwnwwwwwnwwww 173 | wnwwwwsewwneewewswwnwwwww 174 | eeneswswenenenewneeswnee 175 | esesesesenwsewswseneswnwe 176 | nenwswseeeswneswsweneeneseewnenenw 177 | swswswnwswneeswswswswwseswswwswswesesw 178 | swswwseesewnwwnwnewsenwewnw 179 | eseseeneeewseesenwseneeewwnew 180 | neeswswneswsenwsesee 181 | nwnwesweseseseseeneesweseeseewese 182 | seswswsenwswswsenwesesweseneseseswswsesw 183 | neneneswseeswnenenenenwnene 184 | enwswswnwseseswswwneeswswenwswnwswseswsw 185 | wnwwswwneswwwewswswewwwwww 186 | nwnewnwesewsewnwnwwwwwsewsweww 187 | nwseswenwwwenenwsenwwneenwwnwnwsw 188 | sewewwwwnwweswwsewnewswwnwwsww 189 | wwswwweswnwseene 190 | seeseeswsesewesenenenwswsewesesesese 191 | wseswwswswwwnwswewswwnwsw 192 | seswswseneswswswwswswswswsw 193 | neneseewnwwwwwswwwwseswwwww 194 | wwneewwsewswwwwwswnwswswwene 195 | wwswneswwnewswwwwwwswwnewnesee 196 | nenwnenwwwsewwnwnweneswswwnwnwwwsww 197 | ewwnwwwwwswewswwwnwnwwnenww 198 | nwnwnewnwsenenwnwsenenenenwnene 199 | eneeswswnwwwswwwewwswnewwewsw 200 | sesenwseseeeseseseseese 201 | seesesesenwseseseseseseseseseseswnwnwse 202 | wwswwwwwswswwnewswwsw 203 | neswwswswswwswseswswsw 204 | seseweeneseseseswseeeeenenweew 205 | sesenenwswnwseswneswsenwswwsewsenwnee 206 | senewenwsweneseseswsenwnwseseenwnew 207 | swneesenwseswseswseneenwseswswsese 208 | wswwnewwwwwwwww 209 | seeseesesewneenwwsesweeneeneeewse 210 | swnweswnwnwweswsenesenwnwneneneneeene 211 | nenwneewseeeseswneeeeenweenee 212 | sewsewnwswnewnwnewnwwwwnwwwnww 213 | neswswswnwewseswesesenenwnewwnenewsw 214 | senwewswneseeeenweseneeeewseswew 215 | swswseswseseswsenwsese 216 | nwnwewnwnwwnwnwnwswenwnwnwnwseneeseww 217 | nwswwnwsenwnwnenwneenenwwseesenenwsw 218 | nwwnwnwnwnwwnweswnwnweswnwenwnewnw 219 | wsweswswswwneswswneswswswswswswswneswse 220 | ewnewneesesweneswnwenwneesenewnee 221 | sewenwwnwnwnwswwwnwnwnwwnwww 222 | wwwnesenwnwenwwwneswseswswseswnenwsee 223 | seseswnwneeseswwswsewnenwnweewsesese 224 | wnewweseneswseseneweneseneenwnw 225 | seeweswwenwswwwwswwsenwswnwnwne 226 | wswneswneswwswsesewswwnewswnwswsww 227 | nenwnwnwnwnenweenweswwwnwnwswsenwse 228 | eweesenweseneewswenwenweeswe 229 | seneweseeneswweweeswnwweeene 230 | seswneswneswswsewswweseswewswneseswsw 231 | swseseswswnwswswnwswseswswsw 232 | wnenwwnwsenwwsewsenwnwnewwnwnwwwne 233 | wenesewsenwsweneneesenwenwswneswwe 234 | eneneneewneeesenwwseneseweseenwne 235 | nesesesewwnewnwewswswseswnw 236 | wnenwswswwwwewswwwwseswswwswse 237 | enenwnwnwnwnwwnwnwswnwnenesesenwnewsewnw 238 | seswsenwsesesewneesenwneseseneswwswswnwse 239 | eseseseseswseseseswswnenesenwsewnwwseswne 240 | swwsewswwsewewneneswwwnwewnw 241 | wneeenewwneene 242 | eeeneewnwwseeeeeeseseeeee 243 | swswneneneeneneenenesewneenenenenenw 244 | wwwswswwwsewwwwwnenenwwwne 245 | neeneeneseweewneeswnenenwewwnew 246 | enewneenenwnwwnwseneswnenewseenwnwe 247 | wwwwwwwwwsenww 248 | senwsesenwswswseswswseswseswsw 249 | neswweneeneesenwnwneenwseenesenenese 250 | nwnenenenenwnewsenwseneswwnenwsenwnwsenw 251 | enewswnwswswsweswseseswswseseseswseswnwse 252 | nenwswswwsewnwnwswswswesenenwsew 253 | wseswsesenewenenew 254 | wwwnewwnwwneswsewnwwesewnwnww 255 | seeeseseesesesewseese 256 | wswswnwewnwnwewwwseewwnwwe 257 | weeeeeeseweeseseseewenenweee 258 | eewnwneswwsenwweseseeseswwneseseswse 259 | seenenwseeenesenenwweseeneenwee 260 | swseseseseesenesewseseneseswsewwesenene 261 | swnwswnwswswswnwsewwsewnwneesweesww 262 | senenwnwnenewnenwnenwnwnenwnesenenw 263 | seseeesenewnesesenweseeeeeseesw 264 | seeseeseswsenwsewnesesese 265 | seswsewseeneswneeswswseswswsenenwsewsww 266 | seseseseseseseswesesesenwenenwsesesw 267 | ewnwwneneswnweswwsweenwwwsewnee 268 | newswseeswsesesesewnwnesewewneswsese 269 | nwneseswneenewenewweenenwwnwnw 270 | swneswenwenwswesesweeeeeneswene 271 | nwwnenwnwswnwneenwenwnwnenwnwwnwsese 272 | neneweneseeneenenee 273 | eeseswsesewneseseseseeseseseswsenwnwse 274 | nwnwnwnwnwnwnenwnwswnwnwnwnw 275 | nwewsenwsenwwneswwwnwsenwneeswwsenwse 276 | nwwwnwsewwnwnweeswswnwnwnwne 277 | nwenwnenenwenwneswnwswnenwnwnwnwnwsewse 278 | seswseswswswswseswswwswe 279 | wswewwseenenewswswswwswswwswnew 280 | eweenweweewsenweeswnwsenewese 281 | eeeenweeeeeeseseneewsenwsesw 282 | neeneeeneeeeeswnenenwee 283 | nwwwnenwnwwwnwnesenwnwnwse 284 | seenwnenwnwnenwnenwsw -------------------------------------------------------------------------------- /24-lobby-layout/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace std; 4 | 5 | typedef pair Tile; 6 | 7 | map hex_grid { 8 | {"ne", {0, 1}}, {"e", {1, 0}}, {"se", {1, -1}}, 9 | {"nw", {-1, 1}}, {"w", {-1, 0}}, {"sw", {0, -1}} 10 | }; 11 | 12 | int count_adjacent_black(set &black, Tile tile) { 13 | return count_if(hex_grid.begin(), hex_grid.end(), [&](const auto& h) { 14 | return black.find({h.second.first + tile.first, h.second.second + tile.second}) != black.end(); 15 | }); 16 | } 17 | 18 | int p2(set &black) { 19 | set dupe = black; 20 | 21 | for (int i = 1; i <= 100; i++) { 22 | for (Tile tile : black) 23 | if (count_adjacent_black(black, tile) != 1) 24 | dupe.erase(tile); 25 | 26 | for (int i = -75; i < 75; i++) 27 | for (int j = -75; j < 75; j++) 28 | if (count_adjacent_black(black, {i, j}) == 2) 29 | dupe.insert({i, j}); 30 | 31 | black = dupe; 32 | } 33 | return black.size(); 34 | } 35 | 36 | void flip_tile(set &black, vector dirs) { 37 | int x = 0, y = 0; 38 | 39 | for (string dir : dirs) { 40 | x += hex_grid[dir].first; 41 | y += hex_grid[dir].second; 42 | } 43 | 44 | if (black.find({x, y}) != black.end()) black.erase({x, y}); 45 | else black.insert({x, y}); 46 | } 47 | 48 | int main() { 49 | set black; 50 | regex re("(e|se|sw|w|nw|ne)"); 51 | 52 | for (string line; getline(cin, line);) { 53 | vector dirs; 54 | 55 | for (smatch m; regex_search(line, m, re); line = m.suffix().str()) 56 | for (int i = 1; i < m.size(); i++) 57 | dirs.push_back(m[i]); 58 | 59 | flip_tile(black, dirs); 60 | } 61 | 62 | cout << "p1: " << black.size() << endl; 63 | cout << "p2: " << p2(black) << endl; 64 | } -------------------------------------------------------------------------------- /25-combo-breaker/input.txt: -------------------------------------------------------------------------------- 1 | 12578151 2 | 5051300 -------------------------------------------------------------------------------- /25-combo-breaker/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | int main() { 5 | unsigned long long card_pk, door_pk, loop = 0, encrypt = 1; 6 | cin >> card_pk >> door_pk; 7 | 8 | for (int value = 1; value != card_pk; loop++) 9 | value = (value * 7) % 20201227; 10 | 11 | for (int i = 0; i < loop; i++) 12 | encrypt = (encrypt * door_pk) % 20201227; 13 | 14 | cout << "p1: " << encrypt << endl; 15 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # advent-of-code-2020 -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | cd "$1" 2 | g++ -std=c++14 -O3 main.cpp -o main 3 | ./main < input.txt --------------------------------------------------------------------------------