four-pillars 0.1.1 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/four-pillars.rb +219 -29
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8cae18ae8469d23ee4f7114902d3bc722621bf2d6b09392968ad8854d4f8676a
|
4
|
+
data.tar.gz: 30ff71bb5aa3e3cdf255fbef1e1d99e76656673cdf49e5a3b2bb8222ebbab576
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a83c3eb9bf581259d968063279c1b9c1904f1eb59ab78df5144fbdbda0364d362afd05073287af5b653dbdf021dd8eab021d3a5c5b980f9af8a6edc8078d810
|
7
|
+
data.tar.gz: 251f178751f795ce3d171e3e61cbcaa36155caa4596649478fb373a7ed1ec5183e6dc32ed4c366c36e51bd0ac39099031c11b5c1e602d3d0adb2510d2e418e4a
|
data/lib/four-pillars.rb
CHANGED
@@ -7,6 +7,18 @@ class FourPillarsLogic
|
|
7
7
|
JYUNIUNSEI = ["長生","沐浴","冠帯","建禄","帝旺","衰","病","死","墓","絶","胎","養"]
|
8
8
|
GOGYO = ["木","火","土","金","水"]
|
9
9
|
KUUBOU = ["戌亥","申酉","午未","辰巳","寅卯","子丑"]
|
10
|
+
SHUGOSHIN = [["丁庚丙","丙戊","壬戊","甲庚","丙甲","丙甲戊","丁甲戊","丙壬","戊丙","丙辛"],
|
11
|
+
["丁庚甲","丙甲","甲壬","甲庚","丙甲","丙甲","丙甲丁","丙壬甲","丙甲","丙壬戊"],
|
12
|
+
["丙癸","丙癸","壬庚","甲庚","丙甲癸","丙戊甲","丙甲戊","己壬庚","庚丙戊","辛丙"],
|
13
|
+
["庚丁丙","丙癸","壬庚己","庚甲","丙甲癸","甲丙癸","丁甲庚","壬甲","戊辛","庚辛"],
|
14
|
+
["庚丁壬","癸丙","壬甲","甲庚","甲丙癸","丙甲癸","甲丁","壬甲","甲庚","丙甲辛"],
|
15
|
+
["癸庚丁","癸辛","壬庚","甲庚","甲癸丙","癸丙辛","壬戊丙","壬癸甲","壬庚辛","辛壬"],
|
16
|
+
["癸丁庚","癸丙","壬庚","壬庚","壬甲丙","癸丙辛","壬癸庚","壬癸乙","癸庚辛","辛壬"],
|
17
|
+
["癸","癸丙甲","壬庚","甲壬","丙癸甲","癸丙","丁甲","壬甲庚","辛甲","辛壬癸"],
|
18
|
+
["庚丁壬","丙癸","壬戊","甲庚丙","丙癸甲","丙癸","丁甲","壬甲","戊丁","丁甲"],
|
19
|
+
["癸庚丁甲","丙癸","壬","甲庚丙","丙癸","丙癸","丁甲丙","壬","甲庚","辛丙"],
|
20
|
+
["癸庚丁甲","癸辛甲","甲壬","甲庚","甲丙癸","甲丙","甲壬","壬甲","甲丙戊","辛甲癸"],
|
21
|
+
["癸丁丙戊","丙戊","甲戊庚","甲庚","甲丙","丙甲戊","丁甲丙","壬丙","戊丙庚","辛戊"]]
|
10
22
|
|
11
23
|
# 60干支表
|
12
24
|
def self.kanshi_array
|
@@ -72,7 +84,34 @@ class FourPillarsLogic
|
|
72
84
|
end
|
73
85
|
SETSUIRI_HASH, SETSUIRI_LIST = load_setsuiri
|
74
86
|
|
75
|
-
#
|
87
|
+
# 通変星
|
88
|
+
def self.tsuhensei(j_day,j_src) # 日柱の十干、月柱または年柱の十干
|
89
|
+
j = JIKKAN.index(j_day)
|
90
|
+
if j % 2 == 0 # 陽
|
91
|
+
jikkan = JIKKAN
|
92
|
+
else # 陰
|
93
|
+
jikkan = JIKKAN_IN
|
94
|
+
end
|
95
|
+
t = jikkan.index(j_src) - jikkan.index(j_day)
|
96
|
+
t += 10 if t < 0
|
97
|
+
TSUHENSEI[t]
|
98
|
+
end
|
99
|
+
|
100
|
+
def self.jyuniunsei(j_day,j_src) # 日柱の十干, 十二支
|
101
|
+
j = JIKKAN.index(j_day)
|
102
|
+
if j % 2 == 0 # 陽
|
103
|
+
jyunishi = JYUNISHI
|
104
|
+
else # 陰
|
105
|
+
jyunishi = JYUNISHI_IN
|
106
|
+
end
|
107
|
+
offset = [1,7,10,10,10,10,7,1,4,4][j] # 十二運表より求めたオフセット
|
108
|
+
ji = jyunishi.index(j_src)
|
109
|
+
JYUNIUNSEI[(ji + offset) % 12]
|
110
|
+
end
|
111
|
+
|
112
|
+
# TODO エネルギー
|
113
|
+
|
114
|
+
# 生年月日時間, 性別(大運の向きに使用)
|
76
115
|
attr_reader :birth_dt,:gender
|
77
116
|
|
78
117
|
def initialize(birth_dt,gender)
|
@@ -103,6 +142,12 @@ class FourPillarsLogic
|
|
103
142
|
(Date.new(y,m,1) - 1).day
|
104
143
|
end
|
105
144
|
|
145
|
+
# 今月の日数
|
146
|
+
def days_of_current_month
|
147
|
+
y,m,d,h,i = @birth_dt
|
148
|
+
Date.new(y,m,1).next_month.prev_day.day
|
149
|
+
end
|
150
|
+
|
106
151
|
# 前月の節入日
|
107
152
|
def setsuiri_of_previous_month
|
108
153
|
y,m,d,h,i = @birth_dt
|
@@ -115,6 +160,18 @@ class FourPillarsLogic
|
|
115
160
|
SETSUIRI_HASH[y*100+m] || [0,0]
|
116
161
|
end
|
117
162
|
|
163
|
+
# 翌月の節入日
|
164
|
+
def setsuiri_of_next_month
|
165
|
+
y,m,d,h,i = @birth_dt
|
166
|
+
if m == 12
|
167
|
+
y += 1
|
168
|
+
m = 1
|
169
|
+
else
|
170
|
+
m += 1
|
171
|
+
end
|
172
|
+
SETSUIRI_HASH[y*100+m] || [0,0]
|
173
|
+
end
|
174
|
+
|
118
175
|
# 生年月に対する節入日時を知っているか?
|
119
176
|
# このメソッドがfalseを返す場合、干支、蔵干が仮の節入日で計算されています。
|
120
177
|
def know_setsuiri?
|
@@ -201,20 +258,9 @@ class FourPillarsLogic
|
|
201
258
|
|
202
259
|
# 通変星(nil,月,年)
|
203
260
|
def tsuhensei
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
else # 陰
|
208
|
-
jikkan = JIKKAN_IN
|
209
|
-
end
|
210
|
-
j = jikkan.index(kanshi[0][0])
|
211
|
-
j_month = jikkan.index(kanshi[1][0])
|
212
|
-
j_year = jikkan.index(kanshi[2][0])
|
213
|
-
t_month = j_month - j
|
214
|
-
t_month += 10 if t_month < 0
|
215
|
-
t_year = j_year - j
|
216
|
-
t_year += 10 if t_year < 0
|
217
|
-
[nil,TSUHENSEI[t_month],TSUHENSEI[t_year]]
|
261
|
+
m = FourPillarsLogic::tsuhensei(kanshi[0][0],kanshi[1][0])
|
262
|
+
y = FourPillarsLogic::tsuhensei(kanshi[0][0],kanshi[2][0])
|
263
|
+
[nil,m,y]
|
218
264
|
end
|
219
265
|
|
220
266
|
# 蔵干通変星
|
@@ -240,20 +286,10 @@ class FourPillarsLogic
|
|
240
286
|
|
241
287
|
# 十二運星
|
242
288
|
def jyuniunsei
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
jyunishi = JYUNISHI_IN
|
248
|
-
end
|
249
|
-
offset = [1,7,10,10,10,10,7,1,4,4][j] # 十二運表より求めたオフセット
|
250
|
-
j_day = jyunishi.index(kanshi[0][1])
|
251
|
-
j_month = jyunishi.index(kanshi[1][1])
|
252
|
-
j_year = jyunishi.index(kanshi[2][1])
|
253
|
-
u_day = (j_day + offset) % 12
|
254
|
-
u_month = (j_month + offset) % 12
|
255
|
-
u_year = (j_year + offset) % 12
|
256
|
-
[JYUNIUNSEI[u_day],JYUNIUNSEI[u_month],JYUNIUNSEI[u_year]]
|
289
|
+
d = FourPillarsLogic::jyuniunsei(kanshi[0][0],kanshi[0][1])
|
290
|
+
m = FourPillarsLogic::jyuniunsei(kanshi[0][0],kanshi[1][1])
|
291
|
+
y = FourPillarsLogic::jyuniunsei(kanshi[0][0],kanshi[2][1])
|
292
|
+
[d,m,y]
|
257
293
|
end
|
258
294
|
|
259
295
|
def jyuniunsei_energy
|
@@ -300,6 +336,160 @@ class FourPillarsLogic
|
|
300
336
|
end
|
301
337
|
return arr
|
302
338
|
end
|
339
|
+
|
340
|
+
# 守護神
|
341
|
+
def shugoshin
|
342
|
+
# 日柱の十干と月柱の十二支
|
343
|
+
x = JIKKAN.index(kanshi[0][0])
|
344
|
+
y = JYUNISHI.index(kanshi[1][1])
|
345
|
+
SHUGOSHIN[y][x].split("")
|
346
|
+
end
|
347
|
+
|
348
|
+
# 宿命中殺
|
349
|
+
def shukumei
|
350
|
+
s = []
|
351
|
+
t = kuubou # 天中殺 0:上段, 1:下段
|
352
|
+
k = kanshi.map {|v| v[1] } # 日,月,年柱の干支
|
353
|
+
if t[0].include? k[2]
|
354
|
+
s += ["生年中殺"]
|
355
|
+
end
|
356
|
+
if t[0].include? k[1]
|
357
|
+
s += ["生月中殺"]
|
358
|
+
end
|
359
|
+
if t[1].include? k[0]
|
360
|
+
s += ["生日中殺"]
|
361
|
+
end
|
362
|
+
f = false
|
363
|
+
f = true if kanshi_as_number.include? 11 #甲戌
|
364
|
+
f = true if kanshi_as_number.include? 12 #乙亥
|
365
|
+
s += ["日座中殺"] if f
|
366
|
+
return s
|
367
|
+
end
|
368
|
+
|
369
|
+
def equivalent_kanshi(only_jikkan=false)
|
370
|
+
if only_jikkan
|
371
|
+
k = kanshi.map {|v| v[0] } # 日,月,年柱の十干
|
372
|
+
else
|
373
|
+
k = kanshi
|
374
|
+
end
|
375
|
+
if k[0] == k[1] && k[1] == k[2]
|
376
|
+
return [[0,1],[0,2],[1,2]]
|
377
|
+
elsif k[0] == k[1]
|
378
|
+
return [[0,1]]
|
379
|
+
elsif k[0] == k[2]
|
380
|
+
return [[0,2]]
|
381
|
+
elsif k[1] == k[2]
|
382
|
+
return [[1,2]]
|
383
|
+
else
|
384
|
+
return []
|
385
|
+
end
|
386
|
+
end
|
387
|
+
|
388
|
+
def on_distance?(j1,j2,d=6)
|
389
|
+
i = JYUNISHI.index(j1)
|
390
|
+
return j2 == JYUNISHI[(i+d) % 12]
|
391
|
+
end
|
392
|
+
|
393
|
+
# 律音
|
394
|
+
def ricchin
|
395
|
+
# 干支(十干・十二支)が同じ
|
396
|
+
equivalent_kanshi(false)
|
397
|
+
end
|
398
|
+
|
399
|
+
# 納音
|
400
|
+
def nacchin
|
401
|
+
# 十干が同じで十二支が 沖 の関係にある
|
402
|
+
v = []
|
403
|
+
eq = equivalent_kanshi(true)
|
404
|
+
eq.each do |e|
|
405
|
+
k0 = kanshi[e[0]][1]
|
406
|
+
k1 = kanshi[e[1]][1]
|
407
|
+
v += [e] if on_distance?(k0,k1,6)
|
408
|
+
end
|
409
|
+
return v
|
410
|
+
end
|
411
|
+
|
412
|
+
# 宿命大半会
|
413
|
+
def shukumei_daihankai
|
414
|
+
# 十干が同じで十二支が三合会局の関係にある
|
415
|
+
v = []
|
416
|
+
eq = equivalent_kanshi(true)
|
417
|
+
eq.each do |e|
|
418
|
+
k0 = kanshi[e[0]][1]
|
419
|
+
k1 = kanshi[e[1]][1]
|
420
|
+
v += [e] if on_distance?(k0,k1,4)
|
421
|
+
end
|
422
|
+
eq.each do |e|
|
423
|
+
k0 = kanshi[e[0]][1]
|
424
|
+
k1 = kanshi[e[1]][1]
|
425
|
+
v += [e] if on_distance?(k0,k1,8)
|
426
|
+
end
|
427
|
+
return v
|
428
|
+
end
|
429
|
+
|
430
|
+
# 大運 [順行 or 逆行, year] or [nil,nil](if gender is not male nor female)
|
431
|
+
def taiun
|
432
|
+
return [nil,nil] unless ['m','f'].include? @gender
|
433
|
+
k = gogyo_jikkan[2][0]
|
434
|
+
t = @birth_dt[3] * 60 + @birth_dt[4] # 生まれた時間
|
435
|
+
if (@gender == 'm' && k == "+") || (@gender == 'f' && k == '-')
|
436
|
+
order = "順行"
|
437
|
+
d = setsuiri[0] - birth_dt[2]
|
438
|
+
if d > 0 # A 生まれた日が節入り前の場合 (節入り日―誕生日+1)÷3
|
439
|
+
year = ((d + 1) / 3.0).round
|
440
|
+
elsif d == 0 # 節入り日
|
441
|
+
#〈順行〉節入時間「前」=1年 「後」=10年
|
442
|
+
if t <= setsuiri[1]
|
443
|
+
year = 1
|
444
|
+
else
|
445
|
+
year = 10
|
446
|
+
end
|
447
|
+
else # B 生まれた日が節入り後の場合 (誕生月の日数―誕生日+1+翌月の節入り日)÷3
|
448
|
+
s = days_of_current_month - birth_dt[2] + 1 + setsuiri_of_next_month[0]
|
449
|
+
year = (s / 3.0).round
|
450
|
+
end
|
451
|
+
else
|
452
|
+
order = "逆行"
|
453
|
+
if setsuiri?
|
454
|
+
#〈逆行〉節入時間「前」=10年 「後」=1年
|
455
|
+
if t < setsuiri[1]
|
456
|
+
year = 10
|
457
|
+
else
|
458
|
+
year = 1
|
459
|
+
end
|
460
|
+
else
|
461
|
+
year = (zokan_number / 3.0).round
|
462
|
+
end
|
463
|
+
end
|
464
|
+
return [order,year]
|
465
|
+
end
|
466
|
+
|
467
|
+
def taiun_table
|
468
|
+
order,year = taiun
|
469
|
+
return [] if order.nil?
|
470
|
+
d = order == '順行' ? 1 : -1
|
471
|
+
j_day = kanshi[0][0] # 日柱の十干
|
472
|
+
k = kanshi_as_number[1] - 1 # 月柱の干支番号
|
473
|
+
rows = []
|
474
|
+
# [0,1,"癸亥","偏印","死",2]
|
475
|
+
y1, y2 = 0, year
|
476
|
+
8.times do |i|
|
477
|
+
k_month = KANSHI_ARRAY[k] # 月柱の干支
|
478
|
+
t = FourPillarsLogic::tsuhensei(j_day,k_month[0])
|
479
|
+
j = FourPillarsLogic::jyuniunsei(j_day,k_month[1])
|
480
|
+
je = JYUNIUNSEI_ENERGY[j]
|
481
|
+
rows += [[y1,y2,k_month,t,j,je]]
|
482
|
+
if y1 == 0
|
483
|
+
y1 = year
|
484
|
+
else
|
485
|
+
y1 += 10
|
486
|
+
end
|
487
|
+
y2 += 10
|
488
|
+
k += d
|
489
|
+
k = 0 if k < 0 || 59 < k
|
490
|
+
end
|
491
|
+
return rows
|
492
|
+
end
|
303
493
|
end
|
304
494
|
|
305
495
|
if __FILE__ == $0
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: four-pillars
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yosei Ito
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-06-19 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A class which tells fortune by Four Pillar astrology(四柱推命).
|
14
14
|
email: y-itou@lumber-mill.co.jp
|
@@ -22,7 +22,7 @@ homepage: https://github.com/lumbermill/four-pillars
|
|
22
22
|
licenses:
|
23
23
|
- MIT
|
24
24
|
metadata: {}
|
25
|
-
post_install_message:
|
25
|
+
post_install_message:
|
26
26
|
rdoc_options: []
|
27
27
|
require_paths:
|
28
28
|
- lib
|
@@ -37,8 +37,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
37
37
|
- !ruby/object:Gem::Version
|
38
38
|
version: '0'
|
39
39
|
requirements: []
|
40
|
-
rubygems_version: 3.
|
41
|
-
signing_key:
|
40
|
+
rubygems_version: 3.2.15
|
41
|
+
signing_key:
|
42
42
|
specification_version: 4
|
43
43
|
summary: Four Pillar astrology
|
44
44
|
test_files: []
|