Rubyはじめました(こむぎ娘めも)

どうもこんばんは、こむぎ娘です。

最近色々あって仮想でUbuntu動かしてみてたりするんですが、
この機会にいろんなことをやってみようと思い、ちょっとRubyを始めようとしてみました。

まだ始めてから3日くらいなので、全く何も分かってないですが、とりあえずということでAOJやってます。
とりあえずVolume100を順番に解いていってるのですが、途中何問か詰まったところがあるので覚え書きみたいな感じで書いていきます。コードが汚いのは癖です…


Problem10008

Floatの扱いでWAになりました。

str = STDIN.gets.split(" ")
a = str[0].to_i
b = str[1].to_i
print(a/b, " ", a%b, " ", a.to_f/b) #ここ
puts

Float、ある程度以上小さい数になると指数表記になるんですよね。
CとかJavaならprintfあたりでフォーマットすればいいんですけど…


とか思ってたら使えるのがありました。

puts sprintf("%d %d %.8f", a/b, a%b, a.to_f/b)

sprintf、フォーマットされた文字列を返してくれるみたいです。
Cと同じ感覚で使えるのでありがたいですわ。


Problem10022

word = STDIN.gets.downcase #ここ
count = 0
looping = true
while looping do
    text = STDIN.gets.split(" ")
    text.each {|str|
        if str=="END_OF_TEXT" then
            looping = false
            break
        elsif str.downcase==word then
            count += 1
        end
    }
end
puts count

文字列系の問題になってからテストケースを入力しても正しい答えが出力されないことが多々ありました。
もしかするとと思い、入力文字列の長さを調べてみたら、入力した文字より1大きい値が返ってきました。
どうやら改行文字が悪さをしてたみたいです。
改行文字を含む文字列と含まない文字列を比較していたので当然ですがfalseが返ってました。

word = STDIN.gets.chomp.downcase

これで空白文字を取り除いたところ、うまくいきました。ありがとうございます。
splitで分割した文字列には改行文字は(当然)含まれてないんですね。
これから1行の文字列を読み込む時には取り除くのを忘れないようにしたいです。



まだここまでしかやってませんが、Rubyの楽しさ(?)みたいなのが分かってきた気がします。
(今までJavaばっかりやってたせいってのもあると思いますが…)

ということで今回はここまで。また今度進んだら書きたいなぁ…