我正在研究一个名为Image Blur的问题。我需要让我的代码从2D数组中获取项目(1或0),并且每1个,将相邻的0更改为1。到目前为止,我的代码对它遇到的第一个问题做得很好,但由于某种原因它不会循环其他代码。
class Image
def initialize(image)
@values = image
end
def find_ones
ones = []
@values.each_with_index do |row, row_index|
row.each_with_index do |pixel, column_index|
if pixel == 1
coord = [row_index, column_index]
ones << coord
end
puts "#{pixel} #{row_index} #{column_index}" if pixel == 1
end
end
ones
end
def transform
ones = find_ones
ri = ones[0][0]
ci = ones[0][1]
ones.each do
@values[ri + 1][ci] = 1 if (ri + 1) <= 3
@values[ri - 1][ci] = 1 if (ri - 1) >= 0
@values[ri][ci + 1] = 1 if (ci + 1) <= 3
@values[ri][ci - 1] = 1 if (ci - 1) >= 0
end
end
def output_image
@values.each do |row|
puts row.join
end
end
end
image = Image.new([
[0, 0, 0, 1],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 1, 0, 0]
])
image.transform
image.output_image
提前感谢您的帮助!
答案 0 :(得分:0)
您的ones.each do
通过ones
但忽略了它们,因为您的区块没有参数。您基本上只需使用ones
来确定运行块的频率。
您
ri = ones[0][0]
ci = ones[0][1]
ones.each do
应该是
ones.each do |ri, ci|
我很惊讶你find_ones
正确(你做了类似的事情),但在transform
做了一些奇怪的事情(设置ri
和ci
就像那样)。