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

2分探索プログラム

2分探索のアルゴリズム もし、探索開始よりも探索終了点の方が前にあった場合、探索失敗 探索領域の中間点のデータを調べる 中間データが探索データそのもの:探索成功 中間データが探索データより小さい:中間点より右側(中間点+1)を新たな探索開始点として…

Rubyでクイックソート

最近、「van勉だぃありぃ〜読んでるよ」とか言われるから、なんか書くの恥ずかしくなった。 クイックソートをするメソッド書きました。 def qsort(data, left, right) return if left >= right # 位置から文字の長さを判別 pivot = data[(left + right) / 2]…

状態遷移

状態遷移を使って簡単な(適当な)言語を進めるプログラム書きました。 # encoding: cp932 STATE_TRANSITION_TABLE = { "Q1" => ["Q1","Q2","Q3"], "Q2" => ["Q2","A1","Q4"], "Q3" => ["Q3","Q4","Q5"], "Q4" => ["Q4","A2","Q6"], "Q5" => ["Q5","Q6","A4"…

hashの格納順番

ハッシュ表を作る際、配列を使って実装した。 HASH_SIZE = 11 TABLE = Array.new(HASH_SIZE) def set(key,val) #ハッシュをして、ハッシュ表にデータを格納 end set("hello","world") set("今日は","赤ちゃん") set("竹やぶ","焼けた") set("テレビ","ラジオ…

ensure使い慣れん

例外処理でbeginとrescueを使っていたのですが、ensureを使いなれてないことがわかりました。ensureは例外の有無にかかわらずbegin式の最後に記述する処理を実行するもの。今回は暗号処理をしたものには必ずresetメソッドを呼び出すために使いました。 def e…

Rubyとコンパイル

コンパイルについて会話中に出てきたので、おさらいしてみた。Ruby1.8はインタープリタ方式で構文木が生成された時点で実行。コンパイルはない。 javaの場合、構文木生成後にコンパイル(バイトコードを生成)して実行プログラムを生成するコンパイラ方式。…

$stdin.gets()

gets() コマンドラインでファイルを引数とすると、gets()では指定したファイルの内容を一行読み込む。これを避けるために$stdin.gets()を使用する

暗号化と複合化

ライブラリopensslを使ってファイルを暗号化・複合化するプログラムを書きました。 暗号化 enc = OpenSSL::Cipher::AES256.new("CBC") enc.encrypt() enc.pkcs5_keyivgen(pass) File.open(file, "rb") do |fin| File.open("#{file}.sec", "wb") do |fout| wh…

暗号

データを特定のサイズを持ったブロック単位に分割し、パスワード(キー)を元にしたデータを適用して暗号文を求める。複数のブロックを扱う手法があり、CBCやECB等のモードがある。 CBCモードの場合 IVと最初のブロックの排他論理和をとり、キーと一緒に暗号化…

LINK_MAXとサブディレクトリの関係

LINK_MAX 1ファイルあたりの最大リンク数 ハードリンクとは データとそのデータに付けた名前を繋げるもの linuxの場合、inodeに名前を付けて繋げること / |- test |- test1/ |- test2 drwxr-xr-x 3 root root 4096 10月 7 15:06 . drwxr-xr-x 28 root root 4…

"$0 == __FILE__"やshift() について

$0 Rubyコマンドのコマンドライン引数で指定されたファイル名を格納した特殊変数 __FILE__ 実行中のスクリプトファイルのファイル名を格納する特殊変数 if $0 == __FILE__の条件式を用いた場合、実行中のプログラムがコマンドライン引数で指定された時に真に…

puts関数につて

putsとはput stringの略です。では次のプログラムの結果はどうなるでしょうか? def func(x) puts(x[:name]) end func(:date => Time.now, :name => :ruby, :version => 1.9) 答え ruby となります。:nameで参照されるのは:ruby。しかし、putsとはput string…

Symbolクラス

識別子 変数や定数、関数、メソッドなどにつける名前。英字またはアンダースコアをから始め、2文字目以降は0個以上の英数字またはアンダースコアでつなげる規則 :識別子 Symbolクラスのオブジェクト表記 Symbol 任意の文字列と一対一に対応するオブジェクト…

一区切り

7月から9月までRubyについて勉強して、その内容をこのブログに上げてきました。その数52記事。9月が終わったということで、今日は今までのまとめをしたいと思います。「Hello World!」から始まって、関数、配列、ハッシュ、ファイル、ライブラリ、永続化、例…

bitmapで描画したシェルピンスキーのギャスケット

複雑な三角形を組み合わせてbitmapをつくりました。下記が本を写経して作った画像。 左右対称じゃない三角形ができました。

俳句みたいな文書を作るプログラム

575になるように単語を配列に格納し、ランダムで表示させる俳句作成プログラムを作りました。実行結果は以下です。 馬高く 嵐駆け出す 医師の咳 山高く 隣うらやむ 川の音 川静か 柳飛び込む 馬の山などテキトーな俳句ができます。数さえ合っていれば、俳句…

変数名の付け方が難しい

コードを書いていると、意味の伝わりにくい変数を作ってしまい指摘をうける事がしょっちゅうでした。誰が呼んでも解りやすいコードを書くっていうのはとっても難しいですね。この辺はセンスの問題なので、センスの良いコードを書きたいものです。これは正し…

クラスメソッド・インスタンスメソッドの違いがわからない

クラスメソッドとインスタンスメソッドどっちがどっちなのかわかりませんでした。リファレンスマニュアルと戦った一番の問題です。 #クラスメソッド Dir.new() #インスタンスメソッド "foo\n".chomp レシーバがクラスかインスタンスか判断するんですが、読む…