アルゴリズム

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

ゲーム開発者のための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…

二分挿入ソート

プログラミングの宝箱 アルゴリズムとデータ構造 (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…

バイナリサーチ

プログラミングの宝箱 アルゴリズムとデータ構造 (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…