diff --git a/05/input.txt b/05/input.txt new file mode 100644 index 0000000..1385e09 --- /dev/null +++ b/05/input.txt @@ -0,0 +1,500 @@ +452,244 -> 452,303 +958,109 -> 958,639 +809,31 -> 778,31 +927,139 -> 917,139 +56,298 -> 273,298 +959,53 -> 959,739 +80,255 -> 434,255 +750,500 -> 73,500 +528,920 -> 428,820 +455,552 -> 289,718 +800,363 -> 800,25 +688,745 -> 688,696 +364,41 -> 364,351 +693,642 -> 693,67 +564,143 -> 755,143 +622,682 -> 622,869 +311,515 -> 311,120 +210,255 -> 210,363 +66,550 -> 540,550 +243,485 -> 381,623 +321,712 -> 680,712 +549,501 -> 70,22 +357,893 -> 823,893 +797,882 -> 536,621 +389,724 -> 389,329 +859,75 -> 859,591 +195,618 -> 161,618 +508,668 -> 974,202 +543,871 -> 889,525 +99,659 -> 371,387 +602,553 -> 547,553 +98,930 -> 98,683 +741,522 -> 895,522 +143,636 -> 683,636 +56,751 -> 56,555 +696,117 -> 784,117 +625,827 -> 277,827 +908,633 -> 213,633 +482,290 -> 256,290 +717,566 -> 717,923 +258,34 -> 728,34 +862,54 -> 862,869 +57,983 -> 987,53 +749,712 -> 715,678 +342,291 -> 147,291 +48,308 -> 48,600 +44,749 -> 823,749 +671,533 -> 944,533 +848,804 -> 315,804 +960,310 -> 980,310 +730,426 -> 730,330 +85,633 -> 690,28 +432,791 -> 692,531 +217,128 -> 217,763 +205,275 -> 781,851 +207,329 -> 201,329 +338,724 -> 338,783 +434,89 -> 501,89 +812,298 -> 812,480 +299,190 -> 752,190 +441,301 -> 441,872 +643,913 -> 643,21 +518,204 -> 518,442 +730,601 -> 930,601 +352,268 -> 766,268 +444,55 -> 444,372 +240,914 -> 656,498 +507,858 -> 507,581 +246,805 -> 805,805 +955,960 -> 381,386 +828,128 -> 818,128 +218,775 -> 557,436 +896,529 -> 173,529 +523,338 -> 581,338 +972,203 -> 770,203 +515,635 -> 728,848 +852,380 -> 852,469 +963,829 -> 688,829 +320,161 -> 234,161 +517,531 -> 919,933 +971,75 -> 578,75 +244,666 -> 244,308 +640,311 -> 164,787 +373,311 -> 373,611 +50,784 -> 653,181 +770,93 -> 96,767 +30,19 -> 887,876 +964,860 -> 447,343 +436,645 -> 436,813 +10,11 -> 982,983 +907,638 -> 907,979 +453,864 -> 453,246 +578,132 -> 757,132 +55,456 -> 548,456 +127,626 -> 493,626 +816,14 -> 748,14 +938,873 -> 938,478 +315,374 -> 902,961 +137,386 -> 137,478 +121,954 -> 702,373 +92,874 -> 714,252 +521,660 -> 34,660 +677,401 -> 531,401 +55,278 -> 331,278 +400,263 -> 426,237 +236,974 -> 236,545 +579,30 -> 579,198 +886,257 -> 320,823 +53,67 -> 922,936 +374,773 -> 470,773 +241,115 -> 241,61 +206,252 -> 519,565 +388,617 -> 388,778 +423,315 -> 978,315 +616,759 -> 174,317 +770,511 -> 770,487 +118,258 -> 309,258 +320,908 -> 320,433 +71,358 -> 50,337 +37,461 -> 175,323 +374,758 -> 374,96 +268,139 -> 268,785 +72,484 -> 364,484 +937,286 -> 574,286 +554,602 -> 554,475 +677,863 -> 245,863 +975,33 -> 54,954 +557,960 -> 560,957 +989,892 -> 175,78 +447,47 -> 830,430 +407,718 -> 634,945 +418,304 -> 418,103 +890,278 -> 890,915 +449,619 -> 243,825 +798,661 -> 137,661 +796,251 -> 67,980 +122,88 -> 122,518 +505,407 -> 695,217 +447,961 -> 447,524 +608,708 -> 390,708 +110,636 -> 878,636 +376,517 -> 376,409 +400,213 -> 767,213 +369,220 -> 369,203 +141,934 -> 921,154 +808,243 -> 808,983 +529,923 -> 529,438 +399,324 -> 350,324 +632,83 -> 276,83 +254,632 -> 812,74 +981,594 -> 453,594 +30,893 -> 472,893 +22,355 -> 614,355 +519,732 -> 519,911 +392,425 -> 392,710 +987,953 -> 987,82 +519,108 -> 370,108 +52,897 -> 52,449 +17,83 -> 913,979 +612,305 -> 118,799 +225,365 -> 225,639 +878,928 -> 45,95 +238,279 -> 908,279 +352,27 -> 352,572 +72,11 -> 347,286 +332,195 -> 332,189 +273,726 -> 204,726 +401,817 -> 498,817 +118,170 -> 118,675 +924,868 -> 528,472 +721,948 -> 886,948 +735,379 -> 331,379 +256,298 -> 256,187 +600,886 -> 314,886 +937,275 -> 937,385 +840,777 -> 92,29 +844,96 -> 844,691 +833,597 -> 833,762 +475,138 -> 475,207 +32,984 -> 675,984 +101,528 -> 101,497 +884,399 -> 302,981 +178,124 -> 670,616 +363,84 -> 527,84 +744,784 -> 336,784 +588,963 -> 588,543 +298,525 -> 626,525 +610,496 -> 265,496 +648,294 -> 460,106 +859,646 -> 859,867 +469,48 -> 987,566 +273,689 -> 103,859 +556,745 -> 440,745 +44,923 -> 941,26 +569,777 -> 781,565 +791,408 -> 276,923 +289,185 -> 289,608 +866,783 -> 760,783 +302,153 -> 420,35 +45,545 -> 479,979 +309,54 -> 850,54 +36,48 -> 973,985 +698,671 -> 129,102 +778,339 -> 587,339 +114,566 -> 114,621 +747,450 -> 583,286 +558,698 -> 558,912 +60,43 -> 987,970 +770,243 -> 770,490 +58,811 -> 58,131 +839,364 -> 839,614 +833,633 -> 833,208 +685,441 -> 600,526 +919,894 -> 769,894 +478,799 -> 601,922 +957,957 -> 237,957 +472,169 -> 472,96 +269,185 -> 269,117 +582,187 -> 582,460 +243,506 -> 722,506 +702,191 -> 125,768 +542,63 -> 542,398 +379,222 -> 920,763 +930,658 -> 930,724 +524,33 -> 524,739 +987,949 -> 50,12 +976,71 -> 852,71 +46,59 -> 921,934 +906,526 -> 906,623 +621,455 -> 621,590 +954,55 -> 954,499 +740,52 -> 740,448 +185,959 -> 937,207 +563,349 -> 261,651 +852,938 -> 114,938 +972,22 -> 16,978 +249,142 -> 199,142 +282,469 -> 282,831 +667,686 -> 685,686 +901,95 -> 901,578 +186,903 -> 336,903 +662,248 -> 99,811 +485,248 -> 833,248 +12,154 -> 734,154 +87,270 -> 760,270 +926,191 -> 799,191 +796,793 -> 451,448 +443,292 -> 625,292 +944,62 -> 944,859 +988,489 -> 374,489 +693,279 -> 693,55 +893,617 -> 893,247 +168,905 -> 910,905 +850,429 -> 773,429 +943,13 -> 364,13 +409,880 -> 409,806 +620,646 -> 567,699 +194,949 -> 194,660 +775,682 -> 775,456 +741,161 -> 581,161 +889,91 -> 42,938 +725,495 -> 273,43 +211,22 -> 897,22 +314,604 -> 562,604 +299,193 -> 914,193 +240,388 -> 612,16 +367,752 -> 367,114 +330,34 -> 931,34 +809,909 -> 809,757 +912,140 -> 224,140 +545,804 -> 503,804 +848,758 -> 848,638 +917,226 -> 538,226 +43,34 -> 43,97 +47,54 -> 47,435 +32,52 -> 843,863 +200,361 -> 398,163 +466,388 -> 705,388 +928,127 -> 104,951 +869,940 -> 869,787 +697,563 -> 167,563 +754,828 -> 754,141 +661,100 -> 968,100 +582,44 -> 582,182 +876,550 -> 876,268 +737,240 -> 27,950 +664,730 -> 633,730 +244,805 -> 228,805 +226,605 -> 211,605 +911,524 -> 548,524 +814,256 -> 889,181 +432,944 -> 432,235 +445,25 -> 445,499 +233,619 -> 91,477 +151,248 -> 880,977 +267,149 -> 317,149 +968,346 -> 968,371 +665,617 -> 665,770 +518,625 -> 518,579 +451,458 -> 628,635 +764,442 -> 255,442 +240,363 -> 680,803 +443,153 -> 863,153 +674,880 -> 973,581 +876,236 -> 876,817 +569,335 -> 569,907 +74,400 -> 74,679 +495,804 -> 827,472 +182,76 -> 832,726 +376,370 -> 986,370 +986,233 -> 541,233 +386,379 -> 386,837 +624,637 -> 454,637 +844,866 -> 179,201 +392,89 -> 627,89 +559,326 -> 525,326 +681,188 -> 418,188 +796,386 -> 796,637 +35,72 -> 952,989 +735,873 -> 407,873 +756,238 -> 328,238 +872,284 -> 394,284 +157,873 -> 243,873 +621,657 -> 913,657 +13,42 -> 13,598 +831,725 -> 831,270 +944,51 -> 87,908 +409,820 -> 913,316 +250,323 -> 622,323 +435,397 -> 435,409 +691,198 -> 691,952 +302,352 -> 872,352 +370,790 -> 362,790 +114,74 -> 926,74 +561,273 -> 561,169 +240,658 -> 240,584 +677,357 -> 557,477 +480,796 -> 544,732 +981,568 -> 319,568 +63,928 -> 957,34 +715,145 -> 81,779 +918,554 -> 292,554 +943,550 -> 943,23 +425,477 -> 277,329 +428,718 -> 428,612 +213,647 -> 244,616 +549,610 -> 549,39 +433,330 -> 433,922 +903,921 -> 148,166 +357,706 -> 913,150 +990,254 -> 990,368 +937,47 -> 937,34 +868,86 -> 260,694 +919,905 -> 140,126 +256,918 -> 980,194 +880,346 -> 331,895 +706,392 -> 706,328 +283,986 -> 758,511 +967,106 -> 123,106 +486,92 -> 486,47 +298,338 -> 888,928 +665,767 -> 987,767 +139,898 -> 139,94 +257,808 -> 257,388 +865,631 -> 865,624 +168,913 -> 168,984 +848,936 -> 197,285 +195,249 -> 764,249 +117,900 -> 249,900 +813,130 -> 10,933 +693,81 -> 693,554 +595,448 -> 987,840 +293,140 -> 904,751 +198,289 -> 234,289 +714,671 -> 989,396 +161,600 -> 161,465 +458,955 -> 807,955 +485,124 -> 485,835 +352,911 -> 691,911 +896,949 -> 103,156 +618,171 -> 618,847 +563,887 -> 44,887 +293,801 -> 293,492 +903,714 -> 651,714 +959,18 -> 265,712 +28,134 -> 851,957 +888,374 -> 647,374 +184,566 -> 184,411 +977,244 -> 926,193 +864,189 -> 427,626 +687,262 -> 700,275 +86,82 -> 891,887 +517,779 -> 517,599 +850,59 -> 256,653 +595,352 -> 595,142 +62,191 -> 618,747 +56,395 -> 124,463 +902,138 -> 418,138 +603,131 -> 185,549 +446,546 -> 446,397 +278,788 -> 916,788 +153,19 -> 707,573 +580,468 -> 502,390 +278,794 -> 447,963 +260,495 -> 315,550 +648,392 -> 726,392 +232,457 -> 633,858 +475,697 -> 740,697 +526,186 -> 526,588 +868,287 -> 868,668 +88,57 -> 88,984 +539,963 -> 539,859 +499,214 -> 963,678 +105,16 -> 937,848 +566,158 -> 566,26 +675,915 -> 675,555 +702,123 -> 360,123 +37,47 -> 120,130 +826,787 -> 79,787 +232,33 -> 833,634 +455,775 -> 455,919 +300,488 -> 300,92 +36,84 -> 36,514 +700,916 -> 700,391 +710,585 -> 710,14 +989,938 -> 120,69 +437,514 -> 437,277 +400,358 -> 400,623 +482,908 -> 802,908 +869,842 -> 53,26 +531,560 -> 180,560 +18,312 -> 18,223 +541,888 -> 541,438 +631,751 -> 631,238 +820,208 -> 192,836 +976,453 -> 561,38 +118,544 -> 318,744 +283,818 -> 283,138 +876,623 -> 327,623 +11,855 -> 283,855 +438,460 -> 145,167 +788,379 -> 250,379 +376,130 -> 890,130 +616,747 -> 538,825 +906,403 -> 906,306 +710,371 -> 710,200 +871,917 -> 629,917 +751,103 -> 345,103 +374,608 -> 641,608 +481,902 -> 198,902 +512,686 -> 590,764 +187,134 -> 949,896 +628,58 -> 170,516 +54,370 -> 23,401 +391,718 -> 523,718 +617,637 -> 448,637 +108,208 -> 233,208 +57,478 -> 633,478 +122,693 -> 734,693 +980,537 -> 980,639 +134,448 -> 134,439 +81,812 -> 515,812 +483,133 -> 215,133 +68,250 -> 68,476 +204,101 -> 204,934 +525,626 -> 924,227 +783,519 -> 373,929 +813,166 -> 813,837 +12,988 -> 988,12 +49,180 -> 46,180 +782,585 -> 782,194 +798,98 -> 459,437 +904,83 -> 333,654 +404,417 -> 404,819 +289,228 -> 431,86 +281,876 -> 964,193 +66,15 -> 66,570 +134,159 -> 784,809 +356,684 -> 442,598 +211,624 -> 572,624 +19,985 -> 986,18 +978,429 -> 978,791 +181,955 -> 832,304 +566,859 -> 566,281 +391,232 -> 535,232 +798,848 -> 17,67 +530,203 -> 530,932 +502,562 -> 287,562 +710,499 -> 451,758 +886,420 -> 163,420 +858,289 -> 632,515 +939,441 -> 939,280 +293,220 -> 444,220 +363,676 -> 159,676 +983,24 -> 46,961 +725,585 -> 154,14 +236,453 -> 467,453 +806,395 -> 806,557 +149,583 -> 149,200 +858,704 -> 858,272 \ No newline at end of file diff --git a/05/solution_1.c b/05/solution_1.c new file mode 100644 index 0000000..4721ee0 --- /dev/null +++ b/05/solution_1.c @@ -0,0 +1,36 @@ +#include + +int main(void) { + FILE *fp = fopen("input.txt", "r"); + unsigned char map[1000][1000] = {0}; + unsigned x0, x1, y0, y1; + unsigned intersections = 0; + + while (fscanf(fp, "%u,%u -> %u,%u", &x0, &y0, &x1, &y1) == 4) { + char inc = 1; + if (x0 == x1) { + if (y0 > y1) + inc = -1; + for (unsigned y = y0; y != y1; y += inc) { + map[x0][y]++; + } + map[x0][y1]++; + } else if (y0 == y1) { + if (x0 > x1) + inc = -1; + for (unsigned x = x0; x != x1; x += inc) { + map[x][y0]++; + } + map[x1][y0]++; + } + } + + for (unsigned y = 0; y < 1000; y++) { + for (unsigned x = 0; x < 1000; x++) { + if (map[x][y] > 1) + intersections++; + } + } + + printf("Answer: %d\n", intersections); +} diff --git a/05/solution_2.c b/05/solution_2.c new file mode 100644 index 0000000..d593176 --- /dev/null +++ b/05/solution_2.c @@ -0,0 +1,41 @@ +#include + +int main(void) { + FILE *fp = fopen("input.txt", "r"); + unsigned char map[1000][1000] = {0}; + unsigned x0, x1, y0, y1; + unsigned intersections = 0; + + while (fscanf(fp, "%u,%u -> %u,%u", &x0, &y0, &x1, &y1) == 4) { + char incY = y0 < y1 ? 1 : -1; + char incX = x0 < x1 ? 1 : -1; + if (x0 == x1) { + for (unsigned y = y0; y != y1; y += incY) { + map[x0][y]++; + } + map[x0][y1]++; + } else if (y0 == y1) { + for (unsigned x = x0; x != x1; x += incX) { + map[x][y0]++; + } + map[x1][y0]++; + } else { + unsigned x = x0, y = y0; + while (x != x1 && y != y1) { + map[x][y]++; + x += incX; + y += incY; + } + map[x][y]++; + } + } + + for (unsigned y = 0; y < 1000; y++) { + for (unsigned x = 0; x < 1000; x++) { + if (map[x][y] > 1) + intersections++; + } + } + + printf("Answer: %d\n", intersections); +}