AdventJS - Reto #3: ¿Cuántas cajas de regalos puede llevar Papá Noel?
Published: 2022-12-10 13:20:00


![Reto #3: ¿Cuántas cajas de regalos puede llevar Papá Noel?](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/80mid3k7bit5ba0bpe4c.png)

### [Reto #3: ¿Cuántas cajas de regalos puede llevar Papá Noel?](https://adventjs.dev/es/challenges/2022/3)

**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**.

```javascript
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
```

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:**

```javascript
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);
}
```

**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](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach). En esta ocasión, usamos la [sintáxis Arrow Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#syntax)
- `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](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Array/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](https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Math/floor) devolvemos el entero del resultado.

**Resultado:**

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

**Otras Soluciones:**

- [Serie Advent.js 2022 de Cristian Fernando - Reto #3](https://dev.to/duxtech/adventjs-reto-3-cuantas-cajas-de-regalos-puede-llevar-papa-noel-52ne)
- [Canal YouTube asdex dev - Reto #3](https://www.youtube.com/watch?v=YJa5419H_hg&list=PLtJA_0pDlZIYVrRo3shhObGmJqwxYMJq5&index=3)

Nos leemos en el siguiente reto.