気ままなタンス*プログラミングなどのノートブック

プログラミングやRPGツクール、DTM、VOCALOIDについてのんびり書きます。

【Ruby】自分用練習問題 カレンダー

カレンダー作るよ!

コマンドラインからYYYYMM形式で年月を受け取り、 カレンダーを作成する。

  • 日付に-1を指定すると、月末日付が取得可能
  • 曜日(日〜土:0〜6の7個の数字)を取得するには、 日付クラスのメソッドwdayを利用すれば良い

まだRubyっぽいソースコードは書けない。
手続きっぽくなってだめだなー。

ソースコード

equire "date"

str = ARGV[0]

t1 = Date.new(str[0,4].to_i, str[4,2].to_i, 1)
year = t1.year
month = t1.month
day = t1.day

t2 = Date.new(year, month, -1)
day2 = t2.day

wday = Date.new(year, month, day).wday

puts year.to_s + "" + month.to_s + ""
puts "Su Mo Tu We Th Fr Sa"

wday.times{|x|
 print "   "
}

day2.times{|i|
 if wday >= 7
  wday = wday % 7
  puts ""
 end
 printf("%2s ", (i+1).to_s)
 wday += 1
}

puts ""
実行結果 
#ruby calendar.rb 201303 
20133Su 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 
31

#ruby calendar.rb 201301
20131Su 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 31 
  1. 変数名の付け方が気に入らない
  2. day2.timesのブロックを見て嫌になる(そのせいで主に肺から空気が漏れそう)
  3. コマンドラインから受け取った値のチェックを全くやっていないので確実に怒られる。すんません
  4. 変数名の付け方が気に入らない(大事なことなので二回言いました)