123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- package algorithm
- import (
- "fmt"
- "strings"
- )
- func (c *Cards) Bytes() []byte {
- b := make([]byte, len(*c))
- copy(b, *c)
- return b
- }
- func (c *Cards) Len() int {
- return len(*c)
- }
- func (c *Cards) Take() byte {
- card := (*c)[0]
- (*c) = (*c)[1:]
- return card
- }
- func (c *Cards) Append(cards ...byte) Cards {
- cs := make([]byte, 0, len(cards)+len(*c))
- cs = append(cs, (*c)...)
- cs = append(cs, cards...)
- return cs
- }
- func (c *Cards) Equal(cards []byte) bool {
- if len(*c) != len(cards) {
- return false
- }
- for k, v := range *c {
- if cards[k] != v {
- return false
- }
- }
- return true
- }
- func Color(color byte) (char string) {
- switch color {
- case 0:
- char = "♦"
- case 1:
- char = "♣"
- case 2:
- char = "♥"
- case 3:
- char = "♠"
- }
- return
- }
- func String2Num(c byte) (n byte) {
- switch c {
- case '2':
- n = 2
- case '3':
- n = 3
- case '4':
- n = 4
- case '5':
- n = 5
- case '6':
- n = 6
- case '7':
- n = 7
- case '8':
- n = 8
- case '9':
- n = 9
- case 'T':
- n = 0xA
- case 'J':
- n = 0xB
- case 'Q':
- n = 0xC
- case 'K':
- n = 0xD
- case 'A':
- n = 0xE
- }
- return
- }
- func Num2String(n byte) (c byte) {
- switch n {
- case 2:
- c = '2'
- case 3:
- c = '3'
- case 4:
- c = '4'
- case 5:
- c = '5'
- case 6:
- c = '6'
- case 7:
- c = '7'
- case 8:
- c = '8'
- case 9:
- c = '9'
- case 0xA:
- c = 'T'
- case 0xB:
- c = 'J'
- case 0xC:
- c = 'Q'
- case 0xD:
- c = 'K'
- case 0xE:
- c = 'A'
- }
- return
- }
- func (c *Cards) SetByString(str string) {
- array := strings.Split(str, " ")
- *c = make([]byte, len(array))
- for k, v := range array {
- (*c)[k] = String2Num(byte(v[0]))
- }
- }
- func (c *Cards) String() (str string) {
- for k, v := range *c {
- color := Color(v)
- value := Num2String(v)
- str += string(color) + string(value)
- if k < len(*c)-1 {
- str += " "
- }
- }
- return
- }
- func (c *Cards) Hex() string {
- return fmt.Sprintf("%#v", *c)
- }
|