使用go组合卦象并解读运势

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
大数据开发治理平台 DataWorks,不限时长
简介: 【5月更文挑战第3天】该文介绍了通过编程方式模拟每日运势占卜,使用Go语言定义了64卦的数据结构,并提供了解卦、比较列表和显示卦象的函数。最后,鼓励读者尝试并提出问题。

1 我们开始吧

今天的运势如何?

question_ans.png

不如来一卦,每天一卦还能以此计时,简直一举两得。 有如此好事为何不做
上一节,我们从树中得到了一爻,还是那样,为了方便,我们把需要的解释做在数据包中

var (
Num       = 6 //# 爻数
ICApp     = NewICin()
AllowNums = map[int]bool{ //允许的坐标
    0: true,
    1: true,
    2: true,
    3: true,
    4: true,
    5: true,
    6: true,
}
Warn = "八卦需要六爻,输入的是:"
//# 朱熹七解
AnySis = map[int]string{
    0: "  六爻全不变,以本 卦卦辞占   ----- 不变 只看本卦 ",
    1: "一爻变,以本卦变爻的爻辞占          ----- 变卦前 的那一 变爻 含义",
        2: " 如果两个爻发生变动,使用本卦的两个变爻占辞判断吉凶,以位置靠上的为主   ----- 变卦前 的 第一变爻 含义",
        3: " 三爻变,以本卦及之卦的卦辞占,以本卦的卦辞为主    ----- 变卦前后都看, 本卦及之卦 含义  本卦为主",
        4: "  四爻变,以之卦中二不变的爻辞占,以下爻的爻辞为主   ----- 变卦 后 看,  之卦 含义  二不变的爻辞占,以下爻的爻辞为主",
        5: "  五爻表,以之卦中不变的爻辞占卜   ----- 变卦 后 看,  之卦 含义  不变的爻辞占 ",
        6: "  六爻全变,乾坤两卦以用九和用六的辞占卜,并参考之卦卦辞,余六十二卦占以之卦卦辞  ----- 变卦 后 看,  之卦 含义,乾坤 用九和用六 ,其他卦全看",
    }

)

2 准备数据

然后定义64卦解释结构体,及其对应的名称和序号
当然以此为基础,我们还可以添加其他变量,如八字,生辰 从而获得一个取名程序

解卦结构体

type ICh struct {
        Num    int
        Warn   string
        AnySis map[int]string
}

func NewICin() *ICh {
        ic := &ICh{
                Num:    Num,
                Warn:   Warn,
                AnySis: AnySis,
        }
        return ic
}

func (ic *ICh) HowAnysis(num int) string {
        fmt.Println("朱熹解:")
        msg := "变爻:" + string(num) + "\n"
        if !AllowNums[num] {
                msg += ic.Warn + string(num)
                return msg
        }

        msg += ic.AnySis[num]
        fmt.Println(msg)
        return msg
}

对比两个列表是否相同 exp: [0,1,1,0,0,1]

func (ic *ICh) CompSlice(firstS, SecSlice []int) bool {
        if len(firstS) != len(SecSlice) {
                return false
        }
        for i := 0; i < len(firstS); i++ {
                if firstS[i] != SecSlice[i] {
                        return false
                }
        }
        return true
}

显示 卦象

func (ic *ICh) CommonType(array []int) {

        for _, g := range array {
                if g == 0 { // # 0 表示阴爻
                        fmt.Println("__ __ (阴)")
                } else if g == 1 { // # 1 表示阳爻
                        fmt.Println("_____ (阳)")
                } else {
                        fmt.Println("")

                }

        }
}

解释文本

