わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

1日1行カレンダー

いきなりですが問題です*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