クラスイメージは、0と1の配列を初期化します。私はこの方法transform
、このよう反復は
[[0,0,0],
[0,1,0],
[0,0,0]]
戻り
[[0,1,0],
[1,1,1],
[0,1,0]]
私はこれを反復n回変換して、メソッドブラー(n)を実装したい、
[[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,1,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0]]
と、このような呼び出しぼかし(2)それを持っています
戻り
[[0,0,0,0,1,0,0,0,0],
[0,0,0,1,1,1,0,0,0],
[0,0,1,1,1,1,1,0,0],
[0,0,0,1,1,1,0,0,0],
[0,0,0,0,1,0,0,0,0]]
私はこれを達成するために反復変換を使用しようとしていますが、Imageのインスタンスでblurを呼び出すときにはundefined method 'map' for #<Context::Image:0x000000012eb020>
になります。どのようにぼかしが最大n回の変換で最新のバージョンを返すように、各連続変換に対して繰り返し処理できますか?
class Image
attr_accessor :array
def initialize(array)
self.array = array
end
def output_image
self.array.each do |item|
puts item.join
end
end
def transform #changes adjacent a 1's adjacent 0's into 1
cloned = self.array.map(&:clone)
#scan original array for 1; map crosses into clone if found
self.array.each.with_index do |row, row_index|
row.each.with_index do |cell, col|
if cell == 1
cloned[row_index][col+1] = 1 unless col+1 >= row.length #copy right
cloned[row_index+1][col] = 1 unless row_index+1 >= cloned.length # copy down
cloned[row_index][col-1] = 1 unless col.zero? # copy left
cloned[row_index-1][col] = 1 unless row_index.zero? #copy up
end
end
end
cloned
end
def blur(n) #should call transform iteratively n times
blurred = Image.new(self)
n.times do
blurred = blurred.transform
end
blurred
end
end