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

論理回路メモ

or回路 全ての入力が0なら0、それ以外は1 And回路 全ての入力が1なら1、それ以外は0 Xor回路 入力の1の数が奇数なら1、それ以外0

基底クラスを指定しない場合Objectクラスを指定する

継承する時は、"class 派生クラス が、基底クラスを指定しない場合でも継承が行なわれている。指定しなかった場合はObjectクラスが指定されている。イメージは class Book (< Object) def initialize(author, title, genre) @author = author @title = title…

オブジェクトの見直し。

クラスを書くことが、とっっっても難しいです。 自分の場合、何故書けないのか分析してみた。 オブジェクトがどんなものかにこだわり過ぎて、オブジェクトの使い方がわかりませんでした。言いかえると、コードで書いた時に、オブジェクトとメソッドの書き方…

RubyのtrueとTRUE

a = TRUE 意識せずに大文字でTRUEと書いてました。人に言われて気づいたのですが、これは非推奨だから使わないほうがいい。リファレンス調べると「この定数(Kernel::TRUE)は過去との互換性のために提供されています。」とあるので、動くことは動くので要注意…

umaskについて

umaskを教えていただいたので、メモ | user | group | othre | | rwx | rwx | rwx | | 111 | 111 | 111 | | 7 | 7 | 7 |(dirのデフォルト) | 6 | 6 | 6 |(fileのデフォルト)umaskを設定するとデフォルトから、指定した権限を抜くことになる。 umask 002 | us…

ポリモーフィズム

1 # encoding:cp932$ 2 $ 3 ["文字列", 1234567, Dir.open("."), :symbol, [1, 2, 3, 4, 5], {"1" => 1, "2" => 2}].each() do |e|$ 4 puts("#{e}")$ 5 puts(e.to_s())$ 6 end$ 4行目の#{}と5行目のto_s()を比較する。 to_s()はObjectクラスで定義されていて…

Benchmark::Report.#reportとBenchmark.#measure

Benchmark::Repot.#reportのコード require 'benchmark' puts Benchmark::CAPTION puts Benchmark.measure { "a"*1_000_000 } => user system total real 1.166667 0.050000 1.216667 ( 0.571355) Benchmark.#measureのコード require 'benchmark' n = 50000…

カプセル化されたオブジェクト

プレーヤーとコンピューターで3回勝負のじゃんけんをします。その時の処理を言葉で書くと以下の考え方になります。 プレーヤの勝数が3以上であれば「プレーヤーの勝利」と表示、コンピュータの勝数が3以上であれば「コンピュータの勝利」と表示する これを、…

classについて

classには以下の役割がある。 + オブジェクトが持つデータの情報を変数・定数にまとめる + オブジェクトが持つ手続きをメソッドにまとめる + インスタンスを作成するためのnewクラスメソッドの提供 クラスを定義することで、抽象的な概念を分類し名前を付け…

sortのブロックを使う素晴らしさ

sort関数では、引数にブロックを使います。なんでかと言うと、様々な順序で並び変えができるようにするためです。 例えばsort関数を使わないで自作でクイックソートの関数を作ります。以下はその一部分です。 def partitioning(data, pivot, left, right) wh…

ってなんじゃ

Rubyのインスタンスメソッドにというメソッドがあります。見た時なんじゃコレとか思った。 self と other を ASCII コード順で比較して、 self が大きい時には正の整数、等しい時には 0、小さい時には負の整数を返します。 レシーバはstringからファイルの更…

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 レシーバがクラスかインスタンスか判断するんですが、読む…

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

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