DEV Community

José Ayrám
José Ayrám

Posted on

AdventJS - Reto #3: ¿Cuántas cajas de regalos puede llevar Papá Noel?

Reto #3: ¿Cuántas cajas de regalos puede llevar Papá Noel?

Reto #3: ¿Cuántas cajas de regalos puede llevar Papá Noel?

Instrucciones:

Tienes una caja de regalos de Navidad que Santa Claus quiere entregar a los niños. Cada regalo está representado por una cadena. Santa Claus tiene un trineo que puede llevar un peso limitado, y cada regalo dentro de la caja tiene un peso que es igual al número de letras en el nombre del regalo.

Santa Claus también tiene una lista de renos que pueden ayudarlo a entregar los regalos. Cada reno tiene un límite de peso máximo que puede llevar. El límite de peso máximo de cada reno es igual a dos veces el número de letras en su nombre.

Tu tarea es implementar una función distributeGifts(packOfGifts, reindeers) que recibe una caja de regalos y una lista de renos y devuelve el número máximo de cajas de estos regalos que Santa Claus puede entregar a los niños. Las cajas de regalos no se pueden dividir.

const packOfGifts = ["book", "doll", "ball"]
const reindeers = ["dasher", "dancer"]

// el pack de regalos pesa 4 + 4 + 4 = 12
// los renos pueden llevar (2 * 6) + (2 * 6) = 24
// por lo tanto, Santa Claus puede entregar 2 cajas de regalos

distributeGifts(packOfGifts, reindeers) // 2
Enter fullscreen mode Exit fullscreen mode

Cosas a tener en cuenta:

  • Las cajas de regalos no se pueden dividir.
  • Los nombres de los regalos y los renos siempre serán mayores que 0.

Mi solución:

function distributeGifts(packOfGifts, reindeers) {
  let weightGifts = 0;
  let maxWeightReindeers = 0;

  packOfGifts.forEach( (gift) => {
    weightGifts += gift.length;
  });

  reindeers.forEach( (reindeer) => {
    maxWeightReindeers += (reindeer.length * 2);
  });

  return Math.floor(maxWeightReindeers / weightGifts);
}
Enter fullscreen mode Exit fullscreen mode

Explicación:

La idea principal se basa en tomar en cuenta el tamaño de la cadena de texto y acumular su valor, en el caso de los renos, duplicarla, para poder realizar una operación matemática sencilla al final.

  • let weightGifts = 0; En esta variable acumularemos el peso total de cada regalo.
  • let maxWeightReindeers = 0; En esta variable acumularemos el peso total máximo que pueden llevar los renos.
  • packOfGifts.forEach( (gift) => {} ); Hacemos un recorrido del primer arreglo con el método forEach. En esta ocasión, usamos la sintáxis Arrow Function
  • weightGifts += gift.length; Acumulamos en la variable weightGifts el valor correspondiente al tamaño de la cadena de texto.
  • reindeers.forEach( (reindeer) => {} ); Hacemos un recorrido del segundo arreglo con el método forEach para poder determinar la carga máxima.
  • maxWeightReindeers += (reindeer.length * 2); Acumulamos en la variable maxWeightReindeers el valor correspondiente al tamaño de la cadena de texto duplicándolo.
  • return Math.floor(maxWeightReindeers / weightGifts); Dividimos el peso máximo entre el peso total de los regalos y con la función Math.floor devolvemos el entero del resultado.

Resultado:

  • 132 puntos
  • Complejidad cognitiva: 1
  • 3381 ops/s

Otras Soluciones:

Nos leemos en el siguiente reto.

Top comments (0)