いきなりですが問題です*1.
カレンダーを生成するプログラムを作ってください.
- 1日1行で,1行の形式は「2007年12月30日(日)」とします.
- 祝日や休日は無視します.
- 開始日と終了日は,プログラムの中で直接指定します.
恣意的な仕様を書いたところで,早速,回答を.
#!/usr/bin/env ruby require 'date' from = [2007, 12, 1] to = [2008, 3, 31] d_from = Date.new(*from) d_to = Date.new(*to) week = %w(日 月 火 水 木 金 土) d_from.upto(d_to) do |d| puts d.strftime("%Y年%m月%d日") + "(#{week[d.wday]})" end
技術メモ:
- 「Date.new(*from)」を「Date.new(from)」と書くとうまくいきません.後者は引数が一つだけ.前者のように「*」をつけてArrayオブジェクトを書くことで,各要素が引数になり*2,「Date.new(2007, 12, 1)」と等価となります.
- uptoメソッドは,整数だけでなくDate型オブジェクトにも使用できます.
年末年始も修士論文・卒業論文,という人は,これを実行して印刷して,残り日数の少なさを再確認し,1日1行,したことを記録していくのはいかがでしょうか.
*1:http://ja.doukaku.org/topic/には見当たらず.って,まあ,そこに出すつもりもないのですが.
*2:http://phobos.ike.tottori-u.ac.jp/rubydoc/_A5_E1_A5_BD_A5_C3_A5_C9_B8_C6_A4_D3_BD_D0_A4_B7.html