光暦作成プログラム2018年10月27日 18:32

光暦作成プログラムです。 ruby で作成いたしました。 csv形式(カンマ区切り)で出力いたします。
----  cal40.rb   ---------------------------------------------
# -*- coding: utf-8 -*-


require 'date'


def cal40 date
  ary = []
  (1 .. 9).each {|mm|
    max = 
    if mm.odd?
      41
    else
      if mm == 2 and date.leap?
        41
      else
        40
      end
    end
    
    (1 .. max).each {|dd|
      ary << [mm,dd]
    }
  }
  ary
end

---   hikari.rb  --------------------------------------------------------
def hikari n
	a = n % 9
	if a == 0
		9
	else
		a
	end
end

------   lightcal.rb  -----------------------

# coding: utf-8
require './cal40'
require 'date'
require './hikari'



def lightcal year

  date = Date.new(year,1,1)
  ary = (cal40 date).map {|elm| hikari(elm[0]+elm[1])}

  #year = 2018

  dates = (Date.new(year, 1, 1)...Date.new(year + 1, 1, 1)).to_a
  ary1 = dates.map {|d|
    [d.month,d.day]
  }
  ary2 = ary1.zip(ary)

  ary4 = []
  (1 .. 31).each {|n|
  
    h = {}
    ary2.select {|elm| elm.first[1] == n}.each {|tmp|
      h[tmp.first[0]] = tmp.last
    }
    ary5 = []
    (1 .. 12).each {|m|
      if h[m]
        ary5 << h[m]
      else
        ary5 << "" #"-"
      end
    }
    ary4 << ary5
    
  }
  ary4
end

nomal = lightcal 2018
leap = lightcal 2016

print "日\月,1,2,3,(3),4,5,6,7,8,9,10,11,12\n"

nomal.each_with_index {|elm,idx|
  if idx == 28
    elm[1] = leap[idx][1]
  end
  if idx < 22
    elm.insert(3,leap[idx][2])
  else
    elm.insert(3,"")
  end
  print idx+1,",",elm.join(","),"\n"
  
}


----------------------------------------------------------------------

出力結果

日\月,1,2,3,(3),4,5,6,7,8,9,10,11,12
1,2,6,3,4,4,7,7,7,7,8,2,2,2
2,3,7,4,5,5,8,8,8,8,9,3,3,3
3,4,8,5,6,6,5,9,9,9,1,4,4,4
4,5,9,6,7,7,6,1,1,1,2,5,5,5
5,6,1,7,8,8,7,2,2,2,3,6,6,6
6,7,2,8,9,9,8,3,3,3,4,7,7,7
7,8,3,9,1,1,9,4,4,4,5,8,8,8
8,9,4,1,2,2,1,5,5,5,6,9,9,9
9,1,5,2,3,3,2,6,6,6,7,1,1,1
10,2,6,3,4,4,3,7,7,7,8,2,2,2
11,3,3,4,5,5,4,8,8,8,9,3,3,3
12,4,4,5,6,6,5,6,9,9,1,9,4,4
13,5,5,6,7,7,6,7,1,1,2,1,5,5
14,6,6,7,8,8,7,8,2,2,3,2,6,6
15,7,7,8,9,9,8,9,3,3,4,3,7,7
16,8,8,9,1,1,9,1,4,4,5,4,8,8
17,9,9,1,2,2,1,2,5,5,6,5,9,9
18,1,1,2,3,3,2,3,6,6,7,6,1,1
19,2,2,3,4,4,3,4,7,7,8,7,2,2
20,3,3,4,5,5,4,5,8,8,9,8,3,3
21,4,4,5,6,6,5,6,9,9,1,9,1,4
22,5,5,6,7,7,6,7,1,1,2,1,2,5
23,6,6,4,,8,7,8,7,2,3,2,3,6
24,7,7,5,,9,8,9,8,3,4,3,4,7
25,8,8,6,,1,9,1,9,4,5,4,5,8
26,9,9,7,,2,1,2,1,5,6,5,6,9
27,1,1,8,,3,2,3,2,6,7,6,7,1
28,2,2,9,,4,3,4,3,7,8,7,8,2
29,3,3,1,,5,4,5,4,8,9,8,9,3
30,4,,2,,6,5,6,5,9,1,9,1,4
31,5,,3,,,6,,6,1,,1,,5