将牌
* * * *
拉格朗日计划
* * * *
将牌

将牌是一种由81张牌组成的纸牌游戏,每张牌有四种属性,每种属性有三个可能的值:

数量:可取1、2、3。

颜色: 可取红(R)、绿(G)、紫(P)。

填充: 可取全色(S)、半色(H)、空心(E)。

形状: 可取蛋形(O)、菱形(D)、波浪(W)。

每张牌都可由其属性描述,例如2RSW表示一张画有两个红色全色波浪的牌。

游戏的玩法是在给定的一手牌中找出三张牌,使得对每种属性,这三张牌的值要么完全相同,要么完全不同(即两两相异),把这样的三张牌称为将牌。

例如2RSW,2PHW,2GEW可以构成将牌,因为它们的数量和形状完全相同,且形状和填充完全不同。

输入值为一系列手牌,每手牌有12张,且必定包含一组将牌,按其在手牌中出现的顺序输出其中的将牌,每手牌单独一行。

本题难度:



解答

穷举所有组合,每个位置上的值构成的集合大小为奇数,用标准库和短码技巧即可。

最终代码有两行。

代码长度:132字节 vs. 全站第一:118字节。

import sys,itertools as t
[all(len(set(s))%2for s in zip(*x))and print(*x)for a in sys.argv[1:]for x in t.combinations(a.split(),3)]