four-pillars 0.1.11 → 0.1.13

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/four-pillars.rb +89 -34
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a818b39dbae62220f0a31ecc07ca3aa7b2687e124e4879f6e00ae3c7d0b6c3de
4
- data.tar.gz: 5ec29c45267f1d28ef2779d3c797fab7a9625f3d908c2b61ddc0475242ae99ee
3
+ metadata.gz: 41fdb5b30e28ee0b2b8be1d7bc0cc58dbe672f035a268d384e4398d6a6cbd760
4
+ data.tar.gz: f02566969d22fce3073674a84ac6e3cace539b85de464bf8aa1d56b014b0f91f
5
5
  SHA512:
6
- metadata.gz: 400f2ac2e428685dcdef13a37ca42c36d5772c39dcfbadbbc8326274d528559f911a9189c058a441461d5467ad196fc31bce821bbe8c098ba9a9e17f34be73bb
7
- data.tar.gz: 1c57b9bd51cce83a2821a3fa43f7b36d9418a15eb83d3fa933535a874aa951f3b7f666478b2504b9f808d0f2c767a54bcf24c3124537e1696d01886385e2d267
6
+ metadata.gz: 8de4a9a086a69ffbb9f64ebf85b5cda0181b62e47740aebb7ae698a56e7f88af3fde518d95d4d70ef7cccc53347f822d67ce5821924015480e5745e63749b159
7
+ data.tar.gz: 24f4212abf99ee7d10c34dae35f41f196097a5fb00f829118e372abb8318e2b15438a4a9f59f43c5ebb6ca3442413b449371ac84ffd8dbd6350fc9ed39efbb99
data/lib/four-pillars.rb CHANGED
@@ -7,7 +7,7 @@ class FourPillarsLogic
7
7
  JYUNIUNSEI = ["長生","沐浴","冠帯","建禄","帝旺","衰","病","死","墓","絶","胎","養"]
8
8
  GOGYO = ["木","火","土","金","水"]
9
9
  KUUBOU = ["戌亥","申酉","午未","辰巳","寅卯","子丑"]
