|
| 1 | +# Reto 08: Ordenando el almacen |
| 2 | + |
| 3 | +## Problema |
| 4 | + |
| 5 | +Los elfos están muy ocupados en el taller de Santa Claus organizando regalos 🎁 para la víspera de Navidad 🎄. |
| 6 | + |
| 7 | +El formato de entrada es especial, ya que indica el número de regalos y el tipo de regalo con letras de la a a la z. Por ejemplo, '66a11b' significa 66 regalos a y 11 regalos b. |
| 8 | + |
| 9 | +Los elfos tienen un **sistema especial** para organizar los regalos: |
| 10 | + |
| 11 | +- Cada 10 regalos del mismo tipo se empaquetan en una caja, representada por {x}. Por ejemplo, 20 regalos tipo a se empaquetan en 2 cajas así: {a}{a}. |
| 12 | +- Cada 5 cajas se apilan en un palé, representado por [x]. Por ejemplo, 10 cajas de a se apilan en 2 palés de esta manera: `[a][a]` |
| 13 | +- Cualquier regalo adicional se coloca en una bolsa, representada por () y se colocan todas dentro. Por ejemplo 4 regalos de b se colocan en una bolsa así (bbbb) |
| 14 | + |
| 15 | +**Los regalos luego se colocan en el siguiente orden:** palés, cajas y bolsas. Y los regalos aparecen en el mismo orden que la cadena de entrada. |
| 16 | + |
| 17 | +Tu tarea es escribir una función `organizeGifts` que tome una cadena de regalos como argumento y devuelva una cadena representando el almacén. |
| 18 | + |
| 19 | +```js |
| 20 | +const result1 = organizeGifts(`76a11b`) |
| 21 | +console.log(result1) |
| 22 | +// '[a]{a}{a}(aaaaaa){b}(b)' |
| 23 | + |
| 24 | +/* Explicación: |
| 25 | +
|
| 26 | + 76a: 76 regalos tipo 'a' se empaquetarían en 7 cajas y sobrarían 6 regalos, resultando en 1 palé [a] (por las primeras 5 cajas), 2 cajas sueltas {a}{a} y una bolsa con 6 regalos (aaaaaa) |
| 27 | +
|
| 28 | + 11b: 11 regalos tipo 'b' se empaquetarían en 1 caja y sobraría 1 regalo, resultando en 1 caja suelta {b} y una bolsa con 1 regalo (b) |
| 29 | +*/ |
| 30 | +``` |
| 31 | + |
| 32 | +## Mi solución |
| 33 | + |
| 34 | +```js |
| 35 | +const organizeGifts = (gifts) => { |
| 36 | + const PALLET_SIZE = 50; |
| 37 | + const BOX_SIZE = 10; |
| 38 | + |
| 39 | + const giftsArray = gifts.match(/\d+[a-z]/g); |
| 40 | + return giftsArray.map((gift) => { |
| 41 | + const [quantity, type] = gift.match(/(\d+)([a-z])/).slice(1); |
| 42 | + const pales = Math.floor(quantity / PALLET_SIZE); |
| 43 | + const boxes = (quantity % PALLET_SIZE) / BOX_SIZE; |
| 44 | + const bags = quantity % BOX_SIZE; |
| 45 | + |
| 46 | + return `[${type}]`.repeat(pales) |
| 47 | + + `{${type}}`.repeat(boxes) |
| 48 | + + `(${type.repeat(bags)})`.repeat(bags > 0); |
| 49 | + }).join(''); |
| 50 | +}; |
| 51 | +``` |
| 52 | + |
| 53 | +## Explicación de mi solución |
| 54 | + |
| 55 | +1. Primero, se define el tamaño de los palés y de las cajas. |
| 56 | +2. Luego, se obtiene un array con los regalos y su cantidad. |
| 57 | +3. Después, se itera sobre el array de regalos y se calcula la cantidad de palés, cajas y bolsas que se necesitan para cada regalo. |
| 58 | +4. Finalmente, se retorna un string con el almacén organizado. |
0 commit comments