兄の宿題を勝手にリファクタリング
一昨日からとうとうrubyの勉強を始めました。前々から「ruby素敵だな〜」と思いを募らせてはいましたが、如何せん始めの重〜い一歩へのモチベーションがなかなか得られなかったのです。
今回兄に'ruby関西勉強会'*1に誘われたのを期に「エイ!」と勉強開始です。
そんで、結局昨日僕は風邪で欠席したんですけどね。
兄が宿題を持って帰っていたので、読んでみたら意外と意味が解った。嬉しくて勝手に書き換えてみました。
char_count = 0; word_count = 0; line_count = 0; chars = Hash.new(0) words = Hash.new(0) f = File.open("text.txt") f.each do |l| char_count += l.size l.scan(/./m) { |c| chars[c] += 1 } l.strip.scan(/\w+|[^\s\w]+/) do |w| words[w] += 1 word_count += 1 end end line_count = f.lineno f.close printf("文字数 %d\n", char_count) printf("単語数 %d\n", word_count) printf("行数 %d\n", line_count) puts "文字出現頻度(文字 頻度(%) 回数)" chars.sort_by {|c, n| -n }.each do |c, n| printf("%-10s %4.2f%% %5d\n", c.dump, 100 * n/char_count.to_f, n ) end puts "単語出現頻度(単語 頻度(%) 回数)" words.sort_by {|w, n| -n }.each do |w, n| printf("%-10s %4.2f%% %5d\n", w, 100 * n/word_count.to_f, n ) end
File.openでインデント入れなくしたのと、printfで横に長かったので、doブロックにして下に伸ばした。それだけ。
実兄にトラックバック!*2