「第42回 Ruby/Rails勉強会@関西」の復習
最近ご無沙汰Rubyですが、
Rails系を触る可能性大になので
日本Rubyの会 公式Wiki - 第42回 Ruby/Rails勉強会@関西で
勉強のやり直しです。
まあ予習後の復習が基本ですが
予習せずに参加したので復習だけw;
IO クラスについて by cuzic さん
はい、最適化は大好きです>w<b
といっても、IO#sysread,IO#read[ _nonblock | partial ]は使い道が
いまいちピンと来ないので、IO#read(2)で第二引数を設定くらいですかね?
では、復習でコード組む。
require 'benchmark' t = 1000 buf = " "*t $t = t def set_rand_file open("rand","wb"){|file| (1024*$t).times do file.write rand(256) end } end set_rand_file puts Benchmark.measure{ open("rand") do |io| t.times do io.read 1024,buf end end } p buf set_rand_file puts Benchmark.measure{ buf = nil open("rand"){|io| t.times{ buf = io.read 1024 } } } p buf
で、ベンチマーク結果。
#=> 0.015000 0.000000 0.015000 ( 0.015625) #=> ... #=> 0.016000 0.000000 0.016000 ( 0.015625) #=> ...
うぅ〜む<、変わらんw;
まあunixで取り直してみるか。
Ruby 初級者向けレッスン by okkez さん
演習問題w;
class Integer def rec n unless((n / 1000) == 0) ("M" * (n/1000)) + rec(n%1000) else unless((n / 500) == 0) ("D" * (n/500)) + rec(n%500) else unless((n / 100) == 0) ("C" * (n/100)) + rec(n%100) else unless((n / 50) == 0) ("L" * (n/50)) + rec(n%50) else unless((n / 10) == 0) ("X" * (n/10)) + rec(n%10) else unless((n / 5) == 0) ("V" * (n/5)) + rec(n%5) else ("I" * (n/1)) end end end end end end end def to_old_roman rec self end end p 3500.to_old_roman #=> "MMMD" p 660.to_old_roman #=> "DCLX" p 115.to_old_roman #=> "CXV" p 9.to_old_roman #=> "VIIII"
うむ、条件分岐と再帰の組み合わせがヒドイwww;
で、ローマ数字の減算則をどうしようか。
基本的には、上記で条件分岐を増やせばいいんだろうけど
記述も思考もスマートじゃないしな。
つかれたので、今日はココマデw