func (ic *ICh) CommonText(arrays []int) (string, int) {
        if len(arrays) != ic.Num {
                return ic.Warn + fmt.Sprintf("%v", arrays), 0
        }

        if ic.CompSlice(arrays, []int{1, 1, 1, 1, 1, 1}) {
                return `
        第一卦 乾 乾为天 乾上乾下 

        ...........

3, 组合卦象并解卦

在计算运势的结构体中添加计算和解卦函数

6爻卦象 显示原始卦象, 返回卦值 和 第几卦

    func (dt *TaoBstManager) KanGuaOrigin(env string) ([]int, int) {

            fmt.Printf("%v", start)
            guas, bstm := dt.YaoWithReBuild(49, env)
            fmt.Println("卦象已出:")

            yaos, postionChanges := dt.AnysisYaos(guas)

            fmt.Printf("yaos: postionChanges:, %v, %v, bstree:%v\n", yaos, postionChanges, bstm.Size)
            anysis, numb := ICApp.CommonText(yaos)
            fmt.Printf("第%v 卦, \n %v", numb, anysis)
            return yaos, numb

    }

4 君子才能算,才可以计算

我们拿不定注意,不知道方向的时候,鲁莽或冲动都不是理智的,推算运势也是古人给我们留下的一点理性的光辉,以此我们可以做到三思而后行,万事多考虑。 也许不至于慌不择路,饥不择食。
调用它

btm := bstdata.BstNew
btm.KanGuaOrigin(env)

   卦象已出:
        __ __ (6 老阴)
        __ __ (8 少阴)
        _____ (9 老阳)
        _____ (9 老阳)
        __ __ (6 老阴)
        __ __ (8 少阴)
yaos: postionChanges:, [1 0 0 0 1 0], map[0:true 1:false 2:true 3:true 4:true 5:false], bstree:49
第3 卦,

                第三卦 屯 水雷屯 坎上震下
                ...

5 小结

人路在何方? 没有经费, 难免有错漏,如有兴趣或任何问题,可以留言,提出问题。谢谢。

目录
相关文章
|
8月前
|
测试技术 Go 开发者
Go 开发十种常犯错误(下)
Go 开发十种常犯错误
32 0
|
8月前
|
JSON 编译器 测试技术
Go 开发十种常犯错误(上)
Go 开发十种常犯错误
37 0
|
11月前
|
Go 数据库 Python
Bingo(Cytoscape插件)GO功能富集分析
转录组分析中基因的GO富集分析这步有很多软件可以选择,这次我们来介绍下如何利用Cytoscape软件中的一个简单又好用的Bingo小插件完成富集的工作,Cytoscape其实是一个做网络图的软件,所以使用Bingo的这种方法特别之处就在于富集的结果是可以直接以网络图的形式呈现,类似于下图这种效果,区别于其他的软件大多只生成表的形式。
444 0
|
Go Python
化整为零优化重用,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang函数的定义和使用EP07
函数是基于功能或者逻辑进行聚合的可复用的代码块。将一些复杂的、冗长的代码抽离封装成多个代码片段,即函数,有助于提高代码逻辑的可读性和可维护性。不同于Python,由于 Go lang是编译型语言,编译之后再运行,所以函数的定义顺序无关痛痒。
化整为零优化重用,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang函数的定义和使用EP07
|
存储 Go 索引
三分钟学 Go 语言——range深度解析
三分钟学 Go 语言——range深度解析
三分钟学 Go 语言——range深度解析
|
设计模式 Java 测试技术
三分钟学 Go 语言——函数深度解析(中)
三分钟学 Go 语言——函数深度解析(中)
三分钟学 Go 语言——函数深度解析(中)
|
开发框架 程序员 Go
发现了一款神仙级别的Go框架:GoFrame
最近发现了一款非常好用的基于go语言的web开发框架,非常适合PHP转Go的同学使用,在很多设计思想和使用上和PHP的Laravel框架非常像。
429 0
发现了一款神仙级别的Go框架:GoFrame
|
JavaScript 前端开发 Go
终于!Go 1.18 将支持泛型,来听听Go 核心技术团队 Russ Cox怎么说
终于!Go 1.18 将支持泛型,来听听Go 核心技术团队 Russ Cox怎么说
128 0
终于!Go 1.18 将支持泛型,来听听Go 核心技术团队 Russ Cox怎么说
|
Java Go
慢聊Go之GoVSJava之微观比较(9)|Go主题月
慢聊Go之GoVSJava之微观比较(9)|Go主题月
91 0
|
存储 Java Go
慢聊Go之GoVSJava之微观比较(7)|Go主题月
慢聊Go之GoVSJava之微观比较(7)|Go主题月
76 0

热门文章

最新文章