2个版本
0.1.1 | 2024年2月5日 |
---|---|
0.1.0 | 2024年2月5日 |
在 游戏 中排名 72
26KB
396 代码行
扑克密钥生成
概述
此仓库的目的是通过穷举搜索密钥,以使用几个和、位移和位掩码唯一识别扑克手牌。
据我所知,此算法是由 SpecialK 引入的。
这些密钥由crate poker_eval 使用
密钥集包括
-
花色 密钥
4个密钥映射到花色黑桃、红心、方块、梅花。
它们的组合之和是唯一的。
它们可以确定7张牌的手牌是否为同花。 -
同花五 密钥
1至9,T,J,Q,K,A的面值的13个密钥。
它们的组合之和是唯一的。
它们可以UUID一个5张牌的同花手牌。 -
面值五 密钥
1至9,T,J,Q,K,A的面值的13个密钥。
它们的组合之和是唯一的(最大相同4个)。
它们可以UUID一个5张牌的非同花手牌。 -
同花七 密钥
1至9,T,J,Q,K,A的面值的13个密钥。
它们的组合之和是唯一的(5个、6个或7个不同的面值)。
它们可以UUID一个7张牌的同花手牌。 -
面值七 密钥:0 13个密钥,对应于1至9,T,J,Q,K,A的面值。
它们的组合之和是唯一的(最大相同4个)。
它们可以UUID一个7张牌的非同花手牌。
结果是
- 最大(花色密钥)< 2^9
- 最大(面值密钥)< 2^23
因此,一张牌(在#suit x #face = 4 x 13 = 52张牌中)可以用32位编码 - 这与计算机非常兼容!
从那里,如果所有可能的情况都已预先计算,则可以通过以下方式查找手牌等级:0
- 对每张牌求和
suit_key
(通过位位移提取)并查找是否为同花。 - 如果是:对每张牌(花色为“同花花色”)求和
flush_seven
并查找手牌等级。 - 如果不是:对每张牌求和
face_seven
(通过位位移提取)并查找手牌等级。
这提供了一种非常快速地评估手牌等级的方法。
计算
参看对话 此Rust语言论坛对话。
运行时非常快。
运行
0 条命令
# run
cargo run --release
输出
---------- key_gen_suit ----------
start key_suit
n_sol=1 - key=[0, 1, 26, 36]
n_sol=2 - key=[0, 1, 28, 39]
n_sol=3 - key=[0, 1, 29, 37]
n_sol=4 - key=[0, 1, 32, 39]
n_sol=5 - key=[0, 2, 30, 39]
n_sol=6 - key=[0, 2, 31, 38]
n_sol=7 - key=[0, 3, 30, 35]
n_sol=8 - key=[0, 3, 32, 37]
n_sol=9 - key=[0, 3, 33, 38]
n_sol=10 - key=[0, 3, 34, 39]
n_sol=11 - key=[0, 4, 34, 39]
n_sol=12 - key=[0, 5, 32, 35]
n_sol=13 - key=[0, 5, 34, 37]
n_sol=14 - key=[0, 5, 35, 38]
n_sol=15 - key=[0, 5, 35, 39]
n_sol=16 - key=[0, 5, 36, 39]
n_sol=17 - key=[0, 7, 36, 38]
n_sol=18 - key=[0, 7, 38, 39]
n_sol=19 - key=[0, 8, 36, 37]
n_sol=20 - key=[0, 9, 37, 39]
n_sol=21 - key=[0, 10, 35, 36]
runtime = 4.377632ms
---------- key_gen_flush_five ----------
start key_gen_flush_five
bootstrap -> keys=[0, 1, 2, 4, 8, 16, 32, 0, 0, 0, 0, 0, 0]
key[7]=56 - runtime key=39.734µs, total=39.796µs
key[8]=104 - runtime key=53.367µs, total=110.709µs
key[9]=192 - runtime key=70.388µs, total=185.169µs
key[10]=352 - runtime key=98.838µs, total=287.81µs
key[11]=672 - runtime key=215.281µs, total=507.327µs
key[12]=1288 - runtime key=539.178µs, total=1.050669ms
runtime = 1.05555ms
key=[0, 1, 2, 4, 8, 16, 32, 56, 104, 192, 352, 672, 1288]
---------- key_gen_flush_seven ----------
start key_gen_flush_five
bootstrap -> keys=[1, 2, 4, 8, 16, 32, 64, 128, 0, 0, 0, 0, 0]
key[8]=240 - runtime key=187.59µs, total=187.647µs
key[9]=464 - runtime key=406.029µs, total=598.453µs
key[10]=896 - runtime key=1.914396ms, total=2.517351ms
key[11]=1728 - runtime key=2.558433ms, total=5.083892ms
key[12]=3328 - runtime key=4.729589ms, total=9.824159ms
runtime = 9.839363ms
key=[1, 2, 4, 8, 16, 32, 64, 128, 240, 464, 896, 1728, 3328]
---------- key_gen_face_five_parallel ----------
start key-gen-face-five
bootstrap -> keys=[0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
key[3]=22 - runtime key=102.427µs, total=102.493µs
key[4]=94 - runtime key=94.402µs, total=201.375µs
key[5]=312 - runtime key=132.967µs, total=338.839µs
key[6]=992 - runtime key=371.218µs, total=713.997µs
key[7]=2422 - runtime key=1.026149ms, total=1.745262ms
key[8]=5624 - runtime key=2.415269ms, total=4.16572ms
key[9]=12522 - runtime key=5.664388ms, total=9.8394ms
key[10]=19998 - runtime key=5.168113ms, total=15.019448ms
key[11]=43258 - runtime key=13.713849ms, total=28.74281ms
key[12]=79415 - runtime key=33.736905ms, total=62.491737ms
runtime = 62.50435ms
key=[0, 1, 5, 22, 94, 312, 992, 2422, 5624, 12522, 19998, 43258, 79415]
---------- key_gen_face_seven_parallel ----------
start key-gen-face-seven
bootstrap -> keys=[0, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
key[3]=22 - runtime key=93.367µs, total=93.414µs
key[4]=98 - runtime key=64.458µs, total=162.028µs
key[5]=453 - runtime key=334.035µs, total=499.09µs
key[6]=2031 - runtime key=2.871583ms, total=3.376098ms
key[7]=8698 - runtime key=3.139063ms, total=6.524241ms
key[8]=22854 - runtime key=8.429608ms, total=14.962855ms
key[9]=83661 - runtime key=77.347271ms, total=92.318331ms
key[10]=262349 - runtime key=443.042953ms, total=535.376083ms
key[11]=636345 - runtime key=1.453851023s, total=1.989241379s
key[12]=1479181 - runtime key=6.226583853s, total=8.215835694s
runtime = 8.215845692s
key=[0, 1, 5, 22, 98, 453, 2031, 8698, 22854, 83661, 262349, 636345, 1479181]