Собственно, вот код:
$ar = [].fill(0..7) {[].fill(0..7) {rand(2)}}
$ar.each_index { |i| $ar[i].each { |x| if x == 0 then print "\x1b[8;44m00\x1b[0m" else print "\x1b[8;42m11\x1b[0m" end }; print("\n") }
$isl, x, y, = 0, 0, 0
def gt (yy, xx, b = false)
$ar[yy][xx] = 0
a = [[-1, -1], [-1, 0], [-1, 1], [0, -1], [0, 1], [1, -1], [1, 0], [1, 1]]
a.each {|m| y, x = yy+m[0], xx+m[1]; if (y >= 0) & (x >= 0) & ($ar[y][x] == 1) then print y, x, "\n"; gt(y, x) end}
if b == true
$isl += 1 end
end
until y == 8
if $ar[y][x] == 1
gt(y, x, true) end
if x == 7
x = 0
y += 1
else x += 1 end
end
puts $isl
ex6.rb:10:in `block in gt': undefined method `[]' for nil:NilClass (NoMethodError)
from /home/alex/Ruby/ex6.rb:10:in `each'
from /home/alex/Ruby/ex6.rb:10:in `gt'
from /home/alex/Ruby/ex6.rb:10:in `block in gt'
Если кому-то интересна суть кода, то это решение задачи:
«Дан двухмерный массив, рандомно заполненный ноликами и едичичками, единица - земля, ноль - море, узнать кол-во островов»