/ / Чому мій калькулятор матричної діагоналі не повертає загальну суму? - рубін

Чому мій калькулятор діагональної матриці не повертає загальну суму? - рубін

Мій метод повинен взяти масив підрядників, знайтисума першого значення першого масиву, другого значення другого масиву, третього значення третього масиву тощо. Деякі приклади вхідних даних та очікуваних результатів:

exampleArray = [
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]
]
diagonalSum(exampleArray) # => 4

exampleArray = [
[1, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 0, 1]
]
diagonalSum(exampleArray) # => 5

Я написав це:

def diagonalSum(matrix)
total = 0
counter = 0
while matrix.length <= counter + 1 do
total += matrix[counter][counter]
counter += 1
end
total
end

і вона повертається 0.

Відповіді:

0 для відповіді № 1

Найпростіше перетворити масив в матрицю та застосувати Матриця # слід.

require "matrix"

arr = [[1, 0, 0, 7],
[0, 2, 0, 0],
[0, 0, 3, 0],
[8, 0, 0, 4]]

Matrix[*arr].trace
#=> 10

0 для відповіді № 2

Відповідно до наданого вами коду, в якому вхід - це масив масивів, перша порада, яку я можу дати вам, - це те, що в Ruby ви повинні уникати використання for/while циклів і скористайтеся ітераторами, такими як each/each_with_index натомість (виходячи з цього Керівництво по стилю Ruby і пропозиції @tadman та @Yu Hao).

The кожен з індексом ітератор приймає блок Ruby з поточним масивом ітерації разом з його позицією індексу, тому вам не потрібно визначати власну змінну індексу та оновлювати її в кожній ітерації.

Застосування цього коду призведе до наступного:

def diagonal_sum(matrix)
total = 0
matrix.each_with_index do |row, index|
total+=row[index]
end
total
end

Також зауважте, що умова в Ruby полягає в написанні змінних і методів імен у snake_case (відповідно до попереднього керівництва зі стилю).