Nie wiem czy dział odpowiedni… bo problem raczej nie podchodzący pod Rails.
Mam w programie funkcję która zwraca indeks “równowagi”.
Już tłumaczę. Jest np taka tablica
tab = [-7, 1, 5, 2, -4, 3, 0]
Indeks równowagi wynosi 3 bo
tab[0] + tab[1] + tab[2] = tab[4] + tab[5] + tab[6]
-7 + 1 + 5 = -4 + 3
czyli po prostu
-1 = -1
Ta samo też będzie dla 6
tab[0] + tab[1] + tab[2] + tab[3] + tab[4] + tab[5] = 0
Inne wartości nie mają już tej właściwości w tym przypadku.
Indeks równowagi może mieć wartość od 0 do wielkości tablicy - 1.
Funkcja eql zwraca pierwszy znaleziony indeks równowagi a jak go nie ma to -1
[code=ruby]def is_equal?(a, b)
sum_a = sum_b = 0
a.each { |i| sum_a += i }
b.each { |i| sum_b += i }
return true if sum_a == sum_b
false
end
def eql(arr)
len = arr.size
return -1 if len < 1
return 0 if len == 1 and arr.first == 0
idx = 0
arr.each { |i|
if idx == len-1
return idx if is_equal?(arr[0…idx-1], [0])
elsif arr.index(i) != 0
return idx if is_equal?(arr[0…idx-1], arr[idx+1…len])
else
return idx if is_equal?([0], arr[idx+1…len])
end
idx += 1
}
-1
end[/code]
Generalnie działa, tylko całą konstrukcja wydaje mi się nieco bardziej podchodząca pod C niż pod Rubiego.
Da się to jakoś poprawić?