83 lines
1.8 KiB
Go
83 lines
1.8 KiB
Go
![]() |
package poker
|
||
|
|
||
|
import "sort"
|
||
|
|
||
|
type IPlayPoker interface {
|
||
|
// Cmp (p1<p2):CppSmall (p1==p2):CppEqual (p1>p2):CppBig
|
||
|
Cmp(p1, p2 *Poker) CmpPokerPoint
|
||
|
}
|
||
|
|
||
|
// SortPokerAsc 升序排列
|
||
|
func SortPokerAsc(pp IPlayPoker, handlePokers []*Poker, handlePokers1 ...*Poker) (newPokers []*Poker) {
|
||
|
for _, pk := range handlePokers {
|
||
|
newPokers = append(newPokers, pk)
|
||
|
}
|
||
|
for _, pk := range handlePokers1 {
|
||
|
newPokers = append(newPokers, pk)
|
||
|
}
|
||
|
sort.Slice(newPokers, func(i, j int) bool {
|
||
|
return pp.Cmp(newPokers[i], newPokers[j]) == CppSmall
|
||
|
})
|
||
|
return
|
||
|
}
|
||
|
|
||
|
//func SortPokerDesc(pp IPlayPoker, handlePokers []*Poker, handlePokers1 ...*Poker) (newPokers []*Poker) {
|
||
|
// for _, pk := range handlePokers {
|
||
|
// newPokers = append(newPokers, pk)
|
||
|
// }
|
||
|
// for _, pk := range handlePokers1 {
|
||
|
// newPokers = append(newPokers, pk)
|
||
|
// }
|
||
|
// sort.Slice(newPokers, func(i, j int) bool {
|
||
|
// return pp.Cmp(newPokers[i], newPokers[j]) == CppBig
|
||
|
// })
|
||
|
// return
|
||
|
//}
|
||
|
|
||
|
func FindMaxPoker(pp IPlayPoker, handlePokers []*Poker) (pk *Poker, pos int) {
|
||
|
if len(handlePokers) == 0 {
|
||
|
return
|
||
|
}
|
||
|
pk = handlePokers[0]
|
||
|
for pos1, pk1 := range handlePokers {
|
||
|
if pp.Cmp(pk, pk1) == CppSmall {
|
||
|
pk = pk1
|
||
|
pos = pos1
|
||
|
}
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func FindMinPoker(pp IPlayPoker, handlePokers []*Poker) (pk *Poker, pos int) {
|
||
|
if len(handlePokers) == 0 {
|
||
|
return
|
||
|
}
|
||
|
pk = handlePokers[0]
|
||
|
for pos1, pk1 := range handlePokers {
|
||
|
if pp.Cmp(pk, pk1) == CppBig {
|
||
|
pk = pk1
|
||
|
pos = pos1
|
||
|
}
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func FindBiggerPoker(pp IPlayPoker, handlePokers []*Poker, deskPokers ...*Poker) (pk *Poker, pos int) {
|
||
|
if len(handlePokers) == 0 {
|
||
|
return
|
||
|
}
|
||
|
if len(deskPokers) == 0 {
|
||
|
return FindMinPoker(pp, handlePokers)
|
||
|
}
|
||
|
deskPk, _ := FindMaxPoker(pp, deskPokers)
|
||
|
newPokers := SortPokerAsc(pp, handlePokers)
|
||
|
for pos1, pk1 := range newPokers {
|
||
|
if pp.Cmp(pk1, deskPk) == CppBig {
|
||
|
pk = pk1
|
||
|
pos = pos1
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
return
|
||
|
}
|