takashi42332007-05-02


先日は,Processingで遊びすぎたので,今日は素直にRubyの勉強を...

Rubyでは,演算子すらメソッドだという.

5.+ 5

とは何とも面白い.
何が便利とかはもちろん分からないけど,知っておいて損は無い気がする.
#こうぃう,設定を意識して使うと,後々効いてくる事がある


私的解答

「怒ったボス」のプログラムを書いてみましょう。まず、無作法に何が望みか聞いてきます。で、何を答えようと「怒ったボス」はそれを叫び返して、あなたを首にします。たとえば、もし給料上げてくださいとタイプしたとすると なにぃ? "給料上げてください" だとー!! おまえは首だ!! と、叫び返してきます。

puts "上司:お前ののぞみはなんだ? >>"
hope = gets.chomp
puts "上司:なんだと? \"" + hope + "\"だとーー!!お前は首だ!!"

center, ljust, そして rjust を使ってもう少し何かやってみましょう。こんな感じの「目次」を表示するプログラムを書いてみてください。

残念な事に,これが思ったようにうまく行かないので,取り敢えず放置.
何か問題的にもつまんないし(失礼)

"99本のビールが壁に..." 遠足などでよく歌われる古典的な童謡の歌詞、"99 Bottles of Beer on the Wall" を出力するプログラムを書いてみましょう。(訳註:マザーグースの歌なのですが、日本ではあまりメジャーではないので、出力例をあげておきます。)

beer_num = 99


while beer_num != 0
  puts beer_num.to_s + "Bottoles of beer on the wall"
  puts beer_num.to_s + "Bottoles of beer on the wall"
  puts "take one down and pass it around"
  beer_num = beer_num - 1
  puts beer_num.to_s + "Bottoles of beer on the wall"
end

耳の遠いおばあちゃんのプログラムを書いてみましょう。おばあちゃんに何を言っても(何をタイプしても)、叫ばない限り (つまり、全部大文字でタイプしない限り)、 は?! もっと大きな声で話しておくれ、坊や! と返事をします。もし叫んだときは、彼女はあなたの言葉を聞いて (少なくとも聞いた気がして)、 いやー、1938年以来ないねー! と大声で返事をします。プログラムにちょっと真実味 を持たせるため、 1930年から1950年のランダムな数字で毎回違う年を叫ぶようにしましょう。 (この部分はオプションです。メソッドの章で、Rubyの乱数発生法の節を読んでいたら簡単でしょう。) あなたはBYEと叫ぶまでおばあちゃんとの会話から逃れられません。
ヒント: chompをお忘れなく! Enter付きの 'BYE'はついていない 'BYE'とは違うものです。
ヒント2:あなたの書いたプログラムのどの部分が何度も何度も繰り返し実行されるべきなのかを良く考えてみましょう。そのすべてを whileループの中に入れます。

str = ""
while str != "BEY"
  str = gets .chomp
  if str == str.upcase
    year = rand(21) + 1930
    puts "いやぁ〜" + year.to_s + "以来ないねぇ〜"
   else
    puts "は!?もっと大きな声で言っておくれ!!"
  end
end

上で作った、「耳の遠いおばあちゃんのプログラム」を拡張しましょう。おばあちゃんはあなたに行って欲しくないのです。あなたがBYEと叫んでもおばあちゃんは聞こえないふりをします。 BYEを3回連続で 叫ばないといけないように変更してみてください。 BYEと3回叫んでも連続していない限り、おばあちゃんとの会話は続くようになっているかプログラムをテストして確認してみましょう。

str = ""
cnt = 0

while cnt != 3
  str = gets.chomp
  #BYEのカウント
  if str == "BYE"
    cnt = cnt + 1
  else
    cnt = 0
  end

  #大文字のチェック
  if str == str.upcase
    year = rand(21) + 1930
    puts "いやぁ〜" + year.to_s + "以来ないねぇ〜"
  else
    puts "は!?もっと大きな声で言っておくれ!!"
  end
end

うるう年。 開始の年と終わりの年を聞いて、その間にあるすべてのうるう年を (もし開始や終了の年がうるう年だったらそれも含めて)表示するプログラムを書きましょう。うるう年は(1984年とか2004年のように)4で割り切れる数の年です。ただし、100で割り切れる年はうるう年ではなくて (たとえば1800年や1900年)、さらに、それは 400で割り切れない限り です。(つまり、1600年や2000年はうるう年です。) (確かに、このルールは紛らわしいです。でも7月が冬の真ん中に来てしまうのはもっと紛らわしいと思いませんか?このルールがなかったらそうなったかもしれないのです。)

puts "Input start years >>"
start_y = gets.chomp.to_i

puts "Input end years >>"
end_y = gets.chomp.to_i

#4で割れる年の数から400で割り切れる年の数を引く.
leap_s = start_y / 4 - start_y / 100 + start_y / 400
puts leap_s.to_i

leap_e = end_y / 4 - end_y / 100 + end_y / 400
puts leap_e.to_ihttp://d.hatena.ne.jp/images/admin/markup_url.gif

puts "うるう年は" + (leap_e - leap_s).to_s + "回あります."


結構,違和感無く入れる言語だねrubyって.
それにしても,民営の刑務所でソフトウェア開発って凄いね.
デスマーチになったら,残業代とかも出るのかな?

刑務所でRubyを使ったソフトウェア開発 | スラド Linux