diff options
author | Federico Igne <git@federicoigne.com> | 2021-12-09 12:14:19 +0000 |
---|---|---|
committer | Federico Igne <git@federicoigne.com> | 2021-12-09 12:14:19 +0000 |
commit | e8ad18ed7b9de796208a2a55133c80430add2fb9 (patch) | |
tree | 9dd5074266e2c38f6bdd729d33a8426e2dae18d9 | |
parent | 5100744c95260c026468d486b2625fedc90d0426 (diff) | |
download | aoc-e8ad18ed7b9de796208a2a55133c80430add2fb9.tar.gz aoc-e8ad18ed7b9de796208a2a55133c80430add2fb9.zip |
Day 5
-rw-r--r-- | day5/Cargo.toml | 11 | ||||
-rw-r--r-- | day5/resources/input.txt | 500 | ||||
-rw-r--r-- | day5/src/main.rs | 136 |
3 files changed, 647 insertions, 0 deletions
diff --git a/day5/Cargo.toml b/day5/Cargo.toml new file mode 100644 index 0000000..f52d4d4 --- /dev/null +++ b/day5/Cargo.toml | |||
@@ -0,0 +1,11 @@ | |||
1 | [package] | ||
2 | name = "day5" | ||
3 | version = "0.1.0" | ||
4 | authors = ["Federico Igne <git@federicoigne.com>"] | ||
5 | edition = "2018" | ||
6 | |||
7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | ||
8 | |||
9 | [dependencies] | ||
10 | lazy_static = "1.4" | ||
11 | regex = "1.5" | ||
diff --git a/day5/resources/input.txt b/day5/resources/input.txt new file mode 100644 index 0000000..a97a0f8 --- /dev/null +++ b/day5/resources/input.txt | |||
@@ -0,0 +1,500 @@ | |||
1 | 445,187 -> 912,654 | ||
2 | 820,46 -> 25,841 | ||
3 | 216,621 -> 458,379 | ||
4 | 955,898 -> 67,10 | ||
5 | 549,572 -> 549,520 | ||
6 | 796,107 -> 109,794 | ||
7 | 729,698 -> 338,698 | ||
8 | 11,987 -> 968,30 | ||
9 | 381,840 -> 381,409 | ||
10 | 80,467 -> 80,48 | ||
11 | 132,197 -> 132,92 | ||
12 | 343,96 -> 343,710 | ||
13 | 42,854 -> 346,550 | ||
14 | 503,56 -> 804,56 | ||
15 | 599,206 -> 60,206 | ||
16 | 702,920 -> 474,920 | ||
17 | 496,790 -> 223,517 | ||
18 | 969,579 -> 583,579 | ||
19 | 897,66 -> 604,66 | ||
20 | 484,754 -> 640,910 | ||
21 | 330,49 -> 949,49 | ||
22 | 908,132 -> 714,132 | ||
23 | 517,153 -> 97,573 | ||
24 | 317,865 -> 678,504 | ||
25 | 800,61 -> 800,51 | ||
26 | 179,242 -> 179,202 | ||
27 | 529,757 -> 529,838 | ||
28 | 288,953 -> 393,953 | ||
29 | 372,15 -> 925,568 | ||
30 | 100,85 -> 654,639 | ||
31 | 663,562 -> 737,636 | ||
32 | 576,981 -> 245,981 | ||
33 | 347,240 -> 347,928 | ||
34 | 91,119 -> 413,441 | ||
35 | 637,397 -> 330,90 | ||
36 | 534,257 -> 950,257 | ||
37 | 155,636 -> 694,97 | ||
38 | 539,274 -> 539,327 | ||
39 | 329,795 -> 824,300 | ||
40 | 103,51 -> 961,909 | ||
41 | 87,868 -> 168,787 | ||
42 | 21,250 -> 157,386 | ||
43 | 591,316 -> 670,395 | ||
44 | 722,670 -> 630,670 | ||
45 | 28,167 -> 28,489 | ||
46 | 480,210 -> 68,622 | ||
47 | 573,700 -> 354,919 | ||
48 | 186,59 -> 700,59 | ||
49 | 121,186 -> 670,186 | ||
50 | 797,985 -> 671,985 | ||
51 | 836,804 -> 335,804 | ||
52 | 701,835 -> 104,238 | ||
53 | 456,718 -> 456,964 | ||
54 | 694,891 -> 694,839 | ||
55 | 205,637 -> 205,318 | ||
56 | 40,958 -> 773,225 | ||
57 | 151,391 -> 151,779 | ||
58 | 693,894 -> 417,894 | ||
59 | 418,700 -> 656,700 | ||
60 | 196,985 -> 896,985 | ||
61 | 357,509 -> 608,258 | ||
62 | 552,558 -> 552,482 | ||
63 | 184,412 -> 170,412 | ||
64 | 122,746 -> 643,225 | ||
65 | 268,930 -> 247,930 | ||
66 | 979,820 -> 407,248 | ||
67 | 755,893 -> 845,893 | ||
68 | 706,843 -> 706,225 | ||
69 | 162,726 -> 895,726 | ||
70 | 140,888 -> 289,888 | ||
71 | 614,432 -> 903,721 | ||
72 | 272,725 -> 272,598 | ||
73 | 529,672 -> 967,234 | ||
74 | 903,989 -> 785,871 | ||
75 | 422,355 -> 422,360 | ||
76 | 313,722 -> 713,322 | ||
77 | 460,121 -> 460,151 | ||
78 | 55,944 -> 946,944 | ||
79 | 795,744 -> 221,744 | ||
80 | 816,953 -> 471,953 | ||
81 | 865,186 -> 557,186 | ||
82 | 94,976 -> 747,323 | ||
83 | 302,961 -> 811,452 | ||
84 | 361,966 -> 921,406 | ||
85 | 197,988 -> 571,988 | ||
86 | 310,905 -> 722,493 | ||
87 | 699,91 -> 272,518 | ||
88 | 295,306 -> 84,95 | ||
89 | 220,116 -> 395,291 | ||
90 | 183,364 -> 523,364 | ||
91 | 16,986 -> 16,319 | ||
92 | 54,980 -> 635,399 | ||
93 | 340,110 -> 651,421 | ||
94 | 788,76 -> 788,635 | ||
95 | 933,375 -> 458,375 | ||
96 | 12,434 -> 494,916 | ||
97 | 253,892 -> 962,183 | ||
98 | 240,508 -> 240,234 | ||
99 | 763,934 -> 506,677 | ||
100 | 308,135 -> 239,66 | ||
101 | 117,649 -> 751,15 | ||
102 | 95,535 -> 428,868 | ||
103 | 16,937 -> 902,51 | ||
104 | 547,404 -> 547,830 | ||
105 | 128,581 -> 970,581 | ||
106 | 959,810 -> 564,415 | ||
107 | 971,738 -> 378,145 | ||
108 | 919,210 -> 295,210 | ||
109 | 737,43 -> 231,43 | ||
110 | 82,577 -> 455,204 | ||
111 | 821,337 -> 570,337 | ||
112 | 688,753 -> 538,753 | ||
113 | 891,844 -> 124,844 | ||
114 | 74,957 -> 946,85 | ||
115 | 43,942 -> 43,210 | ||
116 | 100,391 -> 100,142 | ||
117 | 975,527 -> 175,527 | ||
118 | 510,844 -> 395,959 | ||
119 | 558,231 -> 558,858 | ||
120 | 839,915 -> 262,338 | ||
121 | 784,290 -> 875,199 | ||
122 | 644,824 -> 812,824 | ||
123 | 899,657 -> 500,657 | ||
124 | 263,668 -> 263,964 | ||
125 | 157,374 -> 820,374 | ||
126 | 530,301 -> 530,67 | ||
127 | 15,688 -> 15,572 | ||
128 | 216,844 -> 479,581 | ||
129 | 973,59 -> 68,964 | ||
130 | 104,92 -> 104,547 | ||
131 | 421,472 -> 421,176 | ||
132 | 887,805 -> 231,149 | ||
133 | 140,980 -> 852,980 | ||
134 | 248,602 -> 346,602 | ||
135 | 334,961 -> 334,471 | ||
136 | 892,892 -> 958,958 | ||
137 | 270,83 -> 270,135 | ||
138 | 950,105 -> 404,651 | ||
139 | 979,476 -> 930,427 | ||
140 | 416,430 -> 879,430 | ||
141 | 796,937 -> 796,415 | ||
142 | 670,679 -> 72,679 | ||
143 | 733,884 -> 733,302 | ||
144 | 745,196 -> 306,196 | ||
145 | 174,353 -> 667,846 | ||
146 | 285,978 -> 254,978 | ||
147 | 10,63 -> 936,989 | ||
148 | 242,107 -> 242,725 | ||
149 | 238,341 -> 238,800 | ||
150 | 975,102 -> 174,903 | ||
151 | 530,474 -> 530,853 | ||
152 | 931,47 -> 467,47 | ||
153 | 86,141 -> 821,141 | ||
154 | 263,15 -> 654,15 | ||
155 | 688,542 -> 378,232 | ||
156 | 826,793 -> 989,793 | ||
157 | 729,285 -> 729,192 | ||
158 | 587,915 -> 587,79 | ||
159 | 548,667 -> 877,667 | ||
160 | 15,836 -> 783,68 | ||
161 | 662,673 -> 71,82 | ||
162 | 312,681 -> 910,83 | ||
163 | 760,418 -> 491,418 | ||
164 | 175,502 -> 443,502 | ||
165 | 817,878 -> 29,90 | ||
166 | 798,569 -> 811,582 | ||
167 | 703,141 -> 743,181 | ||
168 | 941,849 -> 941,778 | ||
169 | 63,24 -> 500,461 | ||
170 | 697,183 -> 119,761 | ||
171 | 705,672 -> 152,672 | ||
172 | 150,567 -> 656,567 | ||
173 | 158,411 -> 965,411 | ||
174 | 702,872 -> 276,446 | ||
175 | 141,179 -> 741,779 | ||
176 | 533,886 -> 817,886 | ||
177 | 569,949 -> 285,949 | ||
178 | 699,764 -> 699,780 | ||
179 | 333,863 -> 805,391 | ||
180 | 861,804 -> 524,467 | ||
181 | 791,501 -> 718,501 | ||
182 | 976,265 -> 976,713 | ||
183 | 129,342 -> 339,132 | ||
184 | 322,738 -> 212,738 | ||
185 | 700,534 -> 622,456 | ||
186 | 68,314 -> 14,314 | ||
187 | 146,112 -> 215,181 | ||
188 | 170,211 -> 482,211 | ||
189 | 159,412 -> 159,32 | ||
190 | 312,939 -> 312,95 | ||
191 | 232,18 -> 912,698 | ||
192 | 950,114 -> 950,826 | ||
193 | 620,848 -> 620,11 | ||
194 | 624,288 -> 544,208 | ||
195 | 752,479 -> 752,577 | ||
196 | 784,796 -> 784,872 | ||
197 | 130,55 -> 974,899 | ||
198 | 434,82 -> 434,481 | ||
199 | 988,230 -> 892,134 | ||
200 | 159,252 -> 159,291 | ||
201 | 462,14 -> 462,977 | ||
202 | 553,981 -> 553,390 | ||
203 | 231,936 -> 51,936 | ||
204 | 58,759 -> 60,759 | ||
205 | 572,891 -> 584,891 | ||
206 | 705,303 -> 124,303 | ||
207 | 144,894 -> 970,68 | ||
208 | 865,275 -> 865,956 | ||
209 | 492,491 -> 470,491 | ||
210 | 971,15 -> 977,15 | ||
211 | 750,521 -> 33,521 | ||
212 | 913,947 -> 387,421 | ||
213 | 368,677 -> 570,677 | ||
214 | 795,186 -> 882,186 | ||
215 | 404,840 -> 678,840 | ||
216 | 187,488 -> 403,488 | ||
217 | 824,706 -> 642,706 | ||
218 | 330,541 -> 330,195 | ||
219 | 564,531 -> 774,531 | ||
220 | 271,857 -> 20,606 | ||
221 | 976,975 -> 976,843 | ||
222 | 323,341 -> 21,39 | ||
223 | 575,643 -> 267,643 | ||
224 | 827,295 -> 827,854 | ||
225 | 749,486 -> 749,780 | ||
226 | 656,716 -> 656,470 | ||
227 | 635,187 -> 417,187 | ||
228 | 503,488 -> 503,393 | ||
229 | 592,688 -> 592,567 | ||
230 | 515,408 -> 128,795 | ||
231 | 608,158 -> 780,158 | ||
232 | 677,96 -> 11,762 | ||
233 | 127,452 -> 339,452 | ||
234 | 117,985 -> 291,811 | ||
235 | 157,371 -> 157,916 | ||
236 | 640,758 -> 983,758 | ||
237 | 906,413 -> 906,776 | ||
238 | 224,842 -> 627,439 | ||
239 | 903,728 -> 903,459 | ||
240 | 358,138 -> 822,602 | ||
241 | 30,16 -> 929,915 | ||
242 | 440,900 -> 294,900 | ||
243 | 809,73 -> 987,73 | ||
244 | 55,410 -> 304,161 | ||
245 | 441,672 -> 315,672 | ||
246 | 939,40 -> 234,40 | ||
247 | 334,698 -> 309,698 | ||
248 | 572,738 -> 572,226 | ||
249 | 445,71 -> 445,468 | ||
250 | 225,660 -> 427,458 | ||
251 | 390,320 -> 449,320 | ||
252 | 507,635 -> 507,169 | ||
253 | 47,116 -> 738,807 | ||
254 | 127,14 -> 689,14 | ||
255 | 316,760 -> 316,432 | ||
256 | 831,101 -> 250,682 | ||
257 | 370,807 -> 370,898 | ||
258 | 678,186 -> 491,186 | ||
259 | 866,83 -> 539,83 | ||
260 | 518,848 -> 518,962 | ||
261 | 188,135 -> 81,28 | ||
262 | 378,226 -> 597,226 | ||
263 | 646,534 -> 141,534 | ||
264 | 275,672 -> 275,854 | ||
265 | 67,421 -> 676,421 | ||
266 | 386,323 -> 988,323 | ||
267 | 903,984 -> 10,91 | ||
268 | 37,348 -> 529,840 | ||
269 | 872,134 -> 358,648 | ||
270 | 42,826 -> 42,822 | ||
271 | 688,922 -> 21,922 | ||
272 | 47,539 -> 942,539 | ||
273 | 739,483 -> 375,847 | ||
274 | 23,217 -> 800,217 | ||
275 | 589,512 -> 589,953 | ||
276 | 292,229 -> 107,229 | ||
277 | 873,678 -> 873,770 | ||
278 | 794,295 -> 739,240 | ||
279 | 464,559 -> 936,559 | ||
280 | 685,736 -> 368,736 | ||
281 | 114,941 -> 114,307 | ||
282 | 571,643 -> 74,643 | ||
283 | 281,185 -> 273,177 | ||
284 | 497,937 -> 497,469 | ||
285 | 152,815 -> 702,815 | ||
286 | 76,43 -> 980,947 | ||
287 | 272,149 -> 101,149 | ||
288 | 934,945 -> 107,118 | ||
289 | 532,476 -> 759,476 | ||
290 | 955,942 -> 397,942 | ||
291 | 31,918 -> 931,18 | ||
292 | 790,420 -> 389,420 | ||
293 | 36,496 -> 215,317 | ||
294 | 252,209 -> 139,209 | ||
295 | 704,148 -> 719,133 | ||
296 | 413,571 -> 165,571 | ||
297 | 690,433 -> 864,607 | ||
298 | 976,417 -> 517,876 | ||
299 | 803,568 -> 443,568 | ||
300 | 335,558 -> 335,334 | ||
301 | 405,807 -> 691,521 | ||
302 | 194,482 -> 486,190 | ||
303 | 377,856 -> 377,802 | ||
304 | 313,842 -> 313,254 | ||
305 | 449,961 -> 198,710 | ||
306 | 197,916 -> 197,797 | ||
307 | 82,965 -> 959,88 | ||
308 | 371,239 -> 829,697 | ||
309 | 471,70 -> 596,70 | ||
310 | 835,144 -> 835,950 | ||
311 | 283,486 -> 506,486 | ||
312 | 147,29 -> 147,747 | ||
313 | 187,485 -> 187,195 | ||
314 | 781,144 -> 480,144 | ||
315 | 801,839 -> 925,715 | ||
316 | 415,960 -> 415,442 | ||
317 | 877,939 -> 29,91 | ||
318 | 22,118 -> 22,439 | ||
319 | 460,315 -> 450,315 | ||
320 | 982,960 -> 71,49 | ||
321 | 105,231 -> 105,331 | ||
322 | 98,174 -> 551,174 | ||
323 | 721,978 -> 38,295 | ||
324 | 167,290 -> 167,133 | ||
325 | 218,158 -> 218,908 | ||
326 | 819,812 -> 758,812 | ||
327 | 123,92 -> 123,132 | ||
328 | 66,721 -> 66,906 | ||
329 | 478,441 -> 967,930 | ||
330 | 284,58 -> 464,58 | ||
331 | 958,15 -> 37,936 | ||
332 | 310,337 -> 359,288 | ||
333 | 212,763 -> 212,373 | ||
334 | 101,279 -> 101,267 | ||
335 | 622,409 -> 106,925 | ||
336 | 318,657 -> 318,432 | ||
337 | 938,631 -> 938,650 | ||
338 | 142,881 -> 254,881 | ||
339 | 848,987 -> 848,451 | ||
340 | 686,223 -> 481,223 | ||
341 | 124,248 -> 812,248 | ||
342 | 246,267 -> 246,148 | ||
343 | 96,670 -> 324,442 | ||
344 | 645,888 -> 385,628 | ||
345 | 417,555 -> 417,858 | ||
346 | 543,495 -> 543,150 | ||
347 | 73,350 -> 440,717 | ||
348 | 459,704 -> 459,179 | ||
349 | 871,493 -> 871,764 | ||
350 | 911,34 -> 64,881 | ||
351 | 544,791 -> 703,791 | ||
352 | 447,218 -> 62,218 | ||
353 | 202,649 -> 396,649 | ||
354 | 935,916 -> 55,36 | ||
355 | 124,408 -> 477,761 | ||
356 | 608,850 -> 484,850 | ||
357 | 935,876 -> 582,876 | ||
358 | 377,612 -> 269,612 | ||
359 | 413,727 -> 365,679 | ||
360 | 64,451 -> 850,451 | ||
361 | 684,807 -> 357,807 | ||
362 | 323,364 -> 372,364 | ||
363 | 887,300 -> 419,300 | ||
364 | 837,831 -> 837,927 | ||
365 | 294,255 -> 768,729 | ||
366 | 878,23 -> 141,760 | ||
367 | 36,627 -> 157,627 | ||
368 | 824,703 -> 824,968 | ||
369 | 356,109 -> 657,109 | ||
370 | 799,266 -> 313,752 | ||
371 | 71,600 -> 650,21 | ||
372 | 564,863 -> 564,54 | ||
373 | 36,720 -> 109,720 | ||
374 | 318,488 -> 682,488 | ||
375 | 249,350 -> 979,350 | ||
376 | 560,502 -> 255,502 | ||
377 | 132,327 -> 132,246 | ||
378 | 287,906 -> 791,906 | ||
379 | 818,110 -> 818,882 | ||
380 | 937,17 -> 113,841 | ||
381 | 50,710 -> 673,87 | ||
382 | 702,952 -> 702,533 | ||
383 | 666,552 -> 611,552 | ||
384 | 612,962 -> 112,462 | ||
385 | 260,529 -> 351,529 | ||
386 | 440,313 -> 440,663 | ||
387 | 605,341 -> 405,141 | ||
388 | 277,287 -> 461,287 | ||
389 | 268,890 -> 268,92 | ||
390 | 764,526 -> 877,639 | ||
391 | 165,697 -> 832,697 | ||
392 | 240,716 -> 801,155 | ||
393 | 872,429 -> 578,429 | ||
394 | 88,816 -> 338,816 | ||
395 | 981,881 -> 981,138 | ||
396 | 457,351 -> 457,679 | ||
397 | 850,526 -> 850,447 | ||
398 | 139,449 -> 165,449 | ||
399 | 127,544 -> 127,934 | ||
400 | 160,890 -> 745,305 | ||
401 | 526,113 -> 303,336 | ||
402 | 17,500 -> 17,621 | ||
403 | 796,311 -> 181,926 | ||
404 | 260,218 -> 787,218 | ||
405 | 536,989 -> 536,261 | ||
406 | 257,826 -> 257,180 | ||
407 | 531,37 -> 531,493 | ||
408 | 961,942 -> 206,187 | ||
409 | 536,668 -> 536,868 | ||
410 | 154,967 -> 154,931 | ||
411 | 808,317 -> 808,873 | ||
412 | 487,258 -> 599,258 | ||
413 | 59,962 -> 802,219 | ||
414 | 322,945 -> 322,837 | ||
415 | 378,973 -> 33,628 | ||
416 | 668,556 -> 691,556 | ||
417 | 819,728 -> 787,728 | ||
418 | 484,261 -> 484,874 | ||
419 | 333,271 -> 278,271 | ||
420 | 733,515 -> 741,523 | ||
421 | 775,854 -> 523,602 | ||
422 | 67,215 -> 616,215 | ||
423 | 951,685 -> 951,433 | ||
424 | 372,105 -> 372,494 | ||
425 | 917,788 -> 917,23 | ||
426 | 890,584 -> 245,584 | ||
427 | 748,276 -> 893,276 | ||
428 | 733,721 -> 733,747 | ||
429 | 225,908 -> 897,908 | ||
430 | 437,140 -> 423,140 | ||
431 | 456,513 -> 136,833 | ||
432 | 413,135 -> 413,596 | ||
433 | 143,245 -> 879,981 | ||
434 | 870,639 -> 942,639 | ||
435 | 28,175 -> 696,843 | ||
436 | 393,303 -> 393,197 | ||
437 | 169,986 -> 458,986 | ||
438 | 43,44 -> 952,953 | ||
439 | 236,405 -> 60,229 | ||
440 | 266,845 -> 292,845 | ||
441 | 529,98 -> 95,532 | ||
442 | 95,658 -> 695,658 | ||
443 | 368,454 -> 112,710 | ||
444 | 506,776 -> 662,776 | ||
445 | 928,494 -> 604,170 | ||
446 | 179,138 -> 900,859 | ||
447 | 45,560 -> 408,197 | ||
448 | 655,654 -> 37,36 | ||
449 | 56,432 -> 56,456 | ||
450 | 844,614 -> 844,898 | ||
451 | 240,191 -> 240,112 | ||
452 | 639,911 -> 213,911 | ||
453 | 47,887 -> 830,104 | ||
454 | 57,50 -> 977,970 | ||
455 | 899,928 -> 111,928 | ||
456 | 962,676 -> 962,518 | ||
457 | 129,585 -> 469,245 | ||
458 | 988,775 -> 988,553 | ||
459 | 417,344 -> 842,769 | ||
460 | 468,110 -> 506,72 | ||
461 | 687,204 -> 687,345 | ||
462 | 828,553 -> 765,490 | ||
463 | 75,894 -> 75,93 | ||
464 | 26,798 -> 11,783 | ||
465 | 967,44 -> 967,478 | ||
466 | 240,481 -> 947,481 | ||
467 | 794,254 -> 162,254 | ||
468 | 502,944 -> 812,944 | ||
469 | 331,417 -> 410,417 | ||
470 | 850,275 -> 850,980 | ||
471 | 671,130 -> 671,941 | ||
472 | 240,99 -> 240,381 | ||
473 | 771,399 -> 318,399 | ||
474 | 946,11 -> 28,929 | ||
475 | 731,939 -> 824,846 | ||
476 | 268,71 -> 832,635 | ||
477 | 968,37 -> 968,642 | ||
478 | 935,365 -> 515,365 | ||
479 | 199,792 -> 932,792 | ||
480 | 32,116 -> 371,116 | ||
481 | 324,67 -> 941,67 | ||
482 | 453,181 -> 453,128 | ||
483 | 958,982 -> 115,139 | ||
484 | 962,168 -> 154,976 | ||
485 | 474,215 -> 333,215 | ||
486 | 458,675 -> 458,315 | ||
487 | 577,302 -> 300,302 | ||
488 | 704,493 -> 704,876 | ||
489 | 887,549 -> 887,439 | ||
490 | 81,328 -> 724,328 | ||
491 | 575,490 -> 670,490 | ||
492 | 576,17 -> 576,218 | ||
493 | 21,46 -> 963,988 | ||
494 | 532,235 -> 532,615 | ||
495 | 796,213 -> 796,407 | ||
496 | 55,948 -> 980,23 | ||
497 | 775,471 -> 272,471 | ||
498 | 26,138 -> 344,138 | ||
499 | 635,518 -> 915,518 | ||
500 | 727,365 -> 727,216 | ||
diff --git a/day5/src/main.rs b/day5/src/main.rs new file mode 100644 index 0000000..e55b244 --- /dev/null +++ b/day5/src/main.rs | |||
@@ -0,0 +1,136 @@ | |||
1 | use std::fs; | ||
2 | use std::path::Path; | ||
3 | use regex::Regex; | ||
4 | use lazy_static::lazy_static; | ||
5 | |||
6 | #[derive(Debug,PartialEq)] | ||
7 | struct Segment(u32,u32,u32,u32); | ||
8 | |||
9 | impl Segment { | ||
10 | fn is_hor(&self) -> bool { | ||
11 | self.1 == self.3 | ||
12 | } | ||
13 | fn is_ver(&self) -> bool { | ||
14 | self.0 == self.2 | ||
15 | } | ||
16 | } | ||
17 | |||
18 | /* AOC21 Day 7: https://adventofcode.com/2021/day/7 */ | ||
19 | fn main() { | ||
20 | let input = Path::new("resources").join("input.txt"); | ||
21 | let content = fs::read_to_string(input).expect("Unable to read input file"); | ||
22 | let (size, segments) = parse_input(&content); | ||
23 | let area = radar(&segments, size, false); | ||
24 | println!("Ex1: The result is: {}", area.iter().filter(|&&c| c > 1).count()); | ||
25 | let area = radar(&segments, size, true); | ||
26 | println!("Ex2: The result is: {}", area.iter().filter(|&&c| c > 1).count()); | ||
27 | } | ||
28 | |||
29 | fn radar(segments: &[Segment], size: u32, diagonals: bool) -> Vec<u32> { | ||
30 | let mut area = vec![0;(size+1).pow(2) as usize]; | ||
31 | segments.iter().for_each( | ||
32 | |s| match s { | ||
33 | s if s.is_hor() => { | ||
34 | range(s.0, s.2).iter().for_each(|x| area[((size+1)*s.1 + x) as usize] += 1) | ||
35 | }, | ||
36 | s if s.is_ver() => { | ||
37 | range(s.1, s.3).iter().for_each(|y| area[((size+1)*y + s.0) as usize] += 1) | ||
38 | }, | ||
39 | s => { | ||
40 | if diagonals { | ||
41 | range(s.0,s.2).iter().zip(range(s.1,s.3)).for_each(|(x,y)| area[((size+1)*y + x) as usize] += 1) | ||
42 | } | ||
43 | } | ||
44 | } | ||
45 | ); | ||
46 | area | ||
47 | } | ||
48 | |||
49 | fn parse_input(s: &str) -> (u32, Vec<Segment>) { | ||
50 | lazy_static! { | ||
51 | static ref RE: Regex = Regex::new(r"^(\d+),(\d+) -> (\d+),(\d+)$").unwrap(); | ||
52 | } | ||
53 | let mut max = 0; | ||
54 | let segs = s.lines().map(|l| { | ||
55 | let caps = RE.captures(l).expect("Malformed input"); | ||
56 | let x1 = caps.get(1).unwrap().as_str().parse().expect("Malformed input"); | ||
57 | let y1 = caps.get(2).unwrap().as_str().parse().expect("Malformed input"); | ||
58 | let x2 = caps.get(3).unwrap().as_str().parse().expect("Malformed input"); | ||
59 | let y2 = caps.get(4).unwrap().as_str().parse().expect("Malformed input"); | ||
60 | max = *[x1, x2, y1, y2, max].iter().max().unwrap(); | ||
61 | Segment(x1, y1, x2, y2) | ||
62 | }).collect(); | ||
63 | (max, segs) | ||
64 | } | ||
65 | |||
66 | fn range(from: u32, to: u32) -> Vec<u32> { | ||
67 | if from < to { | ||
68 | (from..=to).collect() | ||
69 | } else { | ||
70 | (to..=from).rev().collect() | ||
71 | } | ||
72 | } | ||
73 | |||
74 | #[cfg(test)] | ||
75 | mod tests { | ||
76 | use super::*; | ||
77 | |||
78 | const INPUT: &str = "0,9 -> 5,9 | ||
79 | 8,0 -> 0,8 | ||
80 | 9,4 -> 3,4 | ||
81 | 2,2 -> 2,1 | ||
82 | 7,0 -> 7,4 | ||
83 | 6,4 -> 2,0 | ||
84 | 0,9 -> 2,9 | ||
85 | 3,4 -> 1,4 | ||
86 | 0,0 -> 8,8 | ||
87 | 5,5 -> 8,2"; | ||
88 | |||
89 | #[test] | ||
90 | fn input_parsing() { | ||
91 | let (size, segments) = parse_input(INPUT); | ||
92 | assert_eq!(9,size); | ||
93 | assert_eq!(vec![ | ||
94 | Segment(0,9,5,9), | ||
95 | Segment(8,0,0,8), | ||
96 | Segment(9,4,3,4), | ||
97 | Segment(2,2,2,1), | ||
98 | Segment(7,0,7,4), | ||
99 | Segment(6,4,2,0), | ||
100 | Segment(0,9,2,9), | ||
101 | Segment(3,4,1,4), | ||
102 | Segment(0,0,8,8), | ||
103 | Segment(5,5,8,2), | ||
104 | ],segments); | ||
105 | } | ||
106 | |||
107 | #[test] | ||
108 | fn examples() { | ||
109 | let (size, segments) = parse_input(INPUT); | ||
110 | assert_eq!(vec![ | ||
111 | 0,0,0,0,0,0,0,1,0,0, | ||
112 | 0,0,1,0,0,0,0,1,0,0, | ||
113 | 0,0,1,0,0,0,0,1,0,0, | ||
114 | 0,0,0,0,0,0,0,1,0,0, | ||
115 | 0,1,1,2,1,1,1,2,1,1, | ||
116 | 0,0,0,0,0,0,0,0,0,0, | ||
117 | 0,0,0,0,0,0,0,0,0,0, | ||
118 | 0,0,0,0,0,0,0,0,0,0, | ||
119 | 0,0,0,0,0,0,0,0,0,0, | ||
120 | 2,2,2,1,1,1,0,0,0,0 | ||
121 | ], radar(&segments, size, false)); | ||
122 | assert_eq!(vec![ | ||
123 | 1,0,1,0,0,0,0,1,1,0, | ||
124 | 0,1,1,1,0,0,0,2,0,0, | ||
125 | 0,0,2,0,1,0,1,1,1,0, | ||
126 | 0,0,0,1,0,2,0,2,0,0, | ||
127 | 0,1,1,2,3,1,3,2,1,1, | ||
128 | 0,0,0,1,0,2,0,0,0,0, | ||
129 | 0,0,1,0,0,0,1,0,0,0, | ||
130 | 0,1,0,0,0,0,0,1,0,0, | ||
131 | 1,0,0,0,0,0,0,0,1,0, | ||
132 | 2,2,2,1,1,1,0,0,0,0 | ||
133 | ], radar(&segments, size, true)) | ||
134 | } | ||
135 | |||
136 | } | ||