是否有正则表达式来计算直接扑克手牌?
我使用字符串来表示排序后的卡片,例如:
AAAAK#sssss = 4 aces and a king, all of spades.
A2345#ddddd = straight flush, all of diamonds.
在 Java 中,我使用这些正则表达式:
regexPair = Pattern.compile(".*(\\w)\\1.*#.*");
regexTwoPair = Pattern.compile(".*(\\w)\\1.*(\\w)\\2.*#.*");
regexThree = Pattern.compile(".*(\\w)\\1\\1.*#.*");
regexFour = Pattern.compile(".*(\\w)\\1{3}.*#.*");
regexFullHouse = Pattern.compile("((\\w)\\2\\2(\\w)\\3|(\\w)\\4(\\w)\\5\\5)#.*");
regexFlush = Pattern.compile(".*#(\\w)\\1{4}");
如何使用正则表达式计算直接(序列)值?
EDIT
我提出另一个问题来解决同样的问题,但是使用 char 的 ascii 值,
正则表达式要短。细节here.
Thanks!
我必须承认,正则表达式并不是我想到的第一个执行此操作的工具。我几乎可以保证,任何能够对未排序的手执行此操作的 RE 都将比等效的程序代码更加丑陋且可读性差得多。
假设卡片按面值排序(并且它们似乎否则您列出的正则表达式也不起作用),并且您must使用正则表达式,你could使用类似的构造
2345A|23456|34567|...|9TJQK|TJQKA
检测手的面值部分。
事实上,从我收集到的here对于“标准”牌,应按优先级递减的顺序检查以下内容:
Royal/straight flush: "(2345A|23456|34567|...|9TJQK|TJQKA)#(\\w)\\1{4}"
Four of a kind: ".*(\\w)\\1{3}.*#.*"
Full house: "((\\w)\\2\\2(\\w)\\3|(\\w)\\4(\\w)\\5\\5)#.*"
Flush: ".*#(\\w)\\1{4}"
Straight: "(2345A|23456|34567|...|9TJQK|TJQKA)#.*"
Three of a kind: ".*(\\w)\\1\\1.*#.*"
Two pair: ".*(\\w)\\1.*(\\w)\\2.*#.*"
One pair: ".*(\\w)\\1.*#.*"
High card: (none)
基本上,这些与您的相同,只是我添加了皇家/同花顺和顺子。如果你按顺序检查它们,你应该从这手牌中得到最好的分数。高牌没有正则表达式,因为此时,它是您可以获得的唯一分数。
我还改变了钢轮(环绕式)直道A2345
to 2345A
因为它们会以这种方式排序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)