2008-11-10 (Mon)練習
# 前回できなかった「0~100に含まれる0をカウントする」という問題を「0~1000に含まれる0をカウントする」に変更して修正。
arr = [] for i in 0..1000 if /0/ =~ i.to_s arr << i if /00/ =~ i.to_s arr << i if /000/ =~ i.to_s arr << i end end end end p arr puts arr.length
一応正しく動くけど、ifは3重になってる。う~ん...
count = 0
for i in 0..1000
case i.to_s
when /000/
count += 3
when /00/
count += 2
when /0/
count += 1
end
end
puts count
Hexaさんのだと多重にはカウントされませんね。
count = 0
for i in 0..1000
count += i.to_s.count("0")
end
puts count
string.count を使うか、正規表現なら count=0; string.gsub(/0/) {|s| count+=1} とするか、かな?
ありがとうございます。
確かに「ifが多くなるとcaseを使え」と達人に言われたことがあります^^
> tosikさん
そうですね、0がついてる数を配列に入れることでカウントしようとしました。
0が二つの場合は2回、三つの場合は3回入れて正しく出力させようとしました。
どろくさいですね。
> parin30さん
ありがとうございます。
Stringクラスのcountメソッド、知りませんでした!!
かなり短くなりましたね!
> entottoさん
.gsubのほうも試してみました。うまくできてるみたいです。
ありがとうございます!
(0..1000).inject(0){|c,i|c+i.to_s.count('0')}
ありがとうございます。
injectも初めて知りました!
1000以上の場合でも使えました^^v
かな。
コメントをありがとうございます。
試してみます。
> hさん
コメントをありがとうございます。
勉強になります。