我目前正在帮助教授计算机编程课程。 (我正在读高中,正在为我的计算机编程老师提供助教。)目前,学生正在学习按位运算符,但是一些更高级的人正在问我关于如何使用按位运算和按位运算来将数据存储在位中。到目前为止,我们的工作非常简单,但是有效地提供了50%(给定或取5%)的压缩率。我们拿起扑克牌,假设是“八颗钻石”,并将其变成7位值0b1011000。这适用于所有通用Ace-King扑克牌和所有西服,您只需将位(或整数)放入函数中,便会获得一张扑克牌。

到目前为止,这是他们提出的。

0b1 SS VVVV


0b1将所有“扑克牌转位”保持一致的长度。

SS是西服值

VVVV是卡值

这是他们如何形成自己的位

suits = ['Hearts','Diamonds','Spades','Clubs']
ranks = ['Ace','Two','Three','Four','Five','Six','Seven','Eight','Nine','Ten','Jack','Queen','King']


为此,请使用钻石杰克

第1步。隔离西装并将其转换为bis。 “西装位”等于二进制西装的索引号,因此Diamonds为0b01或0b1

步骤2.将西服位左移4位。 0b01-> 0b010000

步骤3.隔离等级并转换为位。 “等级位”等于二进制文件中西装编号的索引,因此杰克(11)将为0b1011

步骤4.将等级位添加到西服位中。 0b010000 + 0b1011 = 0b011011

步骤5.将您的合并的rank \ suit位添加到0b10000000,以使所有值的长度一致。 0b011011 + 0b1000000 = 0b1011011

在一副完整的纸牌中(所有52张纸牌都不讲小丑),纸牌名称中有741个字符。
完整的卡片组转换为位后,以49%的压缩率存储在364位中,同时仍保留100%的数据。

我想知道是否有任何更有效的方法来存储此数据。我只有计算机编程的第二年,而且我只有高中程度的教育,所以我自己对此不太了解。

这是他们的代码http://repl.it/BA56

最佳答案

另一种方法是给每张卡从1到52的数字

定义颜色的顺序可能很有趣,例如在Belote纸牌游戏中定义的颜色。

因此:
0 = 1个俱乐部
1 = 2个俱乐部
...
12 =俱乐部之王
13 = 1颗钻石
...
等等。

通过在颜色上订购将1到52之间的任何数字映射到卡上,很容易。

最后,您只需要从1到52的数字即可代表整个纸牌游戏。这是从'000000'到'110001'的数字,每个卡仅6位。

就大小而言,它相当于您使用的系统,我认为您不能通过卡将其减少超过6位。

关于python - 更有效的方式来存储扑克牌?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31852353/

10-09 02:13