Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# YI 周易算法
# YI 周易算法 #


TimeQiGua()
Expand All @@ -12,3 +12,8 @@ NumberQiGua()
下卦:int
上卦:int
变数:int


### [数理简介](./docs/数理简介.md) ###
### [八卦](https://baike.baidu.com/item/%E5%85%AB%E5%8D%A6/166475?sefr=cr) ###
### [六十四卦](https://baike.baidu.com/item/%E5%85%AD%E5%8D%81%E5%9B%9B%E5%8D%A6) ###
6 changes: 3 additions & 3 deletions dayan.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ var daYanList map[int]*DaYan
func init() {
daYanList = make(map[int]*DaYan)

file_81shu, err := DataFiles.Open("data/81shu.csv")
file81shu, err := DataFiles.Open("data/81shu.csv")
if err != nil {
panic(err)
}

records, err := readData(file_81shu)
records, err := readData(file81shu)

if err != nil {
panic(err)
Expand Down Expand Up @@ -57,7 +57,7 @@ func init() {
}
}

//IsNotSuitableSex 女性不宜此数
// IsNotSuitableGirl 女性不宜此数
func (dy DaYan) IsNotSuitableGirl() bool {
return dy.NvMing == "凶"
}
Expand Down
2 changes: 1 addition & 1 deletion docs/数理简介.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@
对原有卦象取爻变(对应线取反)即得变卦,通常预示着所占卜之事的最终结果,

后边八卦由上下两卦生成八十一象,称为“矩”,与《老子》、《道德经》中81章对应,
这部分,[《八卦九象和《老子》的创作方法、分章及章序》](https://zhuanlan.zhihu.com/p/90606767)有详述,
这部分,[《八卦九象和《老子》的创作方法、分章及章序》](https://zhuanlan.zhihu.com/p/90606767) 有详述,

本项目对于81象吉凶以“大衍之数”冠名
2 changes: 0 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
module yi

go 1.16

replace github.com/godcong/yi => ../yi
52 changes: 32 additions & 20 deletions guaxiang.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,34 +5,46 @@ import (
"strconv"
)

type Yao int

const (
ChuYao Yao = iota
ErYao
SanYao
SiYao
WuYao
ShangYao
YaoMax
)

//GuaXiang 卦象
type GuaXiang struct {
GuaXu int //卦序
ShangGua string //上卦
ShangShu int //上卦数
XiaGua string //下卦
XiaShu int //下卦数
JiXiong string //吉凶(?)
GuaXiang string //卦象
GuaMing string //卦名
GuaYi string //卦意(邵雍)
FuHao string //符号
GuaYaos [6]*GuaYao //初,二,三,四,五,上
Yong string //用九,用六
YongJiXiong string //用九,用六吉凶
GuaXu int //卦序
ShangGua string //上卦
ShangShu int //上卦数
XiaGua string //下卦
XiaShu int //下卦数
JiXiong string //吉凶(?)
GuaXiang string //卦象
GuaMing string //卦名
GuaYi string //卦意(邵雍)
FuHao string //符号
GuaYaos [YaoMax]*GuaYao //初,二,三,四,五,上
Yong string //用九,用六
YongJiXiong string //用九,用六吉凶
}

var gx map[string]*GuaXiang

func init() {
gx = make(map[string]*GuaXiang)

file_64gua, err := DataFiles.Open("data/64gua.csv")
file64gua, err := DataFiles.Open("data/64gua.csv")
if err != nil {
panic(err)
}

records, err := readData(file_64gua)
records, err := readData(file64gua)

if err != nil {
panic(err)
Expand Down Expand Up @@ -109,19 +121,19 @@ func init() {
}
guaxiang.GuaYaos[5] = &guyao6

gx_index := record[1]
if len(gx_index) < 1 {
gxIndex := record[1]
if len(gxIndex) < 1 {
panic("index is wrong")
}

gx[gx_index] = &guaxiang
gx[gxIndex] = &guaxiang
}
}

func getGuaXiangs() map[string]*GuaXiang {
return gx
}

func GetGuaXiang(gua_idx string) *GuaXiang {
return gx[gua_idx]
func GetGuaXiang(guaIdx string) *GuaXiang {
return gx[guaIdx]
}
47 changes: 44 additions & 3 deletions guaxiang_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,50 @@ import (
"testing"
)

func TestGetGuaXiang(t *testing.T) {
if len(getGuaXiangs()) != 64 {
t.Log("not enough", getGuaXiangs())
func TestGetGuaXiang1(t *testing.T) {
gx := getGuaXiangs()
if len(gx) != 64 {
t.Fatal("not enough", len(gx))
}
for i := range gx {
t.Logf("idx(%+v):%+v", i, gx[i])
}
}

func TestGetGuaXiang(t *testing.T) {
type args struct {
guaIdx string
}
tests := []struct {
name string
args args
want *GuaXiang
}{
// TODO: Add more cases.
{
name: "",
args: args{
guaIdx: "兑艮",
},
want: &GuaXiang{
GuaXu: 31,
ShangShu: 1,
XiaShu: 6,
},
},
}
for _, tt := range tests {
t.Run(
tt.name, func(t *testing.T) {
got := GetGuaXiang(tt.args.guaIdx)
t.Logf("卦象:%+v", got)
if got.ShangShu != tt.want.ShangShu {
t.Errorf("GetGuaXiang() = %v, want %v", got, tt.want)
}
if got.XiaShu != tt.want.XiaShu {
t.Errorf("GetGuaXiang() = %v, want %v", got, tt.want)
}
},
)
}
}
2 changes: 2 additions & 0 deletions guayao.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ func getGuaYao(xiang *GuaXiang, yao int) GuaYao {
return *xiang.GuaYaos[yao]
}

//FilterYao 过滤爻
func (y *Yi) FilterYao(sex Sex, fs ...string) bool {
yao := getGuaYao(y.Get(BianGua), y.BianYao())
for _, s := range fs {
Expand All @@ -35,6 +36,7 @@ func (y *Yi) FilterYao(sex Sex, fs ...string) bool {
return true
}

//IsLucky 是否为吉
func (y *Yi) IsLucky(sex Sex) bool {
yao := getGuaYao(y.Get(BianGua), y.BianYao())

Expand Down
27 changes: 14 additions & 13 deletions wuxing.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package yi

type YingYang int

const (
Yin = 1
Yang = 0
Yin YingYang = 1 //阴
Yang YingYang = 0 //阳
)

const (
Expand All @@ -22,29 +24,28 @@ const wuXingList string = "水木木火火土土金金水"

//五行
const (
MU int = iota + 1
HUO
TU
JIN
SHUI
MU int = iota + 1 //木
HUO //火
TU //土
JIN //金
SHUI //水
)

func YinYang(i int) int {
if i%2 == Yang {
func ModeYinYang(i int) YingYang {
if i%2 == 0 {
return Yang
}
return Yin
}

func YinYangAttr(i int) string {
if YinYang(i) == Yang {
func (yy YingYang) String() string {
if yy == 0 {
return YangStr
}

return YinStr
}

// GenerateThreeTalent 计算字符的三才属性
// NumberWuXing 计算字符的三才属性
// 1-2木:1为阳木,2为阴木
// 3-4火:3为阳火,4为阴火
// 5-6土:5为阳土,6为阴土
Expand Down
Loading