github.com/jefffederman/gophe@v0.0.0-20221203163656-b38beff92772/rank.go (about)

     1  package gophe
     2  
     3  type RankCategory uint8
     4  
     5  const (
     6  	StraightFlush RankCategory = iota + 1
     7  	FourOfAKind
     8  	FullHouse
     9  	Flush
    10  	Straight
    11  	ThreeOfAKind
    12  	TwoPair
    13  	OnePair
    14  	HighCard
    15  )
    16  
    17  var RankCategoryDescription = [11]string{
    18  	"s",
    19  	"Straight Flush",
    20  	"Four Of a Kind",
    21  	"Full House",
    22  	"Flush",
    23  	"Straight",
    24  	"Three Of a Kind",
    25  	"Two Pair",
    26  	"One Pair",
    27  	"High Card",
    28  }
    29  
    30  func GetRankCategory(rank uint16) RankCategory {
    31  	switch true {
    32  	case rank > 6185:
    33  		return HighCard
    34  	case rank > 3325:
    35  		return OnePair
    36  	case rank > 2467:
    37  		return TwoPair
    38  	case rank > 1609:
    39  		return ThreeOfAKind
    40  	case rank > 1599:
    41  		return Straight
    42  	case rank > 322:
    43  		return Flush
    44  	case rank > 166:
    45  		return FullHouse
    46  	case rank > 10:
    47  		return FourOfAKind
    48  	default:
    49  		return StraightFlush
    50  	}
    51  }
    52  
    53  func DescribeRankCategory(category RankCategory) string {
    54  	return RankCategoryDescription[category]
    55  }
    56  
    57  func DescribeRank(rank uint16) string {
    58  	return RankDescription[rank][1]
    59  }
    60  
    61  func DescribeSampleHand(rank uint16) string {
    62  	return RankDescription[rank][0]
    63  }
    64  
    65  func IsFlush(rank uint16) bool {
    66  	switch GetRankCategory(rank) {
    67  	case StraightFlush:
    68  		return true
    69  	case Flush:
    70  		return true
    71  	default:
    72  		return false
    73  	}
    74  }
    75  
    76  type Rank struct {
    77  	value uint16
    78  }
    79  
    80  func (a Rank) Compare(b Rank) int {
    81  	return int(a.value) - int(b.value)
    82  }
    83  
    84  func (r Rank) GetValue() uint16 {
    85  	return r.value
    86  }
    87  
    88  func (r Rank) GetCategory() RankCategory {
    89  	return GetRankCategory(r.GetValue())
    90  }
    91  
    92  func (r Rank) DescribeCategory() string {
    93  	return DescribeRankCategory(r.GetCategory())
    94  }
    95  
    96  func (r Rank) DescribeRank() string {
    97  	return DescribeRank(r.GetValue())
    98  }
    99  
   100  func (r Rank) DescribeSampleHand() string {
   101  	return DescribeSampleHand(r.GetValue())
   102  }
   103  
   104  func (r Rank) IsFlush() bool {
   105  	return IsFlush(r.GetValue())
   106  }