麻将是一款在亚洲非常受欢迎的瓷砖游戏。它通常由四个玩家玩,并且游戏的目标是成为第一个使用磁砖完成有效手牌的人。在麻将中,有三副牌服和荣誉牌-对于这一挑战,我们将仅考虑使用来自单个牌服的牌形成的手。
磁贴从编号1
到9
,每个磁贴正好有四个副本。有效手牌由四组组成,每组三组,每组一对,共14张。
三个一组可以是:
- 一个三元组,三个相同的图块(例如
444
),或 - 三个连续图块的序列(例如
123
,678
但不是357
)。序列不换行(因此912
无效)。
一对只是两个相同的图块(例如55
)。
挑战
给定有效手牌数为14张,请根据以下条件确定其得分:
Condition Description Point/s
-------------------------------------------------------------------------------
Straight Contains the sequences 123 456 789 1
Identical sequences Contains two identical sequences 1
All simples Only 2-8, no 1s or 9s 1
All sequences All sets of three are sequences 1
All triplets All sets of three are triplets 2
Flush Single-suit hand (always applies) 5
(这里的评分是根据日本的麻将规则进行的,但经过了简化,以使规范不那么混乱。)
手的分数是其满足条件的总分。如果一只手可以通过多种方式分解,请进行最高得分的分解。
确保输入的手是有效的,即从1到9的十四个图块,每个图块最多出现四次,并且可以假定已被排序。输入是通过STDIN,函数参数或命令行的数字列表(作为字符串或整数的单个平面列表)。输出可能是STDOUT或返回值。
测试用例
22233355777888 -> 8 # 222 333 55 777 888, flush + all simp. + all trip.
11112345678999 -> 6 # 111 123 456 789 99, flush + straight
11123456788999 -> 5 # 111 234 567 88 999, flush only (no straight)
23344455566788 -> 7 # 234 345 456 567 88, flush + all simp. + all seq.
33334444555566 -> 8 # 33 345 345 456 456, flush + all simp. + all seq. + identical seq.
11122233377799 -> 7 # 111 222 333 777 99, flush + all trip. (no identical seq.)
12344556678889 -> 8 # 123 456 456 789 88, flush + all seq. + straight + identical seq.
11344556678999 -> 5 # 11 345 456 678 999, flush only (no identical seq.)
22233344455566 -> 8 # 222 333 444 555 66, flush + all simp. + all trip.
11112233344555 -> 5 # 111 123 234 345 55, flush only
对于第五个示例,尽管具有两对相同的序列,但仅需存在一个即可达到该点。分解345 345 345 345 66
得分相同,而333 345 444 555 66
得分更差。
计分
这是代码高尔夫球,因此以最少字节为单位的解决方案将获胜。有标准漏洞。
相关挑战:您还在等什么?(麻将求解器)