summaryrefslogtreecommitdiff
path: root/problem54.ijs
diff options
context:
space:
mode:
authorPeter Mikkelsen <petermikkelsen10@gmail.com>2022-06-28 01:11:58 +0200
committerPeter Mikkelsen <petermikkelsen10@gmail.com>2022-06-28 01:11:58 +0200
commit115efe92ddd63a31332ca740d76eaf889a9c79ed (patch)
tree133e16ac8cb9a25e6afe68d5b3e7208c620c2e93 /problem54.ijs
parent767c8d9bea824b05fd24549e7dce6c738c90aaab (diff)
problem 54
Diffstat (limited to 'problem54.ijs')
-rw-r--r--problem54.ijs41
1 files changed, 41 insertions, 0 deletions
diff --git a/problem54.ijs b/problem54.ijs
new file mode 100644
index 0000000..1ea9083
--- /dev/null
+++ b/problem54.ijs
@@ -0,0 +1,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' \ No newline at end of file