【发布时间】:2015-08-06 09:44:54
【问题描述】:
我目前正在帮助教授计算机编程课程。 (我在高中四年级,为我的计算机编程老师做助教。)现在学生们正在学习按位运算符,但一些更高级的学生正在询问我如何使用位和按位运算来将数据存储在位中。到目前为止,我们他们非常简单,但有效地提供了 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。 “花色位”等于花色的二进制索引号,因此钻石将是 0b01 或 0b1
第 2 步。将西装位左移 4 位。 0b01 -> 0b010000
步骤 3. 隔离秩并转换为位。 “等级位”等于二进制花色编号的索引,因此 Jack (11) 将是 0b1011
第 4 步。将您的等级位添加到您的套装位中。 0b010000 + 0b1011 = 0b011011
第 5 步。将组合的 rank\suit 位添加到 0b10000000 以在所有值中提供一致的长度。 0b011011 + 0b1000000 = 0b1011011
在一副完整的纸牌中(所有 52 张牌都没有小丑),牌名中有 741 个字符。 一副转换为位的卡片以 364 位存储,压缩率为 49%,同时仍保留 100% 的数据。
我想知道是否有更有效的方法来存储这些数据。我只是计算机编程的第二年,而且我只有高中水平的教育,所以我自己对此不太了解。
这是他们的代码http://repl.it/BA56
【问题讨论】:
标签: python bit-shift playing-cards