My attempts to solve puzzles of Advent of Code
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: day 7

Signed-off-by: Kaushik Chakraborty <git@kaushikc.org>

+1407 -1
+1000
data/2023/day7.txt
··· 1 + J3T3T 868 2 + 6Q499 630 3 + 8J3AA 335 4 + A73AA 593 5 + 28445 591 6 + A9QAA 563 7 + 47353 830 8 + AQ7A9 230 9 + QT6JJ 588 10 + J6K38 769 11 + 5JA65 531 12 + 737QJ 827 13 + QQ56J 962 14 + 5T666 481 15 + 4486Q 282 16 + J6566 843 17 + 3TT88 331 18 + KKK8K 129 19 + 8Q884 145 20 + T5T74 118 21 + 32J22 115 22 + 9Q843 220 23 + 99J9J 590 24 + 3528K 291 25 + 95789 959 26 + 2986K 26 27 + 9T66T 989 28 + 632A7 447 29 + 74285 217 30 + 5275J 629 31 + 78337 767 32 + 56555 894 33 + 5Q555 262 34 + AA4AA 320 35 + 4K499 701 36 + JAT22 759 37 + Q852J 423 38 + JJ7JT 22 39 + TJ223 698 40 + T555J 795 41 + 5K9K5 549 42 + Q2822 515 43 + 5KQ9Q 754 44 + T8T79 979 45 + 6JJ72 866 46 + 77989 707 47 + 8AAAJ 224 48 + KKA2K 869 49 + 26J95 572 50 + K93K9 149 51 + 44Q5Q 867 52 + 69999 778 53 + Q33JQ 506 54 + 5KAA6 765 55 + 333J3 540 56 + K8JKK 134 57 + 9QAQA 169 58 + JQ629 233 59 + 64667 735 60 + 5A6Q2 43 61 + 9KJTJ 994 62 + KQAT7 124 63 + 9TTAA 8 64 + 55755 193 65 + 6J627 742 66 + T59A9 139 67 + 78AT9 864 68 + 28A82 718 69 + 33JJ3 57 70 + 58776 385 71 + 22AA2 904 72 + 7TT77 21 73 + A8AA8 490 74 + T9784 706 75 + K3J3K 76 76 + 99444 451 77 + 8K497 680 78 + 5Q45Q 344 79 + T5843 670 80 + QK647 161 81 + 6KQ46 634 82 + 2JQQ2 471 83 + KJJ77 123 84 + KQ3Q7 412 85 + 522QT 632 86 + 52625 642 87 + 38A25 508 88 + 54A7K 892 89 + 44439 958 90 + 2JKAA 682 91 + K75K7 677 92 + 28A24 743 93 + AA5Q8 722 94 + 92892 783 95 + K8828 173 96 + K9A89 425 97 + K6KQ8 657 98 + 7K747 833 99 + QJ996 625 100 + 35QK4 67 101 + 66677 268 102 + QJ89A 610 103 + 75A6J 49 104 + J8872 967 105 + 4K658 210 106 + 29449 832 107 + A3694 566 108 + 99J5A 313 109 + J5AA9 1000 110 + 57A7A 917 111 + 287J4 681 112 + 667T7 789 113 + 3J322 375 114 + 55525 522 115 + K55AJ 565 116 + J9T7T 740 117 + J4353 363 118 + 88244 941 119 + JAA5A 977 120 + Q5Q55 922 121 + 9TK8T 491 122 + J8533 378 123 + 24388 61 124 + 8848T 947 125 + KTJ2K 264 126 + 76786 744 127 + K6666 739 128 + 5K5K5 631 129 + 56284 183 130 + T23T2 48 131 + 79727 158 132 + AA6KA 92 133 + 5A688 140 134 + T7TK7 143 135 + 699J6 377 136 + 7JJ38 809 137 + 759T3 181 138 + 8KK9K 732 139 + 999KK 901 140 + 222J8 329 141 + A3J43 835 142 + AQQ66 266 143 + 96Q4J 368 144 + JA5K6 838 145 + 69J88 263 146 + AK3KA 108 147 + TAJAT 554 148 + 7QAQA 420 149 + 3KQ62 819 150 + QJ465 79 151 + JJJJJ 504 152 + TT4TT 663 153 + 224J2 801 154 + 6AAAA 299 155 + J77T7 902 156 + 48444 619 157 + A2785 607 158 + 74J8T 875 159 + 8J683 250 160 + K2QTK 824 161 + 26AAA 215 162 + 47Q8A 553 163 + A6TT9 639 164 + 266T6 17 165 + QT9JA 24 166 + J8J99 405 167 + Q6666 544 168 + Q44J4 327 169 + 66694 684 170 + 5TJQA 511 171 + 2J25A 757 172 + 9666J 103 173 + 99995 346 174 + 365KA 734 175 + K388T 11 176 + 57T5T 828 177 + 29992 273 178 + 4A36Q 34 179 + 39888 204 180 + 22A33 306 181 + 9Q993 302 182 + 72677 435 183 + KKQ8J 94 184 + 447J4 289 185 + Q4K22 107 186 + 333K9 406 187 + TT5T7 270 188 + KK2J4 101 189 + 4K5KK 903 190 + TTT7T 473 191 + 6KAKK 141 192 + 8Q868 943 193 + T4T45 660 194 + 4T968 840 195 + 6AA5A 163 196 + TQJTT 812 197 + J8A88 345 198 + 88QQJ 276 199 + 7JT93 290 200 + 58QQ5 534 201 + T7457 849 202 + 4444K 479 203 + AQQAT 851 204 + J45JJ 750 205 + J8T98 255 206 + 87758 839 207 + QQ8QQ 55 208 + 725A2 693 209 + K4TT3 431 210 + 88588 482 211 + 2K4QJ 502 212 + 89955 381 213 + T7869 987 214 + JA74J 408 215 + 27438 211 216 + 2658A 221 217 + 7A7AA 836 218 + 77QJT 873 219 + 666KK 633 220 + 8AAAA 756 221 + QJQQQ 281 222 + 937QQ 184 223 + 3Q777 308 224 + KK7JQ 208 225 + 44355 478 226 + A5JK4 571 227 + TTJ35 726 228 + 97KTJ 357 229 + 444A4 294 230 + 84438 83 231 + 66KQ2 517 232 + 7866J 575 233 + 224T7 434 234 + TT633 42 235 + 66972 671 236 + 867Q4 106 237 + 95J55 775 238 + 8J444 168 239 + TT328 213 240 + 86A88 198 241 + Q3578 986 242 + QQQ2Q 831 243 + QQ8Q8 898 244 + K69A4 749 245 + AAKAA 475 246 + T3487 275 247 + 59K6Q 850 248 + 76J4T 248 249 + 69Q7Q 97 250 + AK3QJ 182 251 + Q2598 44 252 + 54444 486 253 + TJJTT 708 254 + J2JJK 179 255 + KKK88 287 256 + 66QQ6 694 257 + 2537A 551 258 + 2KQTA 501 259 + J9877 171 260 + 2456T 355 261 + 44Q99 929 262 + 999TK 637 263 + 6QTQ7 442 264 + 7J877 755 265 + 22292 574 266 + 3QK79 157 267 + JK9K9 300 268 + 585K4 85 269 + QK22A 41 270 + A8934 580 271 + T5TK9 920 272 + K4Q5J 122 273 + 33257 470 274 + J5JTK 203 275 + 9KKKQ 712 276 + 677Q3 776 277 + 36A36 792 278 + 7AAJ8 219 279 + 52T55 690 280 + 6695J 334 281 + 66T68 484 282 + 976Q4 667 283 + Q44TQ 105 284 + 98J67 753 285 + QJT87 58 286 + 86Q92 802 287 + 4A4AA 185 288 + 63399 390 289 + K6K22 954 290 + QQQ77 815 291 + 77797 546 292 + 4JK48 997 293 + 33A96 53 294 + 7A4A4 601 295 + 568T4 992 296 + 886J8 784 297 + 5T575 418 298 + 45TQK 367 299 + 76A9K 370 300 + 56226 449 301 + 6KK3K 458 302 + 69955 636 303 + K9Q93 249 304 + TAT53 746 305 + KJJ3K 137 306 + 84477 332 307 + J5AQ6 325 308 + 387AA 382 309 + 8833J 142 310 + 56Q6A 909 311 + 33393 459 312 + K3KK9 398 313 + 996AJ 160 314 + 37778 499 315 + TTT44 933 316 + AQTQQ 737 317 + 3T3T4 596 318 + Q8JQ3 552 319 + 55JJ5 897 320 + 95995 518 321 + JQQQ4 500 322 + 4QQQT 773 323 + A2522 336 324 + AK972 785 325 + 7KK3J 587 326 + 73K77 448 327 + 7Q755 309 328 + 9966K 397 329 + TKQJA 228 330 + 46666 609 331 + 44JJ4 853 332 + TA5AT 19 333 + 354Q6 131 334 + 99K97 258 335 + J3355 664 336 + K29T6 720 337 + T8635 132 338 + 75474 521 339 + 6J943 119 340 + 77K77 238 341 + 84Q47 15 342 + A556T 347 343 + TT7J7 582 344 + 2455T 661 345 + JT43T 351 346 + 22A22 243 347 + 38335 655 348 + 9A47Q 133 349 + 92T29 887 350 + Q98JJ 394 351 + KKKKQ 781 352 + KK5JK 231 353 + 4TJJ4 285 354 + TTJKK 863 355 + 3K5TQ 165 356 + J7T32 882 357 + 5535T 557 358 + 7537A 952 359 + 692T6 88 360 + 52J55 547 361 + 5TTKT 659 362 + 68K59 648 363 + 77J47 799 364 + TJ348 116 365 + Q838A 304 366 + T255T 46 367 + 37682 600 368 + 764T6 700 369 + JK939 301 370 + 37J77 536 371 + T69T8 35 372 + 77Q76 387 373 + 378T5 279 374 + 7K4K3 259 375 + T8993 568 376 + 88J88 328 377 + 88988 665 378 + 7J8Q5 50 379 + QJ95Q 365 380 + 86K6K 207 381 + 9K536 485 382 + 7Q749 417 383 + 8983T 150 384 + QQ2Q6 319 385 + AA2K2 796 386 + J35T5 714 387 + KK99K 925 388 + TK244 199 389 + 3QAJ3 823 390 + 9T979 315 391 + 962KJ 33 392 + Q45QQ 842 393 + Q663Q 350 394 + 42334 28 395 + 97779 603 396 + 78T68 890 397 + 6J3A3 855 398 + 5555T 908 399 + 95J8K 489 400 + A87TT 537 401 + 22K23 626 402 + 4J848 641 403 + 22A26 758 404 + 934QT 614 405 + 47474 679 406 + 7227J 467 407 + 5AAAA 606 408 + 99J79 341 409 + AKA33 821 410 + 6826J 583 411 + 55J55 415 412 + K7AT6 724 413 + 3TTT8 433 414 + 3Q343 807 415 + J8552 439 416 + 777KK 232 417 + 44678 135 418 + 33J3T 969 419 + A2545 516 420 + J596T 686 421 + 7KTQQ 703 422 + TKTKK 426 423 + 22J44 559 424 + 83K33 73 425 + 29999 343 426 + K739J 996 427 + 55A5A 687 428 + 43334 885 429 + T6T6T 396 430 + QQ33Q 923 431 + 6A66A 798 432 + 2AAAA 844 433 + Q4223 374 434 + 8QK45 419 435 + 244Q2 683 436 + 55545 624 437 + J9999 770 438 + TT242 298 439 + AK9KA 581 440 + 22A97 668 441 + 5TK87 861 442 + KK4AQ 229 443 + 4A66Q 803 444 + KJKJK 794 445 + QQ34Q 272 446 + J4494 545 447 + 55K6K 295 448 + 33733 594 449 + Q5QQ5 620 450 + 96269 78 451 + 94773 710 452 + 4939Q 246 453 + 29959 303 454 + 86888 364 455 + T482K 474 456 + 94844 407 457 + 3QQQQ 685 458 + 2AT92 709 459 + 8Q888 921 460 + JA53J 63 461 + AK857 893 462 + 88TJK 2 463 + JQ555 359 464 + 77377 966 465 + TKKKK 859 466 + 8T487 982 467 + KA4K4 284 468 + 9433J 62 469 + 52A4K 5 470 + K6KAJ 197 471 + K4TAJ 252 472 + QTQ8T 530 473 + 736Q2 968 474 + TTQQQ 3 475 + 65888 762 476 + 82828 975 477 + KAK6T 512 478 + TTTJT 487 479 + QQ9QQ 60 480 + 34J46 533 481 + AAJA2 871 482 + 76K5A 468 483 + 952A9 400 484 + 8J887 623 485 + J4K45 427 486 + 666J6 312 487 + 2JK2K 791 488 + J3336 597 489 + 37377 56 490 + KKAAK 562 491 + 66QQT 95 492 + TA66Q 914 493 + 52225 187 494 + 76KJJ 189 495 + AQT69 156 496 + A99A9 509 497 + JQAAA 316 498 + 33T33 212 499 + 22J2J 983 500 + 46466 881 501 + QQQQT 314 502 + 4949J 373 503 + KAJ2K 87 504 + 55252 352 505 + 67777 645 506 + Q5T35 376 507 + 42444 891 508 + Q29Q9 226 509 + T43KQ 305 510 + 9999A 441 511 + AAT5A 453 512 + 97K6Q 110 513 + 74979 422 514 + 777AK 293 515 + TJTJK 476 516 + Q7JTT 870 517 + 23222 436 518 + AK5Q9 321 519 + 4QQKQ 90 520 + AQ9A9 942 521 + K2QT6 429 522 + Q9Q62 788 523 + 74499 186 524 + A52T3 205 525 + 652AA 702 526 + J488A 900 527 + 64624 584 528 + 8QK3K 223 529 + 4JQ25 804 530 + TTQKT 810 531 + 62946 760 532 + 42422 322 533 + A3533 895 534 + 77J97 790 535 + 55K55 154 536 + 5AT22 519 537 + 26772 592 538 + 76866 813 539 + 56AJA 573 540 + KQKQQ 880 541 + 7TAQ8 649 542 + Q2229 166 543 + 6ATJ6 837 544 + 44784 644 545 + 6664J 120 546 + T9K6T 274 547 + JKJJK 342 548 + 2TK35 577 549 + 76666 403 550 + 5J8Q3 239 551 + 777J7 52 552 + 9QQQJ 995 553 + 56286 457 554 + 6J777 999 555 + 26662 349 556 + 22QAJ 452 557 + 838Q8 808 558 + 34339 886 559 + 79TQ4 366 560 + 27782 148 561 + 63868 764 562 + 55574 622 563 + K2T9J 939 564 + 34225 652 565 + 9TTTT 971 566 + 4464T 13 567 + J259T 260 568 + 979AA 981 569 + 75KKT 727 570 + 22K49 692 571 + 9TTJ9 940 572 + AT75T 498 573 + KK3QK 883 574 + Q8Q4A 970 575 + 896K8 155 576 + J9595 704 577 + 25J52 817 578 + Q347A 288 579 + K9999 51 580 + 6K9K9 98 581 + K49J7 697 582 + A32AJ 410 583 + QQ2QJ 466 584 + 363QQ 23 585 + 53J3A 725 586 + 32343 829 587 + 777Q2 69 588 + 3K3J3 605 589 + AAAJA 699 590 + 7757T 117 591 + Q44K4 280 592 + 7577K 147 593 + 46649 526 594 + KK66K 541 595 + 88Q7K 409 596 + 66626 472 597 + 54QK4 527 598 + A25TT 12 599 + T6QTT 404 600 + TT7KK 550 601 + 22282 391 602 + J5455 37 603 + 3T3T3 816 604 + 775A5 111 605 + 36T98 241 606 + 88J58 430 607 + 5QTQ7 353 608 + 99899 386 609 + JAA88 227 610 + 87887 713 611 + J25J7 848 612 + 55588 38 613 + 6KK8A 389 614 + 5AA54 555 615 + KKKQ4 911 616 + 699T7 766 617 + 5JQTJ 330 618 + QTK98 780 619 + 55JJA 752 620 + 6279T 857 621 + 957T4 621 622 + 55AAA 379 623 + J59Q6 29 624 + 878J7 818 625 + 47AQT 348 626 + KQ48T 955 627 + 9T49T 494 628 + A7A42 535 629 + QQQQ4 180 630 + 66963 777 631 + 6J366 730 632 + 37J59 520 633 + 8TT88 945 634 + QA4TT 561 635 + 473J7 542 636 + 4354K 825 637 + 46QJ6 437 638 + T8885 669 639 + 83K76 751 640 + Q5853 948 641 + 64844 36 642 + QJ4J4 77 643 + A7777 372 644 + 323J3 946 645 + 45387 944 646 + 66769 202 647 + 93339 497 648 + 85Q79 14 649 + J3AJ2 413 650 + 98JA8 311 651 + QQQJ3 326 652 + J3QAQ 463 653 + 44Q4Q 151 654 + 8AA98 96 655 + TATTA 965 656 + 7J37A 421 657 + K38Q9 635 658 + J72TK 59 659 + 8A85A 164 660 + 39999 854 661 + 59572 109 662 + 57TJ5 74 663 + 83888 862 664 + 77A2J 763 665 + JJ455 771 666 + TKJA2 834 667 + 5QJ85 495 668 + J4444 932 669 + 2TT3Q 856 670 + 98KT3 438 671 + 9TKK7 627 672 + 566JA 638 673 + 559Q9 628 674 + J6565 245 675 + 8JKTA 711 676 + 99QQ9 247 677 + 34QT4 162 678 + 684KK 731 679 + 5A57A 254 680 + T9755 297 681 + 9A96K 658 682 + 34484 240 683 + QJ66J 450 684 + 666K4 570 685 + A5AQK 878 686 + JQ662 905 687 + A6622 822 688 + J3Q39 177 689 + 85555 858 690 + 7T53Q 178 691 + 8KA6T 931 692 + 29K99 104 693 + TTTQ4 960 694 + AJ555 514 695 + TJT3T 214 696 + KA88J 912 697 + JJJJ8 102 698 + 3633A 748 699 + 7J447 705 700 + 74444 45 701 + 2QAQ2 125 702 + TJA7T 721 703 + T6QJK 324 704 + 7AAAA 617 705 + 4AQAJ 585 706 + 7JJ77 576 707 + A32TQ 747 708 + 76677 618 709 + AJ5Q9 70 710 + 89627 360 711 + QJ5T7 602 712 + A8T36 896 713 + 5AA36 411 714 + 6255J 841 715 + 44644 612 716 + 3TJTK 66 717 + 4JT4T 640 718 + JT4T8 146 719 + 8733J 973 720 + K6944 256 721 + 5K5KK 936 722 + KTT6K 388 723 + 3JQ35 793 724 + 94994 296 725 + 55553 930 726 + 777Q7 646 727 + A2AAQ 399 728 + 555A6 32 729 + 22323 75 730 + 62262 957 731 + 8745T 54 732 + 828J8 974 733 + KKKTQ 383 734 + 6J6Q9 261 735 + 22522 27 736 + QK666 716 737 + 78KK5 242 738 + T2Q22 728 739 + J9KKQ 424 740 + 389A6 738 741 + 98989 292 742 + 8883K 68 743 + 4344J 578 744 + 2Q665 899 745 + 58895 938 746 + 63363 1 747 + 44584 172 748 + JJT83 206 749 + 88884 695 750 + J9K8J 579 751 + 72532 414 752 + Q9T8A 877 753 + 433K3 318 754 + K37Q4 253 755 + 9999Q 675 756 + J3QQ5 884 757 + TTT54 4 758 + 3K3TT 209 759 + 4KJ44 401 760 + 5J279 225 761 + 222J2 333 762 + 67J88 543 763 + 662TQ 175 764 + Q696Q 745 765 + T46T6 113 766 + 75557 361 767 + A48A4 130 768 + 22Q2Q 10 769 + 42292 558 770 + QKQQQ 523 771 + 66JQA 188 772 + T676T 65 773 + 7A5T6 510 774 + 426Q9 72 775 + 2Q222 934 776 + 757TQ 888 777 + 899TT 673 778 + 59KQ4 723 779 + J666A 927 780 + QT7Q7 286 781 + J886Q 774 782 + JA2QQ 599 783 + K448K 93 784 + QKKQK 689 785 + 66556 480 786 + QQ5AA 951 787 + T7T87 462 788 + 4784J 216 789 + JT4T6 988 790 + 553QK 654 791 + 77277 337 792 + A9Q66 317 793 + 82J82 64 794 + J7595 935 795 + 8A2Q6 81 796 + J2427 152 797 + J22KQ 589 798 + 77222 787 799 + 7868K 826 800 + 75A3J 916 801 + 9A292 950 802 + 6JT44 237 803 + T7TJ6 846 804 + 2JKJA 564 805 + KT844 676 806 + Q4384 538 807 + Q6A68 114 808 + Q5868 505 809 + 665TK 820 810 + 55544 874 811 + AJKAK 30 812 + 82A34 915 813 + Q583Q 251 814 + 97TJA 496 815 + 45744 608 816 + QQ6QQ 234 817 + QQQ9K 271 818 + 3A99A 465 819 + 37734 444 820 + 5566T 507 821 + KKJKK 20 822 + 2J673 492 823 + 5J744 416 824 + 93K64 369 825 + KKKK7 998 826 + 33232 719 827 + A3A33 91 828 + Q53J7 267 829 + J5556 972 830 + 44Q8Q 616 831 + T444J 548 832 + TJ3TJ 586 833 + 92856 963 834 + K98T5 432 835 + J6J6J 772 836 + 4J39Q 643 837 + 34535 39 838 + 7K7Q7 953 839 + T42J4 805 840 + 2442A 47 841 + 954A8 395 842 + K4466 991 843 + AQAAA 174 844 + J39KA 532 845 + 7K2Q3 672 846 + 25577 428 847 + QT659 715 848 + J6698 910 849 + 35355 84 850 + 8J895 218 851 + J5674 6 852 + K7537 567 853 + 8Q634 380 854 + 6828J 811 855 + 7TJ8A 82 856 + 477Q7 674 857 + 7748A 244 858 + 88288 257 859 + K9933 889 860 + T626T 269 861 + 5T42Q 443 862 + 2KA9Q 167 863 + K4KKK 16 864 + J2757 159 865 + Q5TQ6 845 866 + 44888 560 867 + K65AT 191 868 + 6K68Q 176 869 + 66JJ8 978 870 + 6K53J 615 871 + AAJ22 525 872 + J3J3J 99 873 + 98898 906 874 + 48JA2 454 875 + 86J36 879 876 + 66866 524 877 + 3AA3A 872 878 + 68Q46 733 879 + 38JQ3 338 880 + 65J75 128 881 + 57J77 455 882 + AKA8K 138 883 + 22J72 200 884 + 9T7A6 310 885 + 47777 25 886 + A3685 503 887 + T5A68 100 888 + 979J8 528 889 + 9JA22 782 890 + KJKKQ 913 891 + 64942 907 892 + QQ954 598 893 + 5KKKK 876 894 + 5T5TT 779 895 + 3992T 678 896 + 5QQQ9 265 897 + 3592K 924 898 + 5554A 493 899 + T5698 170 900 + 7496J 488 901 + TT474 192 902 + JK95A 80 903 + AAJJJ 40 904 + 43644 307 905 + J57K5 650 906 + J8K82 961 907 + 8J998 688 908 + T9984 9 909 + 33J35 89 910 + J2AT9 985 911 + 6239J 662 912 + 88JJ8 595 913 + JK852 604 914 + 66347 741 915 + Q6T69 278 916 + 55665 696 917 + 7942J 736 918 + 35AK4 358 919 + 7755J 384 920 + 58A84 613 921 + 5TTTT 919 922 + 7A9T7 7 923 + K33QK 354 924 + AQQAA 235 925 + 39TJT 196 926 + 26229 976 927 + 6664Q 865 928 + 99QQQ 236 929 + 374A6 956 930 + 8QTT8 964 931 + A76AQ 112 932 + T8668 611 933 + 66JJ6 729 934 + 886Q6 814 935 + KK44J 993 936 + 62AJ8 127 937 + ATJ64 402 938 + 7K594 483 939 + 96496 990 940 + 7424J 761 941 + 878K3 653 942 + 486K3 980 943 + JQA44 852 944 + 2TJ6J 339 945 + 44T44 446 946 + 73KTK 121 947 + T7787 513 948 + K67QT 717 949 + 77287 136 950 + 7QQJ8 18 951 + 4342T 768 952 + 5KK5J 847 953 + Q2Q7T 666 954 + 6QJT2 529 955 + 7T7A7 392 956 + J6676 445 957 + 7733K 647 958 + Q676A 926 959 + QJQJQ 806 960 + QQQJ8 928 961 + 48692 691 962 + JAA55 984 963 + J2423 800 964 + 32JQ8 362 965 + T2744 937 966 + 7J9TQ 277 967 + 7K326 86 968 + 3K9TJ 860 969 + 77JKT 71 970 + 46644 31 971 + 23J2Q 323 972 + J3K96 393 973 + 87QKK 456 974 + TQ5K2 569 975 + AAK9T 949 976 + 56932 539 977 + Q5QQQ 356 978 + 3Q4A2 126 979 + T53J2 283 980 + 8732Q 461 981 + KTTKT 556 982 + Q8J3K 918 983 + JAAA7 340 984 + 255KQ 469 985 + 8A9AJ 201 986 + Q8965 144 987 + 777J2 477 988 + A8AJQ 797 989 + 3QQQ9 786 990 + 6Q7T4 460 991 + QQQ82 656 992 + 4K329 222 993 + A9979 190 994 + 6T664 440 995 + 4A434 153 996 + Q7JQ2 194 997 + 7993J 651 998 + 8822K 195 999 + 7QQ77 464 1000 + 52295 371
+1 -1
src/main.rs
··· 3 3 pub mod solutions; 4 4 5 5 fn main() { 6 - let sol = solve!(2023; 6; 2); 6 + let sol = solve!(2023; 7; 2); 7 7 println!("{:?}", sol); 8 8 }
+404
src/solutions/year_2023/day7.rs
··· 1 + use aoc_lib::{create_solution, Input, Solver}; 2 + use std::cmp::Ordering; 3 + use std::collections::HashMap; 4 + 5 + pub struct Day7 {} 6 + 7 + #[derive(Eq, PartialEq, PartialOrd, Debug, Hash, Clone)] 8 + struct Card(char); 9 + 10 + impl Card { 11 + fn cmp_with_j(&self, other: &Self) -> Ordering { 12 + let order = "J23456789TQKA"; 13 + order 14 + .find(self.0) 15 + .and_then(|i| order.find(other.0).map(|c| i.cmp(&c))) 16 + .unwrap_or(Ordering::Equal) 17 + } 18 + } 19 + 20 + impl Ord for Card { 21 + fn cmp(&self, other: &Self) -> Ordering { 22 + let order = "23456789TJQKA"; 23 + order 24 + .find(self.0) 25 + .and_then(|i| order.find(other.0).map(|c| i.cmp(&c))) 26 + .unwrap_or(Ordering::Equal) 27 + } 28 + } 29 + 30 + impl From<char> for Card { 31 + fn from(value: char) -> Self { 32 + Card(value) 33 + } 34 + } 35 + 36 + #[derive(Debug, Eq, PartialEq, Hash, Clone)] 37 + struct Hand { 38 + cards: [Card; 5], 39 + } 40 + 41 + impl From<[char; 5]> for Hand { 42 + fn from(value: [char; 5]) -> Self { 43 + Hand { 44 + cards: value.map(|c| c.into()), 45 + } 46 + } 47 + } 48 + 49 + #[derive(Hash, Debug, Eq, PartialEq, PartialOrd)] 50 + enum HandTypeName { 51 + FIVE, 52 + FOUR, 53 + THREE, 54 + FULL, 55 + TWO, 56 + ONE, 57 + HIGH, 58 + } 59 + 60 + #[derive(Eq, PartialEq, PartialOrd, Hash, Debug)] 61 + struct HandType { 62 + cards: [Card; 5], 63 + name: HandTypeName, 64 + } 65 + 66 + impl HandType { 67 + fn new(cards: [char; 5], name: HandTypeName) -> Self { 68 + HandType { 69 + cards: cards.map(|c| c.into()), 70 + name, 71 + } 72 + } 73 + 74 + fn from_char_with_j(cards: [Card; 5]) -> Self { 75 + let value = cards.map(|c| c.0); 76 + let vs: HashMap<char, usize> = 77 + value.iter().fold(HashMap::new(), |mut acc, c| { 78 + acc.entry(*c).and_modify(|x| *x += 1).or_insert(1); 79 + acc 80 + }); 81 + let mut vs = vs.into_iter().collect::<Vec<_>>(); 82 + vs.sort_by(|(_, a), (_, b)| a.cmp(b)); 83 + 84 + vs.reverse(); 85 + 86 + match vs.as_slice() { 87 + [(_, 5)] => HandType::new(value, HandTypeName::FIVE), 88 + [(k1, 4), (k2, _)] => { 89 + if k1 == &'J' || k2 == &'J' { 90 + HandType::new(value, HandTypeName::FIVE) 91 + } else { 92 + HandType::new(value, HandTypeName::FOUR) 93 + } 94 + } 95 + [(k1, 3), (k2, 2)] => { 96 + if k1 == &'J' || k2 == &'J' { 97 + HandType::new(value, HandTypeName::FIVE) 98 + } else { 99 + HandType::new(value, HandTypeName::FULL) 100 + } 101 + } 102 + [(k1, 3), (k2, _), (k3, _)] => { 103 + if k1 == &'J' || k2 == &'J' || k3 == &'J' { 104 + HandType::new(value, HandTypeName::FOUR) 105 + } else { 106 + HandType::new(value, HandTypeName::THREE) 107 + } 108 + } 109 + [(k1, 2), (k2, 2), (k3, 1)] => { 110 + if k1 == &'J' || k2 == &'J' { 111 + HandType::new(value, HandTypeName::FOUR) 112 + } else if k3 == &'J' { 113 + HandType::new(value, HandTypeName::FULL) 114 + } else { 115 + HandType::new(value, HandTypeName::TWO) 116 + } 117 + } 118 + [(k, 2), (k1, _), (k2, _), (k3, _)] => { 119 + if k == &'J' || k1 == &'J' || k2 == &'J' || k3 == &'J' { 120 + HandType::new(value, HandTypeName::THREE) 121 + } else { 122 + HandType::new(value, HandTypeName::ONE) 123 + } 124 + } 125 + _ => { 126 + if vs.iter().any(|(k, _)| k == &'J') { 127 + HandType::new(value, HandTypeName::ONE) 128 + } else { 129 + HandType::new(value, HandTypeName::HIGH) 130 + } 131 + } 132 + } 133 + } 134 + 135 + fn sort_by(a: &HandType, b: &HandType, with_j: bool) -> Ordering { 136 + let xs = [ 137 + HandTypeName::HIGH, 138 + HandTypeName::ONE, 139 + HandTypeName::TWO, 140 + HandTypeName::THREE, 141 + HandTypeName::FULL, 142 + HandTypeName::FOUR, 143 + HandTypeName::FIVE, 144 + ]; 145 + let xsm: HashMap<HandTypeName, usize> = 146 + HashMap::from_iter(xs.into_iter().enumerate().map(|(a, b)| (b, a))); 147 + let eq = xsm 148 + .get(&a.name) 149 + .and_then(|x| xsm.get(&b.name).map(|y| (x, y))) 150 + .map(|(x, y)| x.cmp(y)) 151 + .unwrap_or(Ordering::Equal); 152 + 153 + if eq == Ordering::Equal { 154 + a.cards 155 + .iter() 156 + .zip(b.cards.iter()) 157 + .find(|(a, b)| a != b) 158 + .map_or(Ordering::Equal, |(a, b)| { 159 + if with_j { 160 + Card::cmp_with_j(a, b) 161 + } else { 162 + a.cmp(b) 163 + } 164 + }) 165 + } else { 166 + eq 167 + } 168 + } 169 + } 170 + 171 + impl From<[Card; 5]> for HandType { 172 + fn from(value: [Card; 5]) -> Self { 173 + let cs: [char; 5] = value.map(|c| c.0); 174 + cs.into() 175 + } 176 + } 177 + 178 + impl From<[char; 5]> for HandType { 179 + fn from(value: [char; 5]) -> Self { 180 + let vs = value.iter().fold(HashMap::new(), |mut acc, c| { 181 + acc.entry(*c).and_modify(|x| *x += 1).or_insert(1); 182 + acc 183 + }); 184 + let mut vs = vs.values().collect::<Vec<&usize>>(); 185 + vs.sort(); 186 + vs.reverse(); 187 + 188 + match vs.as_slice() { 189 + [5] => HandType::new(value, HandTypeName::FIVE), 190 + [4, _] => HandType::new(value, HandTypeName::FOUR), 191 + [3, 2] => HandType::new(value, HandTypeName::FULL), 192 + [3, _, _] => HandType::new(value, HandTypeName::THREE), 193 + [2, 2, 1] => HandType::new(value, HandTypeName::TWO), 194 + [2, _, _, _] => HandType::new(value, HandTypeName::ONE), 195 + _ => HandType::new(value, HandTypeName::HIGH), 196 + } 197 + } 198 + } 199 + 200 + fn from_str(s: &str) -> [char; 5] { 201 + s.chars() 202 + .take(5) 203 + .collect::<Vec<char>>() 204 + .try_into() 205 + .unwrap_or_default() 206 + } 207 + 208 + fn parse_input(input: Input) -> HashMap<Hand, usize> { 209 + input.lines.into_iter().fold(HashMap::new(), |mut hm, l| { 210 + let mut cs = l.split_whitespace().take(2); 211 + let hand: Option<Hand> = cs.next().map(|c| from_str(c).into()); 212 + let weight: Option<usize> = cs.next().and_then(|w| w.parse().ok()); 213 + if let (Some(hand), Some(weight)) = (hand, weight) { 214 + hm.insert(hand, weight); 215 + } 216 + hm 217 + }) 218 + } 219 + 220 + create_solution!( 221 + out_1 => usize; 222 + out_2 => usize; 223 + year => 2023; 224 + day => 7; 225 + sol_1 => |input: Input| { 226 + let mut hand_map: Vec<(HandType, usize)> = parse_input(input) 227 + .into_iter() 228 + .map(|(h , w)| (h.cards.into(), w)) 229 + .collect(); 230 + hand_map.sort_by(|(a, _), (b, _)| HandType::sort_by(a, b, false)); 231 + 232 + let p: usize = hand_map 233 + .into_iter() 234 + .enumerate() 235 + .map(|(i, (_h, w))| (i + 1) * w) 236 + .sum(); 237 + 238 + Some(p) 239 + }; 240 + sol_2 => |input: Input| { 241 + let mut hand_map: Vec<(HandType, usize)> = parse_input(input) 242 + .into_iter() 243 + .map(|(h , w)| (HandType::from_char_with_j(h.clone().cards), w)) 244 + .collect(); 245 + hand_map.sort_by(|(a, _), (b, _)| HandType::sort_by(a, b, true)); 246 + 247 + let p: usize = hand_map 248 + .into_iter() 249 + .enumerate() 250 + .map(|(i, (_h, w))| (i + 1) * w) 251 + .sum(); 252 + 253 + Some(p) 254 + }; 255 + ); 256 + 257 + #[cfg(test)] 258 + mod tests { 259 + use super::*; 260 + 261 + #[test] 262 + fn test_hand_type() { 263 + let five = "AAAAA"; 264 + let four = "AA8AA"; 265 + let full = "23233"; 266 + let act_five: HandType = from_str(five).into(); 267 + let act_four: HandType = from_str(four).into(); 268 + let act_full: HandType = from_str(full).into(); 269 + assert_eq!(act_five.name, HandTypeName::FIVE); 270 + assert_eq!(act_four.name, HandTypeName::FOUR); 271 + assert_eq!(act_full.name, HandTypeName::FULL); 272 + } 273 + 274 + #[test] 275 + fn test_hand_type_ordering() { 276 + let hands = vec!["32T3K", "T55J5", "AA677", "AAAJQ", "KTJJT"]; 277 + let mut act: Vec<HandType> = 278 + hands.into_iter().map(|h| from_str(h).into()).collect(); 279 + act.sort_by(|a, b| HandType::sort_by(a, b, false)); 280 + 281 + let exp = vec![ 282 + HandType { 283 + cards: [Card('3'), Card('2'), Card('T'), Card('3'), Card('K')], 284 + name: HandTypeName::ONE, 285 + }, 286 + HandType { 287 + cards: [Card('K'), Card('T'), Card('J'), Card('J'), Card('T')], 288 + name: HandTypeName::TWO, 289 + }, 290 + HandType { 291 + cards: [Card('A'), Card('A'), Card('6'), Card('7'), Card('7')], 292 + name: HandTypeName::TWO, 293 + }, 294 + HandType { 295 + cards: [Card('T'), Card('5'), Card('5'), Card('J'), Card('5')], 296 + name: HandTypeName::THREE, 297 + }, 298 + HandType { 299 + cards: [Card('A'), Card('A'), Card('A'), Card('J'), Card('Q')], 300 + name: HandTypeName::THREE, 301 + }, 302 + ]; 303 + 304 + assert_eq!(act, exp); 305 + } 306 + 307 + #[test] 308 + fn test_parse_input() { 309 + let input: Input = Input { 310 + lines: r"32T3K 765 311 + T55J5 684 312 + KK677 28 313 + KTJJT 220 314 + QQQJA 483" 315 + .lines() 316 + .map(|l| l.to_string()) 317 + .collect(), 318 + }; 319 + let act = parse_input(input); 320 + let exp = vec![ 321 + ( 322 + Hand { 323 + cards: [Card('3'), Card('2'), Card('T'), Card('3'), Card('K')], 324 + }, 325 + 765, 326 + ), 327 + ( 328 + Hand { 329 + cards: [Card('T'), Card('5'), Card('5'), Card('J'), Card('5')], 330 + }, 331 + 684, 332 + ), 333 + ( 334 + Hand { 335 + cards: [Card('K'), Card('K'), Card('6'), Card('7'), Card('7')], 336 + }, 337 + 28, 338 + ), 339 + ( 340 + Hand { 341 + cards: [Card('K'), Card('T'), Card('J'), Card('J'), Card('T')], 342 + }, 343 + 220, 344 + ), 345 + ( 346 + Hand { 347 + cards: [Card('Q'), Card('Q'), Card('Q'), Card('J'), Card('A')], 348 + }, 349 + 483, 350 + ), 351 + ]; 352 + assert_eq!(act, HashMap::from_iter(exp)); 353 + } 354 + } 355 + 356 + #[test] 357 + fn test_hand_deser() { 358 + let hand_map: HashMap<Hand, usize> = HashMap::from_iter(vec![ 359 + ( 360 + Hand { 361 + cards: [Card('3'), Card('2'), Card('T'), Card('3'), Card('K')], 362 + }, 363 + 765, 364 + ), 365 + ( 366 + Hand { 367 + cards: [Card('T'), Card('5'), Card('5'), Card('J'), Card('5')], 368 + }, 369 + 684, 370 + ), 371 + ( 372 + Hand { 373 + cards: [Card('K'), Card('K'), Card('6'), Card('7'), Card('7')], 374 + }, 375 + 28, 376 + ), 377 + ( 378 + Hand { 379 + cards: [Card('K'), Card('T'), Card('J'), Card('J'), Card('T')], 380 + }, 381 + 220, 382 + ), 383 + ( 384 + Hand { 385 + cards: [Card('Q'), Card('Q'), Card('Q'), Card('J'), Card('A')], 386 + }, 387 + 483, 388 + ), 389 + ]); 390 + 391 + let mut hands: Vec<HandType> = hand_map 392 + .keys() 393 + .map(|h| HandType::from_char_with_j(h.clone().cards)) 394 + .collect(); 395 + hands.sort_by(|a, b| HandType::sort_by(a, b, true)); 396 + 397 + let p: usize = hands 398 + .into_iter() 399 + .map(|h| hand_map.get(&Hand { cards: h.cards }).unwrap_or(&1)) 400 + .enumerate() 401 + .map(|(i, w)| (i + 1) * w) 402 + .sum(); 403 + assert_eq!(p, 5905); 404 + }
+2
src/solutions/year_2023/mod.rs
··· 6 6 mod day13; 7 7 mod day5; 8 8 mod day6; 9 + mod day7; 9 10 10 11 pub use day1::*; 11 12 pub use day2::*; ··· 13 14 pub use day4::*; 14 15 pub use day5::*; 15 16 pub use day6::*; 17 + pub use day7::*; 16 18 pub use day13::*;