Мій метод повинен взяти масив підрядників, знайтисума першого значення першого масиву, другого значення другого масиву, третього значення третього масиву тощо. Деякі приклади вхідних даних та очікуваних результатів:
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 (відповідно до попереднього керівництва зі стилю).