├── Day1 ├── day1.jl └── input.txt ├── Day10 ├── day10.jl └── input.txt ├── Day11 ├── day11.jl └── input.txt ├── Day12 ├── day12.jl └── input.txt ├── Day13 ├── day13.jl ├── demo.txt └── input.txt ├── Day14 ├── day14.jl ├── demo.txt └── input.txt ├── Day15 ├── day15.jl ├── demo.txt └── input.txt ├── Day16 ├── day16.jl └── input.txt ├── Day17 ├── day17.jl └── input.txt ├── Day2 ├── day2.jl └── input.txt ├── Day3 ├── day3.jl └── input.txt ├── Day4 ├── day4.jl └── input.txt ├── Day5 ├── day5.jl ├── day5_old.jl └── input.txt ├── Day6 ├── day6.jl ├── day6_alternative.jl └── input.txt ├── Day7 ├── day7.jl ├── day7_optimal.jl └── input.txt ├── Day8 ├── day8.jl ├── day8_alternative.jl └── input.txt ├── Day9 ├── day9.jl └── input.txt └── README.md /Day1/day1.jl: -------------------------------------------------------------------------------- 1 | # Data 2 | const data = parse.(Int, readlines(joinpath(@__DIR__, "input.txt"))) 3 | 4 | ## Part 1 ------------------------------------------- 5 | # Solution 6 | sum(1:length(data)-1) do i 7 | data[i+1] > data[i] 8 | end 9 | 10 | # Alternative solution 11 | sum(diff(data) .> 0) 12 | 13 | ## Part 2 ------------------------------------------- 14 | # Solution 15 | sum(1:length(data)-3) do i 16 | sum(data[i+1:i+3]) > sum(data[i:i+2]) 17 | end 18 | 19 | # Alternative solution 20 | # sum([b, c, d]) > sum([a, b, c]) 21 | # d + sum([b, c]) > a + sum([b, c]) 22 | # d > a 23 | sum(1:length(data)-3) do i 24 | data[i+3] > data[i] 25 | end 26 | -------------------------------------------------------------------------------- /Day1/input.txt: -------------------------------------------------------------------------------- 1 | 189 2 | 190 3 | 199 4 | 197 5 | 200 6 | 201 7 | 199 8 | 216 9 | 224 10 | 239 11 | 243 12 | 236 13 | 235 14 | 236 15 | 238 16 | 246 17 | 245 18 | 249 19 | 252 20 | 256 21 | 260 22 | 263 23 | 280 24 | 290 25 | 300 26 | 299 27 | 298 28 | 297 29 | 309 30 | 315 31 | 351 32 | 356 33 | 374 34 | 376 35 | 399 36 | 400 37 | 396 38 | 398 39 | 401 40 | 398 41 | 416 42 | 423 43 | 432 44 | 433 45 | 446 46 | 459 47 | 462 48 | 447 49 | 458 50 | 455 51 | 442 52 | 443 53 | 442 54 | 446 55 | 447 56 | 455 57 | 472 58 | 475 59 | 486 60 | 492 61 | 520 62 | 518 63 | 526 64 | 519 65 | 528 66 | 529 67 | 553 68 | 547 69 | 572 70 | 558 71 | 559 72 | 548 73 | 560 74 | 538 75 | 574 76 | 549 77 | 577 78 | 568 79 | 569 80 | 581 81 | 576 82 | 577 83 | 576 84 | 578 85 | 579 86 | 581 87 | 580 88 | 583 89 | 579 90 | 580 91 | 581 92 | 583 93 | 590 94 | 600 95 | 604 96 | 619 97 | 611 98 | 608 99 | 609 100 | 610 101 | 624 102 | 625 103 | 624 104 | 631 105 | 637 106 | 647 107 | 645 108 | 666 109 | 672 110 | 673 111 | 672 112 | 669 113 | 671 114 | 680 115 | 691 116 | 695 117 | 696 118 | 697 119 | 699 120 | 700 121 | 696 122 | 697 123 | 700 124 | 699 125 | 702 126 | 722 127 | 723 128 | 711 129 | 716 130 | 721 131 | 722 132 | 723 133 | 721 134 | 729 135 | 730 136 | 732 137 | 740 138 | 742 139 | 764 140 | 768 141 | 765 142 | 768 143 | 769 144 | 770 145 | 766 146 | 784 147 | 778 148 | 777 149 | 780 150 | 811 151 | 838 152 | 839 153 | 840 154 | 843 155 | 849 156 | 856 157 | 861 158 | 875 159 | 890 160 | 889 161 | 890 162 | 894 163 | 893 164 | 885 165 | 883 166 | 894 167 | 902 168 | 904 169 | 905 170 | 901 171 | 902 172 | 906 173 | 910 174 | 898 175 | 906 176 | 904 177 | 902 178 | 904 179 | 868 180 | 871 181 | 857 182 | 842 183 | 841 184 | 843 185 | 852 186 | 853 187 | 863 188 | 864 189 | 882 190 | 889 191 | 886 192 | 888 193 | 889 194 | 888 195 | 889 196 | 875 197 | 883 198 | 901 199 | 902 200 | 903 201 | 902 202 | 898 203 | 906 204 | 903 205 | 914 206 | 916 207 | 936 208 | 937 209 | 927 210 | 926 211 | 932 212 | 933 213 | 940 214 | 941 215 | 942 216 | 944 217 | 965 218 | 966 219 | 965 220 | 978 221 | 973 222 | 976 223 | 994 224 | 988 225 | 987 226 | 1011 227 | 1010 228 | 1013 229 | 1022 230 | 1021 231 | 1025 232 | 1027 233 | 1037 234 | 1068 235 | 1074 236 | 1073 237 | 1088 238 | 1095 239 | 1096 240 | 1101 241 | 1127 242 | 1128 243 | 1139 244 | 1154 245 | 1150 246 | 1189 247 | 1183 248 | 1186 249 | 1212 250 | 1220 251 | 1226 252 | 1225 253 | 1228 254 | 1229 255 | 1233 256 | 1237 257 | 1238 258 | 1234 259 | 1236 260 | 1234 261 | 1224 262 | 1225 263 | 1236 264 | 1235 265 | 1257 266 | 1272 267 | 1295 268 | 1312 269 | 1307 270 | 1350 271 | 1364 272 | 1365 273 | 1367 274 | 1363 275 | 1369 276 | 1365 277 | 1367 278 | 1380 279 | 1381 280 | 1382 281 | 1398 282 | 1399 283 | 1400 284 | 1401 285 | 1409 286 | 1424 287 | 1429 288 | 1430 289 | 1411 290 | 1379 291 | 1380 292 | 1382 293 | 1383 294 | 1398 295 | 1399 296 | 1396 297 | 1405 298 | 1404 299 | 1401 300 | 1394 301 | 1395 302 | 1404 303 | 1409 304 | 1410 305 | 1412 306 | 1391 307 | 1392 308 | 1398 309 | 1401 310 | 1404 311 | 1413 312 | 1416 313 | 1420 314 | 1428 315 | 1460 316 | 1469 317 | 1464 318 | 1466 319 | 1464 320 | 1472 321 | 1479 322 | 1475 323 | 1482 324 | 1477 325 | 1481 326 | 1480 327 | 1481 328 | 1521 329 | 1509 330 | 1512 331 | 1515 332 | 1531 333 | 1526 334 | 1524 335 | 1543 336 | 1542 337 | 1545 338 | 1557 339 | 1554 340 | 1551 341 | 1557 342 | 1567 343 | 1569 344 | 1574 345 | 1569 346 | 1570 347 | 1572 348 | 1568 349 | 1567 350 | 1589 351 | 1594 352 | 1607 353 | 1608 354 | 1605 355 | 1614 356 | 1617 357 | 1607 358 | 1643 359 | 1648 360 | 1654 361 | 1661 362 | 1676 363 | 1664 364 | 1663 365 | 1670 366 | 1686 367 | 1711 368 | 1712 369 | 1736 370 | 1738 371 | 1737 372 | 1739 373 | 1726 374 | 1736 375 | 1725 376 | 1708 377 | 1707 378 | 1715 379 | 1720 380 | 1714 381 | 1724 382 | 1727 383 | 1728 384 | 1730 385 | 1729 386 | 1730 387 | 1732 388 | 1736 389 | 1731 390 | 1732 391 | 1763 392 | 1764 393 | 1763 394 | 1764 395 | 1765 396 | 1769 397 | 1772 398 | 1798 399 | 1799 400 | 1817 401 | 1826 402 | 1827 403 | 1825 404 | 1824 405 | 1822 406 | 1795 407 | 1785 408 | 1782 409 | 1783 410 | 1774 411 | 1788 412 | 1792 413 | 1794 414 | 1803 415 | 1810 416 | 1815 417 | 1828 418 | 1829 419 | 1846 420 | 1857 421 | 1854 422 | 1853 423 | 1862 424 | 1864 425 | 1839 426 | 1840 427 | 1841 428 | 1845 429 | 1862 430 | 1881 431 | 1888 432 | 1894 433 | 1880 434 | 1879 435 | 1888 436 | 1894 437 | 1907 438 | 1908 439 | 1911 440 | 1903 441 | 1902 442 | 1904 443 | 1906 444 | 1907 445 | 1908 446 | 1907 447 | 1905 448 | 1908 449 | 1910 450 | 1928 451 | 1942 452 | 1948 453 | 1946 454 | 1947 455 | 1952 456 | 1953 457 | 1954 458 | 1963 459 | 1986 460 | 1984 461 | 1981 462 | 1982 463 | 1987 464 | 1990 465 | 1997 466 | 1996 467 | 2027 468 | 2041 469 | 2053 470 | 2054 471 | 2071 472 | 2088 473 | 2061 474 | 2064 475 | 2065 476 | 2053 477 | 2092 478 | 2097 479 | 2103 480 | 2104 481 | 2100 482 | 2089 483 | 2068 484 | 2070 485 | 2081 486 | 2083 487 | 2063 488 | 2062 489 | 2061 490 | 2057 491 | 2063 492 | 2044 493 | 2049 494 | 2050 495 | 2041 496 | 2049 497 | 2031 498 | 2039 499 | 2035 500 | 2028 501 | 2024 502 | 2036 503 | 2037 504 | 2045 505 | 2056 506 | 2061 507 | 2064 508 | 2068 509 | 2048 510 | 2047 511 | 2043 512 | 2046 513 | 2058 514 | 2071 515 | 2070 516 | 2071 517 | 2080 518 | 2085 519 | 2079 520 | 2092 521 | 2093 522 | 2094 523 | 2099 524 | 2109 525 | 2105 526 | 2109 527 | 2110 528 | 2111 529 | 2119 530 | 2131 531 | 2132 532 | 2133 533 | 2126 534 | 2125 535 | 2126 536 | 2124 537 | 2125 538 | 2127 539 | 2128 540 | 2142 541 | 2173 542 | 2189 543 | 2187 544 | 2188 545 | 2189 546 | 2197 547 | 2198 548 | 2199 549 | 2210 550 | 2214 551 | 2215 552 | 2216 553 | 2215 554 | 2247 555 | 2252 556 | 2250 557 | 2261 558 | 2278 559 | 2280 560 | 2277 561 | 2276 562 | 2280 563 | 2300 564 | 2299 565 | 2301 566 | 2297 567 | 2307 568 | 2319 569 | 2343 570 | 2344 571 | 2347 572 | 2353 573 | 2347 574 | 2356 575 | 2354 576 | 2351 577 | 2358 578 | 2380 579 | 2381 580 | 2385 581 | 2381 582 | 2385 583 | 2386 584 | 2387 585 | 2386 586 | 2409 587 | 2407 588 | 2410 589 | 2413 590 | 2416 591 | 2423 592 | 2425 593 | 2415 594 | 2419 595 | 2423 596 | 2409 597 | 2391 598 | 2370 599 | 2371 600 | 2373 601 | 2374 602 | 2368 603 | 2379 604 | 2386 605 | 2391 606 | 2400 607 | 2399 608 | 2415 609 | 2410 610 | 2406 611 | 2410 612 | 2419 613 | 2420 614 | 2423 615 | 2419 616 | 2413 617 | 2403 618 | 2411 619 | 2413 620 | 2421 621 | 2442 622 | 2443 623 | 2416 624 | 2421 625 | 2426 626 | 2435 627 | 2443 628 | 2445 629 | 2442 630 | 2445 631 | 2443 632 | 2444 633 | 2447 634 | 2467 635 | 2484 636 | 2457 637 | 2467 638 | 2465 639 | 2473 640 | 2477 641 | 2476 642 | 2461 643 | 2460 644 | 2443 645 | 2419 646 | 2416 647 | 2417 648 | 2415 649 | 2416 650 | 2417 651 | 2420 652 | 2421 653 | 2425 654 | 2423 655 | 2425 656 | 2428 657 | 2431 658 | 2407 659 | 2408 660 | 2385 661 | 2386 662 | 2388 663 | 2407 664 | 2398 665 | 2400 666 | 2395 667 | 2396 668 | 2431 669 | 2424 670 | 2427 671 | 2430 672 | 2442 673 | 2468 674 | 2469 675 | 2471 676 | 2442 677 | 2453 678 | 2458 679 | 2469 680 | 2470 681 | 2488 682 | 2489 683 | 2491 684 | 2477 685 | 2480 686 | 2484 687 | 2474 688 | 2471 689 | 2473 690 | 2476 691 | 2480 692 | 2484 693 | 2486 694 | 2488 695 | 2492 696 | 2502 697 | 2492 698 | 2494 699 | 2522 700 | 2523 701 | 2522 702 | 2520 703 | 2521 704 | 2534 705 | 2553 706 | 2548 707 | 2559 708 | 2591 709 | 2600 710 | 2598 711 | 2596 712 | 2598 713 | 2580 714 | 2582 715 | 2584 716 | 2577 717 | 2574 718 | 2573 719 | 2579 720 | 2580 721 | 2577 722 | 2586 723 | 2588 724 | 2589 725 | 2594 726 | 2596 727 | 2590 728 | 2606 729 | 2598 730 | 2599 731 | 2612 732 | 2641 733 | 2644 734 | 2649 735 | 2650 736 | 2644 737 | 2666 738 | 2669 739 | 2670 740 | 2665 741 | 2667 742 | 2676 743 | 2679 744 | 2703 745 | 2684 746 | 2683 747 | 2681 748 | 2698 749 | 2731 750 | 2754 751 | 2755 752 | 2747 753 | 2741 754 | 2742 755 | 2738 756 | 2743 757 | 2718 758 | 2719 759 | 2720 760 | 2728 761 | 2731 762 | 2733 763 | 2739 764 | 2740 765 | 2739 766 | 2760 767 | 2759 768 | 2740 769 | 2735 770 | 2737 771 | 2742 772 | 2747 773 | 2758 774 | 2753 775 | 2744 776 | 2737 777 | 2742 778 | 2762 779 | 2775 780 | 2779 781 | 2788 782 | 2803 783 | 2802 784 | 2823 785 | 2827 786 | 2828 787 | 2829 788 | 2828 789 | 2831 790 | 2843 791 | 2847 792 | 2822 793 | 2825 794 | 2828 795 | 2847 796 | 2837 797 | 2854 798 | 2847 799 | 2843 800 | 2841 801 | 2831 802 | 2832 803 | 2845 804 | 2855 805 | 2842 806 | 2847 807 | 2848 808 | 2858 809 | 2850 810 | 2848 811 | 2849 812 | 2853 813 | 2865 814 | 2868 815 | 2873 816 | 2878 817 | 2880 818 | 2881 819 | 2880 820 | 2877 821 | 2875 822 | 2847 823 | 2855 824 | 2868 825 | 2869 826 | 2870 827 | 2872 828 | 2874 829 | 2889 830 | 2886 831 | 2875 832 | 2877 833 | 2889 834 | 2902 835 | 2904 836 | 2898 837 | 2900 838 | 2894 839 | 2893 840 | 2928 841 | 2941 842 | 2942 843 | 2926 844 | 2922 845 | 2936 846 | 2940 847 | 2924 848 | 2905 849 | 2920 850 | 2924 851 | 2933 852 | 2936 853 | 2935 854 | 2931 855 | 2947 856 | 2957 857 | 2978 858 | 2979 859 | 2977 860 | 2973 861 | 2971 862 | 2973 863 | 2991 864 | 2990 865 | 2989 866 | 2992 867 | 3004 868 | 3023 869 | 3009 870 | 3026 871 | 3037 872 | 3041 873 | 3065 874 | 3098 875 | 3101 876 | 3122 877 | 3123 878 | 3118 879 | 3119 880 | 3122 881 | 3148 882 | 3149 883 | 3150 884 | 3155 885 | 3147 886 | 3146 887 | 3165 888 | 3157 889 | 3161 890 | 3162 891 | 3158 892 | 3160 893 | 3163 894 | 3164 895 | 3169 896 | 3170 897 | 3197 898 | 3195 899 | 3194 900 | 3196 901 | 3201 902 | 3200 903 | 3208 904 | 3202 905 | 3204 906 | 3219 907 | 3221 908 | 3226 909 | 3239 910 | 3262 911 | 3263 912 | 3252 913 | 3293 914 | 3294 915 | 3296 916 | 3297 917 | 3308 918 | 3299 919 | 3309 920 | 3292 921 | 3266 922 | 3274 923 | 3276 924 | 3284 925 | 3285 926 | 3286 927 | 3297 928 | 3304 929 | 3312 930 | 3313 931 | 3308 932 | 3325 933 | 3319 934 | 3322 935 | 3323 936 | 3328 937 | 3335 938 | 3337 939 | 3348 940 | 3350 941 | 3351 942 | 3353 943 | 3364 944 | 3365 945 | 3387 946 | 3406 947 | 3415 948 | 3414 949 | 3410 950 | 3411 951 | 3405 952 | 3421 953 | 3426 954 | 3441 955 | 3442 956 | 3446 957 | 3413 958 | 3414 959 | 3416 960 | 3417 961 | 3411 962 | 3412 963 | 3417 964 | 3422 965 | 3428 966 | 3430 967 | 3425 968 | 3436 969 | 3432 970 | 3436 971 | 3450 972 | 3448 973 | 3451 974 | 3452 975 | 3466 976 | 3482 977 | 3477 978 | 3475 979 | 3471 980 | 3473 981 | 3472 982 | 3473 983 | 3474 984 | 3472 985 | 3488 986 | 3493 987 | 3499 988 | 3500 989 | 3502 990 | 3518 991 | 3493 992 | 3518 993 | 3522 994 | 3523 995 | 3525 996 | 3529 997 | 3535 998 | 3532 999 | 3543 1000 | 3554 1001 | 3546 1002 | 3531 1003 | 3535 1004 | 3540 1005 | 3541 1006 | 3542 1007 | 3540 1008 | 3570 1009 | 3575 1010 | 3576 1011 | 3579 1012 | 3577 1013 | 3578 1014 | 3589 1015 | 3582 1016 | 3580 1017 | 3585 1018 | 3584 1019 | 3580 1020 | 3581 1021 | 3582 1022 | 3584 1023 | 3566 1024 | 3558 1025 | 3567 1026 | 3590 1027 | 3591 1028 | 3592 1029 | 3594 1030 | 3593 1031 | 3594 1032 | 3623 1033 | 3616 1034 | 3640 1035 | 3642 1036 | 3645 1037 | 3635 1038 | 3637 1039 | 3635 1040 | 3627 1041 | 3625 1042 | 3621 1043 | 3620 1044 | 3613 1045 | 3605 1046 | 3606 1047 | 3607 1048 | 3608 1049 | 3609 1050 | 3610 1051 | 3616 1052 | 3617 1053 | 3621 1054 | 3617 1055 | 3619 1056 | 3620 1057 | 3622 1058 | 3655 1059 | 3652 1060 | 3655 1061 | 3656 1062 | 3668 1063 | 3671 1064 | 3673 1065 | 3682 1066 | 3687 1067 | 3688 1068 | 3687 1069 | 3689 1070 | 3692 1071 | 3696 1072 | 3698 1073 | 3700 1074 | 3699 1075 | 3719 1076 | 3716 1077 | 3729 1078 | 3736 1079 | 3722 1080 | 3740 1081 | 3738 1082 | 3744 1083 | 3752 1084 | 3756 1085 | 3760 1086 | 3778 1087 | 3754 1088 | 3763 1089 | 3756 1090 | 3773 1091 | 3777 1092 | 3763 1093 | 3764 1094 | 3766 1095 | 3781 1096 | 3776 1097 | 3763 1098 | 3747 1099 | 3754 1100 | 3764 1101 | 3759 1102 | 3766 1103 | 3767 1104 | 3769 1105 | 3771 1106 | 3766 1107 | 3769 1108 | 3771 1109 | 3764 1110 | 3805 1111 | 3804 1112 | 3803 1113 | 3808 1114 | 3799 1115 | 3831 1116 | 3833 1117 | 3814 1118 | 3815 1119 | 3829 1120 | 3836 1121 | 3854 1122 | 3861 1123 | 3865 1124 | 3879 1125 | 3876 1126 | 3877 1127 | 3859 1128 | 3858 1129 | 3860 1130 | 3863 1131 | 3862 1132 | 3890 1133 | 3891 1134 | 3909 1135 | 3907 1136 | 3886 1137 | 3880 1138 | 3882 1139 | 3885 1140 | 3886 1141 | 3887 1142 | 3888 1143 | 3891 1144 | 3901 1145 | 3909 1146 | 3894 1147 | 3885 1148 | 3901 1149 | 3921 1150 | 3922 1151 | 3909 1152 | 3913 1153 | 3920 1154 | 3918 1155 | 3919 1156 | 3926 1157 | 3918 1158 | 3920 1159 | 3921 1160 | 3929 1161 | 3944 1162 | 3927 1163 | 3926 1164 | 3925 1165 | 3940 1166 | 3956 1167 | 3937 1168 | 3939 1169 | 3940 1170 | 3941 1171 | 3933 1172 | 3956 1173 | 3957 1174 | 3971 1175 | 3976 1176 | 3978 1177 | 3977 1178 | 3983 1179 | 3984 1180 | 3985 1181 | 3986 1182 | 3989 1183 | 3988 1184 | 3990 1185 | 3997 1186 | 4002 1187 | 4005 1188 | 4014 1189 | 4019 1190 | 4038 1191 | 4044 1192 | 4050 1193 | 4054 1194 | 4055 1195 | 4064 1196 | 4082 1197 | 4084 1198 | 4087 1199 | 4100 1200 | 4109 1201 | 4117 1202 | 4118 1203 | 4150 1204 | 4147 1205 | 4141 1206 | 4142 1207 | 4138 1208 | 4146 1209 | 4138 1210 | 4144 1211 | 4141 1212 | 4148 1213 | 4192 1214 | 4214 1215 | 4223 1216 | 4218 1217 | 4220 1218 | 4219 1219 | 4224 1220 | 4220 1221 | 4221 1222 | 4228 1223 | 4230 1224 | 4241 1225 | 4249 1226 | 4248 1227 | 4278 1228 | 4279 1229 | 4235 1230 | 4220 1231 | 4222 1232 | 4220 1233 | 4235 1234 | 4226 1235 | 4243 1236 | 4244 1237 | 4238 1238 | 4253 1239 | 4254 1240 | 4232 1241 | 4226 1242 | 4221 1243 | 4220 1244 | 4219 1245 | 4204 1246 | 4200 1247 | 4201 1248 | 4192 1249 | 4191 1250 | 4198 1251 | 4202 1252 | 4220 1253 | 4235 1254 | 4233 1255 | 4258 1256 | 4242 1257 | 4244 1258 | 4241 1259 | 4242 1260 | 4247 1261 | 4233 1262 | 4234 1263 | 4247 1264 | 4258 1265 | 4259 1266 | 4258 1267 | 4288 1268 | 4292 1269 | 4295 1270 | 4294 1271 | 4305 1272 | 4295 1273 | 4296 1274 | 4299 1275 | 4303 1276 | 4314 1277 | 4330 1278 | 4347 1279 | 4349 1280 | 4376 1281 | 4384 1282 | 4396 1283 | 4395 1284 | 4399 1285 | 4381 1286 | 4402 1287 | 4420 1288 | 4418 1289 | 4423 1290 | 4426 1291 | 4428 1292 | 4427 1293 | 4429 1294 | 4430 1295 | 4453 1296 | 4454 1297 | 4461 1298 | 4481 1299 | 4492 1300 | 4496 1301 | 4498 1302 | 4499 1303 | 4498 1304 | 4499 1305 | 4504 1306 | 4516 1307 | 4524 1308 | 4525 1309 | 4528 1310 | 4529 1311 | 4528 1312 | 4526 1313 | 4527 1314 | 4532 1315 | 4534 1316 | 4514 1317 | 4544 1318 | 4546 1319 | 4548 1320 | 4549 1321 | 4557 1322 | 4563 1323 | 4566 1324 | 4573 1325 | 4583 1326 | 4584 1327 | 4580 1328 | 4596 1329 | 4606 1330 | 4608 1331 | 4615 1332 | 4620 1333 | 4614 1334 | 4609 1335 | 4621 1336 | 4637 1337 | 4645 1338 | 4629 1339 | 4633 1340 | 4627 1341 | 4631 1342 | 4617 1343 | 4645 1344 | 4656 1345 | 4657 1346 | 4658 1347 | 4689 1348 | 4704 1349 | 4705 1350 | 4707 1351 | 4706 1352 | 4704 1353 | 4705 1354 | 4708 1355 | 4709 1356 | 4722 1357 | 4724 1358 | 4699 1359 | 4696 1360 | 4693 1361 | 4692 1362 | 4695 1363 | 4694 1364 | 4700 1365 | 4701 1366 | 4686 1367 | 4688 1368 | 4698 1369 | 4700 1370 | 4697 1371 | 4706 1372 | 4709 1373 | 4721 1374 | 4728 1375 | 4729 1376 | 4731 1377 | 4726 1378 | 4739 1379 | 4740 1380 | 4746 1381 | 4740 1382 | 4741 1383 | 4747 1384 | 4745 1385 | 4746 1386 | 4749 1387 | 4750 1388 | 4752 1389 | 4753 1390 | 4754 1391 | 4766 1392 | 4764 1393 | 4762 1394 | 4748 1395 | 4747 1396 | 4743 1397 | 4746 1398 | 4747 1399 | 4754 1400 | 4720 1401 | 4721 1402 | 4724 1403 | 4725 1404 | 4738 1405 | 4739 1406 | 4740 1407 | 4745 1408 | 4750 1409 | 4747 1410 | 4742 1411 | 4740 1412 | 4757 1413 | 4765 1414 | 4780 1415 | 4783 1416 | 4785 1417 | 4795 1418 | 4799 1419 | 4800 1420 | 4823 1421 | 4826 1422 | 4824 1423 | 4827 1424 | 4830 1425 | 4829 1426 | 4828 1427 | 4823 1428 | 4825 1429 | 4827 1430 | 4849 1431 | 4853 1432 | 4837 1433 | 4848 1434 | 4849 1435 | 4844 1436 | 4845 1437 | 4858 1438 | 4861 1439 | 4865 1440 | 4866 1441 | 4874 1442 | 4875 1443 | 4876 1444 | 4877 1445 | 4882 1446 | 4883 1447 | 4885 1448 | 4890 1449 | 4891 1450 | 4893 1451 | 4894 1452 | 4901 1453 | 4905 1454 | 4926 1455 | 4925 1456 | 4934 1457 | 4935 1458 | 4933 1459 | 4916 1460 | 4947 1461 | 4942 1462 | 4937 1463 | 4968 1464 | 4958 1465 | 4957 1466 | 4958 1467 | 4959 1468 | 4957 1469 | 4955 1470 | 4927 1471 | 4928 1472 | 4926 1473 | 4934 1474 | 4933 1475 | 4934 1476 | 4916 1477 | 4917 1478 | 4918 1479 | 4919 1480 | 4920 1481 | 4963 1482 | 4985 1483 | 4979 1484 | 4976 1485 | 4968 1486 | 4973 1487 | 4969 1488 | 4961 1489 | 4963 1490 | 4960 1491 | 4964 1492 | 4963 1493 | 4967 1494 | 4969 1495 | 4967 1496 | 4972 1497 | 4977 1498 | 4976 1499 | 4979 1500 | 4975 1501 | 4981 1502 | 5005 1503 | 5008 1504 | 4984 1505 | 4983 1506 | 4991 1507 | 4992 1508 | 4993 1509 | 4994 1510 | 4995 1511 | 5014 1512 | 5046 1513 | 5069 1514 | 5068 1515 | 5066 1516 | 5073 1517 | 5074 1518 | 5072 1519 | 5073 1520 | 5083 1521 | 5079 1522 | 5111 1523 | 5110 1524 | 5111 1525 | 5139 1526 | 5136 1527 | 5138 1528 | 5124 1529 | 5127 1530 | 5126 1531 | 5138 1532 | 5137 1533 | 5138 1534 | 5154 1535 | 5149 1536 | 5152 1537 | 5173 1538 | 5191 1539 | 5192 1540 | 5193 1541 | 5198 1542 | 5195 1543 | 5194 1544 | 5221 1545 | 5229 1546 | 5245 1547 | 5248 1548 | 5246 1549 | 5266 1550 | 5267 1551 | 5293 1552 | 5294 1553 | 5303 1554 | 5325 1555 | 5328 1556 | 5327 1557 | 5328 1558 | 5334 1559 | 5341 1560 | 5327 1561 | 5326 1562 | 5337 1563 | 5353 1564 | 5354 1565 | 5356 1566 | 5360 1567 | 5342 1568 | 5356 1569 | 5367 1570 | 5363 1571 | 5364 1572 | 5363 1573 | 5365 1574 | 5398 1575 | 5400 1576 | 5404 1577 | 5407 1578 | 5402 1579 | 5399 1580 | 5404 1581 | 5430 1582 | 5439 1583 | 5441 1584 | 5446 1585 | 5445 1586 | 5448 1587 | 5449 1588 | 5472 1589 | 5490 1590 | 5494 1591 | 5498 1592 | 5484 1593 | 5483 1594 | 5497 1595 | 5498 1596 | 5491 1597 | 5488 1598 | 5517 1599 | 5518 1600 | 5513 1601 | 5516 1602 | 5507 1603 | 5508 1604 | 5507 1605 | 5508 1606 | 5521 1607 | 5520 1608 | 5518 1609 | 5519 1610 | 5523 1611 | 5524 1612 | 5523 1613 | 5526 1614 | 5506 1615 | 5508 1616 | 5522 1617 | 5507 1618 | 5508 1619 | 5509 1620 | 5492 1621 | 5529 1622 | 5531 1623 | 5567 1624 | 5552 1625 | 5549 1626 | 5547 1627 | 5542 1628 | 5544 1629 | 5550 1630 | 5523 1631 | 5561 1632 | 5556 1633 | 5539 1634 | 5540 1635 | 5573 1636 | 5575 1637 | 5569 1638 | 5568 1639 | 5572 1640 | 5569 1641 | 5587 1642 | 5586 1643 | 5585 1644 | 5582 1645 | 5583 1646 | 5578 1647 | 5580 1648 | 5598 1649 | 5604 1650 | 5603 1651 | 5610 1652 | 5604 1653 | 5603 1654 | 5604 1655 | 5607 1656 | 5632 1657 | 5633 1658 | 5644 1659 | 5645 1660 | 5660 1661 | 5662 1662 | 5672 1663 | 5685 1664 | 5684 1665 | 5687 1666 | 5733 1667 | 5735 1668 | 5743 1669 | 5745 1670 | 5772 1671 | 5774 1672 | 5773 1673 | 5777 1674 | 5781 1675 | 5784 1676 | 5769 1677 | 5777 1678 | 5788 1679 | 5789 1680 | 5790 1681 | 5793 1682 | 5767 1683 | 5788 1684 | 5787 1685 | 5789 1686 | 5791 1687 | 5795 1688 | 5820 1689 | 5821 1690 | 5804 1691 | 5808 1692 | 5824 1693 | 5821 1694 | 5825 1695 | 5847 1696 | 5849 1697 | 5850 1698 | 5844 1699 | 5833 1700 | 5834 1701 | 5842 1702 | 5826 1703 | 5855 1704 | 5856 1705 | 5858 1706 | 5871 1707 | 5860 1708 | 5862 1709 | 5872 1710 | 5875 1711 | 5885 1712 | 5883 1713 | 5874 1714 | 5871 1715 | 5865 1716 | 5878 1717 | 5887 1718 | 5897 1719 | 5918 1720 | 5913 1721 | 5908 1722 | 5925 1723 | 5926 1724 | 5934 1725 | 5937 1726 | 5940 1727 | 5944 1728 | 5942 1729 | 5962 1730 | 5963 1731 | 5976 1732 | 5977 1733 | 5966 1734 | 5971 1735 | 5970 1736 | 5976 1737 | 5978 1738 | 5967 1739 | 5979 1740 | 5962 1741 | 5983 1742 | 5988 1743 | 5989 1744 | 6004 1745 | 6003 1746 | 6002 1747 | 6009 1748 | 6020 1749 | 6037 1750 | 6039 1751 | 6041 1752 | 6042 1753 | 6040 1754 | 6039 1755 | 6041 1756 | 6042 1757 | 6043 1758 | 6046 1759 | 6051 1760 | 6067 1761 | 6069 1762 | 6070 1763 | 6083 1764 | 6085 1765 | 6083 1766 | 6084 1767 | 6082 1768 | 6110 1769 | 6100 1770 | 6102 1771 | 6100 1772 | 6102 1773 | 6106 1774 | 6109 1775 | 6094 1776 | 6095 1777 | 6102 1778 | 6103 1779 | 6116 1780 | 6114 1781 | 6119 1782 | 6129 1783 | 6130 1784 | 6134 1785 | 6135 1786 | 6132 1787 | 6131 1788 | 6134 1789 | 6169 1790 | 6168 1791 | 6199 1792 | 6200 1793 | 6202 1794 | 6204 1795 | 6205 1796 | 6210 1797 | 6216 1798 | 6221 1799 | 6214 1800 | 6215 1801 | 6225 1802 | 6224 1803 | 6230 1804 | 6226 1805 | 6238 1806 | 6237 1807 | 6246 1808 | 6244 1809 | 6247 1810 | 6245 1811 | 6246 1812 | 6249 1813 | 6250 1814 | 6242 1815 | 6243 1816 | 6241 1817 | 6220 1818 | 6215 1819 | 6216 1820 | 6215 1821 | 6216 1822 | 6214 1823 | 6186 1824 | 6180 1825 | 6182 1826 | 6183 1827 | 6186 1828 | 6192 1829 | 6174 1830 | 6175 1831 | 6172 1832 | 6202 1833 | 6206 1834 | 6194 1835 | 6202 1836 | 6219 1837 | 6222 1838 | 6193 1839 | 6192 1840 | 6196 1841 | 6214 1842 | 6222 1843 | 6225 1844 | 6240 1845 | 6238 1846 | 6224 1847 | 6225 1848 | 6223 1849 | 6224 1850 | 6237 1851 | 6240 1852 | 6239 1853 | 6242 1854 | 6241 1855 | 6230 1856 | 6229 1857 | 6222 1858 | 6221 1859 | 6234 1860 | 6237 1861 | 6238 1862 | 6239 1863 | 6240 1864 | 6241 1865 | 6254 1866 | 6267 1867 | 6272 1868 | 6273 1869 | 6271 1870 | 6272 1871 | 6283 1872 | 6282 1873 | 6281 1874 | 6280 1875 | 6282 1876 | 6283 1877 | 6281 1878 | 6285 1879 | 6287 1880 | 6286 1881 | 6287 1882 | 6283 1883 | 6306 1884 | 6312 1885 | 6349 1886 | 6352 1887 | 6350 1888 | 6332 1889 | 6317 1890 | 6311 1891 | 6324 1892 | 6337 1893 | 6339 1894 | 6340 1895 | 6351 1896 | 6359 1897 | 6363 1898 | 6334 1899 | 6338 1900 | 6339 1901 | 6342 1902 | 6335 1903 | 6336 1904 | 6342 1905 | 6343 1906 | 6344 1907 | 6329 1908 | 6341 1909 | 6347 1910 | 6359 1911 | 6335 1912 | 6351 1913 | 6353 1914 | 6348 1915 | 6347 1916 | 6357 1917 | 6360 1918 | 6361 1919 | 6362 1920 | 6375 1921 | 6366 1922 | 6365 1923 | 6363 1924 | 6360 1925 | 6386 1926 | 6402 1927 | 6423 1928 | 6428 1929 | 6429 1930 | 6435 1931 | 6434 1932 | 6435 1933 | 6437 1934 | 6460 1935 | 6461 1936 | 6457 1937 | 6465 1938 | 6466 1939 | 6470 1940 | 6462 1941 | 6464 1942 | 6466 1943 | 6468 1944 | 6461 1945 | 6468 1946 | 6469 1947 | 6507 1948 | 6506 1949 | 6532 1950 | 6531 1951 | 6538 1952 | 6536 1953 | 6552 1954 | 6580 1955 | 6585 1956 | 6595 1957 | 6597 1958 | 6583 1959 | 6570 1960 | 6569 1961 | 6568 1962 | 6570 1963 | 6569 1964 | 6571 1965 | 6541 1966 | 6542 1967 | 6548 1968 | 6542 1969 | 6538 1970 | 6543 1971 | 6534 1972 | 6538 1973 | 6560 1974 | 6566 1975 | 6567 1976 | 6576 1977 | 6578 1978 | 6597 1979 | 6602 1980 | 6606 1981 | 6600 1982 | 6598 1983 | 6601 1984 | 6614 1985 | 6611 1986 | 6610 1987 | 6613 1988 | 6605 1989 | 6611 1990 | 6610 1991 | 6609 1992 | 6608 1993 | 6609 1994 | 6610 1995 | 6615 1996 | 6614 1997 | 6619 1998 | 6627 1999 | 6629 2000 | 6624 2001 | -------------------------------------------------------------------------------- /Day10/day10.jl: -------------------------------------------------------------------------------- 1 | # Data 2 | data = split.(readlines(joinpath(@__DIR__, "input.txt")), "") 3 | 4 | ## Part 1 ------------------------------------------------------------- 5 | function firstillegal(data) 6 | illegals = String[] 7 | brktpairs = Dict("[" => "]", "{" => "}", "(" => ")", "<" => ">") 8 | 9 | for line in data 10 | openbrkt = String[] 11 | 12 | for str in line 13 | if str in keys(brktpairs) 14 | push!(openbrkt, str) 15 | elseif str == brktpairs[openbrkt[end]] 16 | pop!(openbrkt) 17 | else 18 | push!(illegals, str) 19 | break 20 | end 21 | end 22 | end 23 | 24 | return illegals 25 | end 26 | 27 | function point1(strs) 28 | val = Dict(")" => 3, "]" => 57, "}" => 1197, ">" => 25137) 29 | return sum(str -> val[str], strs) 30 | end 31 | 32 | # Solution: 367_059 33 | point1(firstillegal(data)) 34 | 35 | ## Part 2 ------------------------------------------------------------- 36 | function incomplete(data) 37 | incompletes = Vector{Vector{String}}() 38 | brktpairs = Dict("[" => "]", "{" => "}", "(" => ")", "<" => ">") 39 | 40 | for line in data 41 | openbrkt = String[] 42 | iscorrline = false 43 | 44 | for str in line 45 | if str in keys(brktpairs) 46 | push!(openbrkt, str) 47 | elseif str == brktpairs[openbrkt[end]] 48 | pop!(openbrkt) 49 | else 50 | iscorrline = true 51 | end 52 | end 53 | 54 | if !iscorrline 55 | closing = [brktpairs[str] for str in reverse(openbrkt)] 56 | push!(incompletes, closing) 57 | end 58 | end 59 | 60 | return incompletes 61 | end 62 | 63 | function point2(lines) 64 | val = Dict(")" => 1, "]" => 2, "}" => 3, ">" => 4) 65 | points = map(lines) do line 66 | reduce((pt, str) -> 5pt + val[str], line, init=0) 67 | end 68 | mid = length(lines) ÷ 2 + 1 69 | sort!(points) 70 | return points[mid] 71 | end 72 | 73 | # Solution: 1_952_146_692 74 | point2(incomplete(data)) 75 | -------------------------------------------------------------------------------- /Day10/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 | -------------------------------------------------------------------------------- /Day11/day11.jl: -------------------------------------------------------------------------------- 1 | # Data 2 | lines = readlines(joinpath(@__DIR__, "input.txt")) 3 | data = Matrix{Int}(undef, length(lines), length(lines[1])) 4 | for i in axes(data, 1) 5 | data[i, :] .= parse.(Int, split(lines[i], "")) 6 | end 7 | 8 | ## Functions -------------------------------------------------- 9 | const CI = CartesianIndex 10 | 11 | step!(data, i::CI) = data[i] == 9 ? data[i] = 0 : data[i] += 1 12 | 13 | const adj = setdiff(CI(-1, -1):CI(1, 1), [CI(0, 0)]) 14 | 15 | function flash!(data, idxs::CartesianIndices, i::CI) 16 | for a in adj .+ [i] 17 | if a ∈ idxs && data[a] ≠ 0 18 | step!(data, a) 19 | data[a] == 0 && flash!(data, idxs, a) 20 | end 21 | end 22 | end 23 | 24 | function step!(data, idxs::CartesianIndices) 25 | for i in idxs 26 | step!(data, i) 27 | end 28 | is = filter(i -> data[i] == 0, idxs) 29 | for i in is 30 | flash!(data, idxs, i) 31 | end 32 | end 33 | 34 | ## Part 1 ----------------------------------------------------- 35 | function countflash(init, steps::Int) 36 | data = copy(init) 37 | idxs = CartesianIndices(data) 38 | flashs = 0 39 | for _ in 1:steps 40 | step!(data, idxs) 41 | flashs += count(iszero, data) 42 | end 43 | return flashs 44 | end 45 | 46 | # Solution: 1637 47 | countflash(data, 100) 48 | 49 | ## Part 2 ----------------------------------------------------- 50 | function allflash(init) 51 | data = copy(init) 52 | idxs = CartesianIndices(data) 53 | st = 1 54 | while true 55 | step!(data, idxs) 56 | all(iszero, data) && break 57 | st += 1 58 | end 59 | return st 60 | end 61 | 62 | # Solution: 242 63 | allflash(data) 64 | -------------------------------------------------------------------------------- /Day11/input.txt: -------------------------------------------------------------------------------- 1 | 5251578181 2 | 6158452313 3 | 1818578571 4 | 3844615143 5 | 6857251244 6 | 2375817613 7 | 8883514435 8 | 2321265735 9 | 2857275182 10 | 4821156644 11 | -------------------------------------------------------------------------------- /Day12/day12.jl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eliascarv/AdventOfCode2021/0fd0a2b365ac6b0c3cf4f14c6a4fd4a29060c22a/Day12/day12.jl -------------------------------------------------------------------------------- /Day12/input.txt: -------------------------------------------------------------------------------- 1 | yb-start 2 | de-vd 3 | rj-yb 4 | rj-VP 5 | OC-de 6 | MU-de 7 | end-DN 8 | vd-end 9 | WK-vd 10 | rj-de 11 | DN-vd 12 | start-VP 13 | DN-yb 14 | vd-MU 15 | DN-rj 16 | de-VP 17 | yb-OC 18 | start-rj 19 | oa-MU 20 | yb-de 21 | oa-VP 22 | jv-MU 23 | yb-MU 24 | end-OC 25 | -------------------------------------------------------------------------------- /Day13/day13.jl: -------------------------------------------------------------------------------- 1 | using SparseArrays 2 | 3 | ## Data ------------------------------------------------------------- 4 | lines = readlines(joinpath(@__DIR__, "input.txt")) 5 | 6 | function parsedata(lines) 7 | l = length(lines) 8 | d = findfirst(isempty, lines) 9 | idxs = Vector{NTuple{2, Int}}(undef, d - 1) 10 | folds = Vector{Tuple{Symbol, Int}}(undef, l - d) 11 | for i in 1:d-1 12 | x, y = parse.(Int, split(lines[i], ',')) 13 | idxs[i] = (y + 1, x + 1) 14 | end 15 | for i in d+1:l 16 | v, n = split(lines[i][12:end], '=') 17 | folds[i-d] = (Symbol(v), parse(Int, n) + 1) 18 | end 19 | data = sparse(first.(idxs), last.(idxs), 1) 20 | return data, folds 21 | end 22 | 23 | data, folds = parsedata(lines) 24 | 25 | ## Part 1 ----------------------------------------------------------- 26 | function foldpaper(data, fold::Tuple{Symbol, Int}) 27 | v, n = fold 28 | if v == :y 29 | data = data[1:n-1, :] + data[end:-1:n+1, :] 30 | elseif v == :x 31 | data = data[:, 1:n-1] + data[:, end:-1:n+1] 32 | end 33 | return data 34 | end 35 | 36 | # Solution: 653 37 | count(>(0), foldpaper(data, folds[1])) 38 | 39 | ## Part 2 ----------------------------------------------------------- 40 | function foldpaper(data, folds::Vector{Tuple{Symbol, Int}}) 41 | for fold in folds 42 | data = foldpaper(data, fold) 43 | end 44 | return data 45 | end 46 | 47 | # Solution: LKREBPRK 48 | foldpaper(data, folds) 49 | -------------------------------------------------------------------------------- /Day13/demo.txt: -------------------------------------------------------------------------------- 1 | 6,10 2 | 0,14 3 | 9,10 4 | 0,3 5 | 10,4 6 | 4,11 7 | 6,0 8 | 6,12 9 | 4,1 10 | 0,13 11 | 10,12 12 | 3,4 13 | 3,0 14 | 8,4 15 | 1,10 16 | 2,14 17 | 8,10 18 | 9,0 19 | 20 | fold along y=7 21 | fold along x=5 22 | -------------------------------------------------------------------------------- /Day13/input.txt: -------------------------------------------------------------------------------- 1 | 527,872 2 | 94,740 3 | 502,586 4 | 33,514 5 | 349,784 6 | 1292,133 7 | 733,623 8 | 305,336 9 | 108,628 10 | 1086,396 11 | 845,128 12 | 674,761 13 | 768,317 14 | 783,154 15 | 731,697 16 | 803,844 17 | 865,96 18 | 1263,567 19 | 1141,141 20 | 1218,644 21 | 1115,429 22 | 951,373 23 | 748,326 24 | 1088,422 25 | 259,673 26 | 885,885 27 | 150,732 28 | 181,19 29 | 182,581 30 | 1130,838 31 | 647,386 32 | 53,140 33 | 27,726 34 | 1198,105 35 | 219,476 36 | 545,779 37 | 234,528 38 | 1042,145 39 | 422,852 40 | 683,726 41 | 636,40 42 | 140,590 43 | 415,824 44 | 415,637 45 | 238,478 46 | 0,347 47 | 1277,380 48 | 1076,366 49 | 984,112 50 | 808,787 51 | 321,480 52 | 576,707 53 | 999,810 54 | 1283,392 55 | 604,606 56 | 610,724 57 | 107,487 58 | 657,497 59 | 258,378 60 | 392,224 61 | 1044,498 62 | 53,754 63 | 706,606 64 | 1191,753 65 | 661,256 66 | 895,637 67 | 1015,373 68 | 455,808 69 | 825,753 70 | 929,835 71 | 581,205 72 | 1236,30 73 | 343,74 74 | 207,813 75 | 547,866 76 | 1005,558 77 | 113,420 78 | 445,4 79 | 562,326 80 | 924,593 81 | 209,621 82 | 1078,42 83 | 1265,798 84 | 923,408 85 | 1082,808 86 | 910,889 87 | 850,408 88 | 1277,268 89 | 984,809 90 | 1191,813 91 | 295,541 92 | 108,826 93 | 705,698 94 | 97,666 95 | 878,33 96 | 1245,240 97 | 1257,140 98 | 1001,416 99 | 252,478 100 | 139,51 101 | 75,732 102 | 925,750 103 | 388,502 104 | 721,703 105 | 509,254 106 | 808,532 107 | 478,386 108 | 349,299 109 | 328,85 110 | 463,210 111 | 254,126 112 | 835,281 113 | 895,569 114 | 850,155 115 | 513,782 116 | 195,465 117 | 1066,155 118 | 119,529 119 | 355,826 120 | 1078,68 121 | 176,350 122 | 459,465 123 | 1077,364 124 | 47,567 125 | 674,40 126 | 169,141 127 | 119,305 128 | 541,485 129 | 1009,642 130 | 1212,894 131 | 537,544 132 | 674,754 133 | 517,616 134 | 25,38 135 | 5,32 136 | 191,572 137 | 700,276 138 | 1004,891 139 | 492,547 140 | 701,516 141 | 65,45 142 | 319,60 143 | 1071,325 144 | 621,575 145 | 1131,834 146 | 185,560 147 | 693,571 148 | 441,140 149 | 157,533 150 | 527,32 151 | 915,221 152 | 1212,780 153 | 1131,501 154 | 463,684 155 | 1169,112 156 | 1299,269 157 | 832,350 158 | 555,733 159 | 1115,476 160 | 432,422 161 | 266,310 162 | 835,393 163 | 105,277 164 | 820,499 165 | 967,820 166 | 63,894 167 | 561,754 168 | 301,642 169 | 668,233 170 | 182,600 171 | 801,640 172 | 502,532 173 | 1134,554 174 | 546,68 175 | 11,625 176 | 373,98 177 | 1082,114 178 | 654,771 179 | 763,28 180 | 92,102 181 | 713,74 182 | 869,409 183 | 855,360 184 | 1277,864 185 | 1083,875 186 | 604,288 187 | 924,301 188 | 11,269 189 | 841,511 190 | 1037,140 191 | 868,670 192 | 759,486 193 | 604,222 194 | 917,464 195 | 1034,512 196 | 806,126 197 | 1004,865 198 | 677,670 199 | 763,866 200 | 1305,862 201 | 681,728 202 | 1251,408 203 | 955,390 204 | 224,119 205 | 465,598 206 | 87,773 207 | 442,670 208 | 492,558 209 | 1019,406 210 | 929,59 211 | 513,560 212 | 1146,323 213 | 947,646 214 | 305,224 215 | 656,632 216 | 952,520 217 | 639,82 218 | 1200,99 219 | 984,206 220 | 951,93 221 | 1283,502 222 | 150,574 223 | 825,164 224 | 432,413 225 | 965,579 226 | 436,740 227 | 445,778 228 | 840,254 229 | 1310,547 230 | 93,759 231 | 299,726 232 | 761,725 233 | 793,558 234 | 1202,826 235 | 1173,822 236 | 951,476 237 | 415,40 238 | 423,226 239 | 405,175 240 | 813,529 241 | 499,451 242 | 254,630 243 | 845,369 244 | 73,653 245 | 234,814 246 | 855,808 247 | 465,318 248 | 12,162 249 | 403,284 250 | 730,478 251 | 907,284 252 | 224,396 253 | 301,520 254 | 186,590 255 | 551,486 256 | 832,116 257 | 773,544 258 | 956,362 259 | 273,140 260 | 234,379 261 | 828,182 262 | 306,865 263 | 1193,574 264 | 176,554 265 | 1175,810 266 | 711,617 267 | 1015,541 268 | 928,644 269 | 426,808 270 | 586,826 271 | 535,753 272 | 1173,72 273 | 301,597 274 | 311,532 275 | 233,493 276 | 838,28 277 | 174,227 278 | 219,110 279 | 597,841 280 | 884,780 281 | 271,102 282 | 65,240 283 | 354,362 284 | 932,522 285 | 652,833 286 | 720,894 287 | 895,824 288 | 371,779 289 | 957,374 290 | 293,799 291 | 169,276 292 | 791,532 293 | 580,416 294 | 711,726 295 | 408,462 296 | 239,396 297 | 1077,135 298 | 754,360 299 | 609,322 300 | 880,119 301 | 497,500 302 | 289,323 303 | 875,784 304 | 239,817 305 | 455,154 306 | 137,72 307 | 1101,768 308 | 212,126 309 | 445,452 310 | 1029,546 311 | 108,68 312 | 610,170 313 | 579,162 314 | 295,521 315 | 1124,369 316 | 797,334 317 | 872,347 318 | 137,822 319 | 1202,266 320 | 649,376 321 | 984,645 322 | 1280,150 323 | 102,870 324 | 485,164 325 | 435,476 326 | 924,28 327 | 1289,819 328 | 760,525 329 | 483,3 330 | 1029,348 331 | 1255,168 332 | 276,382 333 | 808,219 334 | 108,714 335 | 1295,596 336 | 1237,395 337 | 556,222 338 | 996,232 339 | 440,341 340 | 30,150 341 | 349,336 342 | 422,826 343 | 113,754 344 | 801,621 345 | 811,239 346 | 15,364 347 | 748,568 348 | 924,749 349 | 661,638 350 | 45,798 351 | 281,546 352 | 228,114 353 | 359,476 354 | 929,588 355 | 1119,210 356 | 470,254 357 | 415,257 358 | 70,698 359 | 649,862 360 | 999,74 361 | 711,700 362 | 381,140 363 | 1305,704 364 | 313,467 365 | 70,366 366 | 475,393 367 | 1011,826 368 | 945,634 369 | 621,366 370 | 1191,305 371 | 288,728 372 | 346,700 373 | 513,112 374 | 863,81 375 | 883,161 376 | 229,493 377 | 507,396 378 | 383,252 379 | 579,732 380 | 309,864 381 | 324,425 382 | 1163,501 383 | 268,145 384 | 1094,547 385 | 579,396 386 | 438,99 387 | 157,365 388 | 1260,606 389 | 373,49 390 | 266,502 391 | 492,150 392 | 1310,632 393 | 381,59 394 | 499,655 395 | 838,313 396 | 447,813 397 | 420,515 398 | 890,515 399 | 961,670 400 | 855,154 401 | 199,422 402 | 927,102 403 | 1044,502 404 | 1128,742 405 | 408,581 406 | 1223,773 407 | 254,217 408 | 764,628 409 | 325,161 410 | 902,581 411 | 1017,416 412 | 887,226 413 | 1265,96 414 | 1071,396 415 | 535,141 416 | 1265,123 417 | 45,330 418 | 562,120 419 | 706,64 420 | 119,813 421 | 1205,277 422 | 209,871 423 | 753,661 424 | 832,126 425 | 53,280 426 | 93,588 427 | 731,396 428 | 515,619 429 | 473,173 430 | 541,409 431 | 326,533 432 | 1163,53 433 | 1101,452 434 | 1285,297 435 | 754,672 436 | 455,740 437 | 472,600 438 | 1289,147 439 | 960,640 440 | 855,534 441 | 311,74 442 | 1009,252 443 | 504,126 444 | 53,166 445 | 1257,754 446 | 836,56 447 | 758,422 448 | 1173,476 449 | 585,194 450 | 465,185 451 | 830,73 452 | 1007,611 453 | 633,670 454 | 68,516 455 | 1310,85 456 | 955,68 457 | 689,319 458 | 1283,726 459 | 513,334 460 | 426,86 461 | 669,427 462 | 1049,586 463 | 1280,744 464 | 1125,831 465 | 1292,854 466 | 663,386 467 | 1266,618 468 | 748,341 469 | 1148,547 470 | 627,420 471 | 1305,302 472 | 268,637 473 | 746,96 474 | 1252,705 475 | 232,42 476 | 1155,239 477 | 281,378 478 | 351,611 479 | 944,789 480 | 731,249 481 | 1004,193 482 | 666,422 483 | 147,277 484 | 639,805 485 | 991,834 486 | 883,875 487 | 713,841 488 | 33,127 489 | 924,252 490 | 835,255 491 | 1173,542 492 | 355,68 493 | 455,360 494 | 937,116 495 | 475,501 496 | 549,169 497 | 835,396 498 | 18,488 499 | 400,406 500 | 523,877 501 | 556,332 502 | 222,33 503 | 627,392 504 | 301,710 505 | 748,553 506 | 818,150 507 | 545,115 508 | 584,196 509 | 55,168 510 | 870,341 511 | 305,558 512 | 634,451 513 | 601,614 514 | 45,123 515 | 254,406 516 | 393,308 517 | 1101,871 518 | 131,93 519 | 970,662 520 | 801,478 521 | 415,817 522 | 1119,322 523 | 550,77 524 | 1258,486 525 | 1251,486 526 | 224,567 527 | 460,155 528 | 1170,590 529 | 238,416 530 | 358,598 531 | 835,501 532 | 786,774 533 | 353,168 534 | 835,57 535 | 855,740 536 | 507,844 537 | 811,655 538 | 179,639 539 | 1064,761 540 | 633,784 541 | 1029,378 542 | 119,753 543 | 326,85 544 | 599,866 545 | 1021,858 546 | 1082,780 547 | 1076,814 548 | 1031,416 549 | 385,750 550 | 345,579 551 | 233,530 552 | 1078,490 553 | 791,154 554 | 145,142 555 | 1056,453 556 | 922,215 557 | 283,331 558 | 393,464 559 | 1066,739 560 | 117,621 561 | 797,560 562 | 609,798 563 | 705,196 564 | 982,137 565 | 604,560 566 | 957,168 567 | 627,502 568 | 557,681 569 | 1128,600 570 | 604,334 571 | 793,542 572 | 445,871 573 | 386,642 574 | 621,268 575 | 1280,374 576 | 231,226 577 | 191,322 578 | 445,96 579 | 845,576 580 | 1305,592 581 | 218,42 582 | 729,732 583 | 435,110 584 | 445,116 585 | 181,478 586 | 919,558 587 | 525,402 588 | 465,766 589 | 806,574 590 | 55,277 591 | 731,809 592 | 542,553 593 | 753,681 594 | 850,632 595 | 1237,284 596 | 25,616 597 | 1265,330 598 | 229,885 599 | 759,72 600 | 276,512 601 | 472,581 602 | 1233,623 603 | 1216,740 604 | 420,528 605 | 1071,369 606 | 1265,378 607 | 556,534 608 | 373,826 609 | 917,430 610 | 599,617 611 | 475,709 612 | 1310,123 613 | 957,726 614 | 191,292 615 | 701,322 616 | 295,373 617 | 499,443 618 | 65,849 619 | 472,742 620 | 682,793 621 | 562,568 622 | 605,698 623 | 765,779 624 | 865,173 625 | 711,476 626 | 837,875 627 | 599,476 628 | 597,302 629 | 530,56 630 | 730,416 631 | 269,750 632 | 1198,553 633 | 726,196 634 | 455,472 635 | 524,344 636 | 683,882 637 | 1064,313 638 | 431,502 639 | 1130,607 640 | 991,123 641 | 361,543 642 | 507,820 643 | 628,793 644 | 1173,128 645 | 510,537 646 | 65,654 647 | 629,194 648 | 432,33 649 | 827,891 650 | 1114,605 651 | 182,742 652 | 326,137 653 | 1058,478 654 | 962,417 655 | 947,406 656 | 1125,560 657 | 738,267 658 | 633,672 659 | 584,698 660 | 355,56 661 | 227,19 662 | 845,318 663 | 396,378 664 | 676,451 665 | 72,574 666 | 400,5 667 | 542,341 668 | 1163,165 669 | 1098,126 670 | 639,530 671 | 436,404 672 | 910,630 673 | 353,642 674 | 938,612 675 | 884,114 676 | 832,544 677 | 1298,680 678 | 1011,378 679 | 97,213 680 | 306,701 681 | 12,680 682 | 838,581 683 | 1246,558 684 | 1064,252 685 | 937,49 686 | 1108,504 687 | 865,350 688 | 174,362 689 | 1094,347 690 | 1237,205 691 | 269,144 692 | 325,733 693 | 1235,732 694 | 937,68 695 | 1175,740 696 | 803,820 697 | 604,64 698 | 601,140 699 | 402,478 700 | 1260,222 701 | 468,590 702 | 246,194 703 | 305,523 704 | 519,292 705 | 1138,264 706 | 319,834 707 | 127,470 708 | 415,854 709 | 299,378 710 | 959,283 711 | 1223,413 712 | 1081,885 713 | 671,162 714 | 186,369 715 | 311,362 716 | 1213,666 717 | 1131,863 718 | 1212,114 719 | 649,638 720 | 686,374 721 | 723,445 722 | 345,315 723 | 565,823 724 | 30,520 725 | 348,254 726 | 465,576 727 | 801,721 728 | 75,681 729 | 214,117 730 | 910,453 731 | 1305,32 732 | 103,408 733 | 599,194 734 | 580,478 735 | 276,672 736 | 1138,712 737 | 689,864 738 | 233,759 739 | 18,133 740 | 1059,661 741 | 970,232 742 | 962,254 743 | 381,588 744 | 922,663 745 | 301,252 746 | 1242,154 747 | 519,602 748 | 1009,374 749 | 773,423 750 | 117,273 751 | 597,820 752 | 556,0 753 | 246,313 754 | 1015,521 755 | 502,308 756 | 914,378 757 | 82,627 758 | 845,525 759 | 902,462 760 | 372,612 761 | 918,808 762 | 455,870 763 | 1268,616 764 | 517,542 765 | 609,378 766 | 1115,465 767 | 874,42 768 | 1094,795 769 | 895,376 770 | 1115,866 771 | 1086,119 772 | 656,470 773 | 629,408 774 | 1284,101 775 | 105,617 776 | 1266,276 777 | 654,470 778 | 714,136 779 | 392,808 780 | 918,224 781 | 1015,821 782 | 755,161 783 | 1021,323 784 | 1056,217 785 | 1280,520 786 | 87,481 787 | 731,162 788 | 1163,396 789 | 244,155 790 | 1131,498 791 | 137,542 792 | 937,826 793 | 681,821 794 | 795 | fold along x=655 796 | fold along y=447 797 | fold along x=327 798 | fold along y=223 799 | fold along x=163 800 | fold along y=111 801 | fold along x=81 802 | fold along y=55 803 | fold along x=40 804 | fold along y=27 805 | fold along y=13 806 | fold along y=6 807 | -------------------------------------------------------------------------------- /Day14/day14.jl: -------------------------------------------------------------------------------- 1 | ## Data ------------------------------------------------------------------------- 2 | lines = readlines(joinpath(@__DIR__, "input.txt")) 3 | 4 | template = lines[1] 5 | rulers = Dict(p => i for (p, i) in split.(lines[3:end], " -> ")) 6 | 7 | ## Functions -------------------------------------------------------------------- 8 | function countchars(template, rulers, steps) 9 | cntpairs = Dict(p => count(p, template, overlap=true) for p in keys(rulers)) 10 | cntchars = Dict(string(c) => count(c, template) for c in unique(template)) 11 | for _ in 1:steps 12 | temp = filter(p -> last(p) > 0, cntpairs) 13 | for p in keys(temp) 14 | cntpairs[p] -= temp[p] 15 | cntpairs[p[1]*rulers[p]] += temp[p] 16 | cntpairs[rulers[p]*p[2]] += temp[p] 17 | cntchars[rulers[p]] += temp[p] 18 | end 19 | end 20 | return cntchars 21 | end 22 | 23 | ## Part 1 ----------------------------------------------------------------------- 24 | # Solution: 2194 25 | counts = values(countchars(template, rulers, 10)) 26 | maximum(counts) - minimum(counts) 27 | 28 | ## Part 2 ----------------------------------------------------------------------- 29 | # Solution: 2360298895777 30 | counts = values(countchars(template, rulers, 40)) 31 | maximum(counts) - minimum(counts) 32 | -------------------------------------------------------------------------------- /Day14/demo.txt: -------------------------------------------------------------------------------- 1 | NNCB 2 | 3 | CH -> B 4 | HH -> N 5 | CB -> H 6 | NH -> C 7 | HB -> C 8 | HC -> B 9 | HN -> C 10 | NN -> C 11 | BH -> H 12 | NC -> B 13 | NB -> B 14 | BN -> B 15 | BB -> N 16 | BC -> B 17 | CC -> N 18 | CN -> C -------------------------------------------------------------------------------- /Day14/input.txt: -------------------------------------------------------------------------------- 1 | OOBFPNOPBHKCCVHOBCSO 2 | 3 | NS -> H 4 | NN -> P 5 | FF -> O 6 | HF -> C 7 | KN -> V 8 | PO -> B 9 | PS -> B 10 | FB -> N 11 | ON -> F 12 | OK -> F 13 | OO -> K 14 | KS -> F 15 | FN -> F 16 | KC -> H 17 | NC -> N 18 | NB -> C 19 | KH -> S 20 | SV -> B 21 | BC -> S 22 | KB -> B 23 | SC -> S 24 | KP -> H 25 | FS -> K 26 | NK -> K 27 | OC -> H 28 | NH -> C 29 | PH -> F 30 | OS -> V 31 | BB -> C 32 | CC -> F 33 | CF -> H 34 | CP -> V 35 | VB -> N 36 | VC -> F 37 | PK -> V 38 | NV -> N 39 | FO -> S 40 | CK -> O 41 | BH -> K 42 | PN -> B 43 | PP -> S 44 | NF -> B 45 | SF -> K 46 | VF -> H 47 | HS -> F 48 | NP -> F 49 | SH -> V 50 | SK -> K 51 | PC -> V 52 | BO -> H 53 | HN -> P 54 | BK -> O 55 | BP -> S 56 | OP -> N 57 | SP -> N 58 | KK -> C 59 | HB -> H 60 | OF -> C 61 | VH -> C 62 | HO -> N 63 | FK -> V 64 | NO -> H 65 | KF -> S 66 | KO -> V 67 | PF -> K 68 | HV -> C 69 | SO -> F 70 | SS -> F 71 | VN -> K 72 | HH -> B 73 | OB -> S 74 | CH -> B 75 | FH -> B 76 | CO -> V 77 | HK -> F 78 | VK -> K 79 | CN -> V 80 | SB -> K 81 | PV -> O 82 | PB -> F 83 | VV -> P 84 | CS -> N 85 | CB -> C 86 | BS -> F 87 | HC -> B 88 | SN -> P 89 | VP -> P 90 | OV -> P 91 | BV -> P 92 | FC -> N 93 | KV -> S 94 | CV -> F 95 | BN -> S 96 | BF -> C 97 | OH -> F 98 | VO -> B 99 | FP -> S 100 | FV -> V 101 | VS -> N 102 | HP -> B 103 | -------------------------------------------------------------------------------- /Day15/day15.jl: -------------------------------------------------------------------------------- 1 | ## Data ---------------------------------------------------- 2 | lines = readlines(joinpath(@__DIR__, "input.txt")) 3 | data = Matrix{Int}(undef, length(lines), length(lines[1])) 4 | for i in axes(data, 1) 5 | data[i, :] .= parse.(Int, split(lines[i], "")) 6 | end 7 | 8 | # WIP -------------------------------------------------------------------------------- /Day15/demo.txt: -------------------------------------------------------------------------------- 1 | 1163751742 2 | 1381373672 3 | 2136511328 4 | 3694931569 5 | 7463417111 6 | 1319128137 7 | 1359912421 8 | 3125421639 9 | 1293138521 10 | 2311944581 -------------------------------------------------------------------------------- /Day15/input.txt: -------------------------------------------------------------------------------- 1 | 9117126765954991531361287887952293985228945954968719768599113229933177321218646689996911474536732399 2 | 9223759878952221676171579911799962387979151219995716217699696127938673831489291395696919969932254989 3 | 3541576911128155121299113222129549287959588382622619513719133924151162841285778821288275724961119944 4 | 6559133231375896721321444531355921461395859117937697179547219275288311254734149251973431135281269159 5 | 1676267562819916395689997881982992332424111621435132141259871861542693472992135679917192317774293128 6 | 8249139898167999696294834861387663883158627396569381992149353912931121947619234731324959354465133393 7 | 7357179973989691178482439911993891132125811578668959789312252688675899921989453929516192661843919197 8 | 4619696469916668547597358979211912998111859144138732228282162541629959265225279899275869118746211343 9 | 9953447549477253881796188328361584296836894253681673583298151169375142116172299791649833153199728127 10 | 6746781992592141396343937891111468593431876292615191122987921959192389783817917672173839828296719999 11 | 9138943966124123291819332993929628638169993945962128621134717995149146955791514983198995871433119683 12 | 5819163188981382448685489916367822515728379179272999893692949943661458236153872599999471496119999333 13 | 9719423138538191938542116779987951211999142299782419116287869943982658286621789697471829675879813256 14 | 9699181696126359195481558113952858412929919992895921913238884884827387595171659273872138379679533591 15 | 4993982621563681889939627931477941336198842897212192543931489597746158398239126972227589994828192999 16 | 2668741998199239119999431871112499961947311948258837213919913418234952325331319559453486297114898498 17 | 1127639615295239423919963661998995345216641693977915377189312819154824929848524771848827299135811811 18 | 8368387172119721672588279993639478972511318945923156162231548169532294139882492179811534898824293433 19 | 8783398963998292816524668577741241713481448273631853599957636719273318298313692157194988481619656618 20 | 2953756999862932299821112664281972119127941479853941118579781188619286791413589268314233994924958219 21 | 3721595414181516593884399118999691998316513129665554615276617573518961968693226371972761423831798176 22 | 1991694811958961555928271245541174192885889591799159659816793825199835199263296631112197219243356537 23 | 8252659533163973655722922376235699717495344481141662818711913921134614993948299831832153649939699789 24 | 4991481114394946826713119671181783791173994371435189998492951985177386891322761246115321579813246554 25 | 6993696939393598438941581694619582924588531988611314975227128981355369857749392159437189417619958138 26 | 7225751179695254891295269821492811764941719129614841461722979146177892692799164911833219318964591993 27 | 1333799929651611111256382193432394899779926422481315934699941139983894338331242127329982789394316531 28 | 8837481279123791791511293941173182698413296717121319418188693999815688934899313263953713912168172818 29 | 2715518187177668788558311556248368519817398834879452159637191987847374713799691792778685985151183163 30 | 2259918816199912192975991922626992158899968292179154972119897541183344185545199271144885417852464384 31 | 4896829916982297819936288191299877891985362698715838913823274968133179284798911359494966988815194363 32 | 2129324329198744948237831472389914912531592491971717854718183863949418918119729287219911292886619189 33 | 1475996352848299913587823871858259582986232951986536913528821944878682992979346487316611181412119533 34 | 8788926799919935991369615497631215917839967981681589392981969115279279799512993478671319169869899122 35 | 9742798185239991887978461721361783139999411599389459591792941389692391799791168329923823769316152161 36 | 9173764598521995899121318191935619363699465981899276491962199879816415838819753987163171115742984632 37 | 7731396437141244238124389792786718327351712492271297983335154292724119492723817435886686622726342678 38 | 9614311948611819439192193259859494925678221999836116159691926837722999383959859996122151658985129189 39 | 9122652146647862919899432718742622765273781311965998133187119169243998185815214999623989171991112561 40 | 2991149875591574422711878572239393988875812296611285397519895686411153557723621141397739842873293893 41 | 2911712393758279823638782882718181196128199519455914978868511911598985898293181751711911218642216689 42 | 1793818819191888913194513765514877471931431423191639139334319868989124214159551117358829997181729622 43 | 9949357949267411491772862121912417767853191411964865383988989611452288776982343996113214944462969295 44 | 7749547939932999936999429979727961593311762124797241581688731949186682939476917299694545222196819348 45 | 1569668325497998539641217919697391265847199126799274979992177877339999721187338499385894391688757142 46 | 4377839628315395229914399726112147897399599948122361917993319944114926999815642921981378665997811872 47 | 9967919912939795941911874237196684126623211793151918221173577223365897891296638491193191626818926319 48 | 6127813499273598122265983738469915367119615465748387155399948195258986878198325321289565931794369882 49 | 3692358924999677389297641337293459814384114353897968978424818882635937221462858992492131591882224132 50 | 1117153982194132689989432355215193973386193185519916139659867292519312272981167852196787981294159611 51 | 2913296211744741423151491188919997626898296293139158939389496861563476184972948824111324969285978154 52 | 1128929154921239399482171919616671311149987887281336195251291973881413496248383216161516996491666581 53 | 6231424962123952786834891961579891914968821849776946573698886133237873812968796971699337136691824314 54 | 5768145442163769781144449818193919983511191477119947369512899413814156936149842825958595364526718158 55 | 8319371581711189818471818895122114868875787691911889164956117362787871116899195295199538719355396986 56 | 9211851663274989616961671498242498986691547331875596867296989919173763994774977221229869868132965914 57 | 5732195914183159346434492634332849997214425121875559893991761889284193689378889285997478557427216191 58 | 4919594673997161317368638349972858474699479813292211191216314518583592781129989799717793478599178914 59 | 1212816992918491286133111869816588759854919992955644799971992763518799489378127378198842317125143175 60 | 9817119772978993827939981311825351117249291295672398359748996481799455529661331151988374128717911198 61 | 6959979697456791979798577971695957796829731637773612123812799821266989181491797352197987941284655891 62 | 1829894844699799799164192911889898589226224122828488548798956836828955569942827199983734198167711532 63 | 5916952789378491793328318724924815938918116221429399311731729455882819747879189851265198441116437193 64 | 2316593981955647388164661498291113142494888583381924456899524788279716191973597227394711639844831189 65 | 3881981741112295799319415597319199117187845593977913194841473581279361128428681978861181928158967816 66 | 3939242263819932783519851991511688491453123846164148517221781892992125524717372977117928596861679911 67 | 4641477457412251293698829869979122228625995879148499396737898889638982142482362649629364938991956974 68 | 3417666478142114314819128729451691124979739715435211656911679678126199443145439652619914181916916386 69 | 9197964843859986424199652481919639895555559646793968117224461359121927495439994851589194986745767199 70 | 1191146713643837513938479919124381959615799437231597888611882549928192193269491499894796168339169992 71 | 6979872799843753778983789714199378797788991933161979219897497929969121145325613894815531148198861891 72 | 2897711394223385969627249728919332712941132392931181791715591273435311267141292629528963749919974818 73 | 2125918421718973999673882616938889788112781219151398836281824826992487716291785514764768419996341848 74 | 8117112532342797719737195144272912273419948528898235213984262216911914853922412891737981226189198334 75 | 8882822942993968884139633296571516319764762815264113984968674415659712333797681255649671289971237799 76 | 6725141179673886293898974248697199412641236288717399983269493559587293483647122119669723819651859959 77 | 1635981511964285563772993596794551919558191915999181325192193378685931492329192296325893816297868828 78 | 2991842229168849265454541381722475797132627864721153611229176825219361112214114198745615199522814789 79 | 9662196198292971249673769196931861972531994792913285496999695698693139738979739822998883371946778731 80 | 1181918926984114515911966772399278413751112259425996784855812239818799793738956869624761863966171537 81 | 8999378549159336384488325775668744969198921949111299734515923966297588431419993827392872615499467238 82 | 8219274184271732972386957524972971338913988119687169636991229178984184952396926742299916161189181478 83 | 7841981498859866989959419399266132122945925192193395264118954251326349873819169726719525916228413529 84 | 1189765873965613399337499824992558892383441129519167958433888816632944688989791799265757192441191821 85 | 1122474698626225978191978983332813388675458997571911911591189133134719817996136961827365281919585249 86 | 9519433249611991278178319662998171623744296811698481199481493878654989641277211912555645876224759575 87 | 6125712149818157123747721394932661689175392123561445398732981771894674399674385915323594549791118229 88 | 9475311931154529515111211948114624455572817339939811952455255144919686927246823239177969193595165495 89 | 6922293775128388772696845128455845794498599788218748614476199937135329672919912919134897925229848914 90 | 2891219869495424258111637249312515345839111989928477967764594159826818397866381991698227675347949931 91 | 9197372475857939168321499153862716767719999947324714971881142347989981393496624535728827564155699898 92 | 8294523819699999172283151339392979985525768564995228999556114292196329719229999257932271983447882795 93 | 1939243157255769865891729948999177881918547399793134894519417939828591196633959298444827973314731911 94 | 2987118759793419159816857586286875932941481119368122639419833371776521998373714251159949852912988542 95 | 2899137888528523774811712997118913916121861528375892921143642282799875121339226945497819958922912934 96 | 6821975883666159111294417189613823241844761788648899421981336795385271598994988991711356515994498997 97 | 1145919998791266421889855551242212544911939312439931545382428359422871391568759927877629148945198935 98 | 7928248141712639396631551112398785717846351616999228378691195976769815744656987513118218637488928521 99 | 1684838399588648881327586957199874792142167832618795919593955245946215969749317899549939164939781974 100 | 8283891211961198885189675761681423122591798322135234799979215759171724989419131318722297222491939131 101 | -------------------------------------------------------------------------------- /Day16/day16.jl: -------------------------------------------------------------------------------- 1 | line = readline(joinpath(@__DIR__, "input.txt")) 2 | line = "D2FE28" 3 | 4 | bin2int(str) = parse(Int, str, base=2) 5 | 6 | hexs = parse.(UInt8, split(line, ""), base=16) 7 | bin = join(string.(hexs, base=2, pad=4)) 8 | 9 | function literal(str) 10 | litval, start, x = "", '1', 1 11 | while start == '1' 12 | start = str[x] 13 | litval = litval * str[x+1:x+4] 14 | x += 5 15 | end 16 | bin2int(litval), x + 6 17 | end 18 | 19 | 20 | function parse2end(str) 21 | v, lit = 0, Int[] 22 | while length(str) > 0 23 | new_v, new_lit, x = dec(str) 24 | str = str[x:end] 25 | v += new_v 26 | push!(lit, new_lit) 27 | end 28 | v, lit 29 | end 30 | 31 | function op(tp, lit) 32 | tp == 4 && return lit 33 | tp == 0 && return sum(lit) 34 | tp == 1 && return prod(lit) 35 | tp == 2 && return minimum(lit) 36 | tp == 3 && return maximum(lit) 37 | tp == 5 && return Int(lit[1] > lit[2]) 38 | tp == 6 && return Int(lit[1] < lit[2]) 39 | tp == 7 && return Int(lit[1] == lit[2]) 40 | end 41 | 42 | function dec(str) 43 | v, tp = bin2int(str[1:3]), bin2int(str[4:6]) 44 | 45 | if tp == 4 46 | lit, x = literal(str[7:end]) 47 | return v, lit, x 48 | end 49 | 50 | if str[7] == '0' 51 | x = 23 + bin2int(str[8:22]) 52 | new_v, lit = parse2end(str[23:x-1]) 53 | v += new_v 54 | return v, op(tp, lit), x 55 | end 56 | 57 | lit, x = Int[], 19 58 | for _ in 1:bin2int(str[8:18]) 59 | new_v, new_lit, new_x = dec(str[x:end]) 60 | push!(lit, new_lit) 61 | v += new_v 62 | x += new_x -1 63 | end 64 | 65 | v, op(tp, lit), x 66 | end 67 | 68 | p1, p2, _ = dec(bin) 69 | -------------------------------------------------------------------------------- /Day16/input.txt: -------------------------------------------------------------------------------- 1 | 20546C8802538E136091C1802689BCD7DA45948D319D1B100747A009C97696E8B4ABFCA6AB8F4F26C401964A6271C80F802D392C01CEDDCE6E5CB829802F600A00021B14E34C361006E0AC418BB2CA6800BE4599BB6A73507002A52BEEB14D201802F600849E64D3369D37C74100866785B3D0ADFD8E601E5EB9DE2366D93ECB8B040142CB8ACE07CCB5CF34CA89380410B6134CE6FEF104A2B200243396976A00401A45004313D68435DBDDDA61CE6428C01491AEBF0C7E580AE00CCC401B86514216880370EE3443D2013DF003750004361343D88800084C4C8B116A679018300740010C8571BA32080350DA0D42800043A3044189AE0174B314D76E1F3ACF3BDAE3EE7298FF134002EF9DBCD0644127E3CAE7FCBA9A80393544F9A927C973DF1A500965A5CEA94C4DDA5658B94C6C3002A798A629CF21280532BAB4F4C7271E45EE6E71D8143A9BC7948804AB94D1D6006AC200EC1E8A10C00010985316A35C3620061E641644D661A4C012993E99208FC60097802F28F528F738606008CA47205400814C89CC8890064D400AB4BE0A66F2BF253E73AE8401424A7BFB16C0037E06CE0641E0013B08010A8930CE2B980351161DC3730066274188B020054A5E16965940057895ADEB5BF56A635ADE2354191D70566273A6F5B078266008D8022200D46E8291C4401A8CF0CE33CEDE55E9F9802BA00B4BD44A5EA2D10CC00B40316800BAE1003580A6D6026F00090E50024007C9500258068850035C00A4012ED8040B400D71002AF500284009700226336CA4980471D655E25D4650888023AB00525CAE5CBA5E428600BE003993778CB4732996E9887AE3F311C291004BD37517C0041E780A7808802AF8C1C00D0CDBE4ACAD69B3B004E13BDF23CAE7368C9F62448F64546008E0034F3720192A67AD9254917454200DCE801C99ADF182575BBAACAC7F8580 2 | -------------------------------------------------------------------------------- /Day17/day17.jl: -------------------------------------------------------------------------------- 1 | ## Data --------------------------------------------------- 2 | line = readline(joinpath(@__DIR__, "input.txt")) 3 | 4 | nums = getproperty.(eachmatch(r"[\-0-9]+", line), :match) 5 | 6 | x = parse.(Int, nums[1:2]) 7 | y = parse.(Int, nums[3:4]) 8 | 9 | # Part 1 -------------------------------------------------- 10 | nextstep(p, v) = p .+ v, (v[1] - sign(v[1]), v[2] - 1) 11 | 12 | function highest_y(v) 13 | p, ymax = (0, 0), 0 14 | while p[2] ≥ 0 15 | p, v = nextstep(p, v) 16 | ymax = max(p[2], ymax) 17 | end 18 | return ymax 19 | end 20 | 21 | # Solution: 33670 22 | highest_y((1, abs(y[1] + 1))) 23 | 24 | # Part 2 -------------------------------------------------- 25 | function checkvalid!(valid, start, x1, x2, y1, y2) 26 | p, v = (0, 0), start 27 | while p[2] ≥ y1 && p[1] ≤ x2 28 | p, v = nextstep(p, v) 29 | if (x1 ≤ p[1] ≤ x2) && (y1 ≤ p[2] ≤ y2) 30 | push!(valid, start) 31 | break 32 | end 33 | end 34 | end 35 | 36 | function solve((x1, x2), (y1, y2)) 37 | valid = Set{NTuple{2, Int}}() 38 | for x in 1:x2 39 | for y in y1:abs(y1) 40 | checkvalid!(valid, (x, y), x1, x2, y1, y2) 41 | end 42 | end 43 | return valid 44 | end 45 | 46 | # Solution: 4903 47 | length(solve(x, y)) 48 | -------------------------------------------------------------------------------- /Day17/input.txt: -------------------------------------------------------------------------------- 1 | target area: x=25..67, y=-260..-200 2 | -------------------------------------------------------------------------------- /Day2/day2.jl: -------------------------------------------------------------------------------- 1 | # Data 2 | using DelimitedFiles 3 | 4 | data = readdlm(joinpath(@__DIR__, "input.txt")) 5 | cmds = String.(data[:, 1]) 6 | vals = Int.(data[:, 2]) 7 | 8 | ## Part 1 ------------------------------------------- 9 | function positions1(cmds, vals) 10 | hposition = 0 11 | depth = 0 12 | 13 | for (cmd, val) in zip(cmds, vals) 14 | cmd == "forward" && (hposition += val) 15 | cmd == "down" && (depth += val) 16 | cmd == "up" && (depth -= val) 17 | end 18 | 19 | return hposition, depth 20 | end 21 | 22 | # Solution: 2272262 23 | prod(positions1(cmds, vals)) 24 | 25 | ## Part 2 ------------------------------------------- 26 | function positions2(cmds, vals) 27 | hposition = 0 28 | depth = 0 29 | aim = 0 30 | 31 | for (cmd, val) in zip(cmds, vals) 32 | if cmd == "forward" 33 | hposition += val 34 | depth += val * aim 35 | end 36 | cmd == "down" && (aim += val) 37 | cmd == "up" && (aim -= val) 38 | end 39 | 40 | return hposition, depth 41 | end 42 | 43 | # Solution: 2134882034 44 | prod(positions2(cmds, vals)) 45 | -------------------------------------------------------------------------------- /Day2/input.txt: -------------------------------------------------------------------------------- 1 | forward 1 2 | forward 8 3 | down 9 4 | forward 3 5 | down 6 6 | down 1 7 | down 1 8 | forward 5 9 | forward 5 10 | forward 8 11 | down 6 12 | forward 7 13 | down 3 14 | down 4 15 | up 1 16 | forward 7 17 | forward 5 18 | forward 8 19 | down 1 20 | forward 9 21 | forward 9 22 | forward 7 23 | up 8 24 | forward 5 25 | forward 9 26 | down 3 27 | forward 2 28 | down 5 29 | down 4 30 | up 2 31 | up 5 32 | forward 3 33 | forward 8 34 | down 9 35 | down 1 36 | forward 2 37 | forward 6 38 | up 2 39 | up 9 40 | forward 8 41 | down 7 42 | forward 2 43 | up 5 44 | forward 7 45 | down 9 46 | forward 9 47 | forward 5 48 | down 8 49 | down 6 50 | forward 2 51 | up 4 52 | down 2 53 | down 9 54 | forward 4 55 | down 4 56 | forward 9 57 | down 8 58 | down 7 59 | down 4 60 | forward 6 61 | forward 9 62 | up 7 63 | down 2 64 | up 6 65 | down 8 66 | forward 3 67 | forward 9 68 | forward 7 69 | down 1 70 | forward 1 71 | forward 7 72 | forward 5 73 | down 4 74 | down 1 75 | forward 4 76 | forward 9 77 | forward 6 78 | down 5 79 | down 1 80 | forward 9 81 | down 6 82 | down 4 83 | forward 8 84 | up 8 85 | forward 9 86 | up 9 87 | up 9 88 | up 7 89 | forward 4 90 | down 4 91 | forward 4 92 | forward 2 93 | forward 2 94 | forward 9 95 | up 4 96 | forward 4 97 | forward 3 98 | forward 5 99 | down 3 100 | up 4 101 | forward 3 102 | forward 5 103 | forward 9 104 | forward 7 105 | down 1 106 | forward 4 107 | down 5 108 | up 6 109 | down 9 110 | forward 8 111 | down 1 112 | forward 3 113 | down 2 114 | up 8 115 | down 5 116 | down 8 117 | forward 5 118 | down 6 119 | forward 6 120 | down 7 121 | up 5 122 | forward 8 123 | forward 5 124 | forward 7 125 | up 3 126 | down 6 127 | up 9 128 | forward 1 129 | forward 7 130 | forward 3 131 | forward 8 132 | up 4 133 | up 9 134 | down 5 135 | forward 5 136 | forward 4 137 | forward 4 138 | down 9 139 | up 6 140 | forward 5 141 | forward 2 142 | down 6 143 | down 2 144 | forward 9 145 | down 7 146 | forward 8 147 | down 4 148 | forward 8 149 | forward 8 150 | up 7 151 | up 5 152 | forward 6 153 | forward 4 154 | up 4 155 | forward 2 156 | up 3 157 | down 8 158 | forward 1 159 | forward 8 160 | forward 8 161 | forward 4 162 | up 7 163 | forward 2 164 | down 8 165 | forward 1 166 | down 1 167 | down 4 168 | up 3 169 | forward 8 170 | forward 1 171 | down 9 172 | up 5 173 | down 5 174 | forward 9 175 | forward 4 176 | up 7 177 | down 2 178 | down 4 179 | forward 1 180 | forward 6 181 | up 8 182 | up 1 183 | forward 8 184 | down 5 185 | down 5 186 | forward 9 187 | down 8 188 | forward 9 189 | down 1 190 | up 7 191 | forward 8 192 | up 2 193 | down 2 194 | up 1 195 | up 9 196 | forward 6 197 | down 5 198 | forward 1 199 | down 2 200 | forward 5 201 | down 3 202 | up 8 203 | down 2 204 | down 8 205 | forward 7 206 | forward 2 207 | up 3 208 | forward 3 209 | down 1 210 | forward 4 211 | down 7 212 | up 5 213 | forward 8 214 | forward 8 215 | up 6 216 | up 4 217 | up 4 218 | down 7 219 | forward 2 220 | forward 1 221 | forward 6 222 | up 3 223 | forward 3 224 | forward 9 225 | down 4 226 | forward 2 227 | down 9 228 | down 8 229 | forward 5 230 | forward 2 231 | forward 4 232 | forward 5 233 | forward 7 234 | down 4 235 | up 5 236 | down 7 237 | forward 4 238 | up 7 239 | down 9 240 | down 4 241 | down 3 242 | forward 8 243 | down 5 244 | forward 8 245 | forward 8 246 | down 3 247 | down 8 248 | down 2 249 | forward 4 250 | forward 5 251 | down 7 252 | down 7 253 | down 6 254 | up 9 255 | down 9 256 | down 5 257 | forward 4 258 | down 1 259 | down 7 260 | up 4 261 | down 8 262 | up 5 263 | up 1 264 | down 9 265 | down 7 266 | forward 9 267 | forward 7 268 | down 6 269 | up 2 270 | forward 1 271 | down 8 272 | up 2 273 | forward 8 274 | down 2 275 | forward 2 276 | down 9 277 | forward 2 278 | forward 3 279 | forward 7 280 | up 3 281 | up 3 282 | up 3 283 | forward 5 284 | up 9 285 | up 1 286 | down 9 287 | down 4 288 | down 5 289 | up 9 290 | up 7 291 | down 9 292 | forward 3 293 | down 5 294 | down 6 295 | down 3 296 | up 6 297 | forward 8 298 | up 6 299 | up 8 300 | down 4 301 | forward 8 302 | down 8 303 | forward 7 304 | up 1 305 | forward 4 306 | down 2 307 | forward 7 308 | down 6 309 | up 8 310 | forward 1 311 | down 8 312 | down 4 313 | forward 7 314 | forward 2 315 | up 4 316 | forward 9 317 | forward 9 318 | down 8 319 | up 1 320 | down 3 321 | forward 7 322 | down 9 323 | forward 2 324 | forward 5 325 | down 4 326 | down 8 327 | down 3 328 | up 1 329 | down 2 330 | up 3 331 | forward 1 332 | forward 5 333 | forward 3 334 | down 2 335 | up 2 336 | forward 7 337 | down 6 338 | forward 3 339 | down 8 340 | forward 5 341 | forward 4 342 | up 2 343 | forward 4 344 | up 2 345 | down 4 346 | forward 8 347 | forward 5 348 | down 1 349 | forward 6 350 | down 2 351 | down 5 352 | up 8 353 | forward 5 354 | down 2 355 | up 5 356 | down 5 357 | forward 4 358 | forward 3 359 | forward 8 360 | down 9 361 | up 3 362 | forward 4 363 | forward 2 364 | forward 2 365 | forward 2 366 | down 4 367 | forward 8 368 | forward 5 369 | up 3 370 | down 1 371 | forward 3 372 | up 5 373 | forward 8 374 | down 6 375 | forward 6 376 | down 9 377 | forward 6 378 | up 5 379 | down 6 380 | up 9 381 | forward 8 382 | down 2 383 | forward 9 384 | down 7 385 | down 5 386 | down 4 387 | forward 3 388 | forward 2 389 | forward 1 390 | forward 7 391 | down 3 392 | forward 4 393 | up 6 394 | down 5 395 | down 4 396 | down 8 397 | down 4 398 | up 6 399 | forward 3 400 | down 4 401 | down 6 402 | forward 9 403 | forward 6 404 | up 4 405 | down 2 406 | down 7 407 | forward 2 408 | forward 9 409 | down 4 410 | down 8 411 | down 3 412 | down 4 413 | forward 9 414 | forward 4 415 | forward 1 416 | down 7 417 | forward 2 418 | up 1 419 | forward 7 420 | down 7 421 | forward 7 422 | forward 5 423 | up 8 424 | down 4 425 | up 7 426 | up 2 427 | up 7 428 | up 8 429 | down 9 430 | forward 8 431 | forward 8 432 | down 3 433 | forward 9 434 | down 3 435 | up 7 436 | down 1 437 | down 9 438 | forward 2 439 | up 4 440 | down 2 441 | forward 2 442 | up 5 443 | up 5 444 | up 1 445 | forward 7 446 | up 5 447 | down 3 448 | up 8 449 | down 9 450 | down 7 451 | up 4 452 | down 8 453 | down 4 454 | forward 8 455 | up 6 456 | down 2 457 | down 4 458 | forward 7 459 | forward 8 460 | forward 8 461 | forward 1 462 | down 4 463 | down 4 464 | forward 4 465 | down 7 466 | forward 3 467 | down 3 468 | down 6 469 | down 7 470 | down 6 471 | forward 8 472 | down 4 473 | down 7 474 | down 1 475 | down 7 476 | down 5 477 | down 2 478 | up 5 479 | forward 9 480 | down 3 481 | down 4 482 | down 4 483 | forward 5 484 | down 9 485 | forward 1 486 | up 1 487 | up 1 488 | down 3 489 | forward 8 490 | up 6 491 | up 6 492 | down 1 493 | up 2 494 | down 7 495 | down 9 496 | up 7 497 | forward 7 498 | down 6 499 | down 5 500 | down 5 501 | up 8 502 | forward 7 503 | down 1 504 | down 6 505 | forward 4 506 | forward 5 507 | forward 5 508 | forward 2 509 | down 5 510 | up 6 511 | down 5 512 | forward 1 513 | down 9 514 | up 4 515 | down 7 516 | down 8 517 | down 5 518 | down 8 519 | forward 7 520 | forward 2 521 | up 3 522 | down 7 523 | forward 1 524 | forward 4 525 | forward 5 526 | forward 1 527 | forward 7 528 | down 6 529 | forward 9 530 | forward 8 531 | down 5 532 | forward 5 533 | forward 8 534 | forward 3 535 | up 1 536 | forward 6 537 | forward 9 538 | forward 8 539 | down 3 540 | forward 8 541 | forward 7 542 | down 1 543 | forward 9 544 | down 9 545 | forward 6 546 | forward 4 547 | forward 2 548 | forward 9 549 | down 7 550 | down 6 551 | forward 4 552 | forward 1 553 | forward 3 554 | forward 9 555 | up 4 556 | down 5 557 | forward 6 558 | down 8 559 | up 5 560 | down 9 561 | down 6 562 | forward 7 563 | down 9 564 | forward 6 565 | forward 5 566 | down 1 567 | down 4 568 | up 6 569 | forward 2 570 | down 8 571 | down 5 572 | up 5 573 | forward 6 574 | forward 5 575 | down 8 576 | down 4 577 | down 3 578 | down 8 579 | forward 3 580 | forward 9 581 | up 6 582 | down 9 583 | down 1 584 | forward 7 585 | forward 5 586 | down 5 587 | down 1 588 | forward 7 589 | forward 3 590 | up 6 591 | forward 1 592 | up 9 593 | forward 1 594 | down 4 595 | down 3 596 | down 3 597 | up 6 598 | forward 9 599 | forward 5 600 | up 9 601 | up 5 602 | forward 5 603 | forward 7 604 | forward 9 605 | down 8 606 | forward 2 607 | down 7 608 | down 7 609 | forward 3 610 | down 2 611 | up 1 612 | down 4 613 | down 6 614 | down 8 615 | forward 8 616 | forward 6 617 | up 3 618 | forward 9 619 | down 8 620 | up 7 621 | forward 6 622 | forward 9 623 | up 8 624 | forward 3 625 | down 9 626 | forward 3 627 | forward 4 628 | down 3 629 | down 2 630 | forward 2 631 | down 5 632 | down 9 633 | down 2 634 | down 7 635 | down 4 636 | down 6 637 | forward 5 638 | up 1 639 | forward 9 640 | forward 2 641 | up 8 642 | forward 8 643 | down 3 644 | forward 7 645 | down 5 646 | forward 5 647 | down 5 648 | down 9 649 | down 9 650 | down 6 651 | down 5 652 | down 4 653 | up 6 654 | forward 9 655 | down 2 656 | down 5 657 | up 3 658 | forward 8 659 | forward 1 660 | down 4 661 | down 8 662 | forward 6 663 | forward 7 664 | up 2 665 | forward 1 666 | forward 2 667 | down 7 668 | down 6 669 | up 7 670 | forward 7 671 | down 6 672 | down 6 673 | down 8 674 | forward 8 675 | up 5 676 | up 9 677 | forward 8 678 | forward 1 679 | down 6 680 | down 6 681 | up 7 682 | forward 6 683 | up 5 684 | forward 7 685 | down 1 686 | forward 1 687 | forward 9 688 | up 7 689 | down 3 690 | forward 4 691 | down 6 692 | down 6 693 | up 5 694 | up 7 695 | down 1 696 | up 2 697 | down 8 698 | down 1 699 | forward 2 700 | down 3 701 | forward 8 702 | forward 2 703 | up 2 704 | down 7 705 | forward 5 706 | forward 7 707 | down 2 708 | up 1 709 | down 1 710 | down 6 711 | down 4 712 | up 1 713 | forward 2 714 | forward 7 715 | forward 8 716 | down 1 717 | forward 6 718 | down 5 719 | down 8 720 | up 6 721 | down 7 722 | forward 6 723 | down 8 724 | down 6 725 | down 9 726 | forward 8 727 | down 9 728 | down 6 729 | up 2 730 | down 2 731 | down 5 732 | down 5 733 | up 8 734 | forward 6 735 | forward 7 736 | up 4 737 | down 5 738 | up 5 739 | forward 6 740 | forward 8 741 | up 6 742 | up 7 743 | up 3 744 | up 9 745 | down 6 746 | forward 3 747 | forward 3 748 | down 6 749 | down 8 750 | down 2 751 | down 2 752 | up 7 753 | up 6 754 | forward 5 755 | forward 4 756 | down 2 757 | down 3 758 | forward 8 759 | down 9 760 | forward 3 761 | down 8 762 | down 8 763 | forward 9 764 | forward 7 765 | down 8 766 | down 7 767 | up 2 768 | down 8 769 | down 1 770 | down 7 771 | up 7 772 | forward 3 773 | forward 5 774 | up 1 775 | down 9 776 | forward 3 777 | down 4 778 | down 5 779 | down 3 780 | down 8 781 | up 7 782 | forward 4 783 | down 6 784 | forward 9 785 | forward 9 786 | forward 1 787 | up 6 788 | up 8 789 | forward 6 790 | down 6 791 | down 6 792 | forward 1 793 | up 4 794 | down 2 795 | forward 8 796 | forward 6 797 | down 2 798 | down 9 799 | down 6 800 | down 4 801 | forward 5 802 | down 5 803 | down 7 804 | down 6 805 | forward 8 806 | down 8 807 | down 2 808 | up 2 809 | up 2 810 | down 3 811 | forward 2 812 | down 2 813 | down 5 814 | down 3 815 | up 5 816 | down 8 817 | forward 8 818 | down 8 819 | down 4 820 | down 3 821 | forward 7 822 | forward 1 823 | forward 1 824 | down 7 825 | down 6 826 | down 2 827 | up 9 828 | up 7 829 | down 9 830 | forward 1 831 | down 3 832 | down 4 833 | down 7 834 | forward 6 835 | down 8 836 | forward 3 837 | down 6 838 | forward 4 839 | down 3 840 | down 5 841 | down 4 842 | forward 4 843 | up 4 844 | up 1 845 | up 2 846 | down 3 847 | forward 6 848 | up 6 849 | forward 8 850 | forward 9 851 | forward 3 852 | forward 4 853 | forward 2 854 | forward 8 855 | forward 7 856 | up 4 857 | down 5 858 | forward 8 859 | forward 6 860 | down 2 861 | forward 3 862 | down 5 863 | down 8 864 | forward 3 865 | forward 4 866 | down 3 867 | down 9 868 | down 6 869 | up 6 870 | down 1 871 | down 8 872 | forward 7 873 | down 3 874 | forward 8 875 | forward 4 876 | down 2 877 | up 7 878 | down 5 879 | forward 1 880 | forward 7 881 | forward 1 882 | forward 3 883 | down 8 884 | down 7 885 | forward 5 886 | forward 3 887 | down 1 888 | forward 7 889 | down 4 890 | down 3 891 | down 6 892 | down 9 893 | forward 6 894 | down 1 895 | forward 3 896 | forward 3 897 | forward 5 898 | forward 9 899 | up 3 900 | up 6 901 | forward 7 902 | up 5 903 | up 9 904 | down 2 905 | down 5 906 | up 5 907 | forward 4 908 | forward 4 909 | forward 6 910 | up 2 911 | down 9 912 | down 4 913 | down 2 914 | forward 7 915 | down 3 916 | up 4 917 | up 6 918 | forward 7 919 | forward 1 920 | forward 1 921 | down 7 922 | forward 5 923 | forward 4 924 | up 6 925 | forward 4 926 | forward 2 927 | forward 6 928 | up 1 929 | up 5 930 | forward 8 931 | up 2 932 | forward 3 933 | forward 5 934 | up 9 935 | down 4 936 | forward 1 937 | up 7 938 | down 5 939 | forward 7 940 | forward 2 941 | forward 8 942 | down 8 943 | down 2 944 | forward 2 945 | forward 4 946 | forward 8 947 | forward 1 948 | forward 8 949 | forward 2 950 | down 9 951 | forward 7 952 | down 7 953 | down 5 954 | up 9 955 | forward 5 956 | down 1 957 | down 9 958 | down 2 959 | forward 6 960 | down 8 961 | up 9 962 | forward 5 963 | down 2 964 | forward 1 965 | up 4 966 | forward 1 967 | down 9 968 | up 3 969 | down 3 970 | down 2 971 | forward 9 972 | down 5 973 | forward 4 974 | down 1 975 | forward 4 976 | down 8 977 | down 3 978 | forward 8 979 | forward 2 980 | forward 3 981 | down 1 982 | forward 1 983 | down 2 984 | forward 6 985 | up 3 986 | up 5 987 | up 9 988 | forward 9 989 | down 5 990 | down 5 991 | forward 4 992 | up 6 993 | down 7 994 | down 2 995 | forward 8 996 | forward 6 997 | forward 6 998 | up 6 999 | down 7 1000 | forward 8 1001 | -------------------------------------------------------------------------------- /Day3/day3.jl: -------------------------------------------------------------------------------- 1 | # Data 2 | vecofvec = map(readlines(joinpath(@__DIR__, "input.txt"))) do line 3 | parse.(Bool, split(line, "")) 4 | end 5 | 6 | data = permutedims(hcat(vecofvec...)) 7 | 8 | # lines = readlines(joinpath(@__DIR__, "input.txt")) 9 | # data = Matrix{Int}(undef, length(lines), length(lines[1])) 10 | 11 | # for (i, line) in enumerate(lines) 12 | # data[i, :] .= parse.(Int, split(line, "")) 13 | # end 14 | 15 | # Utility function 16 | binary2int(str::AbstractString) = parse(Int, str, base=2) 17 | binary2int(vector::Vector{Int}) = binary2int(string(vector...)) 18 | binary2int(array::BitArray) = binary2int(string(Int.(array)...)) 19 | 20 | ## Part 1 ----------------------------------------------------------- 21 | function power_consumption(data::BitMatrix) 22 | mid = size(data, 1) / 2 23 | 24 | γ = map(eachcol(data)) do col 25 | count(col) > mid ? 1 : 0 26 | end 27 | 28 | ϵ = map(eachcol(data)) do col 29 | count(col) < mid ? 1 : 0 30 | end 31 | 32 | return binary2int(γ) * binary2int(ϵ) 33 | end 34 | 35 | # Solution: 1092896 36 | power_consumption(data) 37 | 38 | ## Part 2 ----------------------------------------------------------- 39 | oxygen(data, idxs, col, mid) = count(data[idxs, col]) ≥ mid ? 1 : 0 40 | co2(data, idxs, col, mid) = count(data[idxs, col]) ≥ mid ? 0 : 1 41 | 42 | function rating(data::BitMatrix, compare::Function) 43 | idxs = collect(axes(data, 1)) 44 | for col in axes(data, 2) 45 | mid = size(data[idxs, col], 1) / 2 46 | x = compare(data, idxs, col, mid) 47 | 48 | idxs = idxs[findall(data[idxs, col] .== x)] 49 | 50 | length(idxs) == 1 && break 51 | end 52 | return binary2int(data[idxs, :]) 53 | end 54 | 55 | life_support(data) = rating(data, oxygen) * rating(data, co2) 56 | 57 | # Solution: 4672151 58 | life_support(data) 59 | -------------------------------------------------------------------------------- /Day3/input.txt: -------------------------------------------------------------------------------- 1 | 101000001100 2 | 011111100111 3 | 111100001110 4 | 110000011001 5 | 001001001011 6 | 010011101000 7 | 011001110011 8 | 010100010000 9 | 101110110111 10 | 110110111111 11 | 011100011011 12 | 000010100101 13 | 001110001001 14 | 110111100011 15 | 011111101110 16 | 001100000001 17 | 101101101101 18 | 011110110101 19 | 010101010100 20 | 111010001111 21 | 010011010111 22 | 110111101011 23 | 001011000100 24 | 100111001100 25 | 010011001011 26 | 110101111110 27 | 010011100101 28 | 110100010100 29 | 100110010000 30 | 010100000111 31 | 100110000011 32 | 011111011100 33 | 010011100100 34 | 010110100110 35 | 110011000001 36 | 101000100001 37 | 110111101010 38 | 001011010100 39 | 100101010110 40 | 000011001011 41 | 000110101000 42 | 010111100001 43 | 000111110101 44 | 000000100011 45 | 001011100101 46 | 010111101010 47 | 001101100100 48 | 010000101011 49 | 011011111101 50 | 011111011010 51 | 100101000101 52 | 111001110100 53 | 110011100011 54 | 100000011000 55 | 111101101101 56 | 110100110011 57 | 100101000011 58 | 101001101010 59 | 111111000000 60 | 110010110111 61 | 011010101010 62 | 101111011111 63 | 110011011100 64 | 001110010100 65 | 110110000000 66 | 101000010100 67 | 111110011100 68 | 101110101010 69 | 001111110011 70 | 100110000010 71 | 000011000111 72 | 000110111000 73 | 111100011100 74 | 101001100101 75 | 111111001101 76 | 110101100101 77 | 100011110111 78 | 001100101001 79 | 010101110111 80 | 001101111001 81 | 100101010010 82 | 011010101101 83 | 001110100010 84 | 100111011101 85 | 100001010110 86 | 001000010110 87 | 001010110011 88 | 011011110101 89 | 010100010100 90 | 111110000100 91 | 001100110100 92 | 000110011101 93 | 110010010000 94 | 101101111111 95 | 000110100001 96 | 100001101010 97 | 101000101100 98 | 000000000001 99 | 101101110011 100 | 101101011001 101 | 100000010000 102 | 001111110111 103 | 110101000010 104 | 000000010011 105 | 110010101101 106 | 010011101011 107 | 010100001001 108 | 110000110010 109 | 010110110000 110 | 011101000011 111 | 111100011110 112 | 101010010111 113 | 100111100000 114 | 011110110000 115 | 110001101010 116 | 110010011000 117 | 010001001100 118 | 110100000000 119 | 101001101100 120 | 011011101010 121 | 100100011011 122 | 100111100001 123 | 001011010011 124 | 111001101001 125 | 110001011111 126 | 011110010100 127 | 111000100100 128 | 011111110010 129 | 000010111101 130 | 110110101000 131 | 001110011100 132 | 011000011011 133 | 101111110001 134 | 000100100011 135 | 001110010010 136 | 100010111101 137 | 011101010110 138 | 011001000010 139 | 111110111110 140 | 100110001011 141 | 000011101100 142 | 110000001111 143 | 111010001100 144 | 111100001010 145 | 000101000111 146 | 001101010101 147 | 111000000011 148 | 010010011100 149 | 111010000111 150 | 010110110110 151 | 101111101000 152 | 011100000011 153 | 000101101101 154 | 100110000100 155 | 100010110011 156 | 001011000001 157 | 011001101111 158 | 011010000111 159 | 101100010000 160 | 001010011001 161 | 100001111111 162 | 100000101110 163 | 011001111100 164 | 110100110110 165 | 011100001100 166 | 000111110010 167 | 101100100000 168 | 000010110010 169 | 110111000001 170 | 001111000010 171 | 011000101000 172 | 110001000101 173 | 110010100001 174 | 100100101000 175 | 011011111010 176 | 000010000011 177 | 010111000110 178 | 010011110101 179 | 110111110111 180 | 001001101101 181 | 000011001111 182 | 010011111001 183 | 001011000000 184 | 011111100000 185 | 000101111100 186 | 110011111010 187 | 100100011111 188 | 000101101100 189 | 110101110010 190 | 010100010101 191 | 101010000011 192 | 111101100101 193 | 010100101100 194 | 100110010100 195 | 001100001010 196 | 001000000101 197 | 101100001110 198 | 100100110011 199 | 110110011011 200 | 010010001000 201 | 011000011111 202 | 001000111000 203 | 001110110000 204 | 001111011001 205 | 000101011001 206 | 101010010110 207 | 010101101001 208 | 101011100100 209 | 001110111100 210 | 001101001011 211 | 110001001001 212 | 101011001001 213 | 011111010011 214 | 110101000101 215 | 011110011111 216 | 101101110110 217 | 100010010100 218 | 101001111101 219 | 100110001100 220 | 110001100110 221 | 110111001101 222 | 010001111100 223 | 001011100010 224 | 011010100101 225 | 101010101010 226 | 001111010101 227 | 011101110110 228 | 111110110011 229 | 010110000000 230 | 110001010111 231 | 100001110111 232 | 010000001000 233 | 001000001001 234 | 100110111011 235 | 011010001111 236 | 111011101100 237 | 110111100001 238 | 001101110000 239 | 011101100001 240 | 101110011001 241 | 101001011100 242 | 111000000100 243 | 110011010101 244 | 111011101000 245 | 000111111110 246 | 111111000111 247 | 100100010100 248 | 101111100001 249 | 110011000100 250 | 100001011111 251 | 110011100111 252 | 011111100010 253 | 100111101101 254 | 111110101111 255 | 011001011001 256 | 100011001110 257 | 001101010001 258 | 011010101000 259 | 011011011101 260 | 011100010000 261 | 010001001111 262 | 011111100011 263 | 101011000110 264 | 101010000000 265 | 110100101001 266 | 000010001100 267 | 110001000001 268 | 000001001011 269 | 000100000101 270 | 001101010010 271 | 111101001010 272 | 011001001000 273 | 110001101110 274 | 101111111110 275 | 000110110110 276 | 111111110110 277 | 101101000110 278 | 101100011001 279 | 111110011000 280 | 001001010011 281 | 000101000001 282 | 111010100110 283 | 001101101011 284 | 001011011100 285 | 100111111101 286 | 000110000101 287 | 100001011000 288 | 110111010111 289 | 000111111000 290 | 011010011010 291 | 000000100000 292 | 011010110011 293 | 001101100101 294 | 111001110111 295 | 011010011011 296 | 110000100011 297 | 100001001010 298 | 111001100100 299 | 001100000100 300 | 010011001100 301 | 011000111000 302 | 001100100010 303 | 100101001010 304 | 111000111011 305 | 010101110010 306 | 001001101000 307 | 000010101110 308 | 000000100100 309 | 110001110011 310 | 110111100000 311 | 010100000000 312 | 100110110100 313 | 111111101101 314 | 010100111111 315 | 000101011100 316 | 100000100101 317 | 101011111100 318 | 001101000011 319 | 001011110001 320 | 011010100001 321 | 110110011010 322 | 010010100101 323 | 100001110101 324 | 100001101110 325 | 100100001000 326 | 100010101010 327 | 010001000111 328 | 111100110000 329 | 101111001001 330 | 011000001101 331 | 011001100111 332 | 100110011010 333 | 111110101100 334 | 111101110001 335 | 010111010000 336 | 101101011010 337 | 110011001010 338 | 010001010100 339 | 010000110011 340 | 011010111000 341 | 101000010011 342 | 111101110101 343 | 011111010110 344 | 000101000000 345 | 001001010100 346 | 001001010001 347 | 111100101111 348 | 100101100110 349 | 000100010101 350 | 100011101001 351 | 111011011100 352 | 101100010011 353 | 010100000100 354 | 001010100111 355 | 011111000010 356 | 001011011000 357 | 101000101000 358 | 011010010101 359 | 101011011011 360 | 111110100110 361 | 001110011000 362 | 001101011000 363 | 110010101110 364 | 111010111011 365 | 111000000001 366 | 110111010100 367 | 100101010111 368 | 100011011101 369 | 111111011100 370 | 100111100110 371 | 001110001111 372 | 001101100110 373 | 100010101001 374 | 110100100010 375 | 110111100111 376 | 110011101100 377 | 010101010101 378 | 110011111101 379 | 011110101010 380 | 000110110000 381 | 011101110101 382 | 000001010001 383 | 001001000100 384 | 001001001010 385 | 010110001001 386 | 011000101011 387 | 111000100000 388 | 111000001011 389 | 011101100000 390 | 010110011101 391 | 100001101001 392 | 110101101011 393 | 011111110111 394 | 100001010111 395 | 110001000010 396 | 101010101111 397 | 011110010010 398 | 000100100110 399 | 000011100010 400 | 010111001011 401 | 100110011110 402 | 100000001000 403 | 000101110101 404 | 001000110100 405 | 101101010101 406 | 111000101000 407 | 101001100010 408 | 101010011010 409 | 001101010011 410 | 010001001110 411 | 110101100000 412 | 101110000010 413 | 111010010010 414 | 111001100101 415 | 111110101110 416 | 110101010110 417 | 000111100100 418 | 110001001100 419 | 100011010010 420 | 100001101111 421 | 011001000011 422 | 000100001111 423 | 101100101110 424 | 001110101101 425 | 000001001101 426 | 110000000010 427 | 110101110011 428 | 111011110100 429 | 011010101001 430 | 111000000110 431 | 110001000000 432 | 100111101000 433 | 001111100111 434 | 011100011001 435 | 011011110000 436 | 001110110100 437 | 001010111010 438 | 010110111010 439 | 011100100101 440 | 101011111111 441 | 011000111111 442 | 010111000010 443 | 111011001011 444 | 101100001011 445 | 011110011010 446 | 000100000110 447 | 001011001100 448 | 111001000011 449 | 011100111010 450 | 011111000101 451 | 001000011010 452 | 100100000111 453 | 000001011011 454 | 011101101011 455 | 010110101000 456 | 011101010000 457 | 010011111011 458 | 100101011101 459 | 010001110010 460 | 111111110111 461 | 010001011100 462 | 011111010100 463 | 101010100101 464 | 001100100110 465 | 100111110011 466 | 011111001001 467 | 010110100111 468 | 011100110001 469 | 110010101111 470 | 100001000001 471 | 000100011101 472 | 001111010111 473 | 101001111001 474 | 000111100011 475 | 000100001110 476 | 011011011111 477 | 000101001000 478 | 100000110010 479 | 010001010111 480 | 111011110001 481 | 001110110110 482 | 101101010011 483 | 001111011111 484 | 100011101100 485 | 110011101000 486 | 000100000000 487 | 011000100110 488 | 100000000010 489 | 110000011111 490 | 001100111110 491 | 001111101001 492 | 010111001101 493 | 111000100011 494 | 100011011011 495 | 110010000111 496 | 011000010111 497 | 100100110111 498 | 000011101101 499 | 001101000010 500 | 000011001000 501 | 101010101110 502 | 011001110000 503 | 100000100000 504 | 111111000010 505 | 110111010001 506 | 001010100001 507 | 000011110011 508 | 110100111100 509 | 100110101110 510 | 000010111110 511 | 111101101100 512 | 101100011110 513 | 010000000001 514 | 111101110000 515 | 001110011101 516 | 001101110010 517 | 011100000111 518 | 001111000111 519 | 101110000000 520 | 010110011010 521 | 110111111111 522 | 000010001101 523 | 000010101100 524 | 111011000101 525 | 000010001111 526 | 110101011110 527 | 011011000100 528 | 110110111101 529 | 110101010011 530 | 000101010110 531 | 001001100110 532 | 100101110000 533 | 101001110010 534 | 000101001010 535 | 010110101100 536 | 011110001101 537 | 010010010100 538 | 111000111111 539 | 001000010010 540 | 011110111101 541 | 010001000011 542 | 000110101011 543 | 001011110111 544 | 101010100010 545 | 101010100001 546 | 000101001101 547 | 100000100011 548 | 111010110101 549 | 111010011010 550 | 010101010110 551 | 001101111101 552 | 011011111100 553 | 110011111001 554 | 101011101011 555 | 101010011001 556 | 101011011100 557 | 111100100001 558 | 010001001000 559 | 111101101111 560 | 111110010111 561 | 010111000011 562 | 011010111011 563 | 111011010101 564 | 011000000000 565 | 110100101000 566 | 001001010000 567 | 101101000011 568 | 110010011001 569 | 110011110101 570 | 100000100111 571 | 111101101001 572 | 000100011111 573 | 111010110111 574 | 101111001100 575 | 001101110110 576 | 101111111101 577 | 101111001011 578 | 101101100010 579 | 110100010010 580 | 010111110000 581 | 010000110010 582 | 101000001111 583 | 011100000110 584 | 110111011010 585 | 000011110000 586 | 110010000011 587 | 011110101000 588 | 100111000010 589 | 010101000110 590 | 011100101010 591 | 000111110000 592 | 010100111000 593 | 010000011110 594 | 110110110001 595 | 100100011001 596 | 000010101001 597 | 011001010111 598 | 000001111101 599 | 110010000010 600 | 110101011011 601 | 001100001111 602 | 001001011000 603 | 001100110010 604 | 000011100101 605 | 111010010011 606 | 101000010001 607 | 111000000010 608 | 001110101011 609 | 011110101100 610 | 110011111111 611 | 110001110010 612 | 111001000100 613 | 011100001111 614 | 100001110011 615 | 000100110011 616 | 011100010011 617 | 000000100110 618 | 101000000111 619 | 110101111001 620 | 011011111001 621 | 011100110000 622 | 101010100100 623 | 000001111000 624 | 110000000011 625 | 010100100010 626 | 001001100101 627 | 110100000001 628 | 000010001110 629 | 110010000001 630 | 100110001110 631 | 001110000100 632 | 011011011000 633 | 010011001001 634 | 001010000010 635 | 010011001111 636 | 100001011100 637 | 001111010001 638 | 101011101000 639 | 111001111100 640 | 110111011011 641 | 101100111001 642 | 101100110100 643 | 000011000100 644 | 100001011010 645 | 011111001000 646 | 011000110100 647 | 001001101110 648 | 100000101100 649 | 100110000001 650 | 110110110000 651 | 111001000110 652 | 100100111000 653 | 101010101011 654 | 100010000111 655 | 101010110001 656 | 110000111010 657 | 101110110100 658 | 101111111001 659 | 111111101110 660 | 010101100110 661 | 010110001100 662 | 100000011111 663 | 011100110010 664 | 110011010000 665 | 100001110000 666 | 001000100100 667 | 110010110100 668 | 011011110110 669 | 011001101001 670 | 011001001100 671 | 000000001001 672 | 011100001101 673 | 111110001011 674 | 001010100011 675 | 000110101001 676 | 000010101101 677 | 101001010001 678 | 110101101111 679 | 011011100011 680 | 001011000111 681 | 110110010110 682 | 010100011100 683 | 110100000010 684 | 001011111110 685 | 100010110101 686 | 011010110001 687 | 111001101100 688 | 111010011101 689 | 100010110000 690 | 100110110111 691 | 101111000000 692 | 110110000001 693 | 111011000110 694 | 101011110010 695 | 111010100101 696 | 010100110010 697 | 101110111111 698 | 100010110001 699 | 110111101001 700 | 010110110011 701 | 111111011000 702 | 000101010010 703 | 011101000100 704 | 000000100001 705 | 001001001110 706 | 001010110001 707 | 111011100001 708 | 000010000111 709 | 101001001001 710 | 100000010110 711 | 011101101001 712 | 111000111001 713 | 111100110110 714 | 010010010010 715 | 110001110111 716 | 010010011010 717 | 111000110011 718 | 101101111011 719 | 110101001001 720 | 011111000011 721 | 010011000110 722 | 011000110010 723 | 001001100011 724 | 001110111000 725 | 000001010100 726 | 110010010010 727 | 001001100000 728 | 001100000000 729 | 011000111110 730 | 000001010101 731 | 000000011010 732 | 110111011001 733 | 110111110100 734 | 001111001101 735 | 000110100010 736 | 011011100000 737 | 011001010000 738 | 101111001111 739 | 011011011010 740 | 100001000100 741 | 010001100110 742 | 001001011010 743 | 001101111110 744 | 101100000111 745 | 100000111110 746 | 011000100101 747 | 100101110011 748 | 111011011110 749 | 110100001100 750 | 101010111100 751 | 001000110010 752 | 100011001011 753 | 101100001001 754 | 100110101001 755 | 110011110000 756 | 100111100100 757 | 100000101101 758 | 111011010010 759 | 101010001110 760 | 001011011001 761 | 111011010001 762 | 100101011000 763 | 001010010001 764 | 111100011001 765 | 000100100000 766 | 000000000000 767 | 010011001010 768 | 011011011001 769 | 000011110100 770 | 001010000111 771 | 000111111101 772 | 100000110101 773 | 110000101100 774 | 000111101110 775 | 110100100110 776 | 110100110100 777 | 100011010110 778 | 011100101100 779 | 011001011110 780 | 000101100111 781 | 110001010010 782 | 010101000011 783 | 101010111110 784 | 011001010010 785 | 010001110111 786 | 111100001100 787 | 101001100111 788 | 001111001011 789 | 111001110001 790 | 100010001000 791 | 111000111010 792 | 101111100000 793 | 101110010110 794 | 111111101001 795 | 010011110110 796 | 001001101001 797 | 101111100110 798 | 111111001011 799 | 101110110011 800 | 001111001111 801 | 010110011001 802 | 110110001110 803 | 010011011001 804 | 101011100111 805 | 001011110100 806 | 011010010000 807 | 100001000011 808 | 100000111111 809 | 010010111000 810 | 000010100111 811 | 100011110100 812 | 111111010110 813 | 101011010101 814 | 011011010001 815 | 000000110111 816 | 110101011001 817 | 010011100001 818 | 110010111010 819 | 100111101100 820 | 001001100001 821 | 110010110010 822 | 101111111111 823 | 111000111110 824 | 111111111100 825 | 111010110110 826 | 110001111011 827 | 000111001001 828 | 001100010010 829 | 010011000001 830 | 100001111011 831 | 011111010010 832 | 001000011000 833 | 000110000011 834 | 100111001110 835 | 110101101000 836 | 110011010110 837 | 110100010011 838 | 010110000100 839 | 001101000101 840 | 100110011000 841 | 011011100111 842 | 000010010100 843 | 000001011101 844 | 110010100101 845 | 100110000000 846 | 001101110001 847 | 011110111100 848 | 001000000000 849 | 100110010110 850 | 111000010010 851 | 000100010001 852 | 110101010101 853 | 100001010100 854 | 000010000010 855 | 110001000100 856 | 000100011011 857 | 010000100101 858 | 010000100100 859 | 111011000100 860 | 111101001000 861 | 100011110010 862 | 110011011010 863 | 110000011100 864 | 001111100000 865 | 110011100001 866 | 001000010011 867 | 111100101101 868 | 111101001011 869 | 010011101010 870 | 111111010011 871 | 110100001110 872 | 100000001100 873 | 000011011011 874 | 101111110010 875 | 100111101111 876 | 100010000011 877 | 011110000101 878 | 111010101111 879 | 000001101010 880 | 000011010000 881 | 101100100001 882 | 101100110010 883 | 100000110000 884 | 101000101110 885 | 011011100010 886 | 110111110000 887 | 010110001110 888 | 101110001101 889 | 000011101000 890 | 011110000001 891 | 111011111001 892 | 110011101001 893 | 010001010110 894 | 000101100011 895 | 101000101011 896 | 001010101010 897 | 110100011011 898 | 010101110001 899 | 000100101100 900 | 111011100000 901 | 011010000010 902 | 100100001011 903 | 101000110000 904 | 101001111110 905 | 111111001000 906 | 011011000011 907 | 011111000100 908 | 111011100101 909 | 010011000010 910 | 011100111011 911 | 010000100011 912 | 101011111000 913 | 001111100011 914 | 011011100001 915 | 100101111100 916 | 000101111110 917 | 100000110111 918 | 000100110001 919 | 010010110000 920 | 110100100011 921 | 000101011110 922 | 000001110011 923 | 111010001110 924 | 110000010000 925 | 010001010000 926 | 001100101101 927 | 111100000100 928 | 100100100010 929 | 011101110000 930 | 000001010111 931 | 101101001100 932 | 000111011110 933 | 100101010011 934 | 110101000000 935 | 000101011111 936 | 101011010000 937 | 101001001101 938 | 101100111110 939 | 111010101110 940 | 011101101000 941 | 001001000111 942 | 011001011111 943 | 100001100100 944 | 101000100011 945 | 001101110101 946 | 101101000100 947 | 110111011111 948 | 111101110100 949 | 111110011101 950 | 100110101011 951 | 111100111001 952 | 110011110111 953 | 001100101011 954 | 101010111010 955 | 011100100010 956 | 000010001010 957 | 010000100010 958 | 010001100100 959 | 000100000111 960 | 010100100110 961 | 101111001101 962 | 010110100011 963 | 110110010100 964 | 101011000101 965 | 110010111111 966 | 111011100011 967 | 111011101111 968 | 010111101101 969 | 111011001110 970 | 111001000111 971 | 000011000010 972 | 110100110111 973 | 111100101000 974 | 011111100001 975 | 100010110110 976 | 001000101001 977 | 010001010011 978 | 111001100000 979 | 101110111000 980 | 001000011101 981 | 011000100000 982 | 100010100011 983 | 000000111001 984 | 000010011101 985 | 011000101110 986 | 010101101100 987 | 010101001101 988 | 011010010100 989 | 000011110110 990 | 111001011101 991 | 001101011011 992 | 010110101010 993 | 001010101001 994 | 010001010001 995 | 110100101100 996 | 110101110000 997 | 000010111100 998 | 000100000010 999 | 111110111000 1000 | 110000100111 1001 | -------------------------------------------------------------------------------- /Day4/day4.jl: -------------------------------------------------------------------------------- 1 | # Data 2 | data = readlines(joinpath(@__DIR__, "input.txt")) 3 | 4 | nums = parse.(Int, split(data[1], ',')) 5 | 6 | n = length(data) ÷ 6 7 | boards = Vector{Matrix{Int}}(undef, n) 8 | for (i, j) in enumerate(3:6:length(data)) 9 | boards[i] = Matrix{Int}(undef, 5, 5) 10 | for k in 1:5 11 | boards[i][k, :] .= parse.(Int, split(data[j+k-1])) 12 | end 13 | end 14 | 15 | ## Part 1 ------------------------------------------------- 16 | function winfirst(boards, nums) 17 | set = nums[1:4] 18 | 19 | for n in nums[5:end] 20 | push!(set, n) 21 | for board in boards 22 | for col in eachcol(board) 23 | col ⊆ set && return board, set 24 | end 25 | for row in eachrow(board) 26 | row ⊆ set && return board, set 27 | end 28 | end 29 | end 30 | end 31 | 32 | function score(board, nums) 33 | l = last(nums) 34 | s = sum(board[findall(i -> i ∉ nums, board)]) 35 | return l * s 36 | end 37 | 38 | # Solution: 74320 39 | score(winfirst(boards, nums)...) 40 | 41 | ## Part 2 ------------------------------------------------- 42 | function winlast(boards, nums) 43 | set = nums[1:4] 44 | win = falses(length(boards)) 45 | 46 | for n in nums[5:end] 47 | push!(set, n) 48 | for (i, board) in enumerate(boards) 49 | if win[i] == false 50 | for col in eachcol(board) 51 | col ⊆ set && (win[i] = true) 52 | end 53 | for row in eachrow(board) 54 | row ⊆ set && (win[i] = true) 55 | end 56 | end 57 | all(win) && return board, set 58 | end 59 | end 60 | end 61 | 62 | # Solution: 17884 63 | score(winlast(boards, nums)...) 64 | -------------------------------------------------------------------------------- /Day4/input.txt: -------------------------------------------------------------------------------- 1 | 46,12,57,37,14,78,31,71,87,52,64,97,10,35,54,36,27,84,80,94,99,22,0,11,30,44,86,59,66,7,90,21,51,53,92,8,76,41,39,77,42,88,29,24,60,17,68,13,79,67,50,82,25,61,20,16,6,3,81,19,85,9,28,56,75,96,2,26,1,62,33,63,32,73,18,48,43,65,98,5,91,69,47,4,38,23,49,34,55,83,93,45,72,95,40,15,58,74,70,89 2 | 3 | 37 72 60 35 89 4 | 32 49 4 77 82 5 | 30 26 27 63 88 6 | 29 43 16 34 58 7 | 48 33 96 79 94 8 | 9 | 41 94 77 43 87 10 | 2 17 82 96 25 11 | 95 49 32 12 9 12 | 59 33 67 71 64 13 | 88 54 93 85 30 14 | 15 | 78 84 73 64 81 16 | 6 66 54 21 15 17 | 72 88 69 5 93 18 | 11 96 38 95 44 19 | 13 41 94 55 48 20 | 21 | 5 14 2 82 33 22 | 56 26 0 84 92 23 | 8 95 24 54 25 24 | 68 67 15 85 47 25 | 20 91 36 13 88 26 | 27 | 39 26 33 65 32 28 | 78 72 80 51 0 29 | 35 64 60 18 31 30 | 93 59 83 54 74 31 | 86 5 9 98 69 32 | 33 | 0 8 20 18 70 34 | 5 29 65 21 57 35 | 68 61 83 63 51 36 | 91 73 77 75 80 37 | 35 62 16 32 10 38 | 39 | 51 78 58 67 93 40 | 50 14 99 5 31 41 | 6 21 48 30 83 42 | 22 33 23 1 34 43 | 2 72 57 54 42 44 | 45 | 15 68 4 24 49 46 | 12 9 74 88 51 47 | 91 19 50 76 75 48 | 80 84 23 17 53 49 | 67 42 22 85 36 50 | 51 | 41 78 11 69 9 52 | 90 25 98 65 77 53 | 97 53 37 84 89 54 | 58 63 5 55 1 55 | 24 10 74 20 82 56 | 57 | 42 19 95 89 49 58 | 61 31 50 76 3 59 | 34 47 32 69 86 60 | 78 68 99 11 91 61 | 55 12 73 45 23 62 | 63 | 24 53 95 64 14 64 | 40 29 71 57 97 65 | 62 70 25 22 2 66 | 88 68 33 82 59 67 | 72 38 76 78 43 68 | 69 | 73 36 84 90 40 70 | 16 4 57 9 29 71 | 38 97 46 51 83 72 | 86 88 99 44 32 73 | 54 49 37 43 62 74 | 75 | 18 66 17 49 27 76 | 24 93 91 87 72 77 | 54 37 77 43 10 78 | 88 80 60 15 79 79 | 47 68 12 2 69 80 | 81 | 9 23 13 57 68 82 | 38 97 63 88 98 83 | 96 62 65 82 58 84 | 61 83 29 47 40 85 | 21 86 20 16 56 86 | 87 | 27 90 37 97 52 88 | 14 96 76 21 79 89 | 0 43 63 81 56 90 | 42 62 23 55 74 91 | 45 72 77 44 47 92 | 93 | 8 78 63 24 87 94 | 9 23 12 17 68 95 | 36 83 45 61 50 96 | 84 77 18 86 37 97 | 31 26 19 49 94 98 | 99 | 72 84 59 48 40 100 | 92 98 35 1 80 101 | 83 15 85 63 39 102 | 2 64 58 13 20 103 | 29 88 60 12 74 104 | 105 | 21 94 52 6 4 106 | 89 70 39 23 64 107 | 96 87 31 54 14 108 | 88 35 83 13 56 109 | 84 10 98 48 68 110 | 111 | 70 33 48 21 37 112 | 91 95 65 38 77 113 | 92 14 26 96 60 114 | 12 6 73 13 81 115 | 54 55 2 45 80 116 | 117 | 60 11 67 95 28 118 | 5 32 0 71 12 119 | 47 78 13 54 43 120 | 49 89 82 66 77 121 | 26 53 19 79 3 122 | 123 | 81 9 53 72 29 124 | 56 35 60 44 45 125 | 42 94 96 88 64 126 | 15 92 4 6 14 127 | 97 11 17 61 63 128 | 129 | 24 43 33 9 34 130 | 36 28 69 35 7 131 | 47 4 14 82 38 132 | 11 1 52 0 49 133 | 93 87 98 41 5 134 | 135 | 37 79 99 34 77 136 | 38 26 25 95 70 137 | 28 78 40 33 86 138 | 41 57 96 10 24 139 | 9 74 72 50 81 140 | 141 | 18 96 52 29 61 142 | 38 90 1 48 51 143 | 78 11 27 55 97 144 | 33 21 87 93 67 145 | 79 46 94 45 2 146 | 147 | 27 63 6 90 10 148 | 3 60 24 5 89 149 | 78 72 76 54 8 150 | 33 22 87 51 58 151 | 4 37 64 91 43 152 | 153 | 63 73 87 80 89 154 | 29 14 95 48 3 155 | 71 55 69 9 67 156 | 30 99 19 2 86 157 | 26 72 88 85 37 158 | 159 | 12 57 81 78 40 160 | 35 4 55 15 39 161 | 33 45 25 60 70 162 | 86 79 88 52 3 163 | 90 20 28 59 85 164 | 165 | 92 51 98 47 99 166 | 41 78 65 4 46 167 | 19 87 39 89 17 168 | 12 23 36 29 44 169 | 6 82 71 16 37 170 | 171 | 8 34 81 67 80 172 | 83 92 13 11 41 173 | 39 89 93 49 43 174 | 20 69 3 74 76 175 | 44 72 68 70 45 176 | 177 | 66 39 94 98 28 178 | 72 4 25 77 76 179 | 56 41 84 59 40 180 | 36 87 18 44 73 181 | 29 45 79 55 95 182 | 183 | 45 91 2 92 16 184 | 21 47 86 81 56 185 | 31 11 62 5 95 186 | 39 1 30 65 33 187 | 42 60 17 18 83 188 | 189 | 86 11 77 30 43 190 | 51 88 73 98 94 191 | 72 63 38 56 10 192 | 57 92 49 7 41 193 | 79 75 34 23 54 194 | 195 | 56 95 3 43 65 196 | 39 62 93 19 27 197 | 61 41 99 96 52 198 | 4 92 77 98 70 199 | 16 54 11 17 57 200 | 201 | 6 63 10 71 58 202 | 64 70 50 92 0 203 | 7 14 99 45 26 204 | 78 17 44 46 73 205 | 77 38 62 53 37 206 | 207 | 31 82 67 55 27 208 | 57 58 84 6 15 209 | 14 41 49 8 85 210 | 12 32 91 42 19 211 | 23 1 87 54 29 212 | 213 | 54 60 43 26 4 214 | 78 17 28 67 5 215 | 87 93 90 71 22 216 | 13 30 16 21 85 217 | 55 74 52 1 29 218 | 219 | 50 16 70 32 33 220 | 6 94 52 66 22 221 | 97 64 98 72 39 222 | 27 69 99 34 26 223 | 36 91 37 21 14 224 | 225 | 7 97 64 28 18 226 | 85 80 14 37 34 227 | 72 1 22 58 73 228 | 53 3 68 17 0 229 | 29 44 56 95 32 230 | 231 | 30 66 93 24 92 232 | 48 80 79 86 27 233 | 89 13 62 94 81 234 | 70 65 61 8 54 235 | 96 97 20 90 34 236 | 237 | 87 76 4 7 43 238 | 92 55 80 25 62 239 | 79 6 88 35 30 240 | 10 32 5 45 17 241 | 36 27 33 68 63 242 | 243 | 72 69 27 88 41 244 | 34 53 42 84 3 245 | 58 18 22 66 65 246 | 9 47 85 12 62 247 | 73 90 91 57 33 248 | 249 | 67 16 50 58 52 250 | 68 70 84 98 69 251 | 4 72 9 64 0 252 | 93 97 39 26 5 253 | 3 37 79 7 82 254 | 255 | 61 57 88 54 70 256 | 77 8 94 81 63 257 | 39 48 18 13 10 258 | 55 23 27 4 73 259 | 3 5 64 0 96 260 | 261 | 62 27 0 52 19 262 | 28 57 83 25 41 263 | 5 59 24 33 80 264 | 37 85 2 86 43 265 | 22 94 50 8 20 266 | 267 | 54 32 34 47 87 268 | 71 22 43 85 24 269 | 11 68 58 36 46 270 | 35 56 61 67 18 271 | 70 23 72 5 59 272 | 273 | 3 96 41 45 32 274 | 68 2 56 28 24 275 | 87 38 40 75 26 276 | 53 64 73 80 81 277 | 54 88 20 6 18 278 | 279 | 64 55 51 96 47 280 | 59 35 49 67 71 281 | 36 91 61 76 68 282 | 6 94 20 8 27 283 | 60 88 45 7 82 284 | 285 | 87 94 51 91 1 286 | 96 60 28 97 37 287 | 26 27 74 53 35 288 | 88 89 11 77 8 289 | 73 47 18 59 6 290 | 291 | 46 50 19 36 83 292 | 69 28 4 44 70 293 | 45 20 63 27 1 294 | 53 38 9 47 67 295 | 91 31 79 73 86 296 | 297 | 45 3 98 91 60 298 | 40 7 78 34 83 299 | 52 73 59 13 4 300 | 38 15 82 86 79 301 | 42 11 17 20 62 302 | 303 | 65 86 38 20 72 304 | 78 45 73 74 25 305 | 62 42 24 75 3 306 | 81 8 35 50 51 307 | 44 11 94 85 57 308 | 309 | 13 86 55 65 96 310 | 53 18 43 76 20 311 | 41 14 32 52 38 312 | 90 59 80 68 7 313 | 2 23 92 39 50 314 | 315 | 96 62 85 24 14 316 | 37 5 11 91 45 317 | 61 28 23 34 77 318 | 43 48 20 0 21 319 | 10 35 2 26 97 320 | 321 | 89 5 40 34 84 322 | 90 6 72 68 10 323 | 13 64 71 31 76 324 | 53 60 9 92 62 325 | 69 98 8 50 3 326 | 327 | 17 86 10 75 79 328 | 67 94 78 40 56 329 | 11 85 82 50 46 330 | 53 39 22 9 61 331 | 59 73 72 33 45 332 | 333 | 65 22 18 96 95 334 | 55 86 67 52 69 335 | 10 2 60 83 98 336 | 43 61 87 88 66 337 | 41 24 8 84 33 338 | 339 | 31 53 98 70 91 340 | 33 34 48 83 9 341 | 40 39 29 71 65 342 | 69 10 62 30 4 343 | 52 21 11 93 75 344 | 345 | 8 94 53 85 89 346 | 13 84 58 59 29 347 | 97 7 21 25 96 348 | 45 54 34 22 63 349 | 37 17 49 68 67 350 | 351 | 86 87 84 24 10 352 | 82 32 36 59 50 353 | 8 62 79 71 43 354 | 49 23 85 69 58 355 | 21 66 42 25 56 356 | 357 | 65 88 43 25 19 358 | 26 36 63 5 6 359 | 37 54 75 1 38 360 | 95 46 83 66 28 361 | 4 90 80 99 85 362 | 363 | 78 83 7 77 34 364 | 27 92 93 96 82 365 | 40 95 52 32 43 366 | 17 28 69 41 85 367 | 21 65 39 58 19 368 | 369 | 11 84 28 90 36 370 | 74 4 62 5 46 371 | 22 8 45 40 98 372 | 12 6 30 9 82 373 | 37 2 53 29 41 374 | 375 | 17 65 31 86 57 376 | 73 16 24 67 53 377 | 60 93 88 45 26 378 | 14 80 94 7 44 379 | 55 78 49 8 82 380 | 381 | 95 38 81 25 76 382 | 29 13 83 47 12 383 | 17 69 4 43 28 384 | 63 84 39 52 34 385 | 1 97 41 88 8 386 | 387 | 70 40 16 83 3 388 | 15 49 20 74 48 389 | 71 30 21 28 84 390 | 29 10 97 1 18 391 | 57 50 63 35 69 392 | 393 | 40 13 67 9 41 394 | 71 76 8 54 24 395 | 15 97 92 49 96 396 | 61 34 23 81 31 397 | 11 38 48 37 86 398 | 399 | 77 36 32 75 7 400 | 38 18 84 26 2 401 | 19 13 99 83 20 402 | 35 51 74 6 27 403 | 71 48 15 66 69 404 | 405 | 91 57 41 3 99 406 | 74 55 81 77 43 407 | 36 52 47 49 45 408 | 85 65 5 38 50 409 | 90 68 70 16 0 410 | 411 | 1 90 28 86 27 412 | 73 36 67 11 14 413 | 71 31 10 65 55 414 | 78 21 16 69 12 415 | 87 24 33 83 68 416 | 417 | 90 17 10 84 45 418 | 5 68 69 27 92 419 | 6 63 98 3 46 420 | 94 48 59 34 43 421 | 39 88 12 33 73 422 | 423 | 12 31 33 98 63 424 | 65 51 94 83 92 425 | 41 38 84 91 66 426 | 47 28 76 54 3 427 | 48 36 11 13 27 428 | 429 | 51 84 96 16 8 430 | 64 26 74 30 48 431 | 29 41 68 97 87 432 | 9 38 1 15 39 433 | 98 3 45 53 14 434 | 435 | 53 70 90 95 86 436 | 35 22 85 45 66 437 | 93 0 83 30 88 438 | 64 57 68 36 3 439 | 5 51 19 20 89 440 | 441 | 9 36 69 46 44 442 | 37 7 99 57 45 443 | 79 10 86 58 30 444 | 49 98 52 90 27 445 | 14 51 88 60 81 446 | 447 | 73 97 91 19 48 448 | 76 43 18 83 67 449 | 62 9 11 82 55 450 | 24 17 33 53 22 451 | 75 8 56 1 21 452 | 453 | 27 97 53 0 89 454 | 30 70 3 80 54 455 | 56 93 40 64 35 456 | 46 82 1 44 65 457 | 6 59 45 32 34 458 | 459 | 87 58 73 45 69 460 | 24 49 89 71 83 461 | 94 6 53 68 50 462 | 28 25 88 47 0 463 | 36 13 31 18 55 464 | 465 | 52 63 37 66 9 466 | 34 77 57 6 55 467 | 85 80 97 78 74 468 | 95 75 67 96 29 469 | 22 73 92 69 47 470 | 471 | 79 97 80 36 73 472 | 38 77 35 32 53 473 | 2 37 29 6 89 474 | 78 91 15 47 34 475 | 11 52 64 84 0 476 | 477 | 69 30 21 99 46 478 | 72 4 15 25 42 479 | 67 98 81 91 63 480 | 70 20 57 65 14 481 | 0 78 19 8 87 482 | 483 | 20 4 98 33 85 484 | 76 17 94 65 35 485 | 95 69 72 52 71 486 | 23 25 50 38 27 487 | 43 49 96 53 99 488 | 489 | 16 27 34 65 36 490 | 10 40 84 60 82 491 | 80 2 54 67 70 492 | 52 94 79 17 56 493 | 5 14 77 91 88 494 | 495 | 32 90 50 66 39 496 | 30 16 14 20 10 497 | 4 42 88 59 12 498 | 75 84 54 51 48 499 | 33 24 13 89 43 500 | 501 | 78 42 34 65 51 502 | 75 72 3 99 61 503 | 15 50 59 8 89 504 | 71 18 9 54 53 505 | 43 39 97 56 19 506 | 507 | 50 43 83 4 30 508 | 89 97 58 35 39 509 | 11 24 61 41 25 510 | 87 99 93 15 34 511 | 31 57 3 45 44 512 | 513 | 70 21 63 24 38 514 | 34 23 88 7 51 515 | 43 18 76 46 49 516 | 60 78 47 8 12 517 | 11 66 98 25 74 518 | 519 | 30 17 23 10 92 520 | 12 85 69 81 91 521 | 47 80 28 29 58 522 | 73 44 77 50 32 523 | 76 54 78 75 60 524 | 525 | 71 53 86 48 98 526 | 90 37 79 8 56 527 | 99 42 97 36 15 528 | 31 85 34 10 40 529 | 43 89 57 72 51 530 | 531 | 48 0 65 55 90 532 | 45 76 69 97 4 533 | 42 52 46 77 56 534 | 64 62 68 35 72 535 | 71 10 27 30 16 536 | 537 | 41 69 63 88 57 538 | 25 56 23 78 80 539 | 8 92 59 66 97 540 | 48 61 77 15 14 541 | 87 47 91 12 71 542 | 543 | 51 46 15 2 49 544 | 48 33 23 16 4 545 | 80 41 43 59 83 546 | 62 13 20 63 85 547 | 99 30 7 87 8 548 | 549 | 69 80 96 43 47 550 | 61 75 45 62 15 551 | 32 22 91 83 58 552 | 82 13 50 52 8 553 | 89 20 63 73 14 554 | 555 | 40 2 96 52 73 556 | 25 27 26 43 34 557 | 60 38 80 78 5 558 | 83 63 48 10 66 559 | 97 46 53 74 86 560 | 561 | 46 7 0 69 15 562 | 79 19 85 27 73 563 | 63 45 5 49 54 564 | 93 29 84 28 66 565 | 72 23 99 8 33 566 | 567 | 20 72 85 99 49 568 | 69 0 10 52 23 569 | 88 56 28 67 21 570 | 16 91 83 54 81 571 | 14 73 32 30 59 572 | 573 | 31 52 63 12 3 574 | 96 20 82 6 89 575 | 55 38 8 95 40 576 | 5 60 84 81 75 577 | 51 14 65 27 61 578 | 579 | 46 93 1 47 76 580 | 8 98 7 16 63 581 | 44 78 17 14 92 582 | 42 62 20 12 68 583 | 56 3 74 6 21 584 | 585 | 8 94 11 40 44 586 | 43 92 78 91 18 587 | 75 80 12 54 26 588 | 67 9 45 22 21 589 | 86 1 90 36 30 590 | 591 | 21 19 83 90 8 592 | 50 28 45 65 75 593 | 59 88 25 29 70 594 | 58 23 0 95 49 595 | 36 68 76 78 66 596 | 597 | 77 28 43 56 97 598 | 73 71 8 72 46 599 | 23 25 70 69 41 600 | 90 17 34 67 48 601 | 32 75 81 63 21 602 | -------------------------------------------------------------------------------- /Day5/day5.jl: -------------------------------------------------------------------------------- 1 | using LinearAlgebra 2 | 3 | # Data 4 | segments = map(readlines(joinpath(@__DIR__, "input.txt"))) do line 5 | p1, p2 = split(line, " -> ") 6 | x1, y1 = parse.(Int, split(p1, ",")) 7 | x2, y2 = parse.(Int, split(p2, ",")) 8 | 9 | x = x1 ≤ x2 ? 1 : -1 10 | y = y1 ≤ y2 ? 1 : -1 11 | step = CartesianIndex(x, y) 12 | CartesianIndex(x1, y1):step:CartesianIndex(x2, y2) 13 | end 14 | 15 | horiz_vert = filter(seg -> size(seg, 1) == 1 || size(seg, 2) == 1, segments) 16 | 17 | ## Part 1 & 2 ----------------------------------------------------------------- 18 | function overlap(segments) 19 | mark = zeros(Int, 1000, 1000) 20 | for seg in segments 21 | if size(seg, 1) == 1 || size(seg, 2) == 1 22 | mark[seg] .+= 1 23 | else 24 | mark[diag(seg)] .+= 1 25 | end 26 | end 27 | return count(>(1), mark) 28 | end 29 | 30 | # Solution Part 1: 7644 31 | overlap(horiz_vert) 32 | 33 | # Solution Part 2: 18627 34 | overlap(segments) 35 | -------------------------------------------------------------------------------- /Day5/day5_old.jl: -------------------------------------------------------------------------------- 1 | # Note: This solution is sloow 2 | # Check day5.jl for better solution 3 | 4 | struct Point 5 | x::Int 6 | y::Int 7 | end 8 | Point((x, y)) = Point(x, y) 9 | Base.show(io::IO, p::Point) = print(io, "(x=$(p.x), y=$(p.y))") 10 | 11 | function points(p1::Point, p2::Point)::Vector{Point} 12 | x1, x2 = p1.x, p2.x 13 | y1, y2 = p1.y, p2.y 14 | 15 | m = (y2 - y1) / (x2 - x1) 16 | if m == 0 17 | xs = x1 < x2 ? (x1:x2) : (x1:-1:x2) 18 | points = zip(xs, fill(y1, length(xs))) 19 | return Point.(points) 20 | elseif m == Inf || m == -Inf 21 | ys = y1 < y2 ? (y1:y2) : (y1:-1:y2) 22 | points = zip(fill(x1, length(ys)), ys) 23 | return Point.(points) 24 | elseif m == 1 || m == -1 25 | xs = x1 < x2 ? (x1:x2) : (x1:-1:x2) 26 | ys = y1 < y2 ? (y1:y2) : (y1:-1:y2) 27 | points = zip(xs, ys) 28 | return Point.(points) 29 | end 30 | end 31 | 32 | # Data 33 | hseg_points = Point[] 34 | for line in readlines(joinpath(@__DIR__, "input.txt")) 35 | p1, p2 = split(line, " -> ") 36 | x1, y1 = parse.(Int, split(p1, ",")) 37 | x2, y2 = parse.(Int, split(p2, ",")) 38 | if x1 == x2 || y1 == y2 39 | append!(hseg_points, points(Point(x1, y1), Point(x2, y2))) 40 | end 41 | end 42 | 43 | ## Part 1 ------------------------------------------------- 44 | function overlap(pts) 45 | x = 0 46 | for p in unique(pts) 47 | count(==(p), pts) > 1 && (x += 1) 48 | end 49 | return x 50 | end 51 | 52 | # Solution: 7644 53 | overlap(hseg_points) 54 | 55 | ## Part 2 ------------------------------------------------- 56 | seg_points = Point[] 57 | for line in readlines(joinpath(@__DIR__, "input.txt")) 58 | p1, p2 = split(line, " -> ") 59 | x1, y1 = parse.(Int, split(p1, ",")) 60 | x2, y2 = parse.(Int, split(p2, ",")) 61 | append!(seg_points, points(Point(x1, y1), Point(x2, y2))) 62 | end 63 | 64 | # Solution: 18627 65 | overlap(seg_points) 66 | -------------------------------------------------------------------------------- /Day5/input.txt: -------------------------------------------------------------------------------- 1 | 599,531 -> 599,32 2 | 435,904 -> 435,489 3 | 768,714 -> 768,187 4 | 845,552 -> 596,801 5 | 167,680 -> 167,445 6 | 45,887 -> 45,346 7 | 780,295 -> 179,896 8 | 310,539 -> 602,831 9 | 535,556 -> 349,556 10 | 797,180 -> 797,62 11 | 771,406 -> 120,406 12 | 383,296 -> 383,918 13 | 689,815 -> 73,199 14 | 658,642 -> 658,333 15 | 931,104 -> 708,104 16 | 406,278 -> 406,29 17 | 315,532 -> 773,74 18 | 439,953 -> 289,953 19 | 555,162 -> 695,302 20 | 444,522 -> 444,828 21 | 460,844 -> 460,972 22 | 838,18 -> 143,713 23 | 335,785 -> 335,485 24 | 757,886 -> 757,327 25 | 266,205 -> 273,205 26 | 934,42 -> 19,957 27 | 671,622 -> 263,214 28 | 739,781 -> 739,332 29 | 848,507 -> 848,394 30 | 577,58 -> 461,174 31 | 49,905 -> 921,33 32 | 627,455 -> 205,455 33 | 106,523 -> 974,523 34 | 707,335 -> 707,313 35 | 65,214 -> 712,214 36 | 610,267 -> 610,403 37 | 47,699 -> 565,181 38 | 288,833 -> 709,833 39 | 452,59 -> 452,632 40 | 629,209 -> 125,209 41 | 535,232 -> 535,342 42 | 542,942 -> 542,753 43 | 618,905 -> 552,905 44 | 598,314 -> 976,314 45 | 350,824 -> 17,824 46 | 753,570 -> 753,617 47 | 544,302 -> 259,302 48 | 628,271 -> 628,379 49 | 856,265 -> 856,792 50 | 77,317 -> 77,122 51 | 905,420 -> 905,687 52 | 812,512 -> 812,411 53 | 844,486 -> 771,559 54 | 798,778 -> 798,215 55 | 571,160 -> 278,453 56 | 242,352 -> 227,352 57 | 958,118 -> 167,909 58 | 201,915 -> 201,564 59 | 163,583 -> 163,279 60 | 23,111 -> 23,883 61 | 248,281 -> 331,281 62 | 381,768 -> 900,768 63 | 78,988 -> 78,326 64 | 914,659 -> 247,659 65 | 532,531 -> 520,531 66 | 65,309 -> 734,978 67 | 170,923 -> 399,694 68 | 740,496 -> 196,496 69 | 832,452 -> 816,452 70 | 675,463 -> 878,463 71 | 659,852 -> 560,852 72 | 143,655 -> 227,655 73 | 334,795 -> 334,978 74 | 217,913 -> 368,913 75 | 675,33 -> 503,33 76 | 42,981 -> 811,981 77 | 458,162 -> 722,162 78 | 92,613 -> 92,542 79 | 393,584 -> 393,252 80 | 276,256 -> 725,705 81 | 752,442 -> 752,789 82 | 63,281 -> 744,281 83 | 596,845 -> 35,284 84 | 594,534 -> 964,164 85 | 337,380 -> 337,511 86 | 158,142 -> 75,225 87 | 606,47 -> 606,111 88 | 987,30 -> 62,955 89 | 192,196 -> 428,196 90 | 449,672 -> 449,77 91 | 804,151 -> 804,255 92 | 783,581 -> 287,581 93 | 860,891 -> 69,100 94 | 966,187 -> 761,392 95 | 400,742 -> 278,742 96 | 661,656 -> 592,587 97 | 787,415 -> 787,771 98 | 866,228 -> 417,228 99 | 915,385 -> 505,385 100 | 715,620 -> 715,633 101 | 615,31 -> 615,940 102 | 691,885 -> 527,885 103 | 426,705 -> 351,705 104 | 258,215 -> 258,949 105 | 480,449 -> 480,710 106 | 788,710 -> 788,67 107 | 850,90 -> 597,90 108 | 398,379 -> 18,759 109 | 248,107 -> 665,524 110 | 901,933 -> 208,240 111 | 433,424 -> 110,424 112 | 214,447 -> 389,272 113 | 468,330 -> 468,928 114 | 950,759 -> 332,759 115 | 447,541 -> 420,541 116 | 659,138 -> 604,83 117 | 821,264 -> 95,264 118 | 914,132 -> 46,132 119 | 821,604 -> 821,57 120 | 805,734 -> 85,14 121 | 806,274 -> 164,916 122 | 205,780 -> 205,133 123 | 798,472 -> 361,472 124 | 817,57 -> 127,747 125 | 172,119 -> 922,869 126 | 118,167 -> 55,167 127 | 56,548 -> 344,836 128 | 117,108 -> 940,931 129 | 530,46 -> 530,785 130 | 528,507 -> 729,708 131 | 11,986 -> 987,10 132 | 979,932 -> 76,29 133 | 863,250 -> 210,903 134 | 879,215 -> 891,215 135 | 592,219 -> 592,528 136 | 211,760 -> 211,347 137 | 21,842 -> 633,230 138 | 110,356 -> 110,254 139 | 925,606 -> 444,125 140 | 757,566 -> 757,498 141 | 702,622 -> 637,622 142 | 51,379 -> 365,379 143 | 273,906 -> 273,494 144 | 170,795 -> 929,36 145 | 159,56 -> 435,56 146 | 724,953 -> 724,735 147 | 536,748 -> 901,748 148 | 937,148 -> 937,510 149 | 963,507 -> 863,507 150 | 840,290 -> 840,221 151 | 864,154 -> 55,963 152 | 977,487 -> 685,487 153 | 863,617 -> 210,617 154 | 862,308 -> 291,879 155 | 286,477 -> 286,276 156 | 550,805 -> 550,489 157 | 964,508 -> 821,651 158 | 475,290 -> 789,290 159 | 25,882 -> 25,349 160 | 570,374 -> 604,374 161 | 354,442 -> 514,282 162 | 457,700 -> 360,700 163 | 548,889 -> 548,502 164 | 11,393 -> 11,829 165 | 60,714 -> 781,714 166 | 943,953 -> 972,924 167 | 757,386 -> 465,386 168 | 230,463 -> 27,463 169 | 815,385 -> 326,385 170 | 32,630 -> 378,976 171 | 298,853 -> 298,644 172 | 532,146 -> 23,146 173 | 958,685 -> 737,464 174 | 853,847 -> 79,73 175 | 815,590 -> 815,961 176 | 49,87 -> 751,789 177 | 55,513 -> 55,378 178 | 163,907 -> 574,907 179 | 355,168 -> 355,836 180 | 453,742 -> 674,742 181 | 273,458 -> 685,458 182 | 981,961 -> 958,984 183 | 120,59 -> 401,59 184 | 735,964 -> 395,964 185 | 277,377 -> 277,646 186 | 633,694 -> 633,707 187 | 224,376 -> 976,376 188 | 201,790 -> 293,790 189 | 950,952 -> 12,14 190 | 389,48 -> 356,48 191 | 337,424 -> 166,424 192 | 591,915 -> 591,456 193 | 205,162 -> 942,162 194 | 404,421 -> 404,748 195 | 319,983 -> 608,694 196 | 94,677 -> 94,853 197 | 873,388 -> 873,617 198 | 858,82 -> 858,890 199 | 64,503 -> 64,787 200 | 372,224 -> 50,546 201 | 531,241 -> 960,670 202 | 47,33 -> 975,961 203 | 853,52 -> 271,634 204 | 668,437 -> 668,719 205 | 162,290 -> 843,290 206 | 421,299 -> 944,822 207 | 103,983 -> 103,324 208 | 290,71 -> 290,686 209 | 209,38 -> 546,38 210 | 740,878 -> 378,878 211 | 741,795 -> 741,916 212 | 27,431 -> 445,431 213 | 795,289 -> 795,759 214 | 345,772 -> 775,772 215 | 977,480 -> 512,15 216 | 49,863 -> 49,659 217 | 223,590 -> 779,590 218 | 503,771 -> 917,771 219 | 499,289 -> 935,725 220 | 246,459 -> 246,395 221 | 860,257 -> 656,257 222 | 425,87 -> 425,603 223 | 355,378 -> 355,23 224 | 462,286 -> 462,358 225 | 181,571 -> 181,732 226 | 17,649 -> 476,649 227 | 394,321 -> 394,293 228 | 812,660 -> 515,957 229 | 21,150 -> 799,928 230 | 437,593 -> 437,372 231 | 125,495 -> 373,743 232 | 482,404 -> 482,420 233 | 283,580 -> 283,234 234 | 667,966 -> 827,806 235 | 959,961 -> 959,931 236 | 461,845 -> 206,845 237 | 299,888 -> 299,836 238 | 680,828 -> 680,855 239 | 958,977 -> 26,45 240 | 847,419 -> 290,976 241 | 892,920 -> 892,180 242 | 487,945 -> 487,445 243 | 329,570 -> 583,570 244 | 110,940 -> 989,61 245 | 475,351 -> 882,351 246 | 953,229 -> 429,229 247 | 119,125 -> 749,125 248 | 834,103 -> 212,725 249 | 978,412 -> 978,343 250 | 916,310 -> 758,310 251 | 825,761 -> 720,761 252 | 353,954 -> 353,795 253 | 422,464 -> 422,356 254 | 662,964 -> 836,790 255 | 242,873 -> 242,570 256 | 742,972 -> 797,972 257 | 698,364 -> 360,26 258 | 258,633 -> 19,872 259 | 406,649 -> 406,685 260 | 386,710 -> 925,710 261 | 347,657 -> 524,480 262 | 812,905 -> 554,647 263 | 420,505 -> 420,231 264 | 908,693 -> 908,724 265 | 130,772 -> 130,898 266 | 560,23 -> 560,987 267 | 941,831 -> 941,544 268 | 817,940 -> 132,255 269 | 515,280 -> 515,811 270 | 544,102 -> 568,102 271 | 115,612 -> 67,660 272 | 743,762 -> 743,152 273 | 246,14 -> 691,459 274 | 766,492 -> 673,492 275 | 467,179 -> 351,63 276 | 655,779 -> 655,524 277 | 314,171 -> 314,108 278 | 414,64 -> 502,64 279 | 564,239 -> 894,239 280 | 984,974 -> 56,46 281 | 201,963 -> 201,223 282 | 238,194 -> 238,832 283 | 30,652 -> 477,652 284 | 818,735 -> 582,971 285 | 225,566 -> 673,566 286 | 172,865 -> 74,865 287 | 264,101 -> 264,812 288 | 487,916 -> 979,916 289 | 879,30 -> 10,899 290 | 797,657 -> 797,136 291 | 750,642 -> 593,799 292 | 550,244 -> 418,376 293 | 158,816 -> 668,816 294 | 505,648 -> 303,648 295 | 411,688 -> 263,688 296 | 544,35 -> 771,35 297 | 545,846 -> 286,846 298 | 284,760 -> 284,929 299 | 835,401 -> 708,401 300 | 533,591 -> 545,591 301 | 866,757 -> 475,757 302 | 202,62 -> 907,767 303 | 456,655 -> 456,123 304 | 367,714 -> 225,714 305 | 359,679 -> 926,679 306 | 623,853 -> 623,865 307 | 170,120 -> 213,120 308 | 481,741 -> 481,435 309 | 928,73 -> 41,960 310 | 551,282 -> 551,265 311 | 988,986 -> 12,10 312 | 351,172 -> 791,172 313 | 49,65 -> 952,968 314 | 725,617 -> 691,617 315 | 509,159 -> 697,159 316 | 83,985 -> 83,968 317 | 206,617 -> 334,489 318 | 880,682 -> 966,768 319 | 60,896 -> 60,617 320 | 501,686 -> 49,234 321 | 801,708 -> 738,771 322 | 548,883 -> 548,33 323 | 753,162 -> 29,162 324 | 102,478 -> 102,295 325 | 115,656 -> 637,134 326 | 924,970 -> 924,963 327 | 191,340 -> 191,515 328 | 764,481 -> 523,481 329 | 97,619 -> 97,890 330 | 228,183 -> 228,624 331 | 171,867 -> 68,867 332 | 797,685 -> 167,685 333 | 510,955 -> 464,955 334 | 930,955 -> 233,258 335 | 934,572 -> 934,900 336 | 217,822 -> 797,242 337 | 868,939 -> 369,440 338 | 861,811 -> 861,36 339 | 346,617 -> 346,153 340 | 754,526 -> 754,426 341 | 482,724 -> 482,21 342 | 328,984 -> 976,984 343 | 933,895 -> 325,287 344 | 965,973 -> 232,240 345 | 502,707 -> 767,972 346 | 353,680 -> 815,218 347 | 311,210 -> 311,157 348 | 156,944 -> 928,172 349 | 615,395 -> 101,909 350 | 107,500 -> 528,921 351 | 375,42 -> 375,796 352 | 13,292 -> 818,292 353 | 613,144 -> 613,541 354 | 340,677 -> 340,406 355 | 631,655 -> 744,655 356 | 22,242 -> 723,943 357 | 705,596 -> 980,321 358 | 316,955 -> 316,515 359 | 760,279 -> 44,279 360 | 391,328 -> 391,724 361 | 917,476 -> 917,668 362 | 66,907 -> 913,60 363 | 597,260 -> 362,25 364 | 568,584 -> 568,297 365 | 375,506 -> 375,300 366 | 988,31 -> 72,947 367 | 425,342 -> 154,342 368 | 196,395 -> 899,395 369 | 904,17 -> 94,17 370 | 546,159 -> 751,159 371 | 284,557 -> 175,448 372 | 69,201 -> 697,201 373 | 130,421 -> 224,421 374 | 646,462 -> 637,453 375 | 187,638 -> 621,638 376 | 832,212 -> 416,212 377 | 614,582 -> 348,582 378 | 677,404 -> 677,709 379 | 178,122 -> 915,859 380 | 81,849 -> 223,849 381 | 717,18 -> 646,18 382 | 723,666 -> 974,666 383 | 703,234 -> 130,234 384 | 317,107 -> 106,107 385 | 207,397 -> 207,375 386 | 688,465 -> 982,171 387 | 749,201 -> 610,201 388 | 280,313 -> 827,860 389 | 773,873 -> 917,873 390 | 337,908 -> 337,155 391 | 541,427 -> 385,583 392 | 611,314 -> 131,794 393 | 966,909 -> 104,47 394 | 785,556 -> 346,556 395 | 914,645 -> 914,718 396 | 683,941 -> 657,915 397 | 919,665 -> 310,56 398 | 743,978 -> 779,978 399 | 953,925 -> 953,854 400 | 899,347 -> 705,347 401 | 46,597 -> 46,255 402 | 332,364 -> 922,954 403 | 38,987 -> 832,193 404 | 77,585 -> 77,262 405 | 155,61 -> 734,640 406 | 953,136 -> 655,136 407 | 939,730 -> 158,730 408 | 903,458 -> 393,458 409 | 50,227 -> 50,249 410 | 536,814 -> 536,242 411 | 906,694 -> 259,47 412 | 317,237 -> 853,773 413 | 828,55 -> 509,55 414 | 40,664 -> 341,965 415 | 414,820 -> 53,459 416 | 244,344 -> 272,344 417 | 191,606 -> 308,606 418 | 329,409 -> 329,960 419 | 166,863 -> 938,91 420 | 655,396 -> 291,760 421 | 634,666 -> 625,666 422 | 360,622 -> 360,550 423 | 568,473 -> 840,201 424 | 534,162 -> 534,823 425 | 583,563 -> 583,521 426 | 124,447 -> 124,79 427 | 207,559 -> 207,649 428 | 688,238 -> 26,900 429 | 173,33 -> 117,33 430 | 665,800 -> 665,86 431 | 121,515 -> 121,132 432 | 32,472 -> 32,960 433 | 513,28 -> 513,299 434 | 881,612 -> 881,415 435 | 72,71 -> 977,976 436 | 169,821 -> 111,821 437 | 603,756 -> 254,756 438 | 182,129 -> 182,824 439 | 746,670 -> 942,670 440 | 143,15 -> 72,86 441 | 108,134 -> 963,989 442 | 860,388 -> 834,362 443 | 252,811 -> 473,811 444 | 575,306 -> 575,368 445 | 686,471 -> 686,38 446 | 673,59 -> 673,861 447 | 461,949 -> 491,949 448 | 915,373 -> 330,958 449 | 933,699 -> 588,699 450 | 254,798 -> 254,498 451 | 329,865 -> 329,926 452 | 569,243 -> 659,243 453 | 762,808 -> 921,967 454 | 722,460 -> 68,460 455 | 136,470 -> 355,470 456 | 133,919 -> 56,842 457 | 87,868 -> 853,102 458 | 622,102 -> 446,102 459 | 798,494 -> 135,494 460 | 281,858 -> 281,172 461 | 141,172 -> 765,796 462 | 794,194 -> 102,886 463 | 539,983 -> 539,895 464 | 841,755 -> 841,365 465 | 695,429 -> 166,958 466 | 965,933 -> 899,933 467 | 603,699 -> 603,708 468 | 598,635 -> 844,635 469 | 288,190 -> 288,946 470 | 559,383 -> 423,383 471 | 795,332 -> 409,718 472 | 600,645 -> 478,645 473 | 831,24 -> 905,24 474 | 13,817 -> 606,224 475 | 828,878 -> 96,146 476 | 32,197 -> 32,891 477 | 84,832 -> 84,756 478 | 404,281 -> 404,781 479 | 394,441 -> 489,536 480 | 845,876 -> 589,876 481 | 833,114 -> 833,834 482 | 979,130 -> 979,238 483 | 907,189 -> 396,700 484 | 448,740 -> 714,474 485 | 145,837 -> 100,837 486 | 982,983 -> 38,39 487 | 962,506 -> 962,764 488 | 773,922 -> 975,922 489 | 892,666 -> 904,654 490 | 754,201 -> 459,496 491 | 108,829 -> 108,894 492 | 122,381 -> 122,484 493 | 683,301 -> 630,354 494 | 47,103 -> 897,953 495 | 549,880 -> 942,487 496 | 944,15 -> 44,915 497 | 713,456 -> 713,402 498 | 83,865 -> 239,865 499 | 814,585 -> 814,105 500 | 980,439 -> 685,439 501 | -------------------------------------------------------------------------------- /Day6/day6.jl: -------------------------------------------------------------------------------- 1 | # Data 2 | data = parse.(Int, split(readline(joinpath(@__DIR__, "input.txt")), ',')) 3 | 4 | ## Part 1 & 2 ------------------------------------------------------------- 5 | function simulate(init, ndays) 6 | sim = Dict(i => count(==(i), init) for i in 0:8) 7 | idx = vcat(0:5, 7) 8 | 9 | for _ in 1:ndays 10 | old = copy(sim) 11 | for i in idx 12 | sim[i] = old[i+1] 13 | end 14 | sim[6] = old[7] + old[0] 15 | sim[8] = old[0] 16 | end 17 | 18 | return sum(values(sim)) 19 | end 20 | 21 | # Part 1 solution: 375_482 22 | simulate(data, 80) 23 | 24 | # Part 2 solution: 1_689_540_415_957 25 | simulate(data, 256) 26 | -------------------------------------------------------------------------------- /Day6/day6_alternative.jl: -------------------------------------------------------------------------------- 1 | # Alternative solution by David Neuzerling (https://github.com/mdneuzerling) 2 | # ref: https://github.com/mdneuzerling/advent_of_code/blob/main/AOC2021/src/day06.jl 3 | 4 | # Data 5 | line = readline(joinpath(@__DIR__, "input.txt")) 6 | data = parse.(Int, split(line, ",")) 7 | 8 | ## Part 1 & 2 --------------------------------------- 9 | const M = [ 10 | 0 1 0 0 0 0 0 0 0 11 | 0 0 1 0 0 0 0 0 0 12 | 0 0 0 1 0 0 0 0 0 13 | 0 0 0 0 1 0 0 0 0 14 | 0 0 0 0 0 1 0 0 0 15 | 0 0 0 0 0 0 1 0 0 16 | 1 0 0 0 0 0 0 1 0 17 | 0 0 0 0 0 0 0 0 1 18 | 1 0 0 0 0 0 0 0 0 19 | ] 20 | 21 | function simulate(init, ndays) 22 | counts = [count(==(i), init) for i in 0:8] 23 | sim = M^ndays * counts 24 | return sum(sim) 25 | end 26 | 27 | # Part 1 solution: 375_482 28 | simulate(data, 80) 29 | 30 | # Part 2 solution: 1_689_540_415_957 31 | simulate(data, 256) 32 | -------------------------------------------------------------------------------- /Day6/input.txt: -------------------------------------------------------------------------------- 1 | 4,1,3,2,4,3,1,4,4,1,1,1,5,2,4,4,2,1,2,3,4,1,2,4,3,4,5,1,1,3,1,2,1,4,1,1,3,4,1,2,5,1,4,2,2,1,1,1,3,1,5,3,1,2,1,1,1,1,4,1,1,1,2,2,1,3,1,3,1,3,4,5,1,2,2,1,1,1,4,1,5,1,3,1,3,4,1,3,2,3,4,4,4,3,4,5,1,3,1,3,5,1,1,1,1,1,2,4,1,2,1,1,1,5,1,1,2,1,3,1,4,2,3,4,4,3,1,1,3,5,3,1,1,5,2,4,1,1,3,5,1,4,3,1,1,4,2,1,1,1,1,1,1,3,1,1,1,1,1,4,5,1,2,5,3,1,1,3,1,1,1,1,5,1,2,5,1,1,1,1,1,1,3,5,1,3,2,1,1,1,1,1,1,1,4,5,1,1,3,1,5,1,1,1,1,3,3,1,1,1,4,4,1,1,4,1,2,1,4,4,1,1,3,4,3,5,4,1,1,4,1,3,1,1,5,5,1,2,1,2,1,2,3,1,1,3,1,1,2,1,1,3,4,3,1,1,3,3,5,1,2,1,4,1,1,2,1,3,1,1,1,1,1,1,1,4,5,5,1,1,1,4,1,1,1,2,1,2,1,3,1,3,1,1,1,1,1,1,1,5 2 | -------------------------------------------------------------------------------- /Day7/day7.jl: -------------------------------------------------------------------------------- 1 | # Data 2 | line = readline(joinpath(@__DIR__, "input.txt")) 3 | data = parse.(Int, split(line, ",")) 4 | 5 | ## Part 1 ----------------------------------------- 6 | dists(x, k) = abs.(x .- k) 7 | cost1(x, k) = sum(dists(x, k)) 8 | 9 | # Solution: 344_138 10 | minimum(cost1(data, k) for k in 0:maximum(data)) 11 | 12 | ## Part 2 ----------------------------------------- 13 | function cost2(x, k) 14 | ds = dists(x, k) 15 | # Or: (ds + ds.^2) .÷ 2 16 | sum(ds .* (ds .+ 1) .÷ 2) 17 | end 18 | 19 | # Solution: 94_862_124 20 | minimum(cost2(data, k) for k in 0:maximum(data)) 21 | -------------------------------------------------------------------------------- /Day7/day7_optimal.jl: -------------------------------------------------------------------------------- 1 | # Optimal solutions by Abel Siqueira (https://github.com/abelsiqueira) 2 | # ref: https://github.com/abelsiqueira/advent-of-code-2021/blob/main/day-07/main.jl 3 | using Statistics 4 | 5 | # Data 6 | line = readline(joinpath(@__DIR__, "input.txt")) 7 | data = parse.(Int, split(line, ",")) 8 | 9 | ## Part 1 ----------------------------------------- 10 | dists(x, k) = abs.(x .- k) 11 | cost1(x, k) = sum(dists(x, k)) 12 | 13 | # Optimal solution: 344_138 14 | m = Int(median(data)) 15 | cost1(data, m) 16 | 17 | ## Part 2 ----------------------------------------- 18 | function cost2(x, k) 19 | ds = dists(x, k) 20 | # Or: (ds + ds.^2) .÷ 2 21 | sum(ds .* (ds .+ 1) .÷ 2) 22 | end 23 | 24 | # Optimal solution: 94_862_124 25 | μ = mean(data) 26 | μ⁻, μ⁺ = floor(Int, μ), ceil(Int, μ) 27 | min(cost2(data, μ⁻), cost2(data, μ⁺)) 28 | -------------------------------------------------------------------------------- /Day7/input.txt: -------------------------------------------------------------------------------- 1 | 1101,1,29,67,1102,0,1,65,1008,65,35,66,1005,66,28,1,67,65,20,4,0,1001,65,1,65,1106,0,8,99,35,67,101,99,105,32,110,39,101,115,116,32,112,97,115,32,117,110,101,32,105,110,116,99,111,100,101,32,112,114,111,103,114,97,109,10,160,1267,277,1068,422,1235,790,1391,45,252,513,1029,414,216,409,1373,1419,1176,757,64,748,835,20,436,147,347,1264,1532,240,272,430,7,85,51,12,107,1277,779,867,260,802,361,89,754,206,80,25,559,220,657,178,186,2,31,825,290,144,379,0,1682,1166,1241,180,102,464,444,122,718,25,100,1050,1358,604,546,1157,130,59,127,1351,238,97,75,821,265,23,786,116,115,93,730,1340,777,1114,263,352,115,5,69,1041,101,1222,203,1273,217,28,976,425,480,7,124,45,192,860,312,1107,1040,137,306,523,692,590,562,789,383,145,86,297,791,240,697,22,230,834,963,837,1164,1758,487,414,86,1026,1034,478,613,1,769,85,980,935,1455,16,204,170,380,324,14,699,220,50,451,738,52,437,963,718,178,508,711,1739,936,1515,246,908,126,602,295,591,22,484,752,1,1442,167,132,52,613,1172,353,36,56,468,123,393,765,1456,218,269,6,20,649,727,454,86,640,1113,836,124,405,571,882,107,75,730,346,94,35,626,1174,299,392,1449,502,854,500,128,852,248,645,159,774,155,884,1336,285,426,0,269,466,1483,93,13,17,255,295,530,694,1178,968,612,224,160,32,1154,194,494,24,845,43,274,344,301,486,43,351,581,929,168,1629,163,206,98,1242,1242,1706,1777,721,293,1621,132,199,12,66,247,1244,333,445,154,795,70,424,11,826,835,250,288,408,516,822,411,69,636,521,152,67,401,531,186,933,515,780,490,201,369,111,266,952,400,677,372,548,1325,1111,17,543,1293,20,507,74,116,656,644,872,35,80,1273,279,475,1585,1446,651,1338,285,284,23,1130,237,843,121,53,81,573,5,956,276,553,1084,544,731,35,16,53,34,405,1337,665,303,10,108,1132,233,3,834,415,161,409,1055,202,707,296,341,57,521,548,15,137,359,57,388,282,267,293,1450,28,424,819,941,1388,474,687,87,271,1462,522,33,26,841,345,104,150,573,481,297,1075,489,420,424,340,504,685,105,898,870,206,129,516,492,42,216,1829,1317,10,60,54,255,103,457,257,101,93,981,412,67,519,574,169,799,381,1509,60,409,51,151,464,1676,916,18,30,772,1566,1283,359,1260,10,405,750,160,181,541,358,213,300,1073,328,399,214,119,478,889,65,56,1077,1427,52,359,90,42,1248,336,51,1396,509,237,785,440,806,339,99,354,640,272,665,772,135,91,11,175,128,482,1244,1243,629,137,140,1003,626,433,391,731,1180,671,169,710,1561,385,1281,272,236,318,207,1323,16,233,9,720,295,34,183,362,987,1016,366,760,1244,878,600,275,1209,41,792,951,85,636,125,217,342,184,581,1300,66,165,804,285,756,96,278,598,163,655,138,869,537,141,1364,897,406,617,65,444,244,494,172,119,358,1183,310,226,98,550,634,948,985,247,1499,729,165,371,939,299,761,477,1480,840,3,319,675,492,564,3,3,80,182,69,460,341,789,742,46,1309,360,48,296,363,946,214,252,54,147,435,85,276,1072,23,71,755,572,268,1362,619,639,365,623,1560,322,535,997,1021,317,663,82,314,857,16,194,363,24,240,1596,1123,242,816,116,645,64,38,589,428,147,632,457,555,908,921,202,182,403,551,358,483,1195,1213,28,1156,725,320,16,74,931,103,145,146,1206,433,1052,158,531,699,675,379,393,475,384,1041,141,1248,521,136,326,199,725,200,465,796,724,672,569,70,663,15,150,131,1261,17,1211,66,175,608,17,81,551,627,1469,1032,342,2,972,184,798,960,22,55,462,1,151,91,119,76,1062,96,1424,567,366,831,633,205,691,50,1314,732,558,167,1624,5,147,47,110,250,935,177,445,79,306,653,47,75,626,173,104,354,573,523,46,46,757,541,431,1129,787,502,1328,1093,82,872,1876,1386,136,504,273,194,297,0,163,1025,996,354,1457,1127,52,45,1364,1128,457,1576,282,573,1648,16,28,582,768,92,92,817,1515,297,349,97,1523,634,923,76,1174,552,347,750,326,221,149,0,188,791,251,113,1,71,92,393,103,618,335,97,236,418,256,764,435,411,941,74,423,443,27,427,178,262,181,362,156,572,324,684,796,249,288,413,132,29,444,766,1135,1235,208,231,620,1481,228,174,133,918,1825,618,663,22,124,119,52,159,1318,1724,338,243,206,127,436,163,297,617,141,59,65,20,164,11,126,363,150,726,217,1282,1708,118,1055,60,603,852,170,1097,58,213,495,566,673,1607,994,539,1655 2 | -------------------------------------------------------------------------------- /Day8/day8.jl: -------------------------------------------------------------------------------- 1 | # Data 2 | lines = readlines(joinpath(@__DIR__, "input.txt")) 3 | inputs = Vector{Vector{String}}(undef, length(lines)) 4 | outputs = Vector{Vector{String}}(undef, length(lines)) 5 | for (i, line) in enumerate(lines) 6 | input, output = split(line, " | ") 7 | inputs[i] = split(input) 8 | outputs[i] = split(output) 9 | end 10 | 11 | ## Part 1 ------------------------------------------------- 12 | # Solution: 383 13 | sum(count.(str -> length(str) ∈ [2, 3, 4, 7], outputs)) 14 | 15 | ## Part 2 ------------------------------------------------- 16 | sortstring(str) = join(sort(collect(str))) 17 | 18 | function decode(input) 19 | sorted = sortstring.(input) 20 | dec = Dict{String, Int}() 21 | for str in sorted 22 | length(str) == 2 && (dec[str] = 1) 23 | length(str) == 4 && (dec[str] = 4) 24 | length(str) == 3 && (dec[str] = 7) 25 | length(str) == 7 && (dec[str] = 8) 26 | end 27 | code = Dict(reverse(kv) for kv in dec) 28 | for str in setdiff(sorted, keys(dec)) 29 | if length(str) == 6 30 | (code[4] ⊆ str && code[7] ⊆ str) && (dec[str] = 9) 31 | (code[4] ⊈ str && code[7] ⊆ str) && (dec[str] = 0) 32 | (code[4] ⊈ str && code[7] ⊈ str) && (dec[str] = 6) 33 | end 34 | end 35 | code = Dict(reverse(kv) for kv in dec) 36 | for str in setdiff(sorted, keys(dec)) 37 | code[1] ⊆ str && (dec[str] = 3) 38 | str ⊆ code[6] && (dec[str] = 5) 39 | str ⊈ code[9] && (dec[str] = 2) 40 | end 41 | return dec 42 | end 43 | 44 | function getnum(dec, output) 45 | sorted = sortstring.(output) 46 | nums = [dec[str] for str in sorted] 47 | return evalpoly(10, reverse(nums)) 48 | end 49 | 50 | function sum_outputs(inputs, outputs) 51 | s = 0 52 | for i in eachindex(inputs) 53 | s += getnum(decode(inputs[i]), outputs[i]) 54 | end 55 | return s 56 | end 57 | 58 | # Solution: 998_900 59 | sum_outputs(inputs, outputs) 60 | -------------------------------------------------------------------------------- /Day8/day8_alternative.jl: -------------------------------------------------------------------------------- 1 | # Alternative solution for Part 2 by Jerry Ling (https://github.com/Moelf) 2 | # ref: https://twitter.com/l_II_llI/status/1468610582702174222 3 | lines = readlines(joinpath(@__DIR__, "input.txt")) 4 | 5 | # Compact version 6 | sum( 7 | parse.( 8 | Int, 9 | ["4725360918"[[sum([L...] .∈ r) ÷ 2 % 15 % 11 + 1 for r in split(R)]] for (L, R) in split.(lines, "|")] 10 | ) 11 | ) 12 | 13 | # Detailed version 14 | outputs = Vector{Int}(undef, length(lines)) 15 | for (i, line) in enumerate(lines) 16 | inp, out = split(line, "|") 17 | idxs = [sum([inp...] .∈ r) ÷ 2 % 15 % 11 + 1 for r in split(out)] 18 | num = "4725360918"[idxs] 19 | outputs[i] = parse(Int, num) 20 | end 21 | sum(outputs) 22 | -------------------------------------------------------------------------------- /Day8/input.txt: -------------------------------------------------------------------------------- 1 | bg gcdaeb aebg efabdcg abdce cafdbe fcbdeg bdacg gbd cafgd | daecb dcbae gb eabg 2 | eabfdc fgd cegd aedgf fbacgd dceaf dg aebdcgf efbag edgfac | cgebadf dgce deafc acdbfg 3 | dcgfb fe bcgefd adecfb fgdec dfe egadc fadgceb facbgd befg | fdacgb fbcdg dcefbg bcdfg 4 | gebdcf eg ecgabd gabed agdfb dbace fgbacde facebd egd gcea | agdbe gde deg agcebd 5 | efb fgeacbd efcdb adfe fcdabg cabfd dcebg deafcb cgbfae ef | bgcde adcgbf feb adfe 6 | gfdcaeb cdgfa agefc cge cgadfb fegdbc ecda eagbf gdfcae ec | dfbecg degcaf gafcd cge 7 | eacbdg gdfb dfcbge cgd egcdf gd bfedc aedcfb fcgea bdafceg | gd gcbefd begadcf gcd 8 | gafced dcge ec gafcbde efgca agefb defabc eac cafdg dagbfc | fegba edcbagf efacg eca 9 | ebfdc dbfae cbfgd agbecd ced ec dcefbga ecfg fgbdac fbedcg | ce ce cgadfb ecd 10 | dgbfe gcbdaf cbegfa gfcda gadfce gbafedc ecg ce cgdfe aecd | efbcgda fbaegc cdae dcae 11 | fca gcbfed ecadfbg fbgcda gfbdc cfadb afcbeg fa baced fagd | afc fdcbge af badcfg 12 | fdegc defgacb acged gf deacfg cfg fbaecg abcgde dfag befcd | fgc egfdc cdaebg ebgcad 13 | afgdbce ebfcd dfbecg bafged bg bcged egcda fabcde bdg fbgc | dbg gbd dgfeab fdebc 14 | ecdbfa cage cdaegf dfgea cadbfge dbagfc ea dbfge efa cfdga | ea afe fgcad dgfcab 15 | dafge cebf cgebd ecbgadf gbf bf debgf cdgfbe dbgcae gdacbf | defag edbcg becf bgf 16 | gdb egfabc dbcfeg fagd gd abcde gdabfe fabge fcabedg debga | gfda bdg gaebf gbd 17 | cbdfg fbcdgea ebdc bc cgb egfdb facgd egdfcb fbgade facbeg | gcfbd dbce dcbe fbdceg 18 | fg afg agedcb fbdgeac gbfca eacgfd fceab cgabd bfdgac bgdf | bgdf afebgcd dbgafc bdfg 19 | fbagced cegfd feabc dfbacg bg eagb bcaefd abegfc gfb ebfcg | gfb gb gbf gdfce 20 | dfceba bdcaf decab ea bae acebdfg egabfd bdgec cbadgf efac | dcbeg bdceafg ae abcfd 21 | gbfeac deagc geafc efgb agfcdeb dbacgf ecbfa cfg fg edbcaf | cgeda fegb aebfc gf 22 | acgbfed cabdef gfbcde abced ca dbafgc adc fcedb feca aebdg | gecfdb caefdb baedcf cgeabfd 23 | ed bdge dceagb gafceb dce cgaed bdgecfa gabec fdagc aedbfc | acdeg dce dcbega dfgca 24 | ecgdb cbefdg fgbc cfegad cf fce fadeb bdgeac agecfbd fdcbe | fc bgdace cfe edfacg 25 | ed fdbgc cfeab adbgfc adgebf ebdcf fgedbc gecd def dcgaebf | dfagbc bagdcf gdce ed 26 | bgdfa gefbcd fdceab fe fabde edf caebd acfe deagbc dcbfeag | fe fbgedc abecdg fdebac 27 | bafgde cfgba dcbag fcbgae dafc fdgebac da bdcagf gad cgdbe | dfca ad dga fcbgdea 28 | abecgd agbec bcfegd gfacbde ca bafced fabeg acb cgbed agdc | gdceb cfdbage afbdgce begac 29 | cfb gdafb dfcgba facbde cdefabg egdcf gfcbd cb agbc febgda | cb efbacd agbc cb 30 | bdce dgaec dcefga dcaegb fbgae dba db afdbcg fceagbd gdabe | eagbdcf bd febgacd cebd 31 | bad fgeab bd agfdce fcadeb agdec edbfgca dcbg bcegda edgba | dbfeac bfecda bfgecda dbgc 32 | egcbfad gdfec faced ecdgfb decfga fac fa fdag cfbgae baced | gcfaed aedcfg fadg fa 33 | ebfdc gadcfb fcgdea ace abcde ea gecdabf gdcba gbae dacbeg | bfdgac gadcb acbgd ae 34 | gcafe abfged egfadbc fbdec dg gdebfc gfedc dbcg fcbead gde | gdbc faegc gde deagbfc 35 | decabg gdcfa dfbca cgdefab bdegfa afcdeb bdcea bdf bf becf | aebdfc efbc dfegab bf 36 | cdfegb gcdaf fa bfdacge egfa daf gdbac degcf adfecg ebcfda | cedgbaf fdgec afd gadcf 37 | gd bcfde adegfc cegbfd gdc dgbe bdgcf gfaebcd cabfg edacfb | daecgf agbcf caebfd cbedaf 38 | decbf ebcfg egcaf gfaecb gbf gaeb cadegf ecgfabd agdbfc gb | fgb dfcgae cfbge abfgce 39 | bgfed cedgf cegabf gfc fc eagbdc caegd fcad dbaecgf dfceag | fcda efdbg fedgb bfaedcg 40 | dcafbg aebdc fgdcb efc fgedca fe gbfe fdbagec cfebd cebdgf | gbef gfcbd cef ef 41 | fabdgc cbd db cfgda cfabd eacgdf dagb abefdgc fbeac gdfcbe | bfdca ebdagfc dcb bdag 42 | bgdface geabdc edabg aeb agec ea fcagbd acdfbe acdbg bdegf | cbedgaf bgcaed ea abfedc 43 | abfeg fedbag fbegc dcgfbae fbgcd ec abefcg eafdcg fec aebc | gabef ec geabf fcgdb 44 | gdcbef edfbg cg cafgbd gedc gcefb acfegdb eacbf dbfgea gcb | cgb bfdge gefbc agbfdc 45 | gecbfad fdga debagc da bcdgaf abcfd abcfg bad dfebc aefbcg | cbfga dbcaf cfbda fgad 46 | cbegdf cdga bfaecg egdfc dfaceg fbedagc dgeaf ga gfa efbda | gcdaef agf fga efdag 47 | abd dcaf ad cbgefd abcge ecdbfag cbedf fgbade adebc acdebf | bagec dcfa ad dbaec 48 | efcdb cedgaf edfcab dgecb dgbf egd baegc dg efdgbc gbefcda | afcdeb dg cfbdge gcbed 49 | bgdfca bgf bfgac gdfc cedabg gabedf fdbagec cebfa gbdac fg | facbg cfagb abcgd edagbc 50 | ebagdcf ecgbfa bgadf bdfac cfb cbdgfa ceadb cf dgcf fabdeg | cdfab eagfdb gdfeba fc 51 | gbc bc fegac cfgeda gfcba acbe bcegfd abfgd dgaefcb ecbgfa | edfbgc ecab cbfag efagdbc 52 | de gacfeb fabce ecgbdf adbef cbgdeaf aced dfe bfadg fcabde | gbdefca daefb cgedfb cead 53 | dbf edbfa bedcgfa begafc fdega db cadb facebd fcaeb fdcgbe | bcgfea cbefda fabce cabfe 54 | fcb cegbdf fgdeb fcdeb cfdae cgdb cfgabe bc agcbfde aebfdg | gcdb fcb bdefg edfbg 55 | gfead fgdcbe egdfacb gacd cdf ecgfda edacf adbgfe dc ebcfa | agdc fdc geacbfd fagdbe 56 | gcfabe cefag dafg agecd ad decbg fcedgba cedafg cda ebcfda | aebcfd bfdeagc afecg cgbedaf 57 | gcefdb aecbfgd fdegb ga fgcbda eagf aedgb dceba befdga gad | edagfb gad fgae ebgad 58 | abdfge gfcea bcdg decabf gadbf cafgd dc cdf cdabgf dfceagb | gfdca bcagdf eagdbf dfc 59 | ab dfagbe efbacd fba acfdeg efgad eabdgfc bfgea egcbf adgb | dafgbe gbafe ab dagbcef 60 | febgd gbf bf cdebga gdebc bfcedg befc agcedfb cbgafd agfed | bf degaf gcdeb fbg 61 | cegdfa db cafegdb decga gbd aedb gecfb bdcgfa cdagbe becdg | agbdefc cadbefg fgbce db 62 | gcdfabe fcabg gafdc fbagec bf agbce gbf dcebga feab gcfdbe | cegba fb bdcgefa bgf 63 | bfc cedafb bacfg gedcba acdbg dcfbega gdfb acfge bf adbgcf | fb fcb bf dfcbea 64 | bdgca fca edfbac gcdf fc cbgeda afbgc afebg fbdgac gfeadbc | bfcdga adbfce gbedca cf 65 | cf abdfce fabdg bcdgfa fgcb caebdfg cgdfa ecadg cdf gbedaf | fc acdfbg gcbf cfd 66 | dcbea dfgcbe dbefag dcbaf cgfa fa cbgdf bfa begcfda adgfcb | fba abf edcbfg gcbdef 67 | gd fgbacd geda dfecb cdg ceagb ecgdb dceafbg afcgeb cdebga | dacfbge efacgb eadg gdcbe 68 | dfbcae fe bfcgea cefg fgeab fgdab dgecab fdgeabc eagbc aef | ef fbdcaeg aefcbg efa 69 | fdcgb cdeabf gdafcb efcg bfagced fe gfebcd gdbfe feb bgeda | fcgbd fe bdegf gefc 70 | cdgaeb gfeabdc dbfg bdc gcadbf fdbac db gcabf cgeafb eafcd | decfa bdfg bfadcg bd 71 | fdgea ab eafb dafcge cdbaefg eadbgf edacbg fbdgc gfbad gba | ba ab ab gdbfae 72 | bacdfe defab fbeg egfad dfbagce fg febgda gfdbca fga gdaec | dgbfac dcgae bedfa bfeg 73 | feadb cbd fgbedac bdceag bcaf aefcdb cb decbf edgcf bfdeag | fabged egdcf fbgdace bfedca 74 | cdafe agfedbc gebc aeb fegdba cabgfe cfbea dabcfg eb cbgfa | gacbdf egfbcad cadfe gcbe 75 | deg dbecg abdce agcfebd dg defgcb fagecb febgda fcdg ebfgc | debfcg egcbafd cfadbeg cgdf 76 | cebfad efc dbcfg gfdcbe cfdgba agfed ec becg dfgec gedbfac | bgfdc fce gfedc gbfadc 77 | eabdcf bfcgd gabdfe bacfe bde eadc cbdagfe ebcfd ed afegcb | cdea fcgeba cbfgd bafdeg 78 | gcdab bdafge dc aefcdg acbgfd bdfc cdg eagbc gdeacbf fgadb | dfbc gaedfbc bcfd bdcf 79 | efdca gced dbagefc afdeg feagbd fce ce dcabf adcegf efcabg | gfebac ecafd adbegfc abfdc 80 | bfadcg cgfda bc fbcegd fbac ebagd cagbd egcafbd cbd dfgaec | dbeag cb adgcb abdgfc 81 | dgbef gbacf bcde cd degafc dbefag fcd gcdbf bedcfga cebfgd | cd bdcgf ebdc bagcf 82 | gc fegdac dgefa cefab bcafdeg decg fcg dafbcg fegbda ecgfa | ceagf cg gfeca cgf 83 | fbage cfdaegb dcfgb dbae gefacd de cbagef gfbed deg ebgdfa | fgdace fegcba ed dge 84 | geb ebfacg gbeca gcbedf eafb egadc fbcag cfadbg fbecgad eb | fcgab baef bdagcf gfebac 85 | egbcaf fcgab gaebdf bf dcfeabg befc aebgc bgf adcgf bgdaec | gbface dcbage fgb abcge 86 | bgcdae fdab becadf fa beacd fae gebfc fdeagc acfeb ecabfgd | cfbea fdaebgc afe gfdeca 87 | gefc bgadf dcebfa ef gcaebd dcbafeg cgdbef dbcge efd fgbed | acbfde gcbde dbecg fe 88 | cadefb degbc degfb dc dfcabeg ced cabeg cbefga adgcbe agdc | efdbac acgd agebdc ecd 89 | fcgbea gdfceb eadcb gdef gdbcafe fdc fdbec febgc bcgfda fd | cfd dfcegab dcbfga fd 90 | gabdec dgfcea dagbe gf dgf cabgfed bagf befcd bfdage fbdge | gfcabed bfdge fagb abecdgf 91 | abc gdcea cgbfad egcfabd eafb gfceb cfaebg fbdegc gecba ba | cab ab efcdbg efcgadb 92 | bafdcg gdbaef cf abfc dceag fcg fadgb ebfgdac fdcga ecdgbf | gedfbc gadce adcge fcg 93 | afb fadce dafcb ab degfbc abdcefg gabdcf fagbde bdfgc abgc | dfacbeg ebdagf afb acfdb 94 | cfaedb dce edgcbaf bgdfc dcefb ce cbea fdgaec aebfd fgadeb | ced acgdef dfeagbc ce 95 | egfcdb cdfgbea cgafb efgd gcdbae ecdabf bcdge df bfd fcdbg | cdebg df bfd dfebcg 96 | gbecdfa ce ebacd dgafbc bec dfabc baedg bgacfe efdc fdbeca | cfdba ecb ec bgecfa 97 | cadfbe bfgdeac gdeab ebfcg degfb dfag edf degabf gcebad fd | fgbed abcfde becgf begdf 98 | fgd egdbf fgbce gcbaed dabeg dafe fd cagbefd bgedaf abfcdg | fadbgc df dfea adebfg 99 | fdb gcadbfe fd acbde gdcf cfgbe gfbcde bdfec gabcfe ebagdf | dgfebc dgcf bfgec fcbgdea 100 | dgcbf daegfcb ec cfae dbcega cge gbaecf fgbce fagedb befag | fcgbae cbgedaf bcfega fcae 101 | cbadge eg dbecgf edbgf dcabef gecf fgbad ebg edbcf adcbfge | egb eafdbc geb bdfga 102 | afebg gfcaeb bgfdce cfea af bgade fba bcefg edfgcab cadgbf | ebcfg cfageb gdbae egabd 103 | agfdc fegb badfg fbcdgea dfbaec gdeab eafdgb abf bf cdaegb | gadbe cbdfae gdafeb gdabef 104 | cgdeba gadcbf gebca ad afegbdc acgbfe gcade fegcd dac bdea | ebgcad becgda cad dac 105 | becafdg gd cdg cgebfd efbcg cbaed febgac becdg bdfg ecfgda | cbgfe gd adcbe efdcagb 106 | efcb aebgfd aecdfgb gdcaf bfa bf aecfgb cadebg gbfac ceabg | bcfe fb bf fcbe 107 | bgaf bgedcfa ecdbfa cgfea gea baefc ag cgdfe gdcaeb ecfbga | gea ebcaf gfecd ega 108 | adfegb degcb dgb bg adgfceb cdeagf acged gdecab abcg cfdbe | gedac gfbdace becgd ebgacd 109 | af fgcdba bgecf bcfage dgcfeba cfa ebfa cegfbd fecag edgca | bgfaced fa fa cbgef 110 | egbfcda deacb gfdacb fdcabe bgedc ae fade afbcd gfcaeb bae | ea bcaedfg gcaefb deaf 111 | feagd becafg ebca eb geb cdafgb feabg faegcbd cebgdf bcagf | afcbeg afgcb facbgd fgdea 112 | cdbfea efagd bafegc deb dgaecb dbgae db ecagdbf dbgc ecabg | gdaeb bdcg aegdcb agefd 113 | abe cdbgafe cabef befgc fbadce ba facgde adfce bacged badf | abcedg adefc bfad bfda 114 | beafc efdabc fbdgae dcaegbf beadc adcgb ecabfg decf de dea | egbdfa fedc febca fcabe 115 | bd dbeg dcbfeg cgfad dfbgc ebcgf bgecaf cfadeb fbd abfdgce | deagcfb gfdca fbgec decbfg 116 | febadgc df gecfa cebad fdeac fad gadebf dbfc eacdgb cfeadb | bafdcge afcdgeb cdgaebf fda 117 | cgedabf debfga gfe fg gfba gacfed dfbeg bdfea dbcefa bdgec | dceagfb ebdfa dbfeg fadeb 118 | egafcb cg ceg ebgcfad dacbef afedg gcbdea bcfae cefag gbcf | gdfea egc ecgaf fdgbcea 119 | egfba adecfb gc cfg cfdbeg gdac eafgcd dfcea cgefa bfaecgd | gc aecdbf cgf dcbegf 120 | abcfde eafbd dagfebc bgea aefdg dga dgbfac faebgd edcfg ga | eabg eabcgfd abeg deacbfg 121 | ac fbgeda begcfa decgf gfcbad eagcbdf gbaef eabc gac egcaf | eafdgbc fgabdc agc cagfe 122 | abdfg gefba ecafb eg egf febcdag egac beagfc edgcfb acbdfe | bcafed gfe eg febdgc 123 | fgcba bge efgcab bfgae adbecg fcge defgcba bedfa abgcfd eg | ge abdef badef gfcdeab 124 | gdecbf fcbdae acedf acfb cdbae cgdeba fc gafed fgacdbe ecf | bacf bdaecg cebad cfgdbea 125 | abfcde fa afd degba cdgbeaf bafed eadcgf cbaf bdcfe cedbgf | dgbae bfedc fcba aedgbfc 126 | egfadc ec ecbf abgcd gfdbae eac abedf fegacdb bcedfa cdbae | ce cdbga ceabd beagdf 127 | bdcae bfc fb bfcdeg ebacgd aecfgdb bfdcea acdfg cbadf baef | cfbdae fbc abgedc fcb 128 | bf afged adbegc ebfc gbadfce bdf fbcdeg bdcge efgdb fbadgc | cfeb ebcfgad febgcda fbd 129 | fbeda dfega bf becda fba dfcb cagbed abfdec cfagbe aebdcfg | bdcf eacbd abdecg ebafdc 130 | baecfd dg gbdc edagb bdaec ebgaf bcefadg dge eagcbd acgfde | deg dg deg bdacef 131 | degabf gdbef cedg bgfcd dfacegb dcb dbgfec fcagb cedabf dc | gecd bdc gbedf acbfg 132 | efdag ce cabe bcfdga egcad gcbad bdagce cde cdfebga dfgecb | agdec cde dagce cgade 133 | adbgc bgecd ebdgcf dgafbce abcefg gefdab ec edcf dgfbe ebc | geabdfc edagbf efdc ec 134 | deagf bdcf dgc fbegcd deabcfg cd edfgc aebgcd fecgab efcgb | gcefbd fbdc edcfbg efgbc 135 | fbgedc bacged egbacf cbf gaecb fc fdcbeag ecaf cbgaf agdbf | cfagb bgacf eacbgd fgbca 136 | abdeg gdcea bdfega fgadb eb bgfe aecdfb facbdg gdebfca abe | aeb efacdgb eba be 137 | fcdgab cbgfa gc gfdc bcg fageb cbfgdea cgaebd fcdab dceafb | fcabg gc cfdg bcadfe 138 | dfgcb ebgadc efb ecgba becfg feagbd cgebaf ceaf cgfbdea fe | fe bfe bef fcbgd 139 | fabde cbdg gcbae fegbac acfgde edgab bedgacf deg cdbega gd | dcgb cgfeda eafdb egd 140 | gfac bcaegf cf fcb ebcda edcbgaf dgfbce agfeb geafdb cabfe | ecadb fc ebadgf efcba 141 | fbgcad bfcae cf afbeg dcfe cbf cbgaed ceadb bcedaf fabcged | adfegbc fbc ceabd fc 142 | dabf dacbg fgabc db cgdafeb eacbgf cgfdba bgd dgcae gdfceb | bacegf cbgfed bd bd 143 | dfec dgcabe cf bfdca fgadbce bfceag edabc fcb fdabg bcfeda | fbc bdfga efdc cbefag 144 | edcbga fcagb gb dagcef fgeb egcfa dfbagec agb gcfeab dcfba | bcdefag ceagbfd efbg fecga 145 | eacdgf cb ebc afgecb dbeaf cbfea ebfcdga edfgcb egafc acgb | efbad cebaf deafb aedbf 146 | gedba fegdbc dgf deafg gceadf afcdeb gfca fg eadfc dbcfgea | gdacfbe gf faecbd egfad 147 | fe gef adebgc fcde eadgc gfcaed bfcga gafce bdgcfea fbgeda | dabfge cefd afdgce feg 148 | gafd feadbc cfbage ceabdgf edgcb acgbf ad fbadgc acdgb adb | ecbafd cdabg abd bad 149 | gea defga egdc dafbg fbadec fbcega aedcf ge cgafde cabdfge | ge fdceag efcad cdbfea 150 | gecdbfa bgdfca cdbfa ecdfba dgfca cbag ga ebdagf fdgec gaf | fgcdeab bcedaf gbca cgab 151 | defcgb edcfg gcadf fac dgfcae bgafec cfagebd aced ac afdgb | afdcg dgfce fcegbad ac 152 | eab cfdega ab bfgaec gbdfeca gdeca dfecb abgedc ebacd badg | gcafbed ecdagf bcfgade ba 153 | cbd acdfbg bgefda cb fgedbc acfb bafdegc dgafb dbacg gaedc | bc baefgd gbdefa cb 154 | edc gfead edgbfa efbca dc dcgbafe dcgf aecfd gafdce bdcgea | bfeca fbaec bfaec fdaec 155 | dagef efgcbad gcbd ebagfc db eafcbd efcgb deb bedfg cfedgb | cgadbef bd dgacbfe befgd 156 | gcefbad cebgaf efcgb bdge bdafc cdfgea de dfe bfdgec cebfd | dfecb de fdebc fde 157 | fe aef cgbea dbfcga dfagce cbafed cebagdf cgeaf afcdg efgd | fadbce fe aegdcf ef 158 | adbgf dcbfae cebgdaf bf gafde gdcba cdaegb fab gcbf dbcafg | adbgf gbedacf afb gcbaefd 159 | cfagb geb dagbcf edbfa egdfacb efgba fcbeag eadcbg gecf eg | ge cfeg bafde afdbe 160 | ge bfedca adgbf dfceb dfgaec egfbd gfcdbe fcgedba gebc ged | fcbde cgdafeb cdfaebg eg 161 | cdebaf cgdefb fdbcega bdaf fgecad afc af abefc acgeb bcfde | abfd fbad fdecb geabc 162 | edfga dcagb afgcbd facb dbegcf fb bgf gfcbdae gabfd cegadb | fbdcga fbdga fb gfb 163 | dcegba dfb adbec cdbafe df fcbeg dbfce dfabcg edfa cbedafg | fd efgcb cbafed dagceb 164 | afcbe cfa agbef bfgacd cf cgef cbgeafd aefbgc gefbad abcde | gfcabde afc fca fabgde 165 | bacdge dfbc bc ecgfdab edgbcf cgafde gbaef cgefb ecb edfcg | bgdcef bgedafc cdaebgf cbfd 166 | egdc cbdgfa def dcafe de dcgaf abefc dbaegf fdgcea ebgacfd | edgc gbcedaf fgcaed geadcfb 167 | dbac bfdge cgb bcgde cb gbfdcea acfebg bdcgea adecfg edgca | dgeac feabcg aegcd gcb 168 | dcbeg dcgef acdfg efabgcd dfaceb efgb fbcdge aegbcd ef efd | dfbcge bgef gcdef cfdag 169 | dfgb gfc afcde egbcd cfgde cdbegf agbecf gf bcdeag fgdebca | becgd gf edgabc dfcabge 170 | cd bdaefg cabfed cdgfbae bgceda eadbg egdc cabgd bcd fagbc | dbgac fedacb edbfacg dgce 171 | acde faegd dfa bgeaf efacgd fbagcd da bcaefdg ecdgf febdgc | dfegc dgbcef adf cedfag 172 | fag cbafe ecbfag gcbdf edfcba cgea bagefd agdcefb ag bagcf | fcabg ebagcf gdcfb egfbda 173 | badf fgdbace gfced fdcea efacbd ade bcfeag ad cabef dacgbe | afbd edgcf fabd fagebc 174 | ac cfdabge bgac gfade fdbgc dac dbcfge dgcfa dcgfba fbdcae | cbagdf geadf dbcagf adc 175 | dcgba dc gadfeb fcdg baedcf aegbc dbacgf eagbfdc bdc gbdaf | abgcd cbd gbfad gbcea 176 | bfagec fcbeg ce dfagcb bfcade ebc dfegb acgdbfe gcae agcbf | gcae afdgbec bfagc ebagfcd 177 | bgacf gfdabc abgcef fdab cdbag decbg geadcf ebfacdg ad cad | bcaefg cgbdaf bgcaefd agbcf 178 | fbadeg gbe dgcbea gb bcgd bdecgaf agecb cegda cefadg bacef | aedgc cgdb aegcd agdcef 179 | gbecdf aefg eg gec bcefa gcbad egcba cefbad fecgab badfecg | ge afbec edfcba agcfdbe 180 | fbga cedbf ba ebagdf baegdfc aeb bagced gfcdea bfead afged | gdafce ba eba efcdgab 181 | beafdc bca defac ab edfcga edcbg cabed bacgdfe gbadcf eabf | cfdage cafbde efcbda cdgeaf 182 | efg agfcde abgfd efbc cdebg febgd ef cdgbae fegbdc befgcad | ef efbc dfgba fge 183 | acgfb eabgc cfdab fg afg gcef gfdbea becfag beafdcg gebcda | fgec gefc agbefc cgfdeba 184 | adfeg cgdfeab feba fgeabd dgabe egbcfd aebgdc def cgdaf ef | febgda adfgc bgdcea gadfe 185 | cgabf bcg bfgd edbcgaf acegf adbefc ebadcg bg cdbfa cbfdga | eadcbf deagfbc fcage dfbgac 186 | dge ceabdg fdbce cedgb acfdgb cbdagfe gdabc gabe fdaceg ge | eg gde cdebf abecdg 187 | cdage eagcf ade gebcaf faecgd gcbed abdfeg cdaf ad degbcfa | bdgec aegcd adcgbfe feacbg 188 | debg gec dbfegca ge acdeb acgfd abegfc bcadge eadgc efdacb | cfdbae ge cgabef dgafc 189 | gcfabe ed adcgf febac bgdfea dfaec deafcb acfbegd dcbe ade | fcgda dea fcdag de 190 | bdfecg adgbefc dfbeg dabecf agefd gdba ad dfa faecg beadfg | cgfabed abdg cfdgbae adefbc 191 | cdbge cbaegd cde afcdbg cbadegf efgadc agdcb fgcbe ed daeb | ecd ecd dcgeab dbcge 192 | ebcg fbgae fbaec cefbgda ecf bdfac efbadg gfceda cfbage ec | cfdage ec caebgf cgeb 193 | cgfbead fed fgecda dfeagb ecfg efcda cfbda fe dcbgae edacg | fedac efd ceadg cgdae 194 | dgbae acbfedg acbe ceagd gacebd dgbefc cadfg ecg fdbaeg ec | dgfbae ec fedbcag abec 195 | ecbgadf ab afbe fgcba fgcead bgfaec cgafe dgabec dfcgb abg | bafe bfea cgbdea ba 196 | cf dfbce dfc befda abdefcg gaebdc dfacbg cefg gbdec fgbedc | cdf cabgdf cfdabg bgecd 197 | gbadef bcfd gabedfc bd cbfag fegbac gcdab gafbdc dgeac bgd | db dbaegf gaebfd cgaed 198 | ebgafc ecg agfcd ecab dbfgea eagcbfd edcbgf bgaef ce acegf | egbfa bcgfaed abec ce 199 | acdfbg afgdb ea bea ebgda agecfbd bcgde cfgeab aefd defgba | agbed ae fgbaed defa 200 | gcebadf ed bafce bgcfad daefb bfadg aefbgd fgcdeb daeg ebd | cdgfba ecbfdg edbaf gade 201 | -------------------------------------------------------------------------------- /Day9/day9.jl: -------------------------------------------------------------------------------- 1 | # Data 2 | lines = readlines(joinpath(@__DIR__, "input.txt")) 3 | data = Matrix{Int}(undef, length(lines), length(lines[1])) 4 | for i in axes(data, 1) 5 | data[i, :] .= parse.(Int, split(lines[i], "")) 6 | end 7 | 8 | ## Part 1 --------------------------------------------------------------------- 9 | function lowpoints(data) 10 | nr, nc = size(data) 11 | 12 | idxs = falses(nr, nc) 13 | for j in axes(data, 2) 14 | for i in axes(data, 1) 15 | t = trues(4) 16 | if i > 1 17 | data[i-1, j] ≤ data[i, j] && (t[1] = false) 18 | end 19 | if i < nr 20 | data[i+1, j] ≤ data[i, j] && (t[2] = false) 21 | end 22 | if j > 1 23 | data[i, j-1] ≤ data[i, j] && (t[3] = false) 24 | end 25 | if j < nc 26 | data[i, j+1] ≤ data[i, j] && (t[4] = false) 27 | end 28 | all(t) && (idxs[i, j] = true) 29 | end 30 | end 31 | return idxs 32 | end 33 | 34 | # Solution: 541 35 | sum(x -> x + 1, data[lowpoints(data)]) 36 | 37 | ## Part 2 --------------------------------------------------------------------- 38 | function findbasins(data) 39 | nr, nc = size(data) 40 | 41 | lpidxs = lowpoints(data) 42 | nb = count(lpidxs) 43 | 44 | basins = zeros(Int, nr, nc) 45 | basins[lpidxs] .= 1:nb 46 | 47 | for _ in 1:10 48 | for j in axes(data, 2) 49 | for i in axes(data, 1) 50 | data[i, j] == 9 && continue 51 | basins[i, j] > 0 && continue 52 | 53 | bl = i > 1 ? basins[i-1, j] : 0 54 | br = i < nr ? basins[i+1, j] : 0 55 | bb = j > 1 ? basins[i, j-1] : 0 56 | bt = j < nc ? basins[i, j+1] : 0 57 | 58 | basins[i, j] = max(bl, br, bb, bt) 59 | end 60 | end 61 | end 62 | return basins 63 | end 64 | 65 | # Solution: 847_504 66 | basins = findbasins(data) 67 | largest = sort([count(==(i), basins) for i in 1:maximum(basins)], rev=true)[1:3] 68 | prod(largest) 69 | -------------------------------------------------------------------------------- /Day9/input.txt: -------------------------------------------------------------------------------- 1 | 9876543234679310943456798433456798998764321357921025689921987899896498799923491297654545679876212347 2 | 6987675036678939874567987012567897899975532467892334567890996789789989679895989398743236789865101456 3 | 5598983124589598765689765423678956789876543568943565678999765395679876598789678987654345998764313689 4 | 4349994235695329976789998634678946789987987679757678989398653234598767459654567998767499899875424568 5 | 3298987656795419899896459745989134568998998789968789699219772123987654398753456899989989689986576789 6 | 2126598787896998788902349897991013457899999997989994567909765244598875697542346789798764593987897897 7 | 1012349898999887567893956999543234967967988656799323459898954355699876989331238996659875691298998956 8 | 4123467999598765456789897987654347899659876545678912398767896466789987979210349965545996789399659235 9 | 3234598985439878567896789198795456789898765434189329987546789998994699867991467894534987899985432123 10 | 4347899876567989678965994349987897899909996521034998675323597899123989659889578943023498999875321014 11 | 5456987997689299989254789498798998999919989992129876543213456789239877545678989432145999998989432345 12 | 6567896798792109892123569987679999998898767889234997854324597994399765434689996565236789987698544456 13 | 7898945689899998763012458976597989987784345678949998985434989219987654323456899854345699996597655678 14 | 8949239796958899954124567895435678996543234567897889876599878998698765435678998765496978989498966899 15 | 9932198965346789867258789932124567987655123458976778987988769876569876646889019887989869979329987957 16 | 9893987896234568954345898743245798998766234567894567899875457987421987756799934999876649868912398946 17 | 8789876789195689875457999655466799679879845678913348987654346987630298867897895988965432946794459435 18 | 7653245678989799876767899867578954568989658799101234999869234598541349998976789876894321987895568910 19 | 9654134789678986988979989878989243456799767895312349898998945987676556789345698765789210398996678999 20 | 8765245696567895399898979999599012367899898986423498776566899999887687990296987984694331239989989888 21 | 9954346897379964219787767893478943479901999597434569653465678999998798921989896593789452398978998767 22 | 0976557898298965398656456794569894998919589439765698542324599689929899439976789432599543987767999656 23 | 2998678999997897987642347895698769867898478929876987321015689599845996598765678953498959876656897545 24 | 9859789899886789998756468998789655456797569999989996432326796498656789987654567894997899965545998968 25 | 7643996798654567949898979659897643245698979989994987543689895329868999998765678949876778964234899879 26 | 5432345697543458957999989545998732124569998967943198964599943210979098969876899129875467996446789989 27 | 8584557987654569767899993123989841034979987654599979989679985341989197854987989039654346789677899899 28 | 7675678998765699898988932034976432149898998863278954393989876832698986543298968998765956799898998789 29 | 8776789439897789909977794255987543298787899985369893212399989764567997432129456789979899989949987699 30 | 9899899524989896429865689356898655398656799876456789105679899895678987521012359891398797778932397569 31 | 9987978939878987898754578967898786499545892998968994323456789989989498432154467910987676567891986478 32 | 9876568998767898999743679879969897987656901239879895544678999879897599543265998934977567456789765399 33 | 7765459876546999898654798989456998998767893446989796665678998768789987654399899949765432345996996989 34 | 6984345995437898759995987892399999439978998669995689776889997656667998969989789899986645567895789878 35 | 5493234989425789647889876891987899321989998778934578987999876543459549998875569789998786688934899767 36 | 4321049875414678936979965789976678910198989989323469998967987652368932987654414579989887999023987656 37 | 5493959954323469324767894679864567891987878993212378999545698710456891099843203458976998942125998543 38 | 7989898965434568913456893589653456789876567992105567894434789322567992129874212367895459993349879432 39 | 8979767996576679102378921098732345898676456789213458943226798763456789298765673456789345989659765310 40 | 9865656889677889293467892129641237899545345698924567899012999654567899349876654597891299978978987821 41 | 8654345679898999989679953498432356789321234567897698978929898765678998956987875698910987567899398932 42 | 7543234578929898878989769976544578996532356878998789567998769888789987897898986789321297478921239543 43 | 5432143456919657667899898989757689987653479989019893478987847999898796789949997996548396567890198656 44 | 8961012367898943456789987698768789998954568998929989569876435445989654678929898987657987678954239967 45 | 7642123456976432367893297569899898769765679456998678978987321334678965799898769598767998999876349879 46 | 8843234568965321245892195479901989859887894367899568989765410123457896893799654329878999899987456989 47 | 9754545678976432496789989567899876543998999578965467999876923245569987932679954212989898789998567894 48 | 9898758789876545789897678998967989862369998679754345699989874356998898921569896102398767678999978943 49 | 9998767894988656896935569549459898973456899789643234987998765459876789932499789213988654589989899432 50 | 8789978943299767965423478921298767895569964996532146986799878598765999893987689929876542679878798921 51 | 9689989652129878987314567890989856789678953987844299875989989679754666789986567898986321299767687899 52 | 6567897541012989796205679999976545679999654598765987654678998798673245678965438957895410987954576778 53 | 4489995432123497654317895798765432459898767679876798763567899899542134589875312346689929996543134567 54 | 3235789543235698785456954349876721248789878789989899874698999998753234696543201234567898987654235678 55 | 2124678965346789896787893212987210187678989892198942976789998769876545987654415345698976798966547899 56 | 1014589878456893987899954301297321234589899999977893988894987456998668998765623466989765429987858943 57 | 2123578989569902398978975212976542475789789998756789199953986568989889679876734569879954312398969652 58 | 3234567897698943469869865323987643567898699999547894349992197689679995566987655698767893202459878943 59 | 4345978998997899598756998764598764678987569898769976998989999796598754324499878999859994312378989965 60 | 5656899569866968965431279879689985789998498769878989876865778965469843212347989898948975459459999876 61 | 6787932499754357896542456998789699899886329856989999765954567894345954353456798797837988678969878997 62 | 7898953987643239919757567899897543998765498745899886644212678901234969754668997655126898789998868998 63 | 8999654996544128929898978934998631349877899635789765432103789212349898975678986543235679892987657899 64 | 9998969875431017999939989325698752356989998523489876643214897423598787896999697655356799921098545989 65 | 9997978996652126789129893216799763467899896412678999765625996545987676569896598766587898943985432877 66 | 9886899429863245679399789109999878978998765324569769889436789679876543456789439898698987899874321466 67 | 8765678910964376899987698998784989989549995445678945996547899798965432387696429999789556789766440355 68 | 7654569899875487999896587899543494399929987678799434987667934977994321234597998998995445678954321234 69 | 6543456789989568998785476998932359239898998989893223699788999866789410165789896987654324479765535445 70 | 5432567899987678997665365767899498998767999699932104567999987654789421256899765698985212356986787568 71 | 4321256789999789886543214456798997987656789569543213469765498765678933345998754109876323567897898679 72 | 5434345678998998765432102349987856798545993498994999578954329878989654658987653212987434878998929989 73 | 6565656799567899876545214498986534987656789597789878989865912989498768767899864324598546789989939999 74 | 7676768923456999987756725987995423898967896986678767993999894994239989878998975435987659896765798989 75 | 8787879734567898998998999876789545789989954965483458912987789892129796989787896745898789975454447678 76 | 9898989656789987889999987494899656789195899754312379909876556789097645692546999856789897654322334589 77 | 8969398797996545978899976323678967991024789876106567899985434567998732101235678969897998854310123459 78 | 7654249899975323456789985214567898942195678998217879999876524567986544212346989989976799965924265678 79 | 8652135987976896568999953107998929769989899999356989998765213456987656434587896492455678999895696799 80 | 9543299876989987689659864315789319898878989876467999989874301345699786547998954321234589987689989892 81 | 7654987664698998796549874323498901997659878987578997779765432456789987856899967432355678996578678921 82 | 9965799543567899987856975434567892987543656898989986569876753697897598767977898645698789975457568910 83 | 9899898632356792198977896565678969876532345689995987432987884789966449878956789876899899764325457891 84 | 6678997653458999299989979876799349865431334678953294321098765789654323989345999988967998955212345789 85 | 4599298964578998988998968987891234986210123689964498753129877897654312993234789999654987742101234699 86 | 3989129765679997667987899998910129876433234589876569876534988998973209894365678919869876543232348789 87 | 2878939876799896543566999879321236997645345679987893997699999529994698765489799201978997654343469892 88 | 3467899987986789432355698765432345698987456789298932398988965410989989876569895412399989765499598921 89 | 5679979999895678921234569989543456789998987891019643599877896329879879999678976523989878979988987932 90 | 6789568987784569990146678998656567899969898989998754988756899499764768998789897949876767989877656893 91 | 9893499976543478989236789239767898998756789878899869876645798987653456799898789498765456799765346789 92 | 6912987665421299879345678949879989976545698765789979865434687898432567895965689398754345678974235699 93 | 5439876543210987769967899999989567895431987543695491984323456989943458954397899999665265667895127678 94 | 6545997654521976458899910989996468986532398654599392395664677979894568965989959876543123456789024568 95 | 7666798766439894346778929878987347897747498765678989987775899866789789999878943997651016567892123456 96 | 8789899876598789234567898969876456798856569876789778998986798754989899989766959898764323456789236768 97 | 9898999987697655139879987655987898949987899987894566989987986543478999876745898759877467897897345679 98 | 8967998799798743016791098943498929956798999898913455678999876542359998765636789542976578949985498789 99 | 7649876549899752145892987632349547897899498769101234589212987656767899443323498931987989539876569893 100 | 8432987632999863236789876545678956789902349854213455678903498987898954321014567890198994321987689912 101 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Advent of Code in Julia 2 | This repository contains my solutions to the Advent of Code 2021 questions. --------------------------------------------------------------------------------