一道经典试题的Python实现
2017-01-20 16:56
351 查看
一手牌是五张,根据牌的花色和分值得出这一手的分值,分值最高的那一手牌就是一局的赢家。
一手牌的类型和分值级别如下:
0- High Card(比如黑桃3,方块6,红桃9,梅花J,黑桃Q)
1- One Pair(比如3,3,6,8,J)
2- Two Pair(比如3,3,5,5,7)
3- Three of a Kind(比如3,3,3,5,8,其中的3,3,3即为Three of a Kind)
4- Straight(顺子,比如2,3,4,5,6)
5- Flush(同花,比如全部为红桃)
6- Full House (OnePair+Three kind,比如2,2,4,4,4)
7- Four of a Kind(比如4,4,4,4)
8- Straight Flush (Straight and Flush,同花顺,比如全部为红桃,2,3,4,5,6就是同花顺)
特别说明:
1、 限定只有一副牌
2、 A,2,3,4,5也是Straight。
3、 如果两手牌的分值一样,那么也要比较出大小。比如两个同花顺,需要比较两手牌中的最小分值,大者为赢,比如2,3,4,5,6和4,5,6,7,8,显然4,5,6,7,8是赢家。
4、 花色之间无大小区别。
5、 花色用下列字母表示S:方块,C:梅花,H:红桃,D:黑桃。
6、 10用“T”表示。
测试用例说明:
测试用例需要满足下列条件:
1) 构造测试用例容易;
2) 输入采用如下格式
一手牌:”2S 5H 7C 8D 9S”
多手牌:”2S 5H 7C 8D 9S | 2S 2C 4H 5D 7C ”
3) 输出采用如下格式:
一手牌:”2S 5H 7C 8D 9S”
多手牌:”2S 5H 7C 8D 9S | 2H 2C 7H 8D 9C “
测试用例举例:
1、TestCase1
输入:
“2S 5H 7C 8D 9S | 2S 2C 4H 5D 7C | 2S 2C 4H 4D 7C | 2S 2D 2C 4H 6S | 2S 4S 5S 7S 8S | 2S 3D 4C 5D 6H | 2S 2D 2C 3H 3S | 2S 2D 2C 2H 6S | 2S 3S 4S 5S 6S”
输出:”2S 3S 4S 5S 6S”
2、TestCase2
输入:
“2S 3S 4S 5S AS | 3S 4S 5S 6S 7S”
输出:”3S 4S 5S 6S 7S”
3、TestCase3
输入:
“2S 2C 4H 4D 7C | 2S 2C 6H 6D 7C”
输出:”2S 2C 6H 6D 7C”
4、TestCase4
输入:
“2S 2C 6H 6D 8C | 2S 2C 6H 6D 9C”
输出:”2S 2C 6H 6D 9C”
编程说明:
1、 编程语言不限C/C++/JAVA/Python均可。
2、 代码提供的API接口函数统一命名为poker。输入和输出,见测试用例说明部分。。
3、 运行操作系统:Windows。
一手牌的类型和分值级别如下:
0- High Card(比如黑桃3,方块6,红桃9,梅花J,黑桃Q)
1- One Pair(比如3,3,6,8,J)
2- Two Pair(比如3,3,5,5,7)
3- Three of a Kind(比如3,3,3,5,8,其中的3,3,3即为Three of a Kind)
4- Straight(顺子,比如2,3,4,5,6)
5- Flush(同花,比如全部为红桃)
6- Full House (OnePair+Three kind,比如2,2,4,4,4)
7- Four of a Kind(比如4,4,4,4)
8- Straight Flush (Straight and Flush,同花顺,比如全部为红桃,2,3,4,5,6就是同花顺)
特别说明:
1、 限定只有一副牌
2、 A,2,3,4,5也是Straight。
3、 如果两手牌的分值一样,那么也要比较出大小。比如两个同花顺,需要比较两手牌中的最小分值,大者为赢,比如2,3,4,5,6和4,5,6,7,8,显然4,5,6,7,8是赢家。
4、 花色之间无大小区别。
5、 花色用下列字母表示S:方块,C:梅花,H:红桃,D:黑桃。
6、 10用“T”表示。
测试用例说明:
测试用例需要满足下列条件:
1) 构造测试用例容易;
2) 输入采用如下格式
一手牌:”2S 5H 7C 8D 9S”
多手牌:”2S 5H 7C 8D 9S | 2S 2C 4H 5D 7C ”
3) 输出采用如下格式:
一手牌:”2S 5H 7C 8D 9S”
多手牌:”2S 5H 7C 8D 9S | 2H 2C 7H 8D 9C “
测试用例举例:
1、TestCase1
输入:
“2S 5H 7C 8D 9S | 2S 2C 4H 5D 7C | 2S 2C 4H 4D 7C | 2S 2D 2C 4H 6S | 2S 4S 5S 7S 8S | 2S 3D 4C 5D 6H | 2S 2D 2C 3H 3S | 2S 2D 2C 2H 6S | 2S 3S 4S 5S 6S”
输出:”2S 3S 4S 5S 6S”
2、TestCase2
输入:
“2S 3S 4S 5S AS | 3S 4S 5S 6S 7S”
输出:”3S 4S 5S 6S 7S”
3、TestCase3
输入:
“2S 2C 4H 4D 7C | 2S 2C 6H 6D 7C”
输出:”2S 2C 6H 6D 7C”
4、TestCase4
输入:
“2S 2C 6H 6D 8C | 2S 2C 6H 6D 9C”
输出:”2S 2C 6H 6D 9C”
编程说明:
1、 编程语言不限C/C++/JAVA/Python均可。
2、 代码提供的API接口函数统一命名为poker。输入和输出,见测试用例说明部分。。
3、 运行操作系统:Windows。
Rank_Table = {(4,1):7, (3,2):6, (3,1,1):3, (2,2,1):2, (2,1,1,1):1, (1,1,1,1,1):0} def poker(hands): return max(hands, key = hand_rank) def hand_rank(hand): crs = group(sorted(["--23456789TJQKA".index(r) for r, s in hand], reverse=True)) cnt, ranks = zip(*crs) if ranks == (14, 5, 4, 3, 2): ranks = (5, 4, 3, 2, 1) s = straight(ranks) f = flush(hand) return (max(Rank_Table[cnt], s*4 + f*5), ranks) def group(hand): return sorted(set([(hand.count(x), x) for x in hand]), reverse=True) def straight(ranks): return len(set(ranks)) == 5 and (max(ranks) - min(ranks)) == 4 def flush(hand): suits = [s for r, s in hand] return len(set(suits)) == 1 def test(): nn = "2S 5H 7C 8D 9S".split() p1 = "2S 2C 4H 5D 7C".split() p2 = "2S 2C 4H 4D 7C".split() k3 = "2S 2D 2C 4H 6S".split() fl = "2S 4S 5S 7S 8S".split() st = "2S 3D 4C 5D 6H".split() k3p = "2S 2D 2C 3H 3S".split() k4 = "2S 2D 2C 2H 6S".split() sf = "2S 3S 4S 5S 6S".split() hands = [nn, p1, p2, k3, fl, st, k3p, k4,sf] print(poker(hands))
相关文章推荐
- [初学Python每日一练] 100个经典C语言程序Python实现(1)
- 一道经典面试题“I love china”的实现
- 机器学习经典算法详解及Python实现–K近邻(KNN)算法
- 一道经典面试题“I love china”的实现
- 机器学习经典算法详解及Python实现--聚类及K均值、二分K-均值聚类算法
- 一道表达式的经典试题
- 机器学习经典算法详解及Python实现--CART分类决策树、回归树和模型树
- 机器学习经典算法详解及Python实现--决策树(Decision Tree)
- python实现经典排序算法
- Python实现的朴素贝叶斯算法经典示例【测试可用】
- 一道经典面试题“I love china”的实现
- 经典算法问题:“this is a test” 逆序输出为“test a is this”.使用Python实现
- 一道经典面试题,atoi函数的实现
- 机器学习经典算法详解及Python实现--K近邻(KNN)算法
- 机器学习经典算法详解及Python实现--元算法、AdaBoost
- 一道表达式的经典试题
- [重现经典算法]用Python实现CSP的backTrack与AC-3算法
- Python:经典排序算法实现
- 机器学习经典算法详解及Python实现--线性回归(Linear Regression)算法
- Python使用matplotlib和pandas实现的画图操作【经典示例】