2009-01-01から1年間の記事一覧

排他論理和

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が謎だったので、調…

下記の内容のcsvファイルを読み込んで教科ごとの平均点を求めるプログラムを作りました。 #生徒番号,国語,数学,英語 10101,80,70,90 10102,90,50,80 10103,70,70,90 10104,100,100,100 10105,60,100,80 10106,80,80,70 ここで、エラーが出ました。悩んだのは…

ssh-agentを使ってみた

いつもRubyを勉強していましたが、今日はsshのことを書きます。sshで頭がごっちゃになっているので、ここで整理します。メモ書きになっちゃうけど、気にしない!ssh-agentとは公開鍵認証で使われる認証鍵を保持するプログラムです。例えば、サーバが複数ある…

RubyでBITMAPファイルを作る

BITMAPをつくるプログラムを作りました。BITMAPFILEHEADER BITMAPINFO BITMAPINFOHEADER RGBQUAD BITMAPFILEHEADER ファイルの先頭から14バイトに置かれ、ファイルタイプ・ファイルサイズ・予約領域2つ・オフセットでできています。予約領域とは、のちのバー…

csvを読み込んでみた

words.csvを読み込んで「いつどこでだれがだれと何をした」を表示するプログラムを書いてみた。 csvファイルはこんな感じ。 #いつ,どこで,誰が,誰と,何をした # 子供の歌 ある日,森の中,女の子,クマさん,出会った 春の朝,山の中,クマさん,,目が覚めた 祭りの…

Rubyのリファレンスマニュアルをいぢってみた

組み込みクラス Rubyにあらかじめ用意されているクラス 添付ライブラリ 組み込みクラスとは別に、多数のクラスが独立したファイル ミキシン サブクラスによって継承される機能を提供し、単体で動作することを意図しないクラス。機能を他のクラスから集めるた…

Ruby exist?()の罠にはまった

Rubyで 現在いるディレクトリ内にenglishディレクトリがあるかどうか確認する。なければ作る。そんなプログラムをかきました。 ENGLISH_DIR = "english" Dir.foreach(".") do |file| if file != File.exist?(ENGLISH_DIR) next else Dir.mkdir(ENGLISH_DIR) …

オブジェクト指向勉強した

今日はオブジェクト指向の勉強しました。これに関するまとめを言葉で表すのは限界があったので、私の落書き(下記の画像)を添えました。オブジェクト指向で覚えておきたい単語 オブジェクト 処理対象のデータ。クラスを基に作成される。 クラス オブジェクト…

Ruby:ブロックの使い方

あるファイルを開きます。先頭の行に"# enconfig: cp932"を書き加えます。 書き加えたファイルを"ファイル名.new"、"ファイル名.old"とします。そんなプログラムを書いたRubyコードがこれ。 1 def add_magic_comment(file) 2 File.open("#{file}.new", "w") …

eratosthenesのふるいをRubyで書く

エラトステネスのふるいを利用して素数を集めるプログラムを書きました。 条件 素数リストnums 探索リスト内の素数を記録 探索リストprime 入力された上限値以下の整数を並べたリスト インデックスと探索リストの要素が一致するようにする for式を利用してi…

Rubyでハッシュ

今日はハッシュの勉強しました。これ、しっくりこないことが多かったです。 ハッシュ データ管理用のデータ。要素の参照にキーを設定する。 キーを初期化しておく方法 ハッシュの書き方は2通りあります。 STONE = {} STONE["January"]= "ガーネット" あらか…