10
- SHUGOSHIN = [["丁庚丙","丙戊","壬戊","甲庚","丙甲","丙甲戊","丁甲戊","丙壬","戊丙","丙辛"],
10
+ SHUGOSHIN = [["丁庚丙","丙戊","壬戊","甲庚","丙甲","丙甲戊","丁甲丙","丙壬","戊丙","丙辛"],
11
11
  ["丁庚甲","丙甲","甲壬","甲庚","丙甲","丙甲","丙甲丁","丙壬甲","丙甲","丙壬戊"],
12
12
  ["丙癸","丙癸","壬庚","甲庚","丙甲癸","丙戊甲","丙甲戊","己壬庚","庚丙戊","辛丙"],
13
13
  ["庚丁丙","丙癸","壬庚己","庚甲","丙甲癸","甲丙癸","丁甲庚","壬甲","戊辛","庚辛"],
@@ -118,12 +118,17 @@ class FourPillarsLogic
118
118
  # 生年月日時間, 性別(大運の向きに使用)
119
119
  attr_reader :birth_dt, :gender
120
120
 
121
- def initialize(birth_dt,gender)
122
- @birth_dt = birth_dt.map {|v| v.to_i }
121
+ def initialize(birth_dt,gender,with_time:false)
122
+ @birth_dt = birth_dt.map {|v| v.nil? ? nil : v.to_i }
123
123
  @gender = gender
124
+ @with_time = with_time
124
125
  raise "Incorrect birth date: #{birth_dt}" if @birth_dt.count != 5
125
126
  raise "Gender must be m,f or o(other): #{gender}" unless ['o','m','f'].include? @gender
126
127
  raise "Year must be larger than 1863" if @birth_dt[0] < 1864
128
+ h = @birth_dt[3]
129
+ if !h.nil? && (h < 0 || h > 23)
130
+ raise "Invalid hour: #{birth_dt}"
131
+ end
127
132
  end
128
133
 
129
134
  # 生年月日と性別
@@ -137,7 +142,12 @@ class FourPillarsLogic
137
142
  else
138
143
  g = ""
139
144
  end
140
- "#{y}年#{m}月#{d}日#{h}時#{i}分生 #{g}"
145
+ if h.nil? || i.nil?
146
+ t = ""
147
+ else
148
+ t = "#{h}時#{i}分"
149
+ end
150
+ "#{y}年#{m}月#{d}日#{t}生 #{g}"
141
151
  end
142
152
 
143
153
  # 前月の日数
@@ -196,7 +206,8 @@ class FourPillarsLogic
196
206
  setsuiri[0] == d
197
207
  end
198
208
 
199
- # 干支(日,月,年)
209
+ # 干支((時,)日,月,年)
210
+ # with_time=trueの時、時柱を含め長さ4の配列を返す
200
211
  def kanshi
201
212
  y,m,d,h,i = @birth_dt
202
213
  sd, st = setsuiri
@@ -206,7 +217,17 @@ class FourPillarsLogic
206
217
  md -= 1 if d < sd || (d == sd && h*60+i < st)
207
218
  dd = Date.new(y,m,d) - Date.new(1863,12,31) # 1923.10.18 = 甲子
208
219
 
209
- return [KANSHI_ARRAY[dd % 60],KANSHI_ARRAY[md % 60],KANSHI_ARRAY[yd % 60]]
220
+ return [KANSHI_ARRAY[dd % 60],KANSHI_ARRAY[md % 60],KANSHI_ARRAY[yd % 60]] unless @with_time
221
+
222
+ dp = KANSHI_ARRAY[dd % 60] # 日柱
223
+ if h.nil?
224
+ tp = nil
225
+ else
226
+ jyunishi_idx = h == 23 ? 0 : ((h + 1) / 2)
227
+ jikkan_idx = ((JIKKAN.index(dp[0]) % 5) * 2 + jyunishi_idx) % 10
228
+ tp = JIKKAN[jikkan_idx] + JYUNISHI[jyunishi_idx]
229
+ end
230
+ return [tp,dp,KANSHI_ARRAY[md % 60],KANSHI_ARRAY[yd % 60]]
210
231
  end
211
232
 
212
233
  # 干支(数字)
@@ -262,49 +283,83 @@ class FourPillarsLogic
262
283
 
263
284
  # 通変星(nil,月,年)
264
285
  def tsuhensei
265
- m = FourPillarsLogic::tsuhensei(kanshi[0][0],kanshi[1][0])
266
- y = FourPillarsLogic::tsuhensei(kanshi[0][0],kanshi[2][0])
267
- [nil,m,y]
286
+ if @with_time
287
+ m = FourPillarsLogic::tsuhensei(kanshi[1][0],kanshi[2][0])
288
+ y = FourPillarsLogic::tsuhensei(kanshi[1][0],kanshi[3][0])
289
+ t = FourPillarsLogic::tsuhensei(kanshi[1][0],kanshi[0][0])
290
+ [t,nil,m,y]
291
+ else
292
+ m = FourPillarsLogic::tsuhensei(kanshi[0][0],kanshi[1][0])
293
+ y = FourPillarsLogic::tsuhensei(kanshi[0][0],kanshi[2][0])
294
+ [nil,m,y]
295
+ end
268
296
  end
269
297
 
270
298
  # 蔵干通変星
271
299
  def zokan_tsuhensei
272
- j = JIKKAN.index(kanshi[0][0])
273
- if j % 2 == 0 # 陽
274
- jikkan = JIKKAN
275
- else #
276
- jikkan = JIKKAN_IN
300
+ if @with_time
301
+ j = JIKKAN.index(kanshi[1][0])
302
+ if j % 2 == 0 # 陽
303
+ jikkan = JIKKAN
304
+ else #
305
+ jikkan = JIKKAN_IN
306
+ end
307
+ j = jikkan.index(kanshi[1][0])
308
+ j_time = jikkan.index(zokan[0])
309
+ j_day = jikkan.index(zokan[1])
310
+ j_month = jikkan.index(zokan[2])
311
+ j_year = jikkan.index(zokan[3])
312
+ t_time = j_time - j
313
+ t_time += 10 if t_time < 0
314
+ t_day = j_day - j
315
+ t_day += 10 if t_day < 0
316
+ t_month = j_month - j
317
+ t_month += 10 if t_month < 0
318
+ t_year = j_year - j
319
+ t_year += 10 if t_year < 0
320
+ [TSUHENSEI[t_time],TSUHENSEI[t_day],TSUHENSEI[t_month],TSUHENSEI[t_year]]
321
+ else
322
+ j = JIKKAN.index(kanshi[0][0])
323
+ if j % 2 == 0 # 陽
324
+ jikkan = JIKKAN
325
+ else # 陰
326
+ jikkan = JIKKAN_IN
327
+ end
328
+ j = jikkan.index(kanshi[0][0])
329
+ j_day = jikkan.index(zokan[0])
330
+ j_month = jikkan.index(zokan[1])
331
+ j_year = jikkan.index(zokan[2])
332
+ t_day = j_day - j
333
+ t_day += 10 if t_day < 0
334
+ t_month = j_month - j
335
+ t_month += 10 if t_month < 0
336
+ t_year = j_year - j
337
+ t_year += 10 if t_year < 0
338
+ [TSUHENSEI[t_day],TSUHENSEI[t_month],TSUHENSEI[t_year]]
277
339
  end
278
- j = jikkan.index(kanshi[0][0])
279
- j_day = jikkan.index(zokan[0])
280
- j_month = jikkan.index(zokan[1])
281
- j_year = jikkan.index(zokan[2])
282
- t_day = j_day - j
283
- t_day += 10 if t_day < 0
284
- t_month = j_month - j
285
- t_month += 10 if t_month < 0
286
- t_year = j_year - j
287
- t_year += 10 if t_year < 0
288
- [TSUHENSEI[t_day],TSUHENSEI[t_month],TSUHENSEI[t_year]]
289
340
  end
290
341
 
291
342
  # 十二運星
292
343
  def jyuniunsei
293
- d = FourPillarsLogic::jyuniunsei(kanshi[0][0],kanshi[0][1])
294
- m = FourPillarsLogic::jyuniunsei(kanshi[0][0],kanshi[1][1])
295
- y = FourPillarsLogic::jyuniunsei(kanshi[0][0],kanshi[2][1])
296
- [d,m,y]
344
+ o = @with_time ? 1 : 0
345
+ d = FourPillarsLogic::jyuniunsei(kanshi[o][0],kanshi[0 + o][1])
346
+ m = FourPillarsLogic::jyuniunsei(kanshi[o][0],kanshi[1 + o][1])
347
+ y = FourPillarsLogic::jyuniunsei(kanshi[o][0],kanshi[2 + o][1])
348
+ return [d,m,y] unless @with_time
349
+ t = FourPillarsLogic::jyuniunsei(kanshi[o][0],kanshi[0][1])
350
+ [t,d,m,y]
297
351
  end
298
352
 
299
- # 十二運星エネルギー
353
+ # 十二運星エネルギー 時中は使わない?
300
354
  def jyuniunsei_energy
301
355
  jyuniunsei.map {|v| JYUNIUNSEI_ENERGY[v] }
302
356
  end
303
357
 
304
358
  # 空亡 = 天中殺
305
359
  def kuubou
306
- k_day = (kanshi_as_number[0] - 1) / 10
307
- k_year = (kanshi_as_number[2] - 1) / 10
360
+ o = @with_time ? 1 : 0
361
+ k_day = (kanshi_as_number[0 + o] - 1) / 10
362
+ k_year = (kanshi_as_number[2 + o] - 1) / 10
308
363
  [KUUBOU[k_day],KUUBOU[k_year]]
309
364
  end
310
365
 
@@ -324,7 +379,7 @@ class FourPillarsLogic
324
379
  # 五行(十干)
325
380
  def gogyo_jikkan
326
381
  arr = []
327
- 3.times do |i|
382
+ kanshi.length.times do |i|
328
383
  j = JIKKAN.index(kanshi[i][0])
329
384
  arr += [(j % 2 == 0 ? "+" : "-") + GOGYO[j / 2]]
330
385
  end
@@ -335,7 +390,7 @@ class FourPillarsLogic
335
390
  def gogyo_jyunishi
336
391
  arr = []
337
392
  gogyo_j = ["水","土","木","木","土","火","火","土","金","金","土","水"]
338
- 3.times do |i|
393
+ kanshi.length.times do |i|
339
394
  j = JYUNISHI.index(kanshi[i][1])
340
395
  arr += [(j % 2 == 0 ? "+" : "-") + gogyo_j[j]]
341
396
  end
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.11
4
+ version: 0.1.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yosei Ito
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-17 00:00:00.000000000 Z
11
+ date: 2024-08-20 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
@@ -37,7 +37,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
37
37
  - !ruby/object:Gem::Version
38
38
  version: '0'
39
39
  requirements: []
40
- rubygems_version: 3.3.7
40
+ rubygems_version: 3.5.16
41
41
  signing_key:
42
42
  specification_version: 4
43
43
  summary: Four Pillar astrology