RickBlog

恩返し

カレンダー作成問題[Ruby]

こちらの記事の1問目をやってみた。 blog.jnito.com

require 'date'

#今日
d = Date.today
#今月と今年
m_y = d.strftime("%B %Y")
#月初の曜日
fd = Date.parse(Date.today.strftime('%Y-%m-01'))
fd = fd.strftime("%a")
#月末の日付
ld = Date.new(Time.now.year, Time.now.month, -1).day

puts "      " << m_y
puts " Su Mo Tu We Th Fr Sa"

array = [] 
for num in 1..ld do
    array << num.to_s.rjust(3)
end
case fd
    when "Sun" then
       print ""
       blank_day = 0
    when "Mon" then
       print "   "
       blank_day = 1
    when "Tus" then
       print "      "
       blank_day = 2
    when "Wed" then
       print "         "
       blank_day = 3
    when "Thu" then
       print "            "
       blank_day = 4
    when "Fri" then
       print "               "
       blank_day = 5
    when "Sat" then
       print "                  "
       blank_day = 6
end

array.each do |day|
    print day
    day = day.to_i + blank_day
    if day.to_i % 7 == 0 then
        puts ""
    end
end

puts ""

fdのところがかなりいまいちだとは思った。

解いた方の記事を見た。 qiita.com

リファクタリングした。

require 'date'

#今日
d = Date.today
#今月と今年
m_y= d.strftime("%B %Y")
#月初の曜日(0~6)
fd = Date.new(d.year,d.mon,1).wday
#月末の日付
ld = Date.new(d.year, d.month, -1).day

puts "      " << m_y
puts " Su Mo Tu We Th Fr Sa"

array = [] 
for num in 1..ld do
    array << num.to_s.rjust(3)
end

fd.times do
    print "   "
end

array.each do |day|
    print day
    day = day.to_i + fd
    if day.to_i % 7 == 0 then
        puts ""
    end
end

puts ""

曜日を0~6の値で表すことでだいぶすっきりした!