zakuro 0.2.0 → 0.3.0

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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/lib/zakuro/calculation/cycle/abstract_remainder.rb +33 -20
  3. data/lib/zakuro/calculation/stella/lunar/abstract_location.rb +9 -7
  4. data/lib/zakuro/calculation/stella/lunar/choukei_value.rb +19 -0
  5. data/lib/zakuro/era/japan/reki.rb +1 -1
  6. data/lib/zakuro/version.rb +1 -1
  7. data/lib/zakuro/version/context.rb +1 -1
  8. data/lib/zakuro/version/daien/const/number.rb +55 -0
  9. data/lib/zakuro/version/daien/const/remainder.rb +53 -0
  10. data/lib/zakuro/version/daien/cycle/remainder.rb +59 -0
  11. data/lib/zakuro/version/daien/cycle/solar_term.rb +34 -0
  12. data/lib/zakuro/version/daien/daien.rb +36 -0
  13. data/lib/zakuro/version/daien/monthly/lunar_phase.rb +106 -0
  14. data/lib/zakuro/version/daien/range/annual_range.rb +39 -0
  15. data/lib/zakuro/version/daien/stella/lunar/adjustment.rb +240 -0
  16. data/lib/zakuro/version/daien/stella/lunar/localization.rb +44 -0
  17. data/lib/zakuro/version/daien/stella/lunar/location.rb +80 -0
  18. data/lib/zakuro/version/daien/stella/lunar/value.rb +75 -0
  19. data/lib/zakuro/version/daien/stella/origin/average_november.rb +34 -0
  20. data/lib/zakuro/version/daien/stella/origin/lunar_age.rb +62 -0
  21. data/lib/zakuro/version/daien/stella/origin/winter_solstice.rb +55 -0
  22. data/lib/zakuro/version/daien/stella/solar/adjustment.rb +93 -0
  23. data/lib/zakuro/version/daien/stella/solar/average.rb +98 -0
  24. data/lib/zakuro/version/daien/stella/solar/interval.rb +108 -0
  25. data/lib/zakuro/version/daien/stella/solar/location.rb +61 -0
  26. data/lib/zakuro/version/daien/stella/solar/value.rb +36 -0
  27. data/lib/zakuro/version/gihou/const/remainder.rb +0 -2
  28. data/lib/zakuro/version/gihou/cycle/remainder.rb +1 -6
  29. data/lib/zakuro/version/gihou/monthly/lunar_phase.rb +1 -1
  30. data/lib/zakuro/version/gihou/stella/lunar/location.rb +2 -8
  31. data/lib/zakuro/version/gihou/stella/lunar/value.rb +3 -2
  32. data/lib/zakuro/version/gihou/stella/solar/average.rb +1 -1
  33. data/lib/zakuro/version/senmyou/const/remainder.rb +0 -2
  34. data/lib/zakuro/version/senmyou/cycle/remainder.rb +1 -6
  35. data/lib/zakuro/version/senmyou/monthly/lunar_phase.rb +1 -1
  36. data/lib/zakuro/version/senmyou/stella/lunar/location.rb +2 -8
  37. data/lib/zakuro/version/senmyou/stella/lunar/value.rb +3 -2
  38. data/lib/zakuro/version/senmyou/stella/solar/average.rb +1 -1
  39. data/lib/zakuro/version/version_class_resolver.rb +4 -0
  40. data/lib/zakuro/version_factory.rb +1 -1
  41. metadata +25 -7
  42. data/lib/zakuro/version/taien/taien.rb +0 -19
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../../calculation/stella/lunar/choukei_value'
4
+
5
+ require_relative '../../cycle/remainder'
6
+
7
+ require_relative './adjustment'
8
+
9
+ # :nodoc:
10
+ module Zakuro
11
+ # :nodoc:
12
+ module Daien
13
+ # :nodoc:
14
+ module Lunar
15
+ #
16
+ # Value 月補正値
17
+ #
18
+ module Value
19
+ # @return [Output::Logger] ロガー
20
+ LOGGER = Output::Logger.new(location: 'lunar_value')
21
+
22
+ # :reek:TooManyStatements { max_statements: 9 }
23
+
24
+ #
25
+ # 月の運行による補正値を算出する
26
+ #
27
+ # @param [Cycle::LunarRemainder] remainder 月の大余小余
28
+ #
29
+ # @return [Integer] 補正値
30
+ #
31
+ def self.get(remainder:)
32
+ valid?(remainder: remainder)
33
+
34
+ day, minute = Calculation::Lunar::ChoukeiValue.remainder_without_second(
35
+ remainder: remainder
36
+ )
37
+
38
+ # 引き当て
39
+ row = Adjustment.specify(day: day, minute: minute)
40
+
41
+ value = row.value
42
+
43
+ # LOGGER.debug("value.per: #{value.per}")
44
+ # LOGGER.debug("row.denominator: #{row.denominator}")
45
+ # LOGGER.debug("value.stack: #{value.stack}")
46
+
47
+ minus_minute = Adjustment.minus_minute(day: day, minute: minute)
48
+
49
+ day = Calculation::Lunar::ChoukeiValue.rounded_day(
50
+ per: value.per, denominator: row.denominator, minute: minus_minute
51
+ )
52
+
53
+ # LOGGER.debug("day: #{day}")
54
+
55
+ value.stack + day
56
+ end
57
+
58
+ #
59
+ # 大余小余を検証する
60
+ #
61
+ # @param [Cycle::LunarRemainder] remainder 大余小余
62
+ #
63
+ # @return [True] 正しい(月の位相計算に使う大余小余)
64
+ # @return [True] 正しくない
65
+ #
66
+ def self.valid?(remainder:)
67
+ return if remainder.is_a?(Cycle::LunarRemainder)
68
+
69
+ raise ArgumentError, "unmatch parameter type: #{remainder.class}"
70
+ end
71
+ private_class_method :valid?
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './lunar_age'
4
+ require_relative './winter_solstice'
5
+
6
+ # :nodoc:
7
+ module Zakuro
8
+ # :nodoc:
9
+ module Daien
10
+ # :nodoc:
11
+ module Origin
12
+ #
13
+ # AverageNovember 11月経
14
+ #
15
+ module AverageNovember
16
+ #
17
+ # 11月経朔(冬至が含まれる月の1日)を求める
18
+ #
19
+ # @param [Integer] western_year 西暦年
20
+ #
21
+ # @return [Remainder] 11月経朔
22
+ #
23
+ def self.get(western_year:)
24
+ # 冬至
25
+ winter_solstice = WinterSolstice.get(western_year: western_year)
26
+ # 天正閏余
27
+ lunar_age = LunarAge.get(western_year: western_year)
28
+
29
+ winter_solstice.sub(lunar_age)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../../output/logger'
4
+
5
+ require_relative '../../const/number'
6
+
7
+ # :nodoc:
8
+ module Zakuro
9
+ # :nodoc:
10
+ module Daien
11
+ # :nodoc:
12
+ module Origin
13
+ #
14
+ # LunarAge 天正閏余
15
+ #
16
+ module LunarAge
17
+ # @return [Integer] 朔望月
18
+ SYNODIC_MONTH = Const::Number::Cycle::SYNODIC_MONTH
19
+ # @return [Integer] 一年
20
+ YEAR = Const::Number::Cycle::YEAR
21
+ # @return [Integer] 積年
22
+ TOTAL_YEAR = Const::Number::Stack::TOTAL_YEAR
23
+ # @return [Integer] 暦の開始年
24
+ BEGIN_YEAR = Const::Number::Stack::BEGIN_YEAR
25
+
26
+ # @return [Output::Logger] ロガー
27
+ LOGGER = Output::Logger.new(location: 'lunar_age')
28
+
29
+ # :reek:TooManyStatements { max_statements: 7 }
30
+
31
+ #
32
+ # 対象年の天正閏余(冬至より前にある11月経朔との差 = 月齢)を算出する
33
+ # 太陽と月の運動による補正値を算出し、その補正結果を返す
34
+ #
35
+ # @param [Integer] western_year 西暦年
36
+ #
37
+ # @return [Remainder] 天正閏余
38
+ #
39
+ def self.get(western_year:)
40
+ # 積年の開始から対象年までの年数
41
+ total = TOTAL_YEAR + western_year - BEGIN_YEAR
42
+
43
+ # 12朔望月に対する1年の余り(単位:分)
44
+ remainder_minute = YEAR - (SYNODIC_MONTH * 12)
45
+
46
+ # 朔望月に含まれなかった余り(単位:年)
47
+ remainder_year = total % SYNODIC_MONTH
48
+
49
+ LOGGER.debug("[01]: #{remainder_year}")
50
+
51
+ # 天正閏余
52
+ lunar_age = remainder_minute * remainder_year % SYNODIC_MONTH
53
+
54
+ LOGGER.debug("[02]: #{lunar_age}")
55
+
56
+ # 大余・小余に変換する
57
+ Cycle::Remainder.new(total: lunar_age)
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../../output/logger'
4
+
5
+ require_relative '../../const/number'
6
+
7
+ # :nodoc:
8
+ module Zakuro
9
+ # :nodoc:
10
+ module Daien
11
+ # :nodoc:
12
+ module Origin
13
+ #
14
+ # WinterSolstice 冬至
15
+ #
16
+ module WinterSolstice
17
+ # @return [Integer] 通余
18
+ REMAINDER_ALL_YEAR = Const::Number::Derivation::REMAINDER_ALL_YEAR
19
+ # @return [Integer] 60日
20
+ SIXTY_DAYS = Const::Number::Derivation::SIXTY_DAYS
21
+ # @return [Integer] 積年
22
+ TOTAL_YEAR = Const::Number::Stack::TOTAL_YEAR
23
+ # @return [Integer] 暦の開始年
24
+ BEGIN_YEAR = Const::Number::Stack::BEGIN_YEAR
25
+
26
+ # @return [Output::Logger] ロガー
27
+ LOGGER = Output::Logger.new(location: 'winter_solstice')
28
+
29
+ # :reek:TooManyStatements { max_statements: 6 }
30
+
31
+ #
32
+ # 対象年の前年の冬至を求める
33
+ #
34
+ # @param [Integer] western_year 西暦年
35
+ #
36
+ # @return [Remainder] 前年の冬至
37
+ #
38
+ def self.get(western_year:)
39
+ # 積年の開始から対象年までの年数
40
+ total = TOTAL_YEAR + western_year - BEGIN_YEAR
41
+ remainder_year = total % SIXTY_DAYS
42
+
43
+ LOGGER.debug("[01]:#{remainder_year}")
44
+
45
+ # 通余を使う
46
+ winter_solstice_minute = (remainder_year * REMAINDER_ALL_YEAR) % SIXTY_DAYS
47
+
48
+ LOGGER.debug("[02]:#{winter_solstice_minute}")
49
+
50
+ Cycle::Remainder.new(total: winter_solstice_minute)
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../cycle/solar_term'
4
+
5
+ require_relative '../../const/number'
6
+
7
+ # :nodoc:
8
+ module Zakuro
9
+ # :nodoc:
10
+ module Daien
11
+ # :nodoc:
12
+ module Solar
13
+ #
14
+ # Adjustment 24気損益眺朒(ちょうじく)数
15
+ #
16
+ module Adjustment
17
+ #
18
+ # Row 行データ
19
+ #
20
+ class Row
21
+ # @return [Integer] 眺朒(ちょうじく)積
22
+ attr_reader :stack
23
+ # @return [Integer] 眺朒(ちょうじく)数
24
+ attr_reader :per_term
25
+ # @return [Integer] 毎日差
26
+ attr_reader :per_day
27
+
28
+ #
29
+ # 初期化
30
+ #
31
+ # @param [Integer] stack 眺朒(ちょうじく)積
32
+ # @param [Integer] per_term 眺朒(ちょうじく)数
33
+ # @param [Integer] per_day 毎日差
34
+ #
35
+ def initialize(stack:, per_term:, per_day:)
36
+ @stack = stack
37
+ @per_term = per_term
38
+ @per_day = per_day
39
+ end
40
+
41
+ #
42
+ # 文字化
43
+ #
44
+ # @return [String] 文字
45
+ #
46
+ def to_s
47
+ "stack:#{@stack}, per_term:#{@per_term}, per_day:#{@per_day}"
48
+ end
49
+ end
50
+
51
+ # @return [Array<Row>] 24気損益眺朒(ちょうじく)数
52
+ MAP = {
53
+ touji: Row.new(stack: 0.0, per_term: +13.4524, per_day: -0.1886), # 冬至(とうじ)
54
+ shoukan: Row.new(stack: +176.0, per_term: +10.5564, per_day: -0.1634), # 小寒(しょうかん)
55
+ daikan: Row.new(stack: +314.0, per_term: +8.0408, per_day: -0.1446), # 大寒(だいかん)
56
+ risshun: Row.new(stack: +418.0, per_term: +5.8160, per_day: -0.1318), # 立春(りっしゅん)
57
+ usui: Row.new(stack: +491.0, per_term: +3.7987, per_day: -0.1240), # 雨水(うすい)
58
+ keichitsu: Row.new(stack: +535.0, per_term: +1.9265, per_day: -0.1240), # 啓蟄(けいちつ)
59
+ shunbun: Row.new(stack: +551.0, per_term: -0.2048, per_day: -0.1178), # 春分(しゅんぶん)
60
+ seimei: Row.new(stack: +535.0, per_term: -1.9968, per_day: -0.1190), # 清明(せいめい)
61
+ kokuu: Row.new(stack: +491.0, per_term: -3.7956, per_day: -0.1240), # 穀雨(こくう)
62
+ rikka: Row.new(stack: +418.0, per_term: -5.6626, per_day: -0.1324), # 立夏(りっか)
63
+ shouman: Row.new(stack: +314.0, per_term: -7.6555, per_day: -0.1436), # 小満(しょうまん)
64
+ boushu: Row.new(stack: +176.0, per_term: -9.9405, per_day: -0.1436), # 芒種(ぼうしゅ)
65
+ geshi: Row.new(stack: 0.0, per_term: -12.0819, per_day: +0.1436), # 夏至(げし)
66
+ shousho: Row.new(stack: -176.0, per_term: -9.7018, per_day: +0.1324), # 小暑(しょうしょ)
67
+ taisho: Row.new(stack: -314.0, per_term: -7.5450, per_day: +0.1240), # 大暑(たいしょ)
68
+ risshuu: Row.new(stack: -418.0, per_term: -5.5634, per_day: +0.1190), # 立秋(りっしゅう)
69
+ shosho: Row.new(stack: -491.0, per_term: -3.7038, per_day: +0.1178), # 処暑(しょしょ)
70
+ hakuro: Row.new(stack: -535.0, per_term: -1.8954, per_day: +0.1178), # 白露(はくろ)
71
+ shuubun: Row.new(stack: -551.0, per_term: +0.1783, per_day: +0.1240), # 秋分(しゅうぶん)
72
+ kanro: Row.new(stack: -535.0, per_term: +2.0042, per_day: +0.1318), # 寒露(かんろ)
73
+ soukou: Row.new(stack: -491.0, per_term: +3.8950, per_day: +0.1446), # 霜降(そうこう)
74
+ rittou: Row.new(stack: -418.0, per_term: +5.9214, per_day: +0.1634), # 立冬(りっとう)
75
+ shousetsu: Row.new(stack: -314.0, per_term: +8.1610, per_day: +0.1886), # 小雪(しょうせつ)
76
+ taisetsu: Row.new(stack: -176.0, per_term: +10.9010, per_day: +0.1886) # 大雪(たいせつ)
77
+ }.freeze
78
+
79
+ #
80
+ # 24気損益眺朒(ちょうじく)数の行データを特定する
81
+ #
82
+ # @param [Integer] index 連番(二十四節気)
83
+ #
84
+ # @return [Row] 行データ
85
+ #
86
+ def self.specify(index:)
87
+ key = Cycle::SolarTerm::ORDER[index]
88
+ Adjustment::MAP[key].clone
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../../calculation/stella/solar/abstract_average'
4
+
5
+ require_relative '../../const/remainder'
6
+
7
+ require_relative '../../cycle/solar_term'
8
+
9
+ require_relative '../origin/winter_solstice'
10
+
11
+ require_relative './location'
12
+
13
+ # :nodoc:
14
+ module Zakuro
15
+ # :nodoc:
16
+ module Daien
17
+ # :nodoc:
18
+ module Solar
19
+ #
20
+ # Average 平気(太陽軌道平均)
21
+ #
22
+ class Average < Calculation::Solar::AbstractAverage
23
+ #
24
+ # 初期化
25
+ #
26
+ # @param [Integer] western_year 西暦年
27
+ #
28
+ def initialize(western_year:)
29
+ solar_term = Average.first_solar_term(western_year: western_year)
30
+ super(solar_term: solar_term)
31
+ end
32
+
33
+ #
34
+ # 冬至から数えた1年データの月ごとに二十四節気を割り当てる
35
+ #
36
+ # @param [Array<Month>] annual_range 1年データ
37
+ #
38
+ # @return [Array<Month>] 1年データ
39
+ #
40
+ def set(annual_range:)
41
+ super(annual_range: annual_range)
42
+ end
43
+
44
+ #
45
+ # 計算開始する二十四節気を求める
46
+ #
47
+ # @param [Integer] western_year 西暦年
48
+ #
49
+ # @return [SolarTerm] 二十四節気
50
+ #
51
+ def self.first_solar_term(western_year:)
52
+ # 天正冬至
53
+ winter_solstice = Origin::WinterSolstice.get(western_year: western_year)
54
+
55
+ # 二十四節気(冬至)
56
+ solar_term = Cycle::SolarTerm.new(index: 0, remainder: winter_solstice)
57
+
58
+ first_solar_term_index = Average.calc_fist_solar_term_index(western_year: western_year)
59
+
60
+ # 対象の二十四節気まで戻す
61
+ solar_term.prev_by_index(first_solar_term_index)
62
+
63
+ solar_term
64
+ end
65
+
66
+ # :reek:TooManyStatements { max_statements: 6 }
67
+
68
+ #
69
+ # 計算開始する二十四節気番号を求める
70
+ #
71
+ # * 前提として入定気は冬至の手前にある
72
+ # * 例えば、定気が大雪であれば入定気は大雪の範囲内にある
73
+ # * 入定気は、定気の開始位置に重複しない限り、常に定気より後にある
74
+ # * 基本的に定気の一つ前から起算すれば、当時から求めた11月(閏10/閏11月)に二十四節気を割り当てられる
75
+ #
76
+ # @param [Integer] western_year 西暦年
77
+ #
78
+ # @return [Integer] 二十四節気番号
79
+ #
80
+ def self.calc_fist_solar_term_index(western_year:)
81
+ # 天正閏余
82
+ lunar_age = Origin::LunarAge.get(western_year: western_year)
83
+
84
+ solar_location = Solar::Location.new(lunar_age: lunar_age)
85
+ solar_location.run
86
+
87
+ solar_term_index = solar_location.index
88
+
89
+ # 入定気の一つ後の二十四節気まで戻す(ただし11月経朔が二十四節気上にある場合は戻さない)
90
+ # NOTE: 789年で大余0のパターンあり
91
+ solar_term_index += 1 unless solar_location.remainder.day.zero?
92
+
93
+ solar_term_index
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,108 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :nodoc:
4
+ module Zakuro
5
+ # :nodoc:
6
+ module Daien
7
+ # :nodoc:
8
+ module Solar
9
+ #
10
+ # Interval 入気定日加減数(二十四節気の間隔)
11
+ #
12
+ module Interval
13
+ #
14
+ # 気策の 15-664.7 を加減する
15
+ #
16
+ # @note 『歴代天文律暦等志彙編 七』中華書房 p.2224 盈縮分の行で加減した
17
+ #
18
+ # @return [Hash<Symbol, Cycle::Remainder>] 一覧
19
+ MAP = {
20
+ # 冬至(とうじ)・大雪(たいせつ)
21
+ touji: Cycle::Remainder.new(day: 14, minute: 1351, second: 7), # -2353
22
+ taisetsu: Cycle::Remainder.new(day: 14, minute: 1351, second: 7),
23
+ # 小寒(しょうかん)・小雪(しょうせつ)
24
+ shoukan: Cycle::Remainder.new(day: 14, minute: 1859, second: 7), # -1845
25
+ shousetsu: Cycle::Remainder.new(day: 14, minute: 1859, second: 7),
26
+ # 大寒(だいかん)・立冬(りっとう)
27
+ daikan: Cycle::Remainder.new(day: 14, minute: 2314, second: 7), # -1390
28
+ rittou: Cycle::Remainder.new(day: 14, minute: 2314, second: 7),
29
+ # 立春(りっしゅん)・霜降(そうこう)
30
+ risshun: Cycle::Remainder.new(day: 14, minute: 2728, second: 7), # -976
31
+ soukou: Cycle::Remainder.new(day: 14, minute: 2728, second: 7),
32
+ # 雨水(うすい)・寒露(かんろ)
33
+ usui: Cycle::Remainder.new(day: 15, minute: 76, second: 7), # -588
34
+ kanro: Cycle::Remainder.new(day: 15, minute: 76, second: 7),
35
+ # 啓蟄(けいちつ)・秋分(しゅうぶん)
36
+ keichitsu: Cycle::Remainder.new(day: 15, minute: 450, second: 7), # -214
37
+ shuubun: Cycle::Remainder.new(day: 15, minute: 450, second: 7),
38
+ # 春分(しゅんぶん)・白露(はくろ)
39
+ shunbun: Cycle::Remainder.new(day: 15, minute: 878, second: 7), # +214
40
+ hakuro: Cycle::Remainder.new(day: 15, minute: 878, second: 7),
41
+ # 清明(せいめい)・処暑(しょしょ)
42
+ seimei: Cycle::Remainder.new(day: 15, minute: 1252, second: 7), # +588
43
+ shosho: Cycle::Remainder.new(day: 15, minute: 1252, second: 7),
44
+ # 穀雨(こくう)・立秋(りっしゅう)
45
+ kokuu: Cycle::Remainder.new(day: 15, minute: 1640, second: 7), # +976
46
+ risshuu: Cycle::Remainder.new(day: 15, minute: 1640, second: 7),
47
+ # 立夏(りっか)・大暑(たいしょ)
48
+ rikka: Cycle::Remainder.new(day: 15, minute: 2054, second: 7), # +1390
49
+ taisho: Cycle::Remainder.new(day: 15, minute: 2054, second: 7),
50
+ # 小満(しょうまん)・小暑(しょうしょ)
51
+ shouman: Cycle::Remainder.new(day: 15, minute: 2509, second: 7), # +1845
52
+ shousho: Cycle::Remainder.new(day: 15, minute: 2509, second: 7),
53
+ # 芒種(ぼうしゅ)・夏至(げし)
54
+ boushu: Cycle::Remainder.new(day: 15, minute: 3017, second: 7), # +2353
55
+ geshi: Cycle::Remainder.new(day: 15, minute: 3017, second: 7)
56
+ }.freeze
57
+
58
+ # @return [Array<Remainder>] 索引
59
+ LIST = [
60
+ MAP[:touji], # 0
61
+ MAP[:shoukan], # 1
62
+ MAP[:daikan], # 2
63
+ MAP[:risshun], # 3
64
+ MAP[:usui], # 4
65
+ MAP[:keichitsu], # 5
66
+ MAP[:shunbun], # 6
67
+ MAP[:seimei], # 7
68
+ MAP[:kokuu], # 8
69
+ MAP[:rikka], # 9
70
+ MAP[:shouman], # 10
71
+ MAP[:boushu], # 11
72
+ MAP[:geshi], # 12
73
+ MAP[:shousho], # 13
74
+ MAP[:taisho], # 14
75
+ MAP[:risshuu], # 15
76
+ MAP[:shosho], # 16
77
+ MAP[:hakuro], # 17
78
+ MAP[:shuubun], # 18
79
+ MAP[:kanro], # 19
80
+ MAP[:soukou], # 20
81
+ MAP[:rittou], # 21
82
+ MAP[:shousetsu], # 22
83
+ MAP[:taisetsu] # 23
84
+ ].freeze
85
+
86
+ #
87
+ # 入気定日加減数を引き当てる
88
+ #
89
+ # @param [Integer] index 二十四節気番号
90
+ #
91
+ # @return [Cycle::Remainder] 入気定日加減数
92
+ #
93
+ def self.index_of(index)
94
+ LIST[index]
95
+ end
96
+
97
+ #
98
+ # 入気定日加減数の総数を返す
99
+ #
100
+ # @return [Integer] 入気定日加減数の総数
101
+ #
102
+ def self.size
103
+ LIST.size
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end