es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Pirámide de matriz 2-D en Ruby?

def suma_adyacentes(arr)
  narr = []
  l = arr.length

  arr.each.with_index do |num,index|
    if index < arr.size-1
      narr << arr[index] + arr[index+1]
    end
  end

  return narr
end

print suma_adyacentes([3, 7, 2, 11]) #=> [10, 9, 13], because [ 3+7, 7+2, 2+11 ]
puts
print suma_adyacentes([2, 5, 1, 9, 2, 4]) #=> [7, 6, 10, 11, 6], because [2+5, 5+1, 1+9, 9+2, 2+4]
puts

Escribe un método pyramid_sum que tome un arreglo de números que representan la base de una pirámide. La función debe devolver un arreglo 2D que represente una pirámide completa con la base dada. Para construir un nivel de la pirámide, tomamos la suma de los elementos adyacentes del nivel anterior.

Entiendo que debo crear un arreglo 2D y usar la suma de adyacentes para construir el siguiente nivel de la pirámide, pero no entiendo la mecánica básica o la metodología de pensamiento en Ruby para arreglos de dos dimensiones. ¿Por qué estoy obteniendo un arreglo y qué enfoque me sugieres?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para crear una matriz bidimensional en Ruby, puedes usar matrices anidadas. La primera matriz representa las filas y las matrices anidadas representan las columnas. Por ejemplo, una matriz bidimensional con 3 filas y 4 columnas se puede crear de la siguiente manera:

    arr = [[1,2,3,4], [5,6,7,8], [9,10,11,12]]
    

    Para resolver el problema de “pyramid_sum” puedes comenzar creando una matriz bidimensional con una sola fila, que es la matriz de entrada. Luego, puedes usar un bucle para iterar sobre las filas de la pirámide y usar el método “adjacent_sum” para generar la siguiente fila. Aquí hay un ejemplo de implementación:

    def pyramid_sum(base)
      pyramid = [base] # crear matriz bidimensional con una sola fila
      while pyramid.length < base.length # continuar hasta que la pirámide esté completa
        last_row = pyramid.last # obtener la última fila de la pirámide
        new_row = adjacent_sum(last_row) # generar nueva fila usando el método "adjacent_sum"
        pyramid << new_row # añadir nueva fila a la pirámide
      end
      return pyramid # devolver la pirámide completa
    end
    

    Puedes probar este método usando el siguiente código:

    puts pyramid_sum([3, 7, 2, 11]).inspect
    # Output: [[3, 7, 2, 11], [10, 9, 13], [19, 22], [41]]
    puts pyramid_sum([2, 5, 1, 9, 2, 4]).inspect
    # Output: [[2, 5, 1, 9, 2, 4], [7, 6, 10, 11, 6], [13, 16, 21, 17], [29, 37, 38], [66, 75], [141]]
    

    Esta implementación crea una pirámide generando repetidamente nuevas filas usando el método “adjacent_sum” hasta que la pirámide esté completa. El resultado final es una matriz bidimensional que representa la pirámide completa.

Comments are closed.