Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

178
Vistas
Optimización de la función de sumas de partes para Code Wars

Estoy viendo el problema de las Sumas de Partes en CodeWars:

Consideremos este ejemplo (matriz escrita en formato general):

 ls = [0, 1, 3, 6, 10]

Sus siguientes partes:

 ls = [0, 1, 3, 6, 10] ls = [1, 3, 6, 10] ls = [3, 6, 10] ls = [6, 10] ls = [10] ls = []

Las sumas correspondientes son (juntas en una lista): [20, 20, 19, 16, 10, 0]

La función parts_sums (o sus variantes en otros lenguajes) tomará como parámetro una lista ls y devolverá una lista de las sumas de sus partes como se definió anteriormente.

El objetivo de la función es sumar los elementos de la matriz y luego cambiar el primer elemento de la matriz cada vez hasta que la longitud de la matriz sea 0.

Tengo esta solución para ello:

 function partsSums(ls) { let len = ls.length; let arr = []; for (let i = 0; i < len +1; i++) { arr.push(summation(ls)); ls.shift(); } function summation(a) { let sum = 0; for (let i = 0; i < a.length; i++) { sum += a[i]; } return sum; } return arr; }

Funciona cuando lo ejecuto en mi editor: todos los casos de prueba en CodeWars que se completan con éxito pasan, pero cuando intento enviar, aparece este error:

El proceso fue terminado. Se tardó más de 12000ms en completarse

Soy nuevo en algoritmos y no puedo entender dónde está el error. Cualquier sugerencia es bienvenida.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El objetivo de la función es sumar los elementos de la matriz y luego cambiar el primer elemento de la matriz cada vez hasta que la longitud de la matriz sea 0

El desafío del código en realidad no habla de cambios . Puede hacer esto sin cambiar, almacenando los valores inmediatamente en el índice derecho en la matriz de resultados. Además, la summation de su función está sumando algunos de los mismos valores repetidamente. Esto se puede evitar.

Toma este ejemplo:

 ls = [0, 1, 3, 6, 10]

La salida se puede construir de la siguiente manera:

  • Cree una matriz que sea un elemento más larga y tenga el valor 0 al final:

     ls: 0 1 3 6 10 result: . . . . . 0

    (Los valores en los puntos no son relevantes en este punto)

  • Luego comience desde el lado derecho y cree una suma acumulada (hacia atrás):

     ls: 0 1 3 6 10 result: ↓ ↓ ↓ ↓ ↓← 0 ↓ ↓ ↓ ↓←10 ↓ ↓ ↓←16 ↓ ↓←19 ↓←20 20

    Entonces, el resultado anterior en el índice i+1 se agrega a la entrada en el índice i, y funciona hacia atrás hasta el comienzo de la matriz.

Aquí hay una implementación:

 function partsSums(ls) { let result = Array(ls.length + 1).fill(0); for (let i = ls.length - 1; i >= 0; i--) { result[i] = ls[i] + result[i + 1]; } return result; }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda