题解 | #扑克牌大小#

扑克牌大小

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()

全部评论

相关推荐

程序员牛肉:你这简历有啥值得拷打的?在牛客你这种简历一抓一大把,也就是个人信息不一样而已。 关键要去找亮点,亮点啊,整个简历都跟流水线生产出来的一样。
点赞 评论 收藏
分享
Tom哥981:让我来压力你!!!: 这份简历看着“技术词堆得满”,实则是“虚胖没干货”,槽点一抓一大把: 1. **项目描述是“技术名词报菜名”,没半分自己的实际价值** 不管是IntelliDoc还是人人探店,全是堆Redis、Elasticsearch、RAG这些时髦词,但你到底干了啥?“基于Redis Bitmap管理分片”是你写了核心逻辑还是只调用了API?“QPS提升至1500”是你独立压测优化的,还是团队成果你蹭着写?全程没“我负责XX模块”“解决了XX具体问题”,纯把技术文档里的术语扒下来凑字数,看着像“知道名词但没实际动手”的实习生抄的。 2. **短项目塞满超纲技术点,可信度直接***** IntelliDoc就干了5个月,又是RAG又是大模型流式响应又是RBAC权限,这堆活儿正经团队分工干都得小半年,你一个后端开发5个月能吃透这么多?明显是把能想到的技术全往里面塞,生怕别人知道你实际只做了个文件上传——这种“技术堆砌式造假”,面试官一眼就能看出水分。 3. **技能栏是“模糊词混子集合”,没半点硬核度** “熟悉HashMap底层”“了解JVM内存模型”——“熟悉”是能手写扩容逻辑?“了解”是能排查GC问题?全是模棱两可的词,既没对应项目里的实践,也没体现深度,等于白写;项目里用了Elasticsearch的KNN检索,技能栏里提都没提具体掌握程度,明显是“用过但不懂”的硬凑。 4. **教育背景和自我评价全是“无效信息垃圾”** GPA前10%这么好的牌,只列“Java程序设计”这种基础课,分布式、微服务这些后端核心课提都不提,白瞎了专业优势;自我评价那堆“积极认真、细心负责”,是从招聘网站抄的模板吧?没有任何和项目挂钩的具体事例,比如“解决过XX bug”“优化过XX性能”,纯废话,看完等于没看。 总结:这简历是“技术名词缝合怪+自我感动式凑数”,看着像“背了后端技术栈名词的应届生”,实则没干货、没重点、没可信度——面试官扫30秒就会丢一边,因为连“你能干嘛”都没说清楚。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务