宿題提出

id:s_kandaさんにトラックバック宿題をいただいたのでその回答を。

実行時に2つの時間を入力して、その差を計算するプログラムというわけで、ある種基本な感じっすね。引数に時間が入っているのと、それらを分で計算しないといけないのがポイントかと。あと、Time.parse()使わないようにということなので、時間計算は原始的にいってみました。

# 入力された時間を分表現に変換するメソッド
def to_minutes(val)
	timeval = val.split(/:/)
	timeval[0].to_i * 60 + timeval[1].to_i
end

if(ARGV.size != 2) then
	puts "時間2つ入れてね"
	exit
end

# コマンドラインからの引数で受け取った配列の一つ一つをto_minutesした配列を作る
minutes = ARGV.map{|time| to_minutes(time)}

result = minutes[1] - minutes[0]

# 0時をまたいでいたら24*60を足す
if (minutes[0] > minutes[1]) then
	result = result + 60 * 24
end

puts "#{ARGV[0]} - #{ARGV[1]} === #{result}min. (#{result.to_f / 60})"

とこんな感じ。
実行結果は

ruby calctime.rb 22:26 23:11
22:26 - 23:11 === 45min. (0.75)

となってs_kandaさんと同じになった!
個人的にPsychsさんにに頂いたコメントを思い出して、配列の集合演算なメソッドのmapを使ったのがポイントです。これはforEachのようにイテレーションしつつブロックの結果を配列として返すメソッドというわけで、大変便利な感じ。これで少しRubyっぽさが出せたような。。
あと、勉強は深夜にするものという個人的な常識に基づいて0時またぎでちゃんと時間が出るようにしてみました。これで先生に提出してみよー。

んー、まだまだクラスにした方がとかバリデーションかけて時間以外のものが引数に渡されたときの対応とかやることはあるけど、個人的に使うには充分かな?
にしてもこういう風に課題がもらえるといいですね。軽い焦燥感もあって怠けがちな僕も「とりあえず書いてみよう!」って思える!

あ、こんな感じで前に流行ったミュージカルバトンみたいにプログラムバトンなんてやってみたら面白いかな?

  1. 好きな言語は?
  2. いくつ言語かける?
  3. その言語でクイックソートをするプログラムを書いてください。
  4. 西暦5000年までのうるう年を表示するプログラムを書いてください。
  5. googleに負けないweb検索エンジンを作ってください。(←無茶苦茶)

とかいう感じで。ってこういうのはもうあるのだろうか?でも、見かけたことないなぁ。やる人、いないかなぁ。つか、あんま難しいの多いと誰もやってくんなそうw