File Coverage

blib/lib/Poker/Score/Chinese.pm
Criterion Covered Total %
statement 4 6 66.6
branch n/a
condition n/a
subroutine 2 2 100.0
pod n/a
total 6 8 75.0


line stmt bran cond sub pod time code
1             package Poker::Score::Chinese;
2 1     1   1822 use Moo;
  1         2  
  1         6  
3 1     1   642 use Algorithm::Combinatorics qw(combinations);
  0            
  0            
4              
5             =head1 NAME
6              
7             Poker::Score::Chinese - Identify and score Chinese poker hand.
8              
9             =head1 VERSION
10              
11             Version 0.01
12              
13             =cut
14              
15             our $VERSION = '0.01';
16              
17             =head1 INTRODUCTION
18              
19             Three card scoring system used in Chinese poker.
20              
21             =head1 SYNOPSIS
22              
23             See Poker::Score for code example.
24              
25             =cut
26              
27              
28             extends 'Poker::Score';
29              
30             sub _build_hands {}
31              
32             sub stringify_cards {
33             my ( $self, $cards ) = @_;
34             my $flat = join( '',
35             sort { $b <=> $a }
36             map { sprintf( "%02d", $self->rank_val( $_->rank ) ) } @$cards );
37             return $flat;
38             }
39              
40             sub _build_hand_lookup {
41             my $self = shift;
42             $self->_hand_lookup(
43              
44             {
45             '040302' => 0.82,
46             '050302' => 0.83,
47             '050402' => 0.84,
48             '050403' => 0.85,
49             '060302' => 0.86,
50             '060402' => 0.87,
51             '060403' => 0.88,
52             '060502' => 0.89,
53             '060503' => 0.9,
54             '060504' => 0.91,
55             '070302' => 0.92,
56             '070402' => 0.93,
57             '070403' => 0.94,
58             '070502' => 0.95,
59             '070503' => 0.96,
60             '070504' => 0.97,
61             '070602' => 0.98,
62             '070603' => 0.99,
63             '070604' => 1,
64             '070605' => 2,
65             '080302' => 3.95,
66             '080402' => 3.96,
67             '080403' => 3.97,
68             '080502' => 3.98,
69             '080503' => 3.99,
70             '080504' => 4,
71             '080602' => 4.98,
72             '080603' => 4.99,
73             '080604' => 5,
74             '080605' => 6,
75             '080702' => 8.98,
76             '080703' => 8.99,
77             '080704' => 9,
78             '080705' => 10,
79             '080706' => 13,
80             '090302' => 17.95,
81             '090402' => 17.96,
82             '090403' => 17.97,
83             '090502' => 17.98,
84             '090503' => 17.99,
85             '090504' => 18,
86             '090602' => 18.98,
87             '090603' => 18.99,
88             '090604' => 19,
89             '090605' => 20,
90             '090702' => 22.98,
91             '090703' => 22.99,
92             '090704' => 23,
93             '090705' => 24,
94             '090706' => 27,
95             '090802' => 32.98,
96             '090803' => 32.99,
97             '090804' => 33,
98             '090805' => 34,
99             '090806' => 37,
100             '090807' => 43,
101             '100302' => 51.95,
102             '100402' => 51.96,
103             '100403' => 51.97,
104             '100502' => 51.98,
105             '100503' => 51.99,
106             '100504' => 52,
107             '100602' => 52.98,
108             '100603' => 52.99,
109             '100604' => 53,
110             '100605' => 54,
111             '100702' => 56.98,
112             '100703' => 56.99,
113             '100704' => 57,
114             '100705' => 58,
115             '100706' => 61,
116             '100802' => 66.98,
117             '100803' => 66.99,
118             '100804' => 67,
119             '100805' => 68,
120             '100806' => 71,
121             '100807' => 77,
122             '100902' => 86.98,
123             '100903' => 86.99,
124             '100904' => 87,
125             '100905' => 88,
126             '100906' => 91,
127             '100907' => 97,
128             '100908' => 107,
129             '110402' => 120.96,
130             '110403' => 120.97,
131             '110502' => 120.98,
132             '110503' => 120.99,
133             '110504' => 121,
134             '110602' => 121.98,
135             '110603' => 121.99,
136             '110604' => 122,
137             '110605' => 123,
138             '110702' => 125.98,
139             '110703' => 125.99,
140             '110704' => 126,
141             '110705' => 127,
142             '110302' => 129.95,
143             '110706' => 130,
144             '110802' => 135.98,
145             '110803' => 135.99,
146             '110804' => 136,
147             '110805' => 137,
148             '110806' => 140,
149             '110807' => 146,
150             '110904' => 156,
151             '110902' => 156.98,
152             '110903' => 156.99,
153             '110905' => 157,
154             '110906' => 160,
155             '110907' => 166,
156             '110908' => 176,
157             '111002' => 190.98,
158             '111003' => 190.99,
159             '111004' => 191,
160             '111005' => 192,
161             '111006' => 195,
162             '111007' => 201,
163             '111008' => 211,
164             '111009' => 226,
165             '120302' => 245.95,
166             '120402' => 245.96,
167             '120403' => 245.97,
168             '120502' => 245.98,
169             '120503' => 245.99,
170             '120504' => 246,
171             '120602' => 246.98,
172             '120603' => 246.99,
173             '120604' => 247,
174             '120605' => 248,
175             '120702' => 250.98,
176             '120703' => 250.99,
177             '120704' => 251,
178             '120705' => 252,
179             '120706' => 255,
180             '120802' => 260.98,
181             '120803' => 260.99,
182             '120804' => 261,
183             '120805' => 262,
184             '120806' => 265,
185             '120807' => 271,
186             '120902' => 280.98,
187             '120903' => 280.99,
188             '120904' => 281,
189             '120905' => 282,
190             '120906' => 285,
191             '120907' => 291,
192             '120908' => 301,
193             '121002' => 315.98,
194             '121003' => 315.99,
195             '121004' => 316,
196             '121005' => 317,
197             '121006' => 320,
198             '121007' => 326,
199             '121008' => 336,
200             '121009' => 351,
201             '121102' => 371.98,
202             '121103' => 371.99,
203             '121104' => 372,
204             '121105' => 373,
205             '121106' => 376,
206             '121107' => 382,
207             '121108' => 392,
208             '121109' => 407,
209             '121110' => 428,
210             '130302' => 454.95,
211             '130402' => 454.96,
212             '130403' => 454.97,
213             '130502' => 454.98,
214             '130503' => 454.99,
215             '130504' => 455,
216             '130602' => 455.98,
217             '130603' => 455.99,
218             '130604' => 456,
219             '130605' => 457,
220             '130702' => 459.98,
221             '130703' => 459.99,
222             '130704' => 460,
223             '130705' => 461,
224             '130706' => 464,
225             '130802' => 469.98,
226             '130803' => 469.99,
227             '130804' => 470,
228             '130805' => 471,
229             '130806' => 474,
230             '130807' => 480,
231             '130902' => 489.98,
232             '130903' => 489.99,
233             '130904' => 490,
234             '130905' => 491,
235             '130906' => 494,
236             '130907' => 500,
237             '130908' => 510,
238             '131002' => 524.98,
239             '131003' => 524.99,
240             '131004' => 525,
241             '131005' => 526,
242             '131006' => 529,
243             '131007' => 535,
244             '131008' => 545,
245             '131009' => 560,
246             '131102' => 580.98,
247             '131103' => 580.99,
248             '131104' => 581,
249             '131105' => 582,
250             '131106' => 585,
251             '131107' => 591,
252             '131108' => 601,
253             '131109' => 616,
254             '131110' => 637,
255             '131203' => 664.99,
256             '131202' => 664.99,
257             '131204' => 665,
258             '131205' => 666,
259             '131206' => 669,
260             '131207' => 675,
261             '131208' => 685,
262             '131209' => 700,
263             '131210' => 721,
264             '131211' => 749,
265             '140503' => 783.99,
266             '140603' => 783.99,
267             '140403' => 783.99,
268             '140602' => 783.99,
269             '140302' => 783.99,
270             '140502' => 783.99,
271             '140504' => 783.99,
272             '140402' => 783.99,
273             '140604' => 784,
274             '140605' => 785,
275             '140702' => 787.98,
276             '140703' => 787.99,
277             '140704' => 788,
278             '140705' => 789,
279             '140706' => 792,
280             '140802' => 797.98,
281             '140803' => 797.99,
282             '140804' => 798,
283             '140805' => 799,
284             '140806' => 802,
285             '140807' => 808,
286             '140902' => 817.98,
287             '140903' => 817.99,
288             '140904' => 818,
289             '140905' => 819,
290             '140906' => 822,
291             '140907' => 828,
292             '140908' => 838,
293             '141002' => 852.98,
294             '141003' => 852.99,
295             '141004' => 853,
296             '141005' => 854,
297             '141006' => 857,
298             '141007' => 863,
299             '141008' => 873,
300             '141009' => 888,
301             '141102' => 908.98,
302             '141103' => 908.99,
303             '141104' => 909,
304             '141105' => 910,
305             '141106' => 913,
306             '141107' => 919,
307             '141108' => 929,
308             '141109' => 944,
309             '141110' => 965,
310             '141202' => 992.98,
311             '141203' => 992.99,
312             '141204' => 993,
313             '141205' => 994,
314             '141206' => 997,
315             '141207' => 1003,
316             '141208' => 1013,
317             '141209' => 1028,
318             '141210' => 1049,
319             '141211' => 1077,
320             '141302' => 1112.98,
321             '141303' => 1112.99,
322             '141304' => 1113,
323             '141305' => 1114,
324             '141306' => 1117,
325             '141307' => 1123,
326             '141308' => 1133,
327             '141309' => 1148,
328             '141310' => 1169,
329             '141311' => 1197,
330             '141312' => 1233,
331             '030202' => 1276.98,
332             '040202' => 1276.99,
333             '050202' => 1277,
334             '060202' => 1278,
335             '070202' => 1281,
336             '080202' => 1287,
337             '090202' => 1297,
338             '100202' => 1312,
339             '110202' => 1333,
340             '120202' => 1361,
341             '130202' => 1397,
342             '140202' => 1442,
343             '030302' => 1496.98,
344             '040303' => 1496.99,
345             '050303' => 1497,
346             '060303' => 1498,
347             '070303' => 1501,
348             '080303' => 1507,
349             '090303' => 1517,
350             '100303' => 1532,
351             '110303' => 1553,
352             '120303' => 1581,
353             '130303' => 1617,
354             '140303' => 1662,
355             '040402' => 1716.98,
356             '040403' => 1716.98,
357             '050404' => 1717,
358             '060404' => 1718,
359             '070404' => 1721,
360             '080404' => 1727,
361             '090404' => 1737,
362             '100404' => 1752,
363             '110404' => 1773,
364             '120404' => 1801,
365             '130404' => 1837,
366             '140404' => 1882,
367             '050502' => 1936.98,
368             '050503' => 1936.99,
369             '050504' => 1937,
370             '060505' => 1938,
371             '070505' => 1941,
372             '080505' => 1947,
373             '090505' => 1957,
374             '100505' => 1972,
375             '110505' => 1993,
376             '120505' => 2021,
377             '130505' => 2057,
378             '140505' => 2102,
379             '060602' => 2156.98,
380             '060603' => 2156.99,
381             '060604' => 2157,
382             '060605' => 2158,
383             '070606' => 2161,
384             '080606' => 2167,
385             '090606' => 2177,
386             '100606' => 2192,
387             '110606' => 2213,
388             '120606' => 2241,
389             '130606' => 2277,
390             '140606' => 2322,
391             '070702' => 2376.99,
392             '070703' => 2376.99,
393             '070704' => 2377,
394             '070705' => 2378,
395             '070706' => 2381,
396             '080707' => 2387,
397             '090707' => 2397,
398             '100707' => 2412,
399             '110707' => 2433,
400             '120707' => 2461,
401             '130707' => 2497,
402             '140707' => 2542,
403             '080802' => 2596.98,
404             '080803' => 2596.99,
405             '080804' => 2597,
406             '080805' => 2598,
407             '080806' => 2601,
408             '080807' => 2607,
409             '090808' => 2617,
410             '100808' => 2632,
411             '110808' => 2653,
412             '120808' => 2681,
413             '130808' => 2717,
414             '140808' => 2762,
415             '090902' => 2816.98,
416             '090903' => 2816.99,
417             '090904' => 2817,
418             '090905' => 2818,
419             '090906' => 2821,
420             '090907' => 2827,
421             '090908' => 2837,
422             '100909' => 2852,
423             '110909' => 2873,
424             '120909' => 2901,
425             '130909' => 2937,
426             '140909' => 2982,
427             '101002' => 3036.98,
428             '101003' => 3036.99,
429             '101004' => 3037,
430             '101005' => 3038,
431             '101006' => 3041,
432             '101007' => 3047,
433             '101008' => 3057,
434             '101009' => 3072,
435             '111010' => 3093,
436             '121010' => 3121,
437             '131010' => 3157,
438             '141010' => 3202,
439             '111102' => 3256.98,
440             '111103' => 3256.99,
441             '111104' => 3257,
442             '111105' => 3258,
443             '111106' => 3261,
444             '111107' => 3267,
445             '111108' => 3277,
446             '111109' => 3292,
447             '111110' => 3313,
448             '121111' => 3341,
449             '131111' => 3377,
450             '141111' => 3422,
451             '121202' => 3476.98,
452             '121203' => 3476.99,
453             '121204' => 3477,
454             '121205' => 3478,
455             '121206' => 3481,
456             '121207' => 3487,
457             '121208' => 3497,
458             '121209' => 3512,
459             '121210' => 3533,
460             '121211' => 3561,
461             '131212' => 3597,
462             '141212' => 3642,
463             '131302' => 3696.98,
464             '131303' => 3696.99,
465             '131304' => 3697,
466             '131305' => 3698,
467             '131306' => 3701,
468             '131307' => 3707,
469             '131308' => 3717,
470             '131309' => 3732,
471             '131310' => 3753,
472             '131311' => 3781,
473             '131312' => 3817,
474             '141313' => 3862,
475             '141402' => 3916.98,
476             '141403' => 3916.99,
477             '141404' => 3917,
478             '141405' => 3918,
479             '141406' => 3921,
480             '141407' => 3927,
481             '141408' => 3937,
482             '141409' => 3952,
483             '141410' => 3973,
484             '141411' => 4001,
485             '141412' => 4037,
486             '141413' => 4082,
487             '020202' => 4995,
488             '030303' => 5061,
489             '040404' => 5127,
490             '050505' => 5193,
491             '060606' => 5259,
492             '070707' => 5325,
493             '080808' => 5391,
494             '090909' => 5457,
495             '101010' => 5523,
496             '111111' => 5589,
497             '121212' => 5655,
498             '131313' => 5721,
499             '141414' => 5787,
500             }
501             );
502             }
503              
504             =head1 AUTHOR
505              
506             Nathaniel Graham, C<< >>
507              
508             =head1 LICENSE AND COPYRIGHT
509              
510             Copyright 2016 Nathaniel Graham.
511              
512             This program is free software; you can redistribute it and/or modify it
513             under the terms of the the Artistic License (2.0). You may obtain a
514             copy of the full license at:
515              
516             L
517              
518             =cut
519              
520             1;