Rubyで統計
現在、昔のネタをいくつか放出中。
ruby-talk:165395 I rea......lly need your help ( C++ ) にて、「C++で困っているから助けて」という明後日なスレ。寛容なRubyist達も「板違いだ」とか「宿題はあっちでやれ」みたいな痛いレスが続く。そんな中、Nakada氏の美しいコードのレスが登場。
> Calculate and display the average, median, and mode of the values > entered. students = [] ARGF.each do |line| /^\d+$/ =~ line or break students << line.to_i end mode, = students.inject(Hash.new(0)) {|h, s| h[s] += 1; h}.max_by {|s, n| n} avrg = students.inject(0) {|a, s| a + s}.to_f / students.size require 'pp' print "The array is: " pp students puts "The Mode is #{mode}." puts "The average is #{avrg}."
Hash の max_by が key, value になるところが気が利いていて素敵。また、inject と Hash の代入式の使い方も大変参考になる。いろいろ調べるとこういう Hash の使い方は定石らしい。
MLでも「感動した」のレスが幾つか付いていた。