跑得快算法

2021.02.27

var CardValueMap = map[int]int{
POKER_EMPTY: -1,
2: 0,
3: 1,
4: 2,
5: 3,
6: 4,
7: 5,
8: 6,
9: 7,

10: 8,
 11: 9,
  12: 10,
   0: 11,
    1: 12
    }
TEXT

// 跑得快,底层数据结构
0 1 2 3 4 5 6 7 8 9 10 11 12 //方片
13 14 15 16 17 18 19 20 21 22 23 24 25 //梅花
26 27 28 29 30 31 32 33 34 35 36 37 38 //红桃
39 40 41 42 43 44 45 46 47 48 49 50 51 //黑桃
52 53 //小王,大王

card % 13 取模计算得出 牌值切片的索引值

card % 13 + 1 计算得出牌值
根据card值区分花色

使用链表生成树,实现牌型算法:
A
=========
| |
K K
=========
| |
Q Q
=========
| |
J J
=========
| |
10 10 //实现并非使用二叉树

                                                                            root
                                            =====================================================================
                                             |                                                                    |
    ==================================================================================================        =========    ...依次类推
    |        |        |        |        |        |        |        |        |        |        |        |        |        |        |    
    3        4        5        6        7        8        9        10        J        Q        K        A         2        33  --- 22
=========    ...依次类推                                                                                    =========    ...依次类推
|        |                                                                                                |        |
4  ---  2                                                                                                44  --- 22
TEXT

=========
| | …依次类推
5 — 2

…依次类推

构建出牌树:
1.先排除炸弹
2.从最小牌开始 (递增逐个判断)
A 一张
a.A 找到所有单牌
b.ABCDE 使用所有单牌构建顺子 (从最小单张开始 递增逐个判断)
c.AAAB 找到所有的3张,构建三带一 (从最小3张开始 递增逐个判断)
d.AAABBBCD 使用所有的3张构建飞机带单牌 (从最长的开始)

    B 两张
        a.AA         找到所有对子
        b.AABB        使用所有对子构建顺子
        c.AAABB     找到所有的3张,构建三带二
        d.AAABBBCCDD使用所有的3张构建飞机带对牌

    C 三张
        a.AAABB         找到所有的3张,构建三带二
        b.AAABBB         使用所有的三张构建飞机
        c.AAABBBCCDD    使用所有的3张构建飞机带对牌
    D 四张
        a.AAAA    找到所有的4张
TEXT

超时自动出牌:
AutoShowCard
getAutoShowCard
首出牌:getBestAutoSuggestCards, 首出最长的牌, 剩余3张和下家报单特殊处理
压牌:getAutoSuggestFunc 首先判断炸弹出牌顺序,相同牌型先出,其次拆牌出,其次出炸弹

计算树的深度,找出最短的子树:
计算树的最小深度
分析所有叶子节点
计算叶子结点到根节点的路径长度,长度等于最小深度 。即是最短的子树。
计算排序中单牌数量最少的链表
链表排序 按照牌型中最大的牌值