यह रूबी में लिखी गई आपकी समस्या का मेरा समाधान है। यदि तत्व किनारे पर है तो गणना करने के बजाय आप किनारे पर "ओवर" तत्वों तक पहुंच सकते हैं और वहां मौजूद "शून्य" मान या अपवादों को संभाल सकते हैं। फिर अंतिम सूची से "शून्य" मान हटा दें। यह समाधान गणना के रूप में उतना अच्छा नहीं है जितना कि "बिंदु" किनारे पर है या नहीं।
big_map = [[1,2,3,4,5,6],
[8,9,7,5,2,6],
[1,6,8,7,5,8],
[2,7,9,5,4,3],
[9,6,7,5,2,1],
[4,7,5,2,1,3]]
# monkey patch classes to return nil.
[NilClass, Array].each do |klass|
klass.class_eval do
def [](index)
return nil if index < 0 or index > self.size rescue nil
self.fetch(index) rescue nil
end
end
end
class Array
# calculate near values and remove nils with #compact method.
def near(i,j)
[ self[i - 1][j - 1], self[i - 1][j - 0], self[i - 1][j + 1],
self[i - 0][j - 1], self[i - 0][j + 1],
self[i + 1][j - 1], self[i + 1][j - 0], self[i + 1][j + 1],
].compact
end
end
puts big_map.near(1,1).inspect
# => [1, 2, 3, 8, 7, 1, 6, 8]
puts big_map.near(0,0).inspect
# => [2, 8, 9]
puts big_map.near(5,5).inspect
# => [2, 1, 1]
उपयोग सापेक्ष ('%') किनारों पर मामलों का ख्याल रखना ... – Baz