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

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 【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 小结

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

目录
相关文章
|
JSON 编译器 测试技术
Go 开发十种常犯错误(上)
Go 开发十种常犯错误
51 0
|
测试技术 Go 开发者
Go 开发十种常犯错误(下)
Go 开发十种常犯错误
59 0
|
Go 调度
学习笔记之go语句的执行规则(观go核心编程36讲)
学习笔记之go语句的执行规则(观go核心编程36讲)
|
Go
Golang每日一练(leetDay0076) 第k大元素、组合总和III
Golang每日一练(leetDay0076) 第k大元素、组合总和III
118 0
三分钟学 Go 语言——函数深度解析(下) 可变参数
三分钟学 Go 语言——函数深度解析(下) 可变参数
三分钟学 Go 语言——函数深度解析(下) 可变参数
|
设计模式 Java 测试技术
三分钟学 Go 语言——函数深度解析(中)
三分钟学 Go 语言——函数深度解析(中)
三分钟学 Go 语言——函数深度解析(中)
|
存储 Go 索引
三分钟学 Go 语言——range深度解析
三分钟学 Go 语言——range深度解析
三分钟学 Go 语言——range深度解析
|
编译器 Go Windows
Go知识梳理
快速学习Go知识梳理
Go知识梳理
Go 开发常用操作技巧--字符串
Go 语言字符串的字节使用的是UTF-8编码,是一种变长的编码方式。使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
240 0
Go 开发常用操作技巧--字符串
|
Go
go导入包及函数声明【我的go学习第四课】
go导入包及函数声明【我的go学习第四课】
106 0