Массив не может быть приведен к Integer (TypeError) - PullRequest
0 голосов
/ 14 мая 2019

Мне удалось заставить этот код работать локально, но он потерпел неудачу в рейтинге хакеров. Я перепробовал много комбинаций, но, должно быть, что-то упустил.Я не понимаю, почему sum += x выдает ошибку массива на основе вывода

Я получаю эту ошибку:

solution.rb: 24: в `+ ': массив не может бытьприведено к Integer (TypeError)

  def diagonalDifference(arr)
    arr.each do |e|
      p e
    end
    the_arr = arr.dup
    left_to_right(3, the_arr)
  end

  def left_to_right(the_size, the_data)
    sum = 0
    (0..the_size-1).each do |diagonal|
      this_value = (the_size * diagonal) + diagonal
      p "v= " + this_value.to_s
      x = the_data[this_value]
      p "this_sum= " + x.to_s
      sum += x  # <-- line 24
    end
    sum
  end

Debug output
[11, 2, 4]
[4, 5, 6]
[10, 8, -12]
"v= 0"
"this_sum= [[11, 2, 4], [4, 5, 6], [10, 8, -12]]"


arr would be a value such as [1,2,3,9,8,7,-4,-5,-4]

Похоже, проблема связана с

the_data[this_value]

вместо того, чтобы получить значение, которое, возможно, я получаю массив?

Ответы [ 2 ]

1 голос
/ 14 мая 2019

входные данные представляют собой матрицу, подобную [[11, 2, 4], [4, 5, 6], [10, 8, -12]]

Я предполагаю, что вы хотите изменить матрицу на массив перед передачей на left_to_right.Вы можете использовать flatten

def diagonalDifference(arr)
    arr.each do |e|
      p e
    end
    the_arr = arr.flatten
    left_to_right(3, the_arr)
end
0 голосов
/ 14 мая 2019

Проблема, кажется, эта .

Можно вычислить желаемое значение следующим образом.

def diagonal_difference(arr)
 (arr.each_index.sum { |i| arr[i][i] - arr[i][-i-1]}).abs
end

arr = [
  [11, 2,   4],
  [ 4, 5,   6],
  [10, 8, -12]
]

diagonal_difference(arr)
  #=> 15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...