package poker import ( "fmt" "testing" ) // 从手牌中找到一个顺子 func testFindAGroupStraight(t *testing.T, wildPoker *Poker, pks ...*Poker) { wildPks, normalPokers := divideWildPokers(wildPoker, pks) group, highPokers, wildPokers := findAStraightGroup(wildPks, normalPokers) str := "组合:\n" if group != nil { str = fmt.Sprintf("组合:%s\n", PokersToString(group.Pokers)) } str += "散牌:" str += PokersToString(highPokers) str += fmt.Sprintf("剩余万能牌:%s\n", PokersToString(wildPokers)) t.Log(fmt.Sprintf("手牌:%s %d张 万能牌:%s\n%s", PokersToString(pks), len(pks), wildPoker.ToString(), str)) } func Test_FindAGroupStraight(t *testing.T) { var pks []*Poker var wildPoker *Poker // (♥A ♥2 ♥3) (♥3 ♣3 ◆3) 万能牌:◆K pks = []*Poker{NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Heart, Point2, Ext1), NewPokerEx(Heart, Point3, Ext1), NewPokerEx(Heart, Point3, Ext1), NewPokerEx(Club, Point3, Ext1), NewPokerEx(Diamond, Point3, Ext1)} wildPoker = NewPokerEx(Diamond, PointK, Ext1) testFindAGroupStraight(t, wildPoker, pks...) // 手牌 ♥A ♥A ♥2 ♥4 ♥3 万能牌:◆K pks = []*Poker{NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Heart, Point2, Ext1), NewPokerEx(Heart, Point4, Ext1), NewPokerEx(Heart, Point3, Ext1), NewPokerEx(Heart, PointK, Ext1)} wildPoker = NewPokerEx(Diamond, PointK, Ext1) testFindAGroupStraight(t, wildPoker, pks...) // 手牌:♥A ♥A ♥Q ♥K 万能牌:◆J pks = []*Poker{NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Heart, PointQ, Ext1), NewPokerEx(Heart, PointK, Ext1)} wildPoker = NewPokerEx(Diamond, PointJ, Ext1) testFindAGroupStraight(t, wildPoker, pks...) // 手牌:♥A ♥3 ♥4 ♣J 万能牌:◆J pks = []*Poker{NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Heart, Point3, Ext1), NewPokerEx(Heart, Point4, Ext1), NewPokerEx(Club, PointJ, Ext1)} wildPoker = NewPokerEx(Diamond, PointJ, Ext1) testFindAGroupStraight(t, wildPoker, pks...) // 手牌:♥A ♥3 ♥4 ♥J 万能牌:◆J pks = []*Poker{NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Heart, Point3, Ext1), NewPokerEx(Heart, Point4, Ext1), NewPokerEx(Heart, PointJ, Ext1)} wildPoker = NewPokerEx(Diamond, PointJ, Ext1) testFindAGroupStraight(t, wildPoker, pks...) // 手牌:♥K ♥3 ♥4 ♥J 万能牌:◆J pks = []*Poker{NewPokerEx(Heart, PointK, Ext1), NewPokerEx(Heart, Point3, Ext1), NewPokerEx(Heart, Point4, Ext1), NewPokerEx(Heart, PointJ, Ext1)} wildPoker = NewPokerEx(Diamond, PointJ, Ext1) testFindAGroupStraight(t, wildPoker, pks...) } // 从手牌中找到三条 func testFindAKindGroup(t *testing.T, wildPoker *Poker, pks ...*Poker) { wildPks, normalPokers := divideWildPokers(wildPoker, pks) group, highPokers, wildPokers := findAKindGroup(wildPks, normalPokers) str := "组合:\n" if group != nil { str = fmt.Sprintf("组合:%s\n", PokersToString(group.Pokers)) } str += "散牌:" str += PokersToString(highPokers) str += fmt.Sprintf("剩余万能牌:%s\n", PokersToString(wildPokers)) t.Log(fmt.Sprintf("手牌:%s %d张 万能牌:%s\n%s", PokersToString(pks), len(pks), wildPoker.ToString(), str)) } func Test_FindAKindGroup(t *testing.T) { var pks []*Poker var wildPoker *Poker // 手牌:♥A ♥2 ♥3 ♥3 ♣3 ◆3 6张 万能牌:◆K pks = []*Poker{NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Heart, Point2, Ext1), NewPokerEx(Heart, Point3, Ext1), NewPokerEx(Heart, Point3, Ext1), NewPokerEx(Club, Point3, Ext1), NewPokerEx(Diamond, Point3, Ext1)} wildPoker = NewPokerEx(Diamond, PointK, Ext1) testFindAKindGroup(t, wildPoker, pks...) // 手牌:♥A ◆A ♥2 ♥4 ♥3 ♥K 6张 万能牌:◆K pks = []*Poker{NewPokerEx(Heart, PointA, Ext1), NewPokerEx(Diamond, PointA, Ext1), NewPokerEx(Heart, Point2, Ext1), NewPokerEx(Heart, Point4, Ext1), NewPokerEx(Heart, Point3, Ext1), NewPokerEx(Heart, PointK, Ext1), NewPokerEx(Diamond, PointK, Ext1)} wildPoker = NewPokerEx(Diamond, PointK, Ext1) testFindAKindGroup(t, wildPoker, pks...) } // 从手牌中找最佳组合 func testFindBestGroupsAndRemains(t *testing.T, wildPoker *Poker, pks ...*Poker) { t.Log(fmt.Sprintf("手牌:%s %d张 万能牌:%s\n", PokersToString(pks), len(pks), wildPoker.ToString())) groups, highPokers := FindBestGroupsAndRemains(wildPoker, pks) str := "" for _, g := range groups { str += fmt.Sprintf("组合:%s\n", PokersToString(g.Pokers)) } str += "散牌:" str += PokersToString(highPokers) t.Log(fmt.Sprintf("手牌:%s %d张 万能牌:%s\n%s", PokersToString(pks), len(pks), wildPoker.ToString(), str)) } func Test_FindBestGroupsAndRemains(t *testing.T) { var pks []*Poker //var wildPoker *Poker var str string str = "♠A ◆2 ♠J ♠5 ♣8 ♣K ♠10 ♣10 ♣10" pks = StringToPokers(str) testFindBestGroupsAndRemains(t, StringToPoker("♠10"), pks...) }