サイログ。

~雑多な記事置き場~

初心者レッスン

今回のお題は「カレンダーを作ってみよう」

ヲレ的回答はコレ。

require 'date'

def view_calender(date)
  first_date = Date.new(date.year, date.month, 1)
  last_date  = (first_date >> 1) - 1
  print sprintf("   %s %d\n", Date::MONTHNAMES[date.month], date.year)
  print "Su Mo Tu We Th Fr Sa\n"
  print ("   " * first_date.wday)
  (first_date..last_date).each{|day|
    print sprintf("%2d", day.mday)
    print day.wday == 6 ? "\n" : " "
  }
end

def main
  view_calender(Date.today)
end

if $0 == __FILE__
  main
end

「月の日数を返すメソッド」って無かったのね。
でも、月の最後の日を、「>> 1(1ヶ月先の日付を返す)」と「- 1(1日前の日付を返す)」
としたことでエレガントに実装できて満足。

ペアプロをしたHさん、Rubyがんばってくださいね。