2009-09-01から1ヶ月間の記事一覧

スロット数は素数にしましょう

前回ハッシュ表の原理を示すコードを書いたのですが、そのスロット数を指定できるように書き換えました。何故かというと、スロット数を変化させて衝突する様子をみたかったから。ハッシュ登録数は9なので、9 10 11 12 13 14 を比較してみる んで、実行結果は…

排他論理和

Rubyの排他論理和は false ^ true #=> truep false.^(false) #=> false 以上のように表せる。他にも a = b = 1 a = a ^ b #=> 0 a ^= b #=> 0 こんな書き方もできる。

ハッシュ表

ハッシュ表 キーと値の組み合わせを複数個格納し、キーに対する値を素早く参照するデータ構造。特徴はハッシュと表を使うことでキー同士の比較回数を減らし、高速な検索を実現しようとすること。 ハッシュ表にデータを格納する方法 キーをハッシュした値%nを…

digestをいじってみる

前回のhashの応用で用いた"Digest::SHA256"で書いたsha256.rbを"Digest::MD5"に書き換えてみる。リファレンスマニュアルでlibrary digestをみると 全てのメッセージダイジェストの実装クラスは、基底クラスである Digest::Base と同じインタフェースを持ちま…

hashの応用

今までhashといえば、 hash データ管理用のデータ。要素の参照にキーを設定する と覚えてました。なので、{1 => 一}など単純なhashを使ってます。 しかし、今回はhashの応用した使い方について勉強します。 hash データに対し何らかの操作を実行し、そのデー…

zlibを使う

zip データ内の出現パターンを調べ、出現頻度の高いビット構成をより短いビット構成で置き換えている。復元する際は辞書を使って元のビット構成を取り出す。 辞書 データの内容をなんらかの規則に従って表現したもの 前にrssをxmlで保存するプログラムを書き…

array[n]でフラグを立ててarray[n+1]で作業したい話

配列"2z3"を読み込む時の話。 "2z3"は"2000"を表しています。つまり"zn"で0がn個続くことを表しています。 これをプログラムにする時の話。まずはコードを書いてみた。 zero_numは"z"の後にある数字を表すフラグ zero_num = 0 nums.each_char() do |c| if ze…

ファイルをロードする時の注意

ファイルを読み込むコードを書きました。 list = {} File.open("namelist.data", "rb") do |file| list = Marshal.load(file) if list.size == 0 puts("listがありません") end end ここで、問題が・・・ load()は絶対に成功するの? ファイルを読み込んでる…

p関数とpp関数の違い

昨日の疑問点 a = 1p a 1 => 1pp a 1 => nil「aはオブジェクトじゃないから、nilだったんだ。」本当は違う理由らしいです。調べるの宿題になってしまった・・・。 リファレンスマニュアルの読み方ができてないです。pp(*obj) -> nil 戻り値はnilだから、仕様…

永続化と評価の話

永続化 プログラムで生成したデータが次回実行時でも利用できる マーシャル化 バイナリデータ化し、loadやdumpすることができるようにすること Timeオブジェクトをファイルへ保存する方法はいくつかあり、 Time#strftimeで文字列として保存する Time.atクラ…

例外でも恐怖発見

ファイルを指定して開くコードを書きました。rescueでStandardErrorクラス指定します。(デフォルトにする) 1 # encoding: cp932 2 3 while true 4 puts("ファイル名を入力してください") 5 begin 6 File.open(gets().chomp()) do |file| 7 puts(file.read(…

例外

例外 エラーを示す特別なオブジェクト Rubyはエラーを発見すると、エラーを示す特別なオブジェクトを作成し、それを関数やメソッドの呼び出し元へ送る。このオブジェクトを例外と言って、Exceptionクラスを継承したクラスが使用される。例外を受け取るために…

encodeがややこしい

rss = RSS::Perser::force_encoding("utf-8") って、読み込んだstringオブジェクトがutf-8とは限らないから指定しているのか。そんで、コンソール出力でcp932にエンコーディング。なんて面倒なんだ・・・。でも、元データはいじってはいけないので、表示する…

高水準ライブラリの注意点

制約 実行の詳細までプログラムから制御できない。 低水準ライブラリを使用してプログラムして問題解決。 利用可能な高水準ライブラリを知っておくこと 知って使ったもん勝ち

RSSについて勉強

「Ruby(2) さまざまなデータとアルゴリズム 」を読んでいます。それで、ついにRSSの項目にたどり着いたぁ!!!RSS気になってたんだよね!!!さて、どんなんかな〜vvv ・・・ ・・・なんだこりゃ・・・ RSSリーダとRSSってのは別のプログラムで、ネッ…

Dateオブジェクトが不明

last = Date.today() - $*[0].to_i ====実行画面==== ruby latest_file.rb 2 2009-09-08 - 2 = 2009-09-06 これで日にちの引き算ができるんだから不思議だ。 Date#-というメソッドがあり、本来は「Date.today().- $*[0].to_i」と書ける。Date#-は日数または…

コードレビュー

年月日を入力するコードを書いた。 def get_int(prompt, min, max) i = read_integer(prompt) if i >= min && i <= max return i else puts("その数字は入力できません。もう一度入力してください。") i = get_int(prompt,min, max) end end y = get_int("誕…

ライブラリを書く

Rubyでライブラリの勉強をしています。ライブラリとはプログラムの再利用。自分用のライブラリを作ることは大事なことだそうです。ただし、共有する際には周知をすること。変数が同じになって動作がおかしくなってしまうなど、トラブルに注意すること。他人…

凝集度のあるコード

コードレビューしてもらいました。 #encoding: cp932 ELDEST_YEAR = 1970 LASTEST_YEAR = 2030 ELDEST_MONTH = 1 LASTEST_MONTH = 12 ELDEST_DAY = 1 LASTEST_DAY = 31 week = [ "日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日","土曜日"] def …

require()とload()の違い

require() 複数回呼ばれても読み込みを1回しか行わない・閣僚しの自動判断を行う。ライブラリのロードに使用。 load() パラメータファイルの読み込みに使用。

Timeオブジェクトをいぢる

Time#now 現在の時間 Time#local 地方のオブジェクト Time#at 指定した時間のオブジェクト Time#wday 曜日を0(日曜)〜6(土曜)の整数で返す Timeオブジェクト同士は「」など比較演算が使える。この場合、古いものが小さくなる。File.mtimeが謎だったので、調…