第2章(前半)
itochanさんに助言され、ソフトバンククリエイティブ社に、のRuby翻訳公開の是非を問うてみた。柴田望洋氏に話を通してくれ、「こころよく許可します」と許可をいただきました。ので、内容にもざくざく触れつつがりがり翻訳していくよ。
例の如く全て見るには「続きを読む」で。
演習2-1 要素内の最小値を求める関数
Arrayクラスを拡張する。sortやらminやら、Rubyは配列を柔軟に扱えていいね。
#引数で好きなだけ数字を要素に取って、(要素数n)その最小値を求めるとする class Array def minof a = self.collect{|x| x.to_i} a.sort! puts "最小の値は#{a.shift}です" end end ARGV.minof ############################################### #ていうかよく考えたらこれでいいしorz p ARGV.collect{|x| x.to_i}.min ###############################################
演習2-2 要素の和を求める
Rubyから入った軟弱似非プログラマとしては、さっきのminメソッドみたいに一気に和を出すメソッドないかなぁとか思ったり。joinの数値版みたいな。id:nakao_mitsuteruさんにご指摘いただきました。優れもののinjectメソッドを使えば一行で済んじゃいます。感動。
class Array def sumof sum = self.inject{|memo, item| memo.to_i + item.to_i } # a = self.collect{|x| x.to_i} # sum = 0 # for i in a # sum += i # end puts "和は#{sum}です" end end ARGV.sumof
演習2-3 要素の平均値を実数値で求める
さっきのsumof関数利用。requireしようとしたがうまくいかず…
class Array def sumof a = self.collect{|x| x.to_i} @sum = 0 for i in a @sum += i end return @sum end def aveof sum = self.sumof.to_f size = self.size print "平均値は " printf("%.2f", sum/size) #ここ覚えとく! print " です\n" end end ARGV.aveof
"%.2f"で小数点以下を指定して出力。覚えとこう
例2-8 整数を2〜36進数に変換
36進数まで?…んー、0-9 + a-zか。
# 引数1,2は各々「変換前の数字」と、「何進数にするか」。 def card_convr(n,m) char = %w(0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) result = [] if n == 0 print "0は ", m, " 進法にしても 0\n" elsif n < 0 || m < 2 || m > 36; print n, " は ", m, " 進数に へんかんできない!" else n0 = n while n > m d = n.divmod(m) result << char[d[1]] n = d[0] end result << char[n] conved = result.reverse.join print n0, "を", m, "進数に変換すると ", conved, "\n" end end card_convr(rand(1000),rand(37))
演習2-4はreverse外せばいけるはず。なので略。
いまさらながら書いてる環境
→vimで書いたコードをRDEにコピペしてF5で実行し、確認して保存。
てな形でやってます。
[Life](´・ω・`)
今のやることリストから英語勉強を外した。4ヶ月前までやってた簿記を結構忘れてたので、もうちょい時間つぎ込まんと1級受かりそうもない。優先度で切り捨て。