gpt4 book ai didi

python - 以位存储扑克牌的更有效方法?

转载 作者:行者123 更新时间:2023-12-01 04:35:04 27 4
gpt4 key购买 nike

我目前正在帮助教授计算机编程类(class)。 (我在高中高年级,为我的计算机编程老师助教。)现在学生们正在学习按位运算符,但一些更高级的学生正在问我如何使用位和按位运算来将数据存储在位中。到目前为止,我们所做的非常简单,但有效地提供了 50%(给予或采取 5%)的压缩率。我们拿我们的扑克牌(假设是方 block 八)将其转换为 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']

为此,让我们使用钻石 jack

第 1 步:分离套装并转换为 bis。 “花色位”等于二进制花色的索引号,因此方 block 将是 0b01 或 0b1

第 2 步:将你的花色位左移 4 位。 0b01 -> 0b010000

第 3 步:分离 Rank 并转换为位。 “排名位”等于二进制中花色编号的索引,因此 Jack (11) 将是 0b1011

第 4 步:将您的等级位添加到您的花色位中。 0b010000 + 0b1011 = 0b011011

步骤 5. 将组合的排名\套装位添加到 0b10000000,以使所有值的长度保持一致。 0b011011 + 0b1000000 = 0b1011011

在一副完整的牌中(所有 52 张牌,没有 clown ),牌名中有 741 个字符。转换为位的整副牌以 364 位存储,压缩率为 49%,同时仍保留 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com