aboutsummaryrefslogtreecommitdiff
path: root/day7.zig
blob: 0419cef23663d05ba60c7d78716db8440bd05906 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
const std = @import("std");

const Card = enum(u8) {
    @"2" = 0,
    @"3", 
    @"4", 
    @"5", 
    @"6", 
    @"7", 
    @"8", 
    @"9", 
    T, 
    J, 
    Q, 
    K, 
    A,

    fn parse(ch: u8) !Card {
        const ei = @typeInfo(Card).Enum;
        inline for (ei.fields) |field| {
            if (ch == field.name[0]) {
                return @enumFromInt(field.value);
            }
        } else {
            return error.InvalidCard;
        }
    }
};

const HandType = enum(u8) {
    HighCard = 0,
    OnePair,
    TwoPair,
    ThreeOAK,
    FullHouse,
    FourOAK,
    FiveOAK,
};

const Hand = struct {
    handtype: HandType,
    cards: [5]Card,

    fn cmp(_: void, lhs: Hand, rhs: Hand) bool {
        if (@intFromEnum(lhs.handtype) < @intFromEnum(rhs.handtype)) return true;
        if (@intFromEnum(lhs.handtype) > @intFromEnum(rhs.handtype)) return false;
        for (lhs.cards, rhs.cards) |lc,rc| {
            if (lc != rc) {
                return @intFromEnum(lc) < @intFromEnum(rc);
            }
        }
        return false;
    }

    fn parse(input: []const u8) !Hand {
        if (input.len != 5) return error.InvalidHand;
        var hand: Hand = undefined;
        for (input, 0..) |ch, ix| {
            hand.cards[ix] = try Card.parse(ch);
        }
        const ei = @typeInfo(Card).Enum;
        var cts = [_]u8{0}**ei.fields.len;
        for (hand.cards) |card| {
            cts[@intFromEnum(card)] += 1;
        }
        std.mem.sort(u8, &cts, {}, Hand.u8cmprev);
        hand.handtype = switch (cts[0]) {
            5 => .FiveOAK,
            4 => .FourOAK,
            3 => switch (cts[1]) {
                2 => .FullHouse,
                else => .ThreeOAK,
            },
            2 => switch (cts[1]) {
                2 => .TwoPair,
                else => .OnePair,
            },
            else => .HighCard,
        };
        return hand;
    }

    fn u8cmprev(_: void, lhs: u8, rhs: u8) bool {
        return lhs > rhs;
    }
};

const Turn = struct {
    hand: Hand,
    bid: u64,

    fn parse(input: []const u8) !Turn {
        var toks = std.mem.tokenize(u8, input, " ");
        const hand_str = toks.next() orelse return error.Foo;
        const bid_str = toks.next() orelse return error.Bar;
        return .{
            .hand = try Hand.parse(hand_str),
            .bid = try std.fmt.parseInt(u64, bid_str, 10),
        };
    }

    fn cmp(_: void, lhs: Turn, rhs: Turn) bool {
        return Hand.cmp({}, lhs.hand, rhs.hand);
    }
};

fn solve_pt1(a: std.mem.Allocator, input: []const u8) !u64 {
    var spl = std.mem.split(u8, input, "\n");
    var al = std.ArrayList(Turn).init(a);
    defer al.deinit();
    while (spl.next()) |line| {
        try al.append(try Turn.parse(line));
    }
    const turns = try al.toOwnedSlice();
    defer a.free(turns);
    std.mem.sort(Turn, turns, {}, Turn.cmp);
    var sum: u64 = 0;
    for (turns, 1..) |turn, rank| {
        //std.log.warn("turn {any} rank {}", .{turn, rank});
        sum += turn.bid * rank;
    }
    return sum;
}

test "pt1" {
    try std.testing.expectEqual(@as(u64,6440), try solve_pt1(std.testing.allocator, test_input));
}

pub fn main() !void {
    try std.fmt.format(std.io.getStdOut().writer(), "day7 pt1: {}\n", .{try solve_pt1(std.heap.page_allocator, puzzle_input)});
}


const test_input = 
\\32T3K 765
\\T55J5 684
\\KK677 28
\\KTJJT 220
\\QQQJA 483
;

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