注意:这与游戏Rummikub的变体有关
背景与规则
Rummikub是一款基于图块的游戏。有四种颜色:红色,橙色,蓝色和黑色。对于每种颜色,有13个磁贴(标记为1到13),并且还有2个与颜色无关的小丑,因此共有54件。在Rummikub的这种变体中,每位玩家获得14个磁贴,并且每局必须再获得一个磁贴,然后每回合再丢一枚,这样磁贴数是恒定的。玩家看不到彼此的瓷砖。目标是对图块进行分组,以使所有块至少属于一组(请参见下文)。当玩家将所有棋子分组时,他们放下棋盘并露出棋子。然后其他人检查所有组合是否有效,如果有效,则玩家赢得该回合。
瓷砖如何分组?
组只有两种类型:
多色组:
- 它们由3或4个图块组成。
- 它们仅包含编号相同的图块。
- 所有的瓷砖都是不同的颜色。
- 范例:
RED 9, BLUE 9, BLACK 9
。
单色组:
- 它们至少包含3个图块。
- 它们不能包含超过13个图块。
- 它们仅包含具有升序排列的不同连续编号的图块。
- 所有图块都具有相同的颜色。
- 标
1
有的图块可能不会位于标有的图块之后13
。 - 范例:
RED 5, RED 6, RED 7
。
等等,小丑们做什么?
小丑可以代替游戏中的任何一块。例如,我们的第一个例子可以成为 JOKER, BLUE 9, BLACK 9
,RED 9, JOKER, BLACK 9
或RED 9, BLUE 9, JOKER
。这同样适用于我们的其他示例。但是,一个人可能不会将两个Joker放在同一组中,因此JOKER, ORANGE 8, JOKER
禁止类似的事情。
任务
给定一个Rummikub切片组,确定它是否有效。您可以确保不会出现重复的图块,除了两个小丑,而且您输入的图块是有效的(例如,60
不会出现类似的内容)。
输入输出
您可以采用任何标准方法输入并提供输出。
一些有效的输入格式:字符串列表,元组列表,嵌套列表,字符串或您认为合适的其他任何格式。颜色可以作为字符串(例如:)"Blue","Red", etc.
,字符串的缩写(请区分蓝色和黑色图块)或与颜色对应的整数。说到Jokers,您应该提及程序将其作为输入接收的方式。如果选择字符串,则可能会有类似的内容RED 9, JOKER, ...
,如果选择可以包含的元组(9,"RED"), ("JOKER")
或类似的内容。如果有帮助,您可能会收到该小丑的颜色(这不会影响程序的输出)。例如,您可能有("JOKER","RED")
或("JOKER","BLUE")
,但这不应以任何方式影响输出。
关于输出,适用于决策问题的标准规则。
工作的例子
让我们举个例子,希望可以使它更容易理解。给定如下一组,其中每个元组代表一个图块:
[(9,“ RED”),(9,“ ORANGE”),(“ JOKER”),(9,“ BLACK”)]
这将返回真实值,因为输入有效。在这种情况下,小丑将替代(9, "BLUE")
,它们形成了一个多色组。
如果可以给您以下小组:
[(9,“ BLUE”),(9,“ ORANGE”),(9,“ RED”),(9,“ BLACK”),(“ JOKER”)]
这将是无效的,因此您的程序应返回假值,因为没有多余的空白可供小丑替换,因为多色组中的最大纸牌数为4。
其他测试用例
这些是针对扩展的测试套件的,它涵盖了几乎所有可能的情况:
输入->输出 [(1,“蓝色”),(2,“蓝色”),(3,“蓝色”),(4,“蓝色”),(5,“蓝色”),(6,“蓝色”)]]- >诚实 [(6,“ BLUE”),(6,“ RED”),(6,“ BLACK)]->真实 [(5,“黑色”),(6,“黑色”),(7,“黑色”),(8,“黑色”),(9,“黑色”),(10,“黑色”),( “ JOKER”),(12,“ BLACK”)]->真实 [(“ JOKER”),(3,“ BLUE”),(3,“ RED”)]->真实 [(8,“ BLACK”),(2,“ RED”),(13,“ BLUE”)]->虚假 [(4,“ RED”),(3,“ RED”),(5,“ RED”)]->虚假 [(5,“ BLACK”),(6,“ BLACK)]->虚假 [(“ JOKER”),(5,“ RED”),(“ JOKER”)]->虚假 [(4,“ RED”),(5,“ RED”),(6,BLUE“)]->虚假 [(4,“ RED”),(“ JOKER”),(5,“ RED”)]->虚假 [(12,“ BLACK”),(13,“ BLACK),(1,” BLACK“)]->虚假
这是代码高尔夫球,因此每种语言中以字节为单位的最短代码胜出!