题解 | #扑克牌大小#

扑克牌大小

https://www.nowcoder.com/practice/d290db02bacc4c40965ac31d16b1c3eb

package main

import (
	"errors"
	"fmt"
    "strings"
    "bufio"
    "os"
)

var a2i map[string]int

func isQueueBomb(s string) bool {
    arr := strings.Split(s, " ")
    if len(arr) != 2 {
        return false
    }
    return arr[0] == "joker" && arr[1] == "JOKER" || arr[0] == "JOKER" && arr[1] == "joker"
}

func isBomb(s string) bool {
    arr := strings.Split(s, " ")
    if len(arr) == 4 {
        return arr[0] == arr[1] && arr[1] == arr[2] && arr[2] == arr[3]
    }

    return isQueueBomb(s)
}

func isGreater(s1 string, s2 string) (bool, error) {
    arr1 := strings.Split(s1, " ")
    arr2 := strings.Split(s2, " ")
    size1, size2 := len(arr1), len(arr2)

    if size1 != size2 {
        // fmt.Printf("s1:%s, s2:%s\n", s1, s2)
        var isExist1, isExist2 bool
        if _, ok := a2i[s1]; ok {
            isExist1 = true
        }
        if _, ok := a2i[s2]; ok {
            isExist2 = true
        }
        if isExist1 && isExist2 {
            return a2i[s1] > a2i[s2], nil
        }


        if !isBomb(s1) && !isBomb(s2) {
            return false, errors.New("Error")
        }
        // 哪个是王炸或者是炸弹,哪个最大
        if isQueueBomb(s1) {
            return true, nil
        }
        if isQueueBomb(s2) {
            return false, nil
        }
        if isBomb(s1) {
            return true, nil
        }
        if isBomb(s2) {
            return false, nil
        }
    } else {
        if size1 == 1 && size2 == 1 {
            return a2i[s1] > a2i[s2], nil
        } else if size1 == 2 && size2 == 2 {
            if isQueueBomb(s1) {
                return true, nil
            }
            if isQueueBomb(s2) {
                return false, nil
            }
            return a2i[string(s1[0])] > a2i[string(s2[0])], nil
        } else if size1 == 3 && size2 == 3 {
            // pass
            return true, nil
        } else if size1 == 4 && size2 == 4 {
            return a2i[string(s1[0])] > a2i[string(s2[0])], nil
        } else if size1 == 5 && size2 == 5 {
            return a2i[arr1[0]] > a2i[arr2[0]], nil
        }
    }

    return true, nil
}

func main() {
    // 初始化对应关系
    a2i = make(map[string]int, 0)
    for i:=3; i<10; i++ {
        a2i[string(byte('0' + i))] = i
    }
    a2i["10"] = 10;
    a2i["J"] = 11;
    a2i["Q"] = 12
    a2i["K"] = 13
    a2i["A"] = 14
    a2i["2"] = 15
    a2i["joker"] = 16
    a2i["JOKER"] = 17

    // fmt.Printf("map: %+v\n", a2i)

    inputReader := bufio.NewReader(os.Stdin)
    line, _, _ := inputReader.ReadLine()
    
    s := string(line)
    s1, s2 := strings.Split(s, "-")[0], strings.Split(s, "-")[1]

    isGreater, err := isGreater(s1, s2)
    if err != nil {
        fmt.Println("ERROR")
        os.Exit(0)
    }

    if isGreater {
        fmt.Println(s1)
    } else {
        fmt.Println(s2)
    }
}
// 本题输入一个带空格的字符串,所以采用:inputReader.ReadLine()

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务