2007-04-01から1ヶ月間の記事一覧

Lingerはじめました

http://www.lingr.com/room/ruby-sapporoLingerはじめました(・e・) おヒマなときはどうぞお気軽に遊びにいらしてください。

Ruby勉強会@札幌第3回

5/26日(土)に、Ruby勉強会@札幌第3回を行います。 開催概要 * 日時:5月26日(土) 9:00 〜 12:00 * 場所:札幌コンベンションセンター105会議室 * 内容:RubyistMagazine本の読み合わせなど(仮) * 費用:無料 http://jp.rubyist.net/?SapporoWorkshop3 ど…

ブレゼンハムの線分アルゴリズムを用いた追跡

ゲーム開発者のためのAI入門に載ってたタイルベースのLOS追跡アルゴリズムをRubyで。 まずは下準備としてタイルを表現するクラスを準備。 class Tile def initialize(x, y) @cel = [] (0..y).each do |i| @cel[i] = Array.new(x, 0) end end def set_value(x…

コームソート

プログラミングの宝箱 アルゴリズムとデータ構造 (C magazine)のコームソートをRubyで。 class Array def comb_sort gap = self.size begin if 0 == (gap = gap * 10 / 13) gap = 1 end i = 0 has_sorted = false until (i + gap >= self.size) do if self.a…

Rakefileに定義されているタスクを表示する方法

$ rake -T 自作のRakefileで上記にてタスクの説明を表示させるためには desc "ここにタスクの説明を記述" をタスク定義の直前に記述。 こんな感じ。 #rake desc "Build target." task :default => [TARGET] file TARGET => OBJ do sh "#{CXX} #{OBJDIR}/#{OB…

最大公約数、最小公倍数

rationalをrequireすることで、以下のメソッドがIntegerで使えるようになる。 require "rational" p 6.gcd(4) #=> 2 p 6.lcm(4) #=> 12 p 6.gcdlcm(4) #=> [2, 12]

ハッシュ

ハッシュはHashを使って表現。 p hash = { "key1" => "val1", "key2" => "val2", "key3" => "val3" } p hash["key1"] #=> "val1" p hash.index("val2") #=> "key2"

スタック

スタックはもちろんArray#push, Array#popで。 stack= Array.new p stack.push("first") p stack.push(2) p stack.pop p stack

キュー

キューはArray#push, Array#shiftを使って。 class Array alias enqueue push alias dequeue shift end queue= Array.new p queue.enqueue("first") p queue.enqueue(2) p queue.dequeue p queue

二分挿入ソート

プログラミングの宝箱 アルゴリズムとデータ構造 (C magazine)の二分挿入ソートをRubyで。 class Array private def get_insert_pos(target, left, right) return left if left > right middle = (left + right) / 2 self.at(middle) case target <=> self.a…

Rakefile雛形

よく使うMakefileの雛形をRakefileに移植。Rubyで書けるって素敵。 require "rake/clean" TARGET = "hello" #path setting SRCDIR = "." OBJDIR = "." INCDIR = "." #compile setting CXX = "gcc" CFLAGS = "-g -Wall -I#{INCDIR}" LDFLAGS = "" #object fil…

バイナリサーチ

プログラミングの宝箱 アルゴリズムとデータ構造 (C magazine)のバイナリサーチをRubyで。 class Array def binary_search(target, left, right) return nil if left > right middle = (left + right) / 2 self.at(middle) case target <=> self.at(middle) …

挿入ソート

プログラミングの宝箱 アルゴリズムとデータ構造 (C magazine)の挿入ソートをRubyで。 class Array def insert_sort sorted = 0 until (sorted >= self.size-1) do target = self.delete_at(sorted + 1) i = 0 until (i > sorted) do break if self.at(i) > …

リニアサーチ

プログラミングの宝箱 アルゴリズムとデータ構造 (C magazine)のリニアサーチをRubyで。 class Array def linear_search(target) result = nil self.each_index do |x| if self.at(x) == target result = x break end end return result end end p array = […

選択ソート

選択ソートをRubyで。 class Array def selection_sort sorted = 0 until (sorted > self.size-1) do i = min = sorted until (i > self.size-1) do if self.at(i) < self.at(min) min = i end i += 1 end self.insert(sorted, self.delete_at(min)) sorted …

マージソート

プログラミングの宝箱 アルゴリズムとデータ構造 (C magazine)のマージソートをRubyで。 class Array def merge_sort(n, x, offset) return if n < 2 m = n / 2 merge_sort(m, x, offset) merge_sort(n - m, x, (offset + m)) buf = Array.new(x[offset..(of…

クイックソート

クイックソートはArray#sortで。 p array = [2,6,5,8,9,114,3,6,34,74,24] p array.sort{|a,b| a<=>b }

バブルソート

プログラミングの宝箱 アルゴリズムとデータ構造 (C magazine)のバブルソートをRubyで。 class Array def bubble_sort begin flag = false (self.size - 1).times do |i| if self[i] > self[i+1] flag = true tmp = self[i] self[i] = self[i+1] self[i+1] =…

基本的な追跡アルゴリズム

ゲーム開発者のためのAI入門に載ってた追跡アルゴリズムをRubyで。 class Player attr_accessor :x,:y def initialize(x,y) @x = x @y = y end end X_CONST = 50 Y_CONST = 50 predetor = Player.new(rand(X_CONST),rand(Y_CONST)) prey = Player.new(rand(X…