day7.zig (20604B)
1 const std = @import("std"); 2 3 const Card = enum(u8) { 4 J = 0, 5 //@"2" = 0, 6 @"2", 7 @"3", 8 @"4", 9 @"5", 10 @"6", 11 @"7", 12 @"8", 13 @"9", 14 T, 15 //J, 16 Q, 17 K, 18 A, 19 20 fn parse(ch: u8) !Card { 21 const ei = @typeInfo(Card).Enum; 22 inline for (ei.fields) |field| { 23 if (ch == field.name[0]) { 24 return @enumFromInt(field.value); 25 } 26 } else { 27 return error.InvalidCard; 28 } 29 } 30 }; 31 32 const HandType = enum(u8) { 33 HighCard = 0, 34 OnePair, 35 TwoPair, 36 ThreeOAK, 37 FullHouse, 38 FourOAK, 39 FiveOAK, 40 }; 41 42 const Hand = struct { 43 handtype: HandType, 44 cards: [5]Card, 45 46 fn cmp(_: void, lhs: Hand, rhs: Hand) bool { 47 if (@intFromEnum(lhs.handtype) < @intFromEnum(rhs.handtype)) return true; 48 if (@intFromEnum(lhs.handtype) > @intFromEnum(rhs.handtype)) return false; 49 for (lhs.cards, rhs.cards) |lc, rc| { 50 if (lc != rc) { 51 return @intFromEnum(lc) < @intFromEnum(rc); 52 } 53 } 54 return false; 55 } 56 57 fn parse(input: []const u8) !Hand { 58 if (input.len != 5) return error.InvalidHand; 59 var hand: Hand = undefined; 60 for (input, 0..) |ch, ix| { 61 hand.cards[ix] = try Card.parse(ch); 62 } 63 const ei = @typeInfo(Card).Enum; 64 var cts = [_]u8{0} ** ei.fields.len; 65 for (hand.cards) |card| { 66 cts[@intFromEnum(card)] += 1; 67 } 68 std.mem.sort(u8, &cts, {}, Hand.u8cmprev); 69 70 const jokers = std.mem.count(Card, &hand.cards, &[_]Card{.J}); 71 hand.handtype = switch (cts[0]) { 72 5 => .FiveOAK, 73 4 => switch (jokers) { 74 4 => .FiveOAK, 75 1 => .FiveOAK, 76 0 => .FourOAK, 77 else => @panic("blub"), 78 }, 79 3 => switch (cts[1]) { 80 2 => switch (jokers) { 81 3 => .FiveOAK, 82 2 => .FiveOAK, 83 1 => .FourOAK, 84 0 => .FullHouse, 85 else => @panic("blub"), 86 }, 87 else => switch (jokers) { 88 3 => .FourOAK, 89 1 => .FourOAK, 90 0 => .ThreeOAK, 91 else => @panic("blub"), 92 }, 93 }, 94 2 => switch (cts[1]) { 95 2 => switch (jokers) { 96 2 => .FourOAK, 97 1 => .FullHouse, 98 0 => .TwoPair, 99 else => @panic("blub"), 100 }, 101 else => switch (jokers) { 102 2 => .ThreeOAK, 103 1 => .ThreeOAK, 104 0 => .OnePair, 105 else => @panic("blub"), 106 }, 107 }, 108 1 => switch (jokers) { 109 1 => .OnePair, 110 0 => .HighCard, 111 else => @panic("blub"), 112 }, 113 else => @panic("blub"), 114 }; 115 return hand; 116 } 117 118 fn u8cmprev(_: void, lhs: u8, rhs: u8) bool { 119 return lhs > rhs; 120 } 121 }; 122 123 const Turn = struct { 124 hand: Hand, 125 bid: u64, 126 127 fn parse(input: []const u8) !Turn { 128 var toks = std.mem.tokenize(u8, input, " "); 129 const hand_str = toks.next() orelse return error.Foo; 130 const bid_str = toks.next() orelse return error.Bar; 131 return .{ 132 .hand = try Hand.parse(hand_str), 133 .bid = try std.fmt.parseInt(u64, bid_str, 10), 134 }; 135 } 136 137 fn cmp(_: void, lhs: Turn, rhs: Turn) bool { 138 return Hand.cmp({}, lhs.hand, rhs.hand); 139 } 140 }; 141 142 fn solve(a: std.mem.Allocator, input: []const u8) !u64 { 143 var spl = std.mem.split(u8, input, "\n"); 144 var al = std.ArrayList(Turn).init(a); 145 defer al.deinit(); 146 while (spl.next()) |line| { 147 try al.append(try Turn.parse(line)); 148 } 149 const turns = try al.toOwnedSlice(); 150 defer a.free(turns); 151 std.mem.sort(Turn, turns, {}, Turn.cmp); 152 var sum: u64 = 0; 153 for (turns, 1..) |turn, rank| { 154 //std.log.warn("turn {any} rank {}", .{turn, rank}); 155 sum += turn.bid * rank; 156 } 157 return sum; 158 } 159 160 // test "pt1" { 161 // try std.testing.expectEqual(@as(u64, 6440), try solve_pt1(std.testing.allocator, test_input)); 162 // } 163 test "pt2" { 164 try std.testing.expectEqual(@as(u64, 5905), try solve(std.testing.allocator, test_input)); 165 } 166 167 pub fn main() !void { 168 try std.fmt.format(std.io.getStdOut().writer(), "day7 pt2: {}\n", .{try solve(std.heap.page_allocator, puzzle_input)}); 169 } 170 171 const test_input = 172 \\32T3K 765 173 \\T55J5 684 174 \\KK677 28 175 \\KTJJT 220 176 \\QQQJA 483 177 ; 178 179 const puzzle_input = 180 \\9A35J 469 181 \\75T32 237 182 \\6T8JQ 427 183 \\3366A 814 184 \\K2AK9 982 185 \\J8KTT 9 186 \\94936 970 187 \\Q8AK9 15 188 \\3QQ32 940 189 \\65555 484 190 \\8K88K 674 191 \\Q67T5 788 192 \\77575 476 193 \\KAKAA 785 194 \\AA3AA 240 195 \\44767 423 196 \\Q923A 300 197 \\KK444 650 198 \\QQQ6Q 313 199 \\5JA22 167 200 \\7A264 837 201 \\TTKTT 646 202 \\K62JJ 682 203 \\34A63 532 204 \\7J554 393 205 \\Q86T6 745 206 \\9963K 718 207 \\92K85 97 208 \\3KKJ3 604 209 \\98Q26 257 210 \\7AJ6Q 132 211 \\K48T5 125 212 \\554J4 408 213 \\T6333 178 214 \\5757J 479 215 \\8J222 488 216 \\KKJ6A 460 217 \\95T38 944 218 \\23J22 796 219 \\AK333 69 220 \\25AK9 978 221 \\77779 123 222 \\K9T83 56 223 \\46A39 730 224 \\655J5 77 225 \\A2T2A 78 226 \\J8Q75 847 227 \\QA82A 700 228 \\TTT67 443 229 \\KT9A5 343 230 \\6969T 582 231 \\A7779 703 232 \\3QA93 597 233 \\6JT6T 558 234 \\28888 290 235 \\26TT2 147 236 \\T9356 587 237 \\6T542 482 238 \\3J733 140 239 \\TQT72 534 240 \\3K3K3 208 241 \\5JA6J 833 242 \\64646 277 243 \\86K68 795 244 \\24455 997 245 \\3633K 504 246 \\K3K36 790 247 \\22KK2 731 248 \\AA8AA 991 249 \\A6666 312 250 \\38395 712 251 \\46J44 229 252 \\52529 268 253 \\49AA9 573 254 \\J7J94 258 255 \\87TKA 947 256 \\J2999 555 257 \\T9KJK 194 258 \\7KK3K 146 259 \\T255T 875 260 \\9QAT4 475 261 \\759A2 169 262 \\22322 510 263 \\27T69 299 264 \\644K6 4 265 \\44J84 227 266 \\6A722 806 267 \\775KJ 25 268 \\37425 679 269 \\7TA8T 226 270 \\3Q6TK 391 271 \\8T3J4 196 272 \\67534 339 273 \\5QQ55 565 274 \\J33A3 305 275 \\8A8AJ 732 276 \\2QQJ5 523 277 \\AAAJA 618 278 \\97733 858 279 \\2A6Q2 433 280 \\J8QT3 390 281 \\3333J 910 282 \\K2AK2 884 283 \\AQTTQ 810 284 \\55666 855 285 \\7Q7QJ 743 286 \\K8KK3 489 287 \\4AKKJ 619 288 \\QQKQQ 373 289 \\QJ59A 688 290 \\2687J 622 291 \\7Q77J 512 292 \\578A3 120 293 \\T2662 737 294 \\JKJK7 807 295 \\44T94 223 296 \\454Q5 607 297 \\75J58 551 298 \\A686J 763 299 \\TAT4T 108 300 \\75356 591 301 \\96989 977 302 \\K7KTK 775 303 \\5252Q 318 304 \\77A5A 599 305 \\22K87 359 306 \\JJQQQ 930 307 \\8TKT8 436 308 \\A9QQ8 374 309 \\4T2JA 30 310 \\777AJ 463 311 \\8J888 87 312 \\42K8Q 657 313 \\J5JJ5 713 314 \\AKQJ3 45 315 \\T59K4 765 316 \\22A77 266 317 \\K8KK8 219 318 \\6T666 349 319 \\72T7T 92 320 \\3JQJQ 964 321 \\AA2J9 672 322 \\66997 803 323 \\5A8A2 467 324 \\KKKQ7 98 325 \\67Q5J 669 326 \\J57A6 503 327 \\98347 331 328 \\6J668 279 329 \\9K7KK 319 330 \\84848 337 331 \\33353 974 332 \\A333T 576 333 \\66636 461 334 \\6AAA2 281 335 \\Q52QQ 691 336 \\7876A 892 337 \\533T8 966 338 \\5A9Q7 533 339 \\A6AAQ 21 340 \\688Q6 100 341 \\K8483 764 342 \\62865 453 343 \\39323 189 344 \\TTJJT 498 345 \\5J437 306 346 \\55A7A 876 347 \\9A366 562 348 \\8J479 249 349 \\65544 640 350 \\83T88 325 351 \\AK45A 321 352 \\39QQ3 849 353 \\83838 749 354 \\43394 602 355 \\33722 843 356 \\T5KTJ 428 357 \\JJKK9 549 358 \\33737 27 359 \\4KKK4 638 360 \\KK398 246 361 \\J6828 372 362 \\99229 23 363 \\2963K 577 364 \\3ATJJ 862 365 \\6488T 912 366 \\48554 903 367 \\3A353 627 368 \\86923 768 369 \\79A98 540 370 \\77TTT 965 371 \\TK2T7 188 372 \\2A644 687 373 \\QT943 253 374 \\K2QJT 887 375 \\J5KK5 915 376 \\9Q2JA 980 377 \\J237J 28 378 \\A46Q2 264 379 \\7T2TT 621 380 \\A4T8J 57 381 \\Q5QT5 217 382 \\K9AK7 248 383 \\TAJTT 973 384 \\82822 919 385 \\858AA 265 386 \\5555J 800 387 \\552J2 908 388 \\Q5248 272 389 \\A5KK5 529 390 \\K8J9T 85 391 \\888TT 477 392 \\665Q5 823 393 \\Q42AT 449 394 \\4843A 83 395 \\Q5476 885 396 \\Q52T2 409 397 \\6A2TJ 580 398 \\92A99 483 399 \\Q9Q6Q 734 400 \\36662 134 401 \\88899 401 402 \\KQQQ9 389 403 \\JQ259 658 404 \\57895 639 405 \\KQ654 852 406 \\94273 612 407 \\77KT7 987 408 \\3Q4AQ 364 409 \\6KQK6 651 410 \\4AQ23 163 411 \\34TTT 107 412 \\T98T2 870 413 \\J78Q9 756 414 \\3K3J3 404 415 \\J993J 328 416 \\Q8JQA 678 417 \\96759 326 418 \\2J22J 383 419 \\2T222 236 420 \\76666 772 421 \\QQ5QJ 225 422 \\A47AA 505 423 \\967TJ 924 424 \\Q3TJ4 63 425 \\2KK29 879 426 \\44Q4Q 685 427 \\TTQ9T 659 428 \\7244J 414 429 \\T22TJ 269 430 \\55552 3 431 \\J78TK 474 432 \\3J3J3 559 433 \\8QJ42 382 434 \\28T86 740 435 \\TKTT8 381 436 \\22J44 579 437 \\J8668 242 438 \\88TT6 709 439 \\KKKJ9 192 440 \\478K2 501 441 \\3Q66J 22 442 \\K9KAJ 774 443 \\K3333 113 444 \\4TJT4 945 445 \\Q55KK 609 446 \\Q7272 955 447 \\6AKAA 490 448 \\964T5 971 449 \\36Q3Q 51 450 \\3T9AT 969 451 \\Q8TQT 256 452 \\4A833 632 453 \\5499J 812 454 \\44222 176 455 \\6QQ6Q 317 456 \\TJT2T 206 457 \\A862Q 468 458 \\36663 464 459 \\54JK9 302 460 \\8J828 103 461 \\32QQ2 38 462 \\66675 595 463 \\2J8TQ 50 464 \\2QQQQ 783 465 \\333QQ 282 466 \\67KKK 511 467 \\2996J 518 468 \\J824K 44 469 \\K6656 726 470 \\Q7Q5T 793 471 \\KQ27T 494 472 \\T2KQA 308 473 \\AAAA2 441 474 \\24J49 716 475 \\K58TT 873 476 \\7TA49 39 477 \\6KQ7T 298 478 \\6Q555 455 479 \\66AJA 819 480 \\5A9A3 922 481 \\AAA88 170 482 \\42324 962 483 \\22Q22 616 484 \\44QJQ 399 485 \\9J3TA 342 486 \\56K3A 588 487 \\99T9A 224 488 \\56T66 869 489 \\77997 671 490 \\53222 161 491 \\8KKJT 384 492 \\37777 567 493 \\TKTK5 42 494 \\6J622 127 495 \\387Q5 417 496 \\T3A73 360 497 \\28AKA 868 498 \\K26Q5 288 499 \\J6J88 692 500 \\KKKK9 690 501 \\2A5QA 435 502 \\K83T4 158 503 \\QAA3A 104 504 \\T7Q66 914 505 \\A3A6A 270 506 \\J888J 838 507 \\3JTKQ 867 508 \\7KKKK 451 509 \\K7766 824 510 \\Q4Q9Q 620 511 \\65A33 957 512 \\99A9A 781 513 \\A9AAA 344 514 \\44744 935 515 \\6666J 804 516 \\A8QJ9 155 517 \\AQKAA 681 518 \\6K7KJ 853 519 \\A99JA 366 520 \\65JJ5 47 521 \\4TQ8T 769 522 \\66555 457 523 \\TJ226 222 524 \\78777 758 525 \\5K488 999 526 \\Q65T4 362 527 \\4Q738 80 528 \\5JJ55 323 529 \\8Q65A 918 530 \\A5TT5 353 531 \\294J3 471 532 \\33Q44 102 533 \\66668 254 534 \\7663Q 516 535 \\AAAJJ 798 536 \\3344J 10 537 \\85888 507 538 \\68868 144 539 \\588T5 124 540 \\TT4TT 834 541 \\QQ7QK 168 542 \\75555 593 543 \\849KA 446 544 \\9QT7A 165 545 \\5AA7A 697 546 \\J99J9 213 547 \\6834K 5 548 \\TQQQT 292 549 \\7A655 403 550 \\982AQ 143 551 \\A6237 334 552 \\QK5T6 963 553 \\99895 232 554 \\56366 376 555 \\34J35 231 556 \\AAQAQ 150 557 \\78887 485 558 \\QQQQJ 263 559 \\TAQ98 197 560 \\425J5 895 561 \\JQ7QQ 992 562 \\J9JJ9 61 563 \\5888J 665 564 \\6J6K6 496 565 \\78J82 293 566 \\22292 73 567 \\TT2TT 911 568 \\ATAAT 322 569 \\339AA 953 570 \\A7465 413 571 \\AA4AA 283 572 \\QT3TQ 84 573 \\QQA5Q 66 574 \\J472J 784 575 \\T3JTT 131 576 \\333A4 210 577 \\79299 550 578 \\88A8J 594 579 \\J9749 584 580 \\J735K 902 581 \\933JQ 109 582 \\5T926 481 583 \\4T4T4 561 584 \\87TK6 247 585 \\98964 159 586 \\78997 354 587 \\36JT4 29 588 \\59464 771 589 \\2AA5A 33 590 \\77J43 244 591 \\37T7T 448 592 \\23QJ3 925 593 \\K7K5Q 792 594 \\QQQQ9 411 595 \\KK568 278 596 \\49TK7 961 597 \\55TAA 817 598 \\33J4Q 984 599 \\5QJK9 105 600 \\9A9J9 623 601 \\AK62Q 842 602 \\38333 735 603 \\9A8J8 333 604 \\9T243 204 605 \\6K2J3 547 606 \\78JKQ 959 607 \\AA3A9 634 608 \\KJJKT 13 609 \\KJKKJ 921 610 \\99934 310 611 \\4J929 431 612 \\55559 445 613 \\TT62T 355 614 \\32K25 825 615 \\622A6 480 616 \\334Q9 412 617 \\26922 114 618 \\638KJ 900 619 \\364T8 462 620 \\QQJT7 234 621 \\TK586 525 622 \\K342K 816 623 \\TTT99 699 624 \\JT658 315 625 \\36388 24 626 \\2666J 185 627 \\53455 592 628 \\4AJAA 304 629 \\J3QQ8 228 630 \\22J2A 416 631 \\99768 927 632 \\TKJ9A 487 633 \\5A55J 744 634 \\QKQ44 613 635 \\336QA 81 636 \\66622 200 637 \\JTTTK 717 638 \\59ATT 513 639 \\33938 813 640 \\66AKJ 466 641 \\3976Q 941 642 \\8888T 491 643 \\JJK47 836 644 \\99Q7Q 654 645 \\Q896K 633 646 \\Q8JKQ 553 647 \\J6K6K 811 648 \\2T323 750 649 \\KKAKK 952 650 \\Q6JJ4 929 651 \\77J77 993 652 \\9KQJT 989 653 \\44254 857 654 \\4AA5A 514 655 \\TATJA 715 656 \\74422 145 657 \\33332 544 658 \\5T5QT 311 659 \\78JT8 913 660 \\JKKT2 94 661 \\26QK7 71 662 \\444JJ 287 663 \\99979 133 664 \\Q999Q 314 665 \\48888 649 666 \\33T8K 368 667 \\77T57 711 668 \\4T42Q 351 669 \\89Q99 89 670 \\69666 846 671 \\3A33A 890 672 \\8Q8A3 636 673 \\4A888 603 674 \\9TQTA 747 675 \\9AAA9 52 676 \\TJ4TT 267 677 \\J76J7 72 678 \\K773Q 370 679 \\77Q77 329 680 \\636QQ 575 681 \\ATQAA 917 682 \\2743Q 932 683 \\2KKKJ 452 684 \\93929 686 685 \\4ATTA 458 686 \\42222 252 687 \\35225 402 688 \\45JKA 160 689 \\4TAT6 201 690 \\7A278 839 691 \\4A7Q5 543 692 \\Q33T6 641 693 \\JQ99Q 238 694 \\A793A 86 695 \\78575 187 696 \\49T9T 303 697 \\8542K 198 698 \\25A82 786 699 \\77A77 363 700 \\244KK 397 701 \\87877 689 702 \\T6T6T 778 703 \\KKKK4 392 704 \\22T2J 171 705 \\T77A7 174 706 \\99KJK 180 707 \\2444J 761 708 \\QAQQA 508 709 \\3373T 121 710 \\222TT 137 711 \\736T2 8 712 \\4444J 12 713 \\33555 566 714 \\487A4 230 715 \\22626 439 716 \\QQQQ8 336 717 \\5T552 521 718 \\QTQQQ 872 719 \\63836 614 720 \\66695 450 721 \\AKAAA 361 722 \\95A95 111 723 \\644JK 701 724 \\ATAAA 840 725 \\9J99T 35 726 \\3333A 664 727 \\99992 99 728 \\5A5A5 680 729 \\Q7J5J 405 730 \\59999 954 731 \\2KTQ9 255 732 \\6QQ96 149 733 \\37333 67 734 \\QJ6Q3 425 735 \\Q6K29 415 736 \\J7277 126 737 \\AA29Q 220 738 \\AAKJK 831 739 \\27QQ2 986 740 \\AJ367 891 741 \\33292 666 742 \\Q8786 933 743 \\TAJ28 554 744 \\K4448 585 745 \\Q8225 931 746 \\46242 598 747 \\7AT98 693 748 \\78J56 369 749 \\TTTTJ 371 750 \\TKJKK 990 751 \\66767 802 752 \\56956 789 753 \\544K4 275 754 \\46699 215 755 \\26666 710 756 \\AQQQQ 116 757 \\6A858 757 758 \\55757 142 759 \\J2KA4 723 760 \\6229K 906 761 \\6K366 179 762 \\4378K 527 763 \\AA664 832 764 \\72242 499 765 \\2TT2Q 998 766 \\5QQQ5 647 767 \\5858J 856 768 \\555KJ 655 769 \\7788J 524 770 \\36J5J 82 771 \\99666 2 772 \\9AKK3 177 773 \\47447 596 774 \\9266J 572 775 \\4TTQ4 946 776 \\999J9 110 777 \\T74K4 899 778 \\Q27J8 156 779 \\98AK5 754 780 \\3TJ6T 396 781 \\75QK7 517 782 \\K22KJ 741 783 \\9699T 916 784 \\66QAQ 202 785 \\7329Q 32 786 \\89JAT 708 787 \\444Q4 841 788 \\73366 880 789 \\677QK 683 790 \\48J84 394 791 \\2966T 6 792 \\9KT9K 531 793 \\8544T 746 794 \\2222A 934 795 \\T2QKT 615 796 \\8J282 430 797 \\K9K9K 214 798 \\336TJ 904 799 \\9JTJ9 777 800 \\QKAKK 68 801 \\62A66 48 802 \\49499 280 803 \\97967 46 804 \\8T66T 273 805 \\94349 379 806 \\57777 719 807 \\2QT5K 827 808 \\4TTT2 40 809 \\J2252 859 810 \\A3TQA 426 811 \\468JA 611 812 \\57745 662 813 \\424AA 938 814 \\J33AT 309 815 \\99339 610 816 \\872KJ 570 817 \\K2395 571 818 \\77A5Q 996 819 \\JQ7Q6 340 820 \\973J9 776 821 \\J6K92 14 822 \\5J5Q9 191 823 \\Q5555 773 824 \\A7KA7 11 825 \\54545 851 826 \\AJ9A8 968 827 \\QQAJ7 821 828 \\T6JTT 670 829 \\3T2TT 151 830 \\TTTT3 886 831 \\33933 850 832 \\KKKQQ 656 833 \\T2TT2 54 834 \\QA44J 995 835 \\89J27 335 836 \\3742A 212 837 \\T7Q88 260 838 \\TT666 75 839 \\JKQ28 724 840 \\548T3 698 841 \\3883K 148 842 \\39966 864 843 \\69424 320 844 \\4QJ5J 332 845 \\J4297 346 846 \\78A66 605 847 \\82333 809 848 \\4K777 644 849 \\9739T 936 850 \\JJ433 755 851 \\88688 43 852 \\3TJ33 988 853 \\J37K3 628 854 \\3KK3T 583 855 \\A433J 195 856 \\89K46 262 857 \\JKKQK 545 858 \\7AA27 437 859 \\977T8 828 860 \\757Q7 759 861 \\7T7A8 805 862 \\33336 19 863 \\KJKKK 118 864 \\44445 586 865 \\84Q8K 205 866 \\439K3 909 867 \\6J663 762 868 \\33777 975 869 \\9AAQA 564 870 \\JJ8JJ 91 871 \\24555 696 872 \\62644 707 873 \\AA3J5 31 874 \\6T2KQ 135 875 \\24244 34 876 \\3QK3K 560 877 \\9J3T9 787 878 \\7QTA8 705 879 \\A22JA 528 880 \\84844 537 881 \\87667 937 882 \\QJ5K4 90 883 \\2K326 239 884 \\59878 421 885 \\7J377 536 886 \\857K7 350 887 \\2K2A2 704 888 \\39T9T 493 889 \\QKT86 829 890 \\3AQJT 714 891 \\7AAAJ 600 892 \\9QK56 983 893 \\35K33 193 894 \\89888 589 895 \\TQ477 432 896 \\777K7 59 897 \\86AQJ 17 898 \\QQQJ3 407 899 \\68K25 166 900 \\32288 748 901 \\TKTQK 65 902 \\J9K56 530 903 \\AA323 960 904 \\27266 112 905 \\22722 675 906 \\73367 497 907 \\Q7JJ3 16 908 \\444T4 438 909 \\22323 74 910 \\3QQ6K 348 911 \\A68J8 454 912 \\42K64 367 913 \\3AA7J 889 914 \\AT492 398 915 \\AAA6A 673 916 \\2Q9QQ 95 917 \\A7477 815 918 \\4A8KA 444 919 \\6JJ66 893 920 \\84445 429 921 \\7997J 101 922 \\A5A6A 958 923 \\K27A2 486 924 \\4A4J4 327 925 \\464TJ 434 926 \\5554J 766 927 \\KTKT8 801 928 \\573K5 64 929 \\JKK88 522 930 \\A9999 291 931 \\T787T 338 932 \\39648 502 933 \\46464 733 934 \\AQAAA 357 935 \\8TTTT 797 936 \\64444 515 937 \\8588T 53 938 \\AKAKK 617 939 \\8AJ99 888 940 \\3TAAJ 874 941 \\338Q3 694 942 \\TT443 578 943 \\86227 419 944 \\9J9JQ 736 945 \\22522 943 946 \\823J3 866 947 \\24444 519 948 \\A7A7A 207 949 \\5JJ99 36 950 \\K2896 250 951 \\66A5J 129 952 \\JJJJJ 668 953 \\8J548 721 954 \\J8J63 385 955 \\3Q442 79 956 \\8K868 141 957 \\AAA67 767 958 \\T968K 289 959 \\5QJ5K 245 960 \\TKQK5 96 961 \\54774 122 962 \\89666 568 963 \\95596 538 964 \\9K3J4 380 965 \\66665 20 966 \\7759A 209 967 \\6JTA6 702 968 \\29574 88 969 \\AA6A4 181 970 \\Q28T4 152 971 \\777KQ 386 972 \\47888 271 973 \\K8KKQ 738 974 \\J7337 162 975 \\JQA88 820 976 \\QQ4QQ 276 977 \\TKKTT 728 978 \\JTKTK 316 979 \\3J334 684 980 \\9944Q 830 981 \\8485A 753 982 \\JKKJ8 221 983 \\A9QJ6 948 984 \\KJ3KQ 727 985 \\Q5QQQ 695 986 \\Q8QTQ 542 987 \\2QQQ8 119 988 \\JJ55Q 845 989 \\52725 950 990 \\QAJ33 808 991 \\JAA7J 557 992 \\Q22AA 183 993 \\Q8Q8Q 661 994 \\J55JT 410 995 \\KKQJJ 901 996 \\Q5455 539 997 \\AQJJ9 956 998 \\7QJ7T 896 999 \\K5KKJ 994 1000 \\388KK 822 1001 \\2QQ2K 218 1002 \\3J4K3 285 1003 \\256K7 923 1004 \\K2KKA 157 1005 \\QQTKQ 139 1006 \\48TTT 1 1007 \\TTT44 770 1008 \\JJ777 898 1009 \\Q466K 117 1010 \\TQ4QQ 172 1011 \\43333 883 1012 \\855T3 324 1013 \\8T933 645 1014 \\579K9 347 1015 \\A76Q4 729 1016 \\3TTT3 115 1017 \\QJAQA 928 1018 \\65T65 541 1019 \\77A7A 625 1020 \\29J9J 472 1021 \\TKT74 926 1022 \\A934K 643 1023 \\JT533 199 1024 \\TT4AJ 216 1025 \\KKKK6 55 1026 \\6J3K5 676 1027 \\398J3 18 1028 \\778K8 653 1029 \\79773 406 1030 \\25446 606 1031 \\54323 76 1032 \\2T992 601 1033 \\8A888 241 1034 \\9AJQK 509 1035 \\3Q3QK 739 1036 \\KKKK8 667 1037 \\JJ494 590 1038 \\83JKT 203 1039 \\J9957 751 1040 \\JJAQQ 296 1041 \\4835Q 301 1042 \\333T3 722 1043 \\KKK2K 535 1044 \\8Q2QJ 378 1045 \\5J396 652 1046 \\TQ7J8 624 1047 \\5JJ22 447 1048 \\TT777 62 1049 \\TTJT7 60 1050 \\TA2QT 626 1051 \\T3Q79 791 1052 \\K6QQ8 294 1053 \\28K52 967 1054 \\6K374 663 1055 \\7877A 495 1056 \\24226 352 1057 \\88KAK 907 1058 \\J242T 546 1059 \\K77JT 465 1060 \\Q77Q5 863 1061 \\TQTQT 284 1062 \\49K62 26 1063 \\6TTT8 569 1064 \\Q77QQ 779 1065 \\99T6T 70 1066 \\K4AKA 130 1067 \\J5TT5 979 1068 \\KQJT8 175 1069 \\96K99 648 1070 \\A56J3 422 1071 \\53585 58 1072 \\6QJTQ 794 1073 \\9QJ77 388 1074 \\88944 235 1075 \\55A2Q 780 1076 \\9Q992 297 1077 \\96699 660 1078 \\682QJ 865 1079 \\6TTTK 799 1080 \\Q47QQ 358 1081 \\2929K 920 1082 \\J5535 752 1083 \\T3383 631 1084 \\6737Q 894 1085 \\9QT72 440 1086 \\844J9 470 1087 \\6AA6A 211 1088 \\5AA5A 981 1089 \\8KJ88 49 1090 \\55855 93 1091 \\5J495 261 1092 \\8QQQ5 629 1093 \\J4493 860 1094 \\ATTKA 818 1095 \\77264 877 1096 \\55K58 365 1097 \\QQ666 106 1098 \\238T6 459 1099 \\77QQK 848 1100 \\5757A 233 1101 \\84AT3 951 1102 \\TT7TT 642 1103 \\72236 345 1104 \\TQ333 760 1105 \\77744 720 1106 \\QQ4QK 478 1107 \\Q82A2 506 1108 \\AJ3AA 942 1109 \\JJ958 526 1110 \\AJ4A4 341 1111 \\A26J8 742 1112 \\5TK28 871 1113 \\865J3 136 1114 \\66A6A 556 1115 \\Q4A55 552 1116 \\K8429 37 1117 \\7QQ9Q 442 1118 \\323J5 375 1119 \\6J456 608 1120 \\73Q6A 424 1121 \\8QQ68 976 1122 \\J9KA7 286 1123 \\Q5Q5J 418 1124 \\74472 154 1125 \\KKQT9 637 1126 \\Q8Q88 574 1127 \\7543A 190 1128 \\KA87J 456 1129 \\2877K 635 1130 \\J76A4 330 1131 \\83Q69 128 1132 \\A88A8 377 1133 \\9999K 630 1134 \\J698Q 878 1135 \\67777 243 1136 \\A232A 844 1137 \\8K66J 835 1138 \\QJ36A 420 1139 \\22QQ6 782 1140 \\3339K 677 1141 \\K72QK 563 1142 \\86777 307 1143 \\323JJ 972 1144 \\955KQ 826 1145 \\33443 259 1146 \\88Q88 897 1147 \\85778 939 1148 \\7T268 356 1149 \\5T85J 861 1150 \\833J8 387 1151 \\4AA4A 7 1152 \\QTQJJ 725 1153 \\TT36T 395 1154 \\6KJAJ 520 1155 \\5J525 473 1156 \\T88JT 182 1157 \\44T66 173 1158 \\Q75A8 251 1159 \\K777A 985 1160 \\88T33 905 1161 \\99575 949 1162 \\62222 186 1163 \\22923 492 1164 \\J4Q42 706 1165 \\AA872 500 1166 \\JA895 153 1167 \\TT562 295 1168 \\34434 854 1169 \\2222J 881 1170 \\69K46 882 1171 \\TK74J 274 1172 \\T46TT 548 1173 \\K54KJ 164 1174 \\9999Q 184 1175 \\3QTJJ 400 1176 \\8QK59 41 1177 \\994Q9 1000 1178 \\347J4 581 1179 \\Q7289 138 1180 ;