たのしい Ruby 第2版 第17章 Time クラスと Date クラス 練習問題(3)
問題は、以下のとおり
Date クラスを使って、今月の1日と月末の日付と曜日を求め、次のような形式でカレンダーを表示させてください
April 2013 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
私の回答は、以下です。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- # by Yuji Shimoda require "date" t = Date.today # Get the Month's First Day d_start = Date.new(t.year, t.month, 1) # Get the Month's Last Day d_end = Date.new(t.year, t.month, -1) # Print Header puts print " ",t.strftime("%B %Y"),"\n" print " Su Mo Tu We Th Fr Sa\n" # Get the day. Sun->0 Mon->1 ... Sat->6 wday = d_start.strftime("%w").to_i # Print Calendar print " " * wday for i in 1..d_end.day if wday != 6 if i < 10 print " ",i else print " ",i end wday += 1 else wday = 0 if i < 10 print " ",i,"\n" else print " ",i,"\n" end end end print "\n\n"
あんまり、スマートなソースではないですね。
模範解答は、以下のリンクを参照のこと。
http://www.notwork.org/tanoshiiruby2/answer/
以下、追記
西脇.rb の伊藤さんに、本問題を取り上げて頂きました。
第2版のコードは、gist に上げてます。
Chapter17_Practice3.rb
コードをレビューするなら、github 使うのが読みやすいし今っぽいですね。笑
ただ、伊藤さんの記事みたいにコードの処理を解説するならブログ形式に分がありますね。