summaryrefslogtreecommitdiff
path: root/problem54.ijs
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'