blob: 1ea9083477739a442aecfa96d01bae9cde9b4592 (
plain) (
blame)
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
|
trans =: {{(0,~2+i.17){~'23456789TJQKAHDSC'i.y}}
split =: {{<"1 y$~(x%~#y),x}}
read =: {{2 split 5 split 2 split (#~0~:]) trans fread y}}
score =: monad define
'values suits' =. |:>>y
order =. \:values
suits =. order{suits
values =. order{values
'counts pairvals' =. |:\:~{{(#y),{.y}}/.~values
usuits =. ~.suits NB. unique suits
consecs =. 5<&|.\2+i.13
if. (1=#usuits)*.values-:10 11 12 13 14 do.
type =. 10 NB. Royal flush
elseif. (1=#usuits)*.(<values) e. consecs do.
type =. 9 NB. Straight flush
elseif. counts -: 4 1 do.
type =. 8,{.pairvals NB. Four of a kind
elseif. counts -: 3 2 do.
type =. 7,2{.pairvals NB. Full house
elseif. 1=#usuits do.
type =. 6 NB. Flush
elseif. (<values) e. consecs do.
type =. 5 NB. Straight
elseif. counts -: 3 1 1 do.
type =. 4,{.pairvals NB. Three of a kind
elseif. counts -: 2 2 1 do.
type =. 3,\:~2{.pairvals NB. Two pairs
elseif. counts -: 2 1 1 1 do.
type =. 2,{.pairvals NB. One pair
else.
type =. 1 NB. High card
end.
type,values
)
winner =: {{{.\:score"0>y}}
problem54 =: +/0=winner"0 read 'p054_poker.txt'
|