aoc2023

Advent of Code 2023
Log | Files | Refs | README

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 ;