|
|
||
ruby | |
まずeを計算。eはで計算されます。これをrubyで書いただけ。
print "nの値を入力して下さい" n = gets.chop.to_i p (1.0 + 1.0/n) ** n
nは無限大にすることが出来ないので、好きなだけ大きな数字にすればeに近似されます。
n = 10000000で2.718281くらいまでは近似できます。
次にπを計算。wikipediaを参考に。
#注意:意図的に無限ループさせてるので^Cでキャンセルして下さい。
pi_4 = 0 n = 0 while true pi_4 += ((-1.0) ** n) / (2.0 * n + 1.0) p pi = 4 * pi_4 n += 1 end
10秒くらい走らせると3.1415くらいまでは安定します。
πの計算の方があまりよい精度が出ないですね。
定期的にdat取得できたら便利だななんて思ったので書いてみた。とりあえず版なのでおかしいところがあったら遠慮せずに突っ込んで下さい。むしろ突っ込んでくれれば勉強になるし...。
require 'net/http' require 'nkf' $KCODE = "shift-jis" Net::HTTP.version_1_2 class Get_2ch def initialize(urls) @urls = urls if urls =~ /http:\/\/.*\.2ch.net\/test\/read.cgi\// get_url = $& get_bottom = $' if get_url =~ /http:\/\// if $' =~ /\/test\/read.cgi\// @domain = $` end end if get_bottom =~ /\// @board = $` if $' =~ /\// @threads = $` end end end end def get_dat dat_url = "/" + @board + "/dat/" + @threads + ".dat" Net::HTTP.start(@domain, 80) {|http| response = http.get(dat_url) @dat = NKF.nkf('-w', response.body) } #return @dat end def get_title colum = @dat.split("\n") text = colum[0].split("<>") @thread_title = text[text.size.to_i - 1] end def make_dat dat_title = @thread_title + ".dat" file = open(dat_title, "w") file.write @dat file.close end end print "スレッドURLを入力して下さい。\n" urls = gets.chop dat = Get_2ch.new(urls) dat.get_dat dat.get_title dat.make_dat
スレッド名の取得でちょっと困ってたけど、結構ごまかしてみた。