diff --git a/AdventOfCode/AdventOfCode.csproj b/AdventOfCode/AdventOfCode.csproj index d323b8e..19aa473 100644 --- a/AdventOfCode/AdventOfCode.csproj +++ b/AdventOfCode/AdventOfCode.csproj @@ -52,6 +52,9 @@ + + + diff --git a/AdventOfCode/Problems/AOC2023/Day7/CamelCards.cs b/AdventOfCode/Problems/AOC2023/Day7/CamelCards.cs new file mode 100644 index 0000000..bf8aeaf --- /dev/null +++ b/AdventOfCode/Problems/AOC2023/Day7/CamelCards.cs @@ -0,0 +1,36 @@ +using AdventOfCode.Runner.Attributes; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AdventOfCode.Problems.AOC2023.Day7; +[ProblemInfo(2023, 7, "Camel Cards")] +internal class CamelCards : Problem +{ + private CamelHand[] _hands = []; + private CamelHand[] _jokerHands = []; + + public override void LoadInput() + { + var data = ReadInputLines("input.txt"); + _hands = data.Select(d => new CamelHand(d)).ToArray(); + _jokerHands = data.Select(d => new CamelHand(d, true)).ToArray(); + } + + public override void CalculatePart1() + { + var x = _hands.Order(); + Part1 = x.Select((h, i) => (i + 1) * h.Bid).Sum(); + } + + public override void CalculatePart2() + { + var x = _jokerHands.Order().Print(); + //x.Where(x => x.Hand.Contains('J')).Print(); + Part2 = x.Select((h, i) => (i + 1) * h.Bid).Sum(); + } + +} diff --git a/AdventOfCode/Problems/AOC2023/Day7/CamelHand.cs b/AdventOfCode/Problems/AOC2023/Day7/CamelHand.cs new file mode 100644 index 0000000..9352765 --- /dev/null +++ b/AdventOfCode/Problems/AOC2023/Day7/CamelHand.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AdventOfCode.Problems.AOC2023.Day7; +internal class CamelHand : IComparable +{ + public static readonly List CARDS = [ '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A' ]; + public static readonly List CARDS_JOKER = [ 'J', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'Q', 'K', 'A' ]; + + public string Hand { get; set; } + public int Bid { get; set; } + public int Value { get; set; } + public HandType Type { get; set; } + public CamelHand(string data, bool useJoker = false) + { + var split = data.Split(' '); + Hand = split[0]; + Bid = int.Parse(split[1]); + Type = useJoker ? GetJokerHandType(Hand) : GetHandType(Hand); + Value = CalculateValue(Hand, useJoker); + } + + public static int CalculateValue(string hand, bool useJoker) + { + var total = 0; + for (int i = 0; i < hand.Length; i++) + { + var p = (hand.Length - i - 1); + var v = useJoker ? CARDS_JOKER.IndexOf(hand[i]) : CARDS.IndexOf(hand[i]); + total += (v + 1) * (int)Math.Pow(13, p); + } + return total; + } + + public bool IsStrongerThan(CamelHand card) + { + if (Type > card.Type) + return true; + if(Type < card.Type) + return false; + + return Value >= card.Value; + } + + private static HandType GetJokerHandType(string hand) + { + var type = GetHandType(hand); + if (type == HandType.FiveOfKind) + return type; + + if (!hand.Contains('J')) + return type; + var bestCard = hand.GroupBy(c => c) + .OrderByDescending(c => c.Count()) + .First(c => c.Key != 'J').Key; + + var newHand = hand.Replace('J', bestCard); + return GetHandType(newHand); + } + private static HandType GetHandType(string hand) + { + var cardGroups = hand.GroupBy(c => c).Select(g => g.Count()).ToArray(); + + if (cardGroups.Length == 1) + return HandType.FiveOfKind; + if(cardGroups.Contains(4)) + return HandType.FourOfKind; + if (cardGroups.Contains(3) && cardGroups.Contains(2)) + return HandType.FullHouse; + if(cardGroups.Contains(3)) + return HandType.ThreeOfKind; + + var pairs = cardGroups.Count(c => c == 2); + if (pairs == 2) + return HandType.TwoPair; + if (pairs == 1) + return HandType.OnePair; + + return HandType.HighCard; + } + + public int CompareTo(CamelHand? other) + { + if(other == null) return 1; + return IsStrongerThan(other) ? 1 : -1; + } + + public override string ToString() + { + return $"[{Value}] {Hand}: {Type} | {Bid}"; + } + + public enum HandType + { + HighCard, + OnePair, + TwoPair, + ThreeOfKind, + FullHouse, + FourOfKind, + FiveOfKind + } +} diff --git a/AdventOfCode/Problems/AOC2023/Day7/input.txt b/AdventOfCode/Problems/AOC2023/Day7/input.txt new file mode 100644 index 0000000..2efa139 --- /dev/null +++ b/AdventOfCode/Problems/AOC2023/Day7/input.txt @@ -0,0 +1,1000 @@ +QTTQK 749 +JQAA2 148 +37J44 319 +559J5 647 +92992 659 +55AA5 58 +KKTT8 629 +3J38J 562 +87QQQ 434 +55A55 520 +T777T 813 +76T8T 841 +8989A 649 +88Q44 857 +Q4444 362 +T4Q23 369 +AAQQA 812 +34JTQ 635 +QQA44 553 +78787 286 +K963A 63 +27T98 25 +6767A 929 +TT8TK 343 +5566J 496 +A7339 618 +28J8A 641 +Q688J 118 +6JJ46 131 +66436 473 +TK3QK 482 +5454T 724 +TTQQT 74 +ATATA 41 +4523Q 676 +642T4 599 +2A6KQ 203 +J6666 926 +J9999 325 +22232 455 +42444 757 +TTK2T 904 +QQQQ2 879 +6AT32 559 +Q4AT5 456 +66699 106 +AQ248 570 +26676 947 +K4T35 726 +A2KKA 167 +46646 679 +33882 582 +52A66 249 +252K5 293 +84449 920 +J4988 682 +8TTT3 384 +95733 832 +2JKTK 707 +85563 799 +A5A57 359 +77TTA 175 +28222 468 +J2TAK 758 +8T656 833 +9J799 327 +223T8 587 +4K692 512 +Q3JQQ 61 +KQ538 650 +KKKK6 937 +6KK99 532 +7JJ77 810 +3TT33 865 +78J78 710 +A5A54 979 +Q4663 275 +7A837 16 +KKJ5K 102 +AAAA5 753 +T6K65 554 +Q7788 185 +8Q5J4 29 +27672 677 +JQJQQ 983 +57557 6 +KK592 49 +44669 489 +AA99J 56 +T6866 472 +QQ8JJ 542 +9KK99 28 +Q22Q2 893 +K3978 581 +954A5 306 +27377 34 +KKK3J 763 +TT5JQ 708 +Q4796 593 +AAJA6 467 +4TA83 817 +J7JKJ 767 +4TKJJ 671 +Q8KTK 709 +A377A 256 +JJKAA 138 +QKKKK 215 +A8TT7 132 +5JTJ7 798 +888Q8 458 +KKK53 66 +77QAA 99 +69AKA 392 +223J9 745 +AA293 844 +45625 995 +TKKQ6 845 +52555 596 +79977 770 +5A36Q 326 +T239K 822 +33373 276 +7QTKJ 769 +J3334 886 +9J439 23 +39Q93 834 +J6J4A 168 +Q59Q5 492 +73T73 375 +3JQ33 480 +82828 560 +96842 741 +4A5T8 288 +A5A22 540 +99T4T 139 +T2J22 271 +36666 71 +J356K 83 +74478 73 +82J6T 625 +AQQQ3 785 +33J55 446 +7536T 205 +72327 216 +Q33Q3 613 +JJ335 644 +89A99 772 +6JJ66 602 +9AK99 21 +56Q76 594 +Q54J5 981 +4K44K 229 +465KK 692 +54356 648 +2T474 101 +88388 906 +K8747 658 +68226 231 +92292 912 +JT55T 377 +8A75K 962 +Q8898 973 +95559 156 +7858Q 984 +QK2K4 792 +KTK4K 942 +6738T 263 +A322A 470 +72KA5 107 +25525 933 +Q7667 487 +K8668 349 +3A3A5 481 +JJ2J2 459 +3QA23 627 +J4443 622 +5525J 787 +K99KK 222 +54353 410 +AJAA8 860 +99K98 444 +4444J 668 +3799K 110 +A4422 67 +QQTQ5 837 +58825 858 +56K2Q 846 +QQ7QK 145 +26KQT 380 +T8QQQ 820 +6TJTT 358 +28J69 549 +A6Q39 958 +95556 871 +TTQ4K 393 +TQ4K8 105 +23678 95 +3TT83 429 +TTKTT 100 +A333A 177 +58535 129 +J696Q 544 +Q3733 900 +4758K 54 +AAAJJ 226 +88J8K 606 +47K22 609 +3KKKK 253 +48A72 65 +Q6529 233 +J88J8 88 +QAAQ9 423 +99894 576 +6J363 781 +688J6 300 +39333 862 +JK433 488 +484JJ 209 +KKK7K 144 +J6AT9 415 +K46TA 853 +J765K 831 +45495 675 +57K47 206 +JQJQA 563 +AAKA7 885 +54J3K 729 +JTT2T 251 +3J47K 189 +88583 691 +JT6A5 696 +92T84 158 +22336 899 +92578 194 +J9Q99 355 +2J322 891 +555JT 478 +43T43 475 +2929J 416 +6J9JJ 966 +7778A 997 +75T46 283 +8T84Q 701 +A7JA2 19 +5QK5Q 142 +26965 201 +K26K2 528 +4T29Q 605 +89QA5 243 +75QQ5 507 +5855J 133 +689A7 440 +2483T 632 +TT44A 598 +7QQQ5 217 +7AAA7 91 +K2K22 590 +K6K66 603 +4K354 171 +37877 922 +2222J 180 +59522 695 +88247 162 +K79J5 584 +AAJJ3 509 +6993T 24 +33344 277 +J26A9 881 +AATAJ 490 +T8TTT 372 +299TT 212 +K44KK 776 +66778 80 +JAAAA 806 +233QQ 435 +64436 197 +5K555 730 +4T3J4 441 +JJTJT 453 +643T9 438 +9J933 5 +4Q8QJ 294 +55955 978 +22JAQ 350 +T2T4Q 600 +TK986 264 +949J4 971 +TQ7T4 653 +Q33QQ 383 +AA9A8 788 +76464 368 +97J95 221 +6QQQJ 882 +6AA26 267 +T5555 722 +53589 657 +66765 721 +7K28Q 186 +KK3K2 22 +3338K 854 +JK796 451 +A3AJ3 850 +2555T 337 +28A4T 38 +A99AA 536 +JA5A5 421 +JJ444 184 +2JAK9 245 +565J7 718 +75Q38 714 +33444 115 +444Q7 47 +539T5 548 +3333J 597 +T4A6A 989 +47777 916 +Q2645 547 +8AT3Q 237 +QT73T 839 +4AK3J 849 +JJJ8J 329 +Q44QJ 48 +QQ444 951 +6296K 897 +99A9A 699 +69656 140 +55565 821 +Q53QA 495 +83333 333 +3T65T 146 +AA4A4 808 +AAKTA 546 +7JTQ2 713 +TQ3TT 700 +68366 903 +9866K 907 +J36Q5 370 +4KA7J 367 +Q5AQQ 585 +63A6A 330 +6A686 522 +AA566 418 +2TTTT 643 +2TA3A 305 +TTJ99 921 +6K258 218 +33553 181 +KKQKJ 568 +22922 902 +J9KTT 836 +58324 934 +94692 964 +AT574 208 +K63T4 535 +JTT7J 116 +3T6J4 875 +63294 404 +8222J 127 +455J5 15 +8626J 2 +77KKK 51 +84A9J 408 +KJT46 967 +QQQQ9 884 +5Q2QQ 50 +66555 397 +45JT8 460 +KT8K8 232 +75K53 932 +A7678 538 +3383J 927 +2957K 959 +77772 409 +454AK 956 +A362J 228 +TTTT7 382 +8J883 660 +99KT9 639 +KK2J6 557 +84444 356 +99296 430 +5Q5JQ 285 +AAA27 972 +5T847 241 +528QJ 260 +92JA7 361 +35T9T 433 +98TQK 530 +82KJ5 727 +A6A6J 527 +8QQ48 615 +QT656 466 +29225 282 +3388J 407 +4AJ44 965 +TT877 69 +22927 311 +74922 526 +34QQ5 661 +4J844 670 +T8J48 426 +QQQ2T 498 +424J2 656 +AAA8T 616 +4JTT2 172 +43T6T 57 +796K9 321 +TT334 163 +TTT59 579 +5555Q 734 +82432 60 +3A236 257 +55544 794 +53777 230 +27KJ5 946 +952TJ 366 +7333J 502 +KAJAK 476 +88688 268 +689TA 463 +3TTKA 111 +8499T 789 +58J35 178 +7T5K8 395 +4AA3J 428 +AJ746 575 +93339 17 +46TT6 801 +3AAAA 855 +KKK8K 335 +7J777 760 +K77K7 281 +A8599 219 +4Q445 867 +59T6A 11 +K3K35 344 +888K8 454 +65T83 112 +J322A 592 +86666 317 +784A5 940 +63696 55 +8A95K 991 +K6966 736 +88QQK 59 +3J397 82 +4AK52 521 +K54KT 254 +TJ357 948 +QK5KK 130 +8T858 43 +38K5A 662 +33KQK 809 +56T66 72 +47373 743 +TAK24 664 +35T33 856 +AA7AA 44 +88Q33 32 +63636 176 +484A2 800 +44T4K 332 +4QQTQ 52 +J88AA 248 +734QT 278 +J6K88 104 +T2T2T 768 +KKKAQ 715 +T7KJ9 89 +87QAT 347 +3344J 720 +Q88Q8 304 +J8K26 373 +3QJ3K 611 +A8888 608 +63K7K 655 +5TQTQ 239 +7J2QJ 399 +4K2K2 432 +8J233 291 +QJ272 388 +999T4 500 +22Q3Q 457 +3A6QQ 869 +A3QQ3 272 +J8Q89 556 +7KK66 550 +3JKJJ 936 +72JTA 752 +7AQ9T 70 +9Q99Q 974 +Q5Q58 376 +QKTTT 954 +TTTJT 939 +KKKQQ 888 +9T4JQ 250 +AAA65 364 +62334 803 +J7Q29 949 +22J52 619 +84344 316 +746T3 589 +3483J 213 +992T2 159 +K322K 807 +Q7T77 78 +T932Q 960 +JQ67J 134 +6Q644 868 +64J92 30 +JTKTT 150 +96T69 351 +TA6J2 694 +37893 870 +7Q95A 346 +TT6J6 825 +77577 443 +TJQQT 892 +9Q9K8 533 +6Q32A 365 +J297J 652 +6J222 843 +899KK 341 +Q449Q 680 +2T4J4 200 +9J33A 259 +86K2T 174 +42433 246 +88555 155 +9J99J 779 +AA55A 552 +Q427T 442 +JJ222 663 +K9K8K 969 +QQJ87 667 +QJ866 508 +QJ445 588 +4TA74 539 +3TT3T 771 +6766J 980 +5J265 780 +88JJ4 982 +JK664 234 +298JQ 1 +Q664K 452 +6J4QT 737 +9A2A2 740 +88AAA 607 +888T9 119 +98494 994 +557T8 14 +T637J 873 +45555 642 +8J353 621 +6J6K6 985 +2897K 617 +74462 301 +JKQ3Q 151 +6J26K 81 +92462 62 +43557 474 +5Q28K 391 +QAKT2 728 +27JJ7 13 +QQ92Q 419 +AAK9T 796 +395A4 449 +55568 580 +QQTTQ 227 +9K995 595 +5AKKJ 905 +AAQQQ 925 +2TQQT 573 +53553 402 +KKK2K 424 +68KKJ 394 +QJ9A3 523 +99QK9 506 +69269 791 +927K3 379 +6Q5KQ 829 +KKKJK 345 +JK9K9 199 +2AA22 387 +5TK8T 863 +J72Q3 445 +7Q4QT 191 +AAKAJ 970 +4QT5J 381 +A3356 126 +TTATT 141 +32A73 851 +66777 610 +T48JQ 917 +3JQ96 447 +3AK98 626 +74QJ6 187 +33363 531 +Q57J8 634 +J66T6 223 +J3J33 732 +T6TTT 501 +777A3 406 +63779 950 +37777 646 +27A85 160 +TKTKT 911 +A9T24 818 +A7A88 534 +97557 398 +37988 503 +J7776 135 +64J34 202 +76JK2 874 +54584 583 +85KKK 85 +7T34A 830 +65T97 910 +9J6A9 46 +3AQ3J 204 +QA73J 693 +222Q2 315 +J2224 98 +T3T99 968 +2A2AA 883 +2824J 804 +67JA9 420 +3Q7T2 322 +7QQ77 551 +7K364 524 +35274 746 +55T77 566 +22752 612 +83855 688 +J8T55 802 +KKKK9 930 +4T888 686 +TTT23 783 +J7773 665 +63K66 328 +QK2J2 518 +99A33 990 +66A66 269 +2552T 471 +2AK3A 778 +5549Q 759 +T888J 195 +4T4T4 390 +AKAK4 400 +A2QK9 880 +96964 614 +J5454 35 +QQ3QQ 840 +58885 952 +44545 40 +QAQ8T 207 +T722T 262 +AA888 828 +TAK3A 750 +2J5QQ 92 +QQJQQ 169 +J6466 310 +A8867 479 +438Q7 774 +8QQQQ 623 +9T992 773 +J2Q36 887 +Q79Q7 165 +2584A 775 +QT857 918 +AJA9A 620 +76645 895 +44JA3 513 +8TT4T 976 +4TT49 79 +QJQQT 975 +777K7 711 +987TA 637 +29478 352 +44434 996 +KJ9KA 124 +AJ688 411 +4JTT3 748 +33K44 324 +KQJ2K 182 +37J3K 284 +99993 761 +J3393 716 +8558J 986 +T56J3 572 +KATTK 838 +85Q6K 431 +A3636 238 +A8AAA 338 +22599 265 +48248 477 +99599 318 +77999 510 +668TT 386 +8T649 633 +6666Q 913 +97K7K 342 +4Q282 236 +4AAQ8 944 +TQ95J 465 +55854 866 +55666 988 +Q35T2 412 +8J888 45 +2227Q 565 +2K5A6 97 +J94J4 331 +42224 823 +A8AQA 919 +33335 777 +TA98Q 103 +32229 640 +JJJJJ 938 +T22TJ 279 +AA5T9 805 +3335J 705 +T3J62 42 +33222 224 +T44A4 842 +QQQQ6 992 +96K2K 955 +TT6T6 631 +22828 698 +4K295 242 +8QQQJ 469 +3333T 153 +88A9A 96 +8736K 690 +5757Q 638 +9T9A9 137 +JJ555 255 +Q97Q9 287 +25K28 125 +65K6K 681 +253J4 436 +AT2T5 94 +3Q34T 943 +54Q3T 514 +KKQK4 8 +464K4 876 +3KK33 697 +28883 53 +62226 120 +8KK33 628 +QQA98 266 +3K924 824 +222K3 334 +79229 586 +9K999 685 +4Q44K 450 +797J8 963 +666J8 84 +A92J5 751 +999K6 183 +24595 894 +T46J6 504 +TQ2JA 941 +QQ77Q 764 +8QJ3J 928 +7667J 687 +28AT7 307 +52522 462 +9J2JT 340 +TTTJJ 464 +666K5 795 +56QQQ 357 +36J22 782 +42347 68 +72272 957 +96969 378 +TQQ7Q 302 +48422 673 +26662 864 +TKKKT 786 +4768T 26 +366T6 86 +79J97 336 +A4944 739 +6QQKK 961 +82K23 543 +Q9Q93 274 +T6QT3 931 +3KT35 198 +J7T6J 765 +77755 270 +284QK 511 +88668 240 +KKTK6 717 +AAAA2 193 +A4JAA 303 +4AAAA 872 +A78T6 75 +48447 684 +Q222J 354 +6357A 173 +JTK78 122 +QT6Q6 439 +K283J 558 +TJ5JQ 27 +KKK65 567 +J7648 363 +QJ475 702 +J472A 898 +5T3TT 793 +QK5QA 164 +9T97A 9 +KK495 493 +2T2T2 998 +88488 915 +T8777 601 +78888 747 +48478 517 +99898 128 +94996 289 +6Q84A 252 +46J63 114 +43AA3 33 +44TTJ 90 +Q5552 731 +69874 196 +2T228 413 +A282A 896 +49TJ6 108 +4444T 666 +26A2J 313 +22722 371 +65T3K 766 +88798 31 +K78JA 296 +7Q5TT 848 +55K5J 299 +3KK8K 297 +8KA5A 491 +JK6KK 149 +T333Q 290 +TKT7K 577 +2K3A7 414 +6K666 859 +KJ574 591 +63K26 797 +K2KAK 999 +TTT9J 703 +7JJJ2 117 +4JJ92 654 +969J6 624 +J4Q4T 683 +T5TTT 39 +A85AA 645 +7TQQ7 385 +66AA6 403 +9392Q 735 +2KT4Q 190 +95353 486 +58568 516 +739AK 852 +Q5KK2 10 +4K6T4 651 +2Q228 225 +9TTTT 901 +283QJ 136 +QQ3J3 220 +83383 235 +A99A3 485 +AA8AK 401 +J7TTQ 819 +9A772 292 +A6AAA 561 +93TTT 877 +QJ9Q9 147 +47Q77 814 +K638T 425 +AKK8A 571 +T7768 816 +QQ4Q4 497 +63262 738 +727K8 3 +88AT8 353 +K36T7 784 +4K564 12 +4AA44 339 +A2AA8 374 +65J55 312 +88988 188 +69666 309 +AAK5K 192 +77644 993 +82636 273 +5484T 396 +JKKJJ 678 +K3663 574 +TTT99 519 +838K8 515 +JKKJK 755 +2TQ84 494 +55558 258 +ATATT 109 +3TJ3T 719 +TJQAA 37 +66662 914 +58TQ5 64 +5J535 308 +7AQJ8 790 +K8JQT 578 +88885 529 +9K9J9 261 +J5555 247 +3QA86 210 +2479A 157 +JA6TJ 427 +QQ555 733 +AA5Q5 756 +AATAA 564 +8JTJT 762 +85533 725 +K52KK 537 +6A745 890 +8A429 630 +KK888 826 +T4T4T 280 +Q3AAT 669 +32958 93 +A342T 121 +K2KJK 320 +3K333 754 +6TTAA 636 +T4TTT 742 +AKAAK 389 +8JK8Q 545 +A7777 123 +T6282 815 +5Q42T 847 +99969 323 +733TJ 244 +46589 604 +J8KKK 166 +844K9 908 +Q3K56 20 +JA446 689 +5QQ7K 448 +4T927 7 +72474 211 +222T2 977 +88989 4 +8Q828 525 +2TT52 113 +36536 835 +A2JAA 923 +Q7983 295 +T6534 1000 +96939 461 +598K2 298 +QKQAA 154 +AAKAA 861 +TQ696 674 +K3Q9A 348 +QQQQ4 827 +88K84 987 +KK555 712 +22777 889 +254T4 672 +3K23K 483 +44463 811 +Q77AQ 878 +AK5KK 555 +AQAAA 214 +QA7K9 484 +TT5KK 161 +T7QQT 541 +AK6A6 422 +66967 314 +7KQ79 437 +77677 704 +T76JQ 505 +A525J 143 +83533 360 +J4Q53 36 +2K7AJ 170 +Q4AAA 87 +47774 953 +TK2KQ 935 +K67T4 909 +T8Q43 924 +33995 945 +JQA8T 569 +KKK55 744 +68866 152 +2J2TK 18 +Q7QQQ 417 +T7Q82 76 +53322 405 +TA4Q3 723 +2Q9J9 499 +36336 179 +9Q494 706 +87JK6 77 \ No newline at end of file diff --git a/AdventOfCode/Problems/AOC2023/Day7/sample.txt b/AdventOfCode/Problems/AOC2023/Day7/sample.txt new file mode 100644 index 0000000..03030f0 --- /dev/null +++ b/AdventOfCode/Problems/AOC2023/Day7/sample.txt @@ -0,0 +1,5 @@ +32T3K 765 +T55J5 684 +KTJJT 220 +KK677 28 +QQQJA 483 \ No newline at end of file diff --git a/AdventOfCode/Problems/AOC2023/Day7/sara.txt b/AdventOfCode/Problems/AOC2023/Day7/sara.txt new file mode 100644 index 0000000..56216df --- /dev/null +++ b/AdventOfCode/Problems/AOC2023/Day7/sara.txt @@ -0,0 +1,1000 @@ +K43AT 328 +AAQ2A 410 +45452 995 +T9999 645 +J7737 326 +4TT46 891 +A3AAT 565 +ATTTJ 793 +K2TJK 441 +6J66K 640 +QQQQ7 582 +K596A 203 +48544 862 +74AJQ 103 +J333J 895 +737T4 472 +26226 863 +QQQ7A 959 +6K5J6 257 +7QAT8 10 +4K9KT 894 +TTT66 720 +57874 13 +QJ64Q 536 +8444Q 497 +46K62 642 +Q4444 256 +75K96 984 +TQJ38 237 +Q7286 460 +A2255 985 +66464 661 +32J22 294 +2T22T 880 +2AJJJ 643 +555TT 637 +7T73T 519 +3786T 124 +JT2T2 735 +K4KKK 982 +A8TT4 526 +KK8TJ 334 +54A69 554 +6KK46 912 +T7JQT 766 +99399 437 +5TJ5J 842 +QQ99T 719 +3A9QK 715 +T9TT5 684 +A7A7A 394 +A9559 883 +J2662 50 +5J2A4 44 +636Q6 319 +96K93 937 +4KKJK 924 +AA4AA 555 +AJ695 755 +63T34 476 +K7K47 644 +66K69 166 +K556Q 404 +37249 748 +77JJ9 331 +JJ655 493 +QAKA2 350 +Q7QQK 243 +A6745 363 +QTJTT 538 +44QQ4 529 +666J3 115 +TQ72A 710 +Q5777 457 +4TTJ6 773 +JJ3J6 786 +AA955 911 +4JA44 198 +Q883J 517 +J9933 199 +8453J 349 +6646Q 846 +75J8J 761 +A7A7J 596 +2J993 228 +32636 137 +Q928J 778 +KKKJJ 960 +4466J 929 +775QQ 280 +7T476 749 +979KK 355 +35373 218 +K7788 392 +25K69 289 +74776 882 +A58T2 898 +2A22A 377 +TKT78 545 +K752T 253 +77779 945 +996AA 650 +QQ3A3 859 +K6J87 626 +K22K3 765 +TT37T 94 +372K3 212 +48887 525 +2676T 72 +977A3 641 +3J67K 111 +A6388 118 +3K359 993 +AA8AA 379 +J66J6 841 +2222J 1000 +T757J 117 +99J9T 772 +88846 475 +29J28 572 +77J72 900 +A8QAK 904 +T4KJK 621 +T44TJ 140 +JK9KK 593 +849TJ 828 +59794 486 +3K5QA 318 +K2J98 11 +77744 421 +2K279 231 +6Q3QT 79 +3A999 271 +3QT79 119 +T4598 840 +666T8 717 +9JJ99 811 +QQQKK 671 +QTQQT 303 +86666 605 +47AA3 482 +52525 816 +4Q2Q4 722 +77224 609 +78688 976 +7QKA9 865 +9Q99T 989 +5342A 279 +9Q35K 999 +777AQ 764 +AJ43Q 143 +QQQQ8 744 +2Q3J9 61 +KKK99 779 +KK8KK 966 +TQ839 51 +J5JA5 148 +4942T 725 +AT999 732 +62666 499 +89725 468 +3J566 953 +Q9A58 711 +9QQ5Q 413 +78J57 726 +945TA 921 +KKAT3 938 +3A433 654 +8AA82 88 +77KK7 430 +3T777 728 +QK32T 190 +6J638 708 +QTQJA 632 +KT5A9 221 +79KT8 879 +AT474 18 +77867 756 +99799 815 +A52T4 777 +3K9J4 562 +66QQ8 730 +888AJ 351 +K68KK 49 +44442 905 +Q3A52 304 +66AT9 681 +AQ44J 838 +T6TT8 739 +JA5KK 638 +82Q2J 785 +84665 411 +8K4J4 100 +6936K 664 +7J799 474 +QKQ8K 690 +929J4 860 +6747Q 780 +QKQTQ 979 +53JQ3 635 +T54Q7 43 +9876K 301 +57555 511 +A7777 933 +7533A 121 +T77TT 378 +94977 876 +44K9Q 758 +999A9 930 +99TTT 104 +J8243 375 +QQ2Q2 947 +QAQ99 789 +22A24 91 +9TJK9 733 +666J6 267 +444T3 611 +AA4JJ 194 +888A8 568 +4Q723 804 +5T565 150 +AA23A 347 +9725Q 122 +TT8T8 234 +A9445 342 +A2288 67 +99Q44 167 +3K688 600 +6QQQK 653 +T5J34 423 +3K5T4 868 +8J99A 515 +37T8K 383 +J4T85 182 +Q7644 449 +QQ4TQ 471 +56464 824 +6J85Q 798 +4Q6QQ 986 +8864K 613 +22422 415 +T22T4 695 +6J633 574 +479AK 175 +8JAQ4 397 +5J5T8 662 +A7J99 594 +85688 391 +A3TJ6 204 +J3T33 546 +Q777J 539 +6KJTJ 812 +8TT55 660 +3Q23Q 128 +J7JJ7 585 +6T6J6 837 +5288T 964 +4J34A 767 +77K37 797 +6A665 866 +49A6J 856 +Q9QQ8 261 +QJ9JQ 158 +T5363 75 +QT994 528 +A3335 184 +QAAAA 296 +22886 672 +2922J 110 +99K99 325 +23243 967 +AA545 361 +24443 324 +J258Q 239 +7685Q 731 +T7TKK 281 +QQQTJ 429 +8J828 552 +J8484 21 +3J27A 564 +2A5T9 750 +A3QT5 154 +599J5 245 +KK7A8 71 +8888K 485 +2K859 6 +98959 922 +6J669 123 +A5552 452 +QQA6K 649 +QTQQQ 81 +Q97KK 808 +82276 845 +T6Q36 788 +5TJTT 387 +77787 108 +Q39A2 287 +66Q6Q 896 +89635 197 +TT2TJ 120 +4AA2A 560 +99KK9 534 +KK3KK 479 +65698 330 +KJ63K 775 +K6676 442 +K2226 698 +KJ444 877 +42442 802 +KK8K3 220 +88555 942 +4QQ74 87 +35959 899 +A5736 64 +A8629 941 +2TA8Q 706 +87627 250 +AA6J3 676 +47442 492 +6QJ66 507 +8K3TQ 109 +Q7777 697 +AAAA3 412 +4999A 74 +996K9 498 +323KK 522 +355JA 978 +TK2A7 864 +A9JAQ 5 +5576T 713 +Q272Q 312 +877KK 89 +K6666 658 +J876Q 368 +A63K8 336 +83AAT 106 +6TQ82 373 +7JQQQ 782 +JKTT3 834 +QQ999 129 +3AK6Q 601 +J7TJ7 200 +TK999 185 +76333 907 +JAAAA 57 +5T7T5 37 +QAQ3Q 807 +2666T 406 +4TT43 501 +84484 22 +9T99T 651 +T8675 965 +9276A 848 +98J98 776 +T2299 40 +KTATA 162 +A4K5K 179 +8888J 473 +A554K 420 +999AJ 783 +9696T 367 +KK9KK 56 +TA9AT 892 +AT7T7 38 +T3T3T 530 +23A9T 634 +QA4K2 241 +88K68 362 +T4J9Q 193 +K9T72 52 +76566 92 +9JT67 3 +3Q468 768 +4285K 206 +J28K6 285 +6J86Q 159 +A4925 521 +J5525 531 +A5A55 366 +5968T 818 +44454 320 +8QK88 962 +99996 791 +4A44A 284 +97T48 146 +39T89 686 +3497K 298 +4224T 209 +AAA3K 615 +22795 628 +2QJQQ 141 +35999 73 +73337 32 +49999 403 +JJJJ3 665 +89K74 63 +Q76K2 157 +6868J 171 +J8JJ8 853 +3TJ56 869 +42TA6 682 +33633 337 +AJQ58 135 +3J388 164 +7Q6T2 909 +6TAQT 483 +33379 327 +833AA 332 +885QJ 177 +39522 908 +93JQK 15 +323K2 236 +28A5A 384 +J99JJ 558 +4Q4QQ 360 +38A95 210 +43344 746 +3J589 288 +JJ8JJ 28 +23223 436 +TAA58 149 +2227J 414 +QQQA4 356 +A6456 754 +34444 131 +83K6K 310 +37233 41 +A7797 84 +62426 333 +2A822 569 +KAAKK 358 +T2AJ6 901 +6J822 729 +8J86J 652 +A935K 247 +TTKT3 998 +8ATAT 12 +K5622 170 +8QQ8Q 30 +82288 524 +Q4T94 445 +TAAA2 506 +7A79Q 663 +AT94K 292 +J6937 659 +5343A 694 +43JT6 851 +K4334 700 +3K3K3 607 +AJ2JA 980 +AA4AJ 422 +4K444 448 +768TJ 743 +A5AJA 35 +A33AJ 971 +KA662 952 +226Q2 113 +488Q8 295 +633T3 481 +J22K2 861 +388J8 101 +3Q524 152 +96J69 466 +882T3 315 +56J8T 258 +AAJ22 418 +Q722T 306 +3Q334 969 +A9K99 455 +AT4J3 857 +5QKA9 29 +2KKK2 242 +74433 251 +96K69 843 +KJJ5K 86 +576K8 692 +27TTA 470 +66JK9 240 +4T6Q7 496 +65T99 925 +3AT53 693 +5KTK9 931 +Q4999 855 +3QQ8Q 854 +5555T 114 +55J66 884 +7777J 409 +2JKJ5 795 +75755 23 +444JJ 308 +5JKJ5 701 +72Q77 93 +28Q28 639 +2A257 438 +95KJ4 484 +QTQ39 890 +8JK8K 195 +999KQ 463 +64JQ6 648 +49444 796 +999A8 439 +9J229 277 +22Q6Q 345 +QQ2QQ 557 +AQ45K 836 +8T3KJ 918 +8KKTK 2 +J5T55 238 +K4663 794 +QQAQQ 216 +225K5 927 +32658 389 +92276 477 +63K9T 603 +58Q32 232 +8AK52 973 +KQKQK 323 +88592 656 +22223 395 +K4TT4 354 +46KK3 850 +5T53T 163 +44996 858 +3J3K3 7 +QQ2Q4 630 +9QA2K 136 +Q5KQQ 677 +JJJJJ 974 +55475 737 +6AK5Q 736 +Q4454 997 +T8282 144 +K3333 810 +92929 59 +K44KT 427 +7A774 889 +96996 902 +79QQ9 39 +A73A3 670 +44644 224 +2Q54Q 311 +56555 724 +783J7 19 +2KKKK 950 +T74K7 799 +64464 370 +J6T62 833 +885J8 459 +84J66 617 +77579 408 +2J36T 386 +KTK2K 24 +34334 249 +44489 939 +55955 915 +736QA 58 +4J548 839 +QQQ3Q 800 +57855 934 +K5KAA 270 +A6Q22 262 +2TTTT 398 +75A2Q 759 +J2529 575 +99373 16 +78355 981 +JA587 769 +AA38Q 255 +22A77 903 +89999 827 +6JT7T 913 +A59JK 872 +6QAQA 542 +98J99 712 +K4TTQ 520 +699J9 138 +39JJT 757 +A2TJ5 419 +Q8647 96 +JT779 619 +7T5TT 417 +A433A 685 +KTJKT 707 +29T73 679 +KKAKK 31 +72758 181 +TTATT 348 +65Q7T 467 +K8222 98 +QK5KK 504 +44QJQ 259 +6T475 709 +52589 33 +58898 631 +59535 741 +4J8KK 20 +TQQTT 132 +8KT6T 784 +Q33KK 291 +T9QT5 897 +3983J 127 +73A33 556 +J2452 718 +7465Q 886 +89899 935 +6TJA6 544 +79797 447 +89J77 571 +35333 518 +7478K 875 +6TQJ4 595 +636K5 747 +QJQ5A 156 +76776 165 +45588 822 +2T6A9 622 +333QQ 273 +9J888 563 +J2577 451 +6A8J3 847 +33J33 364 +J6TA8 689 +83333 916 +9473T 371 +8397A 516 +8352K 264 +38J8J 509 +93696 523 +69JJ7 464 +T6KK2 357 +734AQ 340 +QA6AA 461 +K2AKK 443 +74TA3 987 +52TJ7 961 +67992 321 +A2972 830 +9JQ9Q 625 +TTTT4 727 +TQ898 958 +2222K 610 +8346J 508 +9ATTT 540 +J4464 655 +4JAA3 189 +73669 762 +54445 983 +39QKQ 316 +6777Q 948 +ATAAA 893 +T5KTK 388 +62KKK 77 +58647 307 +5JA88 83 +9J944 183 +5J274 133 +44K4K 920 +4TTA9 54 +AA9A6 940 +KTKTK 592 +399Q2 399 +6JQQQ 573 +A2955 233 +37Q8T 274 +QTKTT 376 +9KT59 577 +KK3Q4 598 +99595 322 +3Q339 225 +65J55 201 +AQTQQ 874 +5667J 936 +TJ8Q2 829 +T6Q45 910 +KQ4AK 380 +8AQQJ 770 +28838 402 +JAAAJ 752 +A5AA5 4 +86886 34 +46494 551 +963J5 76 +773A7 814 +67794 505 +4KJ4K 559 +J8585 230 +KT3K6 618 +23QJ8 47 +QQ464 69 +96J9Q 469 +55777 714 +J2K58 227 +K24Q2 774 +888KJ 352 +Q3TQQ 647 +K3JA4 365 +J4TKQ 548 +88J4J 78 +9J44J 489 +22525 297 +QQ9QQ 42 +2222A 82 +5A4A4 988 +K6479 36 +A2AAA 597 +6J664 699 +85555 70 +77Q7Q 222 +AA5AA 541 +QQQQJ 612 +555J5 512 +44AA3 763 +65635 45 +JKKK5 871 +T3733 949 +JQK7Q 226 +Q4QQQ 126 +47AAA 214 +7T345 673 +73862 465 +5555A 994 +AA54K 787 +KK7K7 951 +Q5585 579 +84444 314 +7333K 283 +A37JK 68 +9QA36 53 +9T78T 172 +9J567 809 +KQQ6K 26 +J7882 444 +J5TKT 490 +QQQ97 992 +TTKTT 208 +6T666 211 +72977 266 +73AT9 532 +Q5KJ2 723 +AK4AA 852 +8QJQJ 820 +73383 426 +6K4A8 260 +88222 514 +832QQ 275 +77KQ7 491 +68J88 721 +46484 153 +55552 282 +8T3Q8 627 +7KQKQ 944 +T9Q84 390 +22775 771 +TKT72 604 +74QQQ 217 +5Q44Q 196 +J2TK3 881 +J88J8 305 +72777 268 +K3KKJ 400 +222TJ 329 +J3437 527 +27QAK 696 +K7676 272 +2A22K 578 +537J2 955 +777T7 926 +5K36A 646 +T2Q95 570 +27727 65 +T885T 688 +25442 602 +Q6Q7Q 543 +875K8 586 +78K3K 107 +KTKTQ 450 +555JJ 620 +TQAJJ 792 +6977Q 813 +65696 943 +J3563 956 +5KKKK 977 +88A6A 887 +AA22A 335 +Q8AQQ 405 +4JATK 702 +A6888 567 +J765T 487 +2Q4A6 478 +JK979 510 +44T27 278 +35323 751 +A7AAA 431 +8QT82 826 +QTJ86 928 +3J773 691 +K58J8 970 +88442 160 +A3AA9 633 +6AJ55 142 +QKKQ9 178 +93TJ7 805 +389A2 97 +4373A 95 +7Q784 359 +7KJ77 393 +74J4K 14 +94TTT 968 +3QA3K 248 +66944 48 +QQKQQ 823 +AA5A7 446 +5JT22 745 +T694K 738 +Q956Q 705 +34333 675 +8T88T 17 +2T3TJ 576 +5A578 186 +4848Q 549 +T322T 566 +77775 112 +QJ599 85 +AQKQA 229 +78Q77 678 +3K9K7 831 +55524 338 +A333A 932 +JJ222 191 +JJKJQ 313 +69669 500 +33322 513 +T7TTT 781 +A44JJ 580 +2QJ8J 276 +KA7A6 803 +346KT 401 +853Q7 906 +AA6A6 666 +3QA43 9 +28J25 244 +8686A 134 +KA88A 62 +K9888 535 +4T7KA 219 +KKK6K 996 +9T994 435 +K8KQK 174 +QQAA4 246 +5K5JK 588 +QJ875 957 +46358 919 +3A393 954 +7JKK7 972 +2QKK2 716 +TKJ9K 151 +66646 703 +5KJT2 369 +7KJK8 372 +A8A8A 169 +AAA9A 187 +TT55T 878 +44654 587 +Q6QQQ 90 +7AAJA 923 +6TTTJ 674 +66676 339 +88894 870 +Q2K48 533 +TTTT9 130 +763J3 343 +88333 817 +AQ785 704 +QQ5QA 385 +737T9 116 +95595 801 +J84AK 590 +79796 102 +J3TJ4 683 +26299 503 +8T888 867 +53AAJ 608 +2A56J 46 +8955A 381 +J5A55 844 +QJ9J9 636 +44J44 669 +A7JTA 550 +7TT24 317 +57A55 396 +J3JK3 55 +3TT33 888 +84JJ6 583 +3362T 547 +49494 176 +88858 173 +6KKJ6 614 +QK662 623 +Q4223 302 +397J5 147 +J5A9T 454 +9TT2T 145 +98T85 599 +86JQ2 433 +KQ977 806 +7T6T5 1 +72QQQ 873 +KTJKK 66 +77578 161 +TQ8T8 60 +AA25A 963 +T2AA4 382 +6T52J 346 +KK55A 494 +A4A4A 680 +55454 125 +49QQQ 657 +K6J9Q 290 +77J7J 155 +5AAJ5 687 +KQJ68 606 +88898 667 +29J27 616 +TJTTT 946 +46828 269 +2T28T 188 +787K7 293 +55223 254 +T6QT6 581 +TTA6A 825 +252AA 252 +JKQKK 205 +88585 819 +TT8TT 914 +K87T5 425 +KQKKK 416 +K9K74 263 +89627 624 +94889 537 +K96AQ 502 +Q77JA 991 +66367 849 +92922 760 +KAT4K 480 +ATTAA 553 +J4447 432 +63T5T 440 +282J2 192 +JKKKK 753 +6A74K 25 +46747 407 +TT3J9 299 +5KKK9 80 +6TA22 353 +T5795 265 +24TK9 202 +5Q555 207 +T5A45 341 +2K24J 742 +AJA9A 8 +45555 456 +88699 668 +66Q86 344 +AAA85 99 +7736T 591 +A6Q6Q 223 +A252J 589 +TTTKK 309 +77AAK 458 +68A9K 629 +6TK66 300 +2J242 885 +TAA68 488 +2Q72J 734 +936KA 213 +59JA4 180 +AA999 105 +843J9 990 +T4T44 215 +4ATAA 561 +J5333 821 +77774 424 +9AA6J 27 +JTJTT 790 +443KK 975 +TT8T9 286 +74Q89 832 +58QTA 453 +39393 917 +88234 740 +Q62AJ 374 +999Q9 235 +8Q828 428 +QJQJQ 462 +2K7TJ 139 +AJ239 835 +29499 434 +97J77 495 +99J99 584 +464J5 168 \ No newline at end of file diff --git a/AdventOfCode/Runner/Extensions.cs b/AdventOfCode/Runner/Extensions.cs new file mode 100644 index 0000000..4e446aa --- /dev/null +++ b/AdventOfCode/Runner/Extensions.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AdventOfCode.Runner; +public static class Extensions +{ + public static IEnumerable Print(this IEnumerable values) + { + foreach (var item in values) + { + Console.WriteLine(item); + } + return values; + } +}