|
| 1 | +# Reto 2 |
| 2 | + |
| 3 | +En el taller de Santa, los elfos tienen una **lista de regalos** que desean fabricar y un conjunto limitado de materiales. |
| 4 | + |
| 5 | +Los regalos son cadenas de texto y los materiales son caracteres. Tu tarea es escribir una función que, dada una lista de regalos y los materiales disponibles, devuelva una **lista de los regalos que se pueden fabricar**. |
| 6 | + |
| 7 | +Un regalo se puede fabricar si contamos con todos los materiales necesarios para fabricarlo. |
| 8 | + |
| 9 | +```js |
| 10 | +const gifts = ["tren", "oso", "pelota"]; |
| 11 | +const materials = "tronesa"; |
| 12 | + |
| 13 | +manufacture(gifts, materials); // ["tren", "oso"] |
| 14 | +// 'tren' SÍ porque sus letras están en 'tronesa' |
| 15 | +// 'oso' SÍ porque sus letras están en 'tronesa' |
| 16 | +// 'pelota' NO porque sus letras NO están en 'tronesa' |
| 17 | + |
| 18 | +const gifts = ["juego", "puzzle"]; |
| 19 | +const materials = "jlepuz"; |
| 20 | + |
| 21 | +manufacture(gifts, materials); // ["puzzle"] |
| 22 | + |
| 23 | +const gifts = ["libro", "ps5"]; |
| 24 | +const materials = "psli"; |
| 25 | + |
| 26 | +manufacture(gifts, materials); // [] |
| 27 | +``` |
| 28 | + |
| 29 | +# Solución |
| 30 | + |
| 31 | +Vamos a basar la solución en un `Set` que al cambiar de tamaño nos dirá si ese regalo contiene más letras de las que contenemos en materiales. |
| 32 | + |
| 33 | +Ya que vamos a tener que crear un arreglo de cada letra, vamos primero a separar materiales, porque no es óptimo realizarlo por cada regalo, siempre será el mismo: `const mate = materials.split("")`. |
| 34 | + |
| 35 | +Ahora solo queda filtrar los regalos que cumplan con que el `Set` de la unión de `g` (regalo) y `mate`, tengan la misma longitud que `mate`, esto se logra porque `Set` no va a permitir elementos repetidos. |
| 36 | + |
| 37 | +## Ejemplo |
| 38 | + |
| 39 | +```ts |
| 40 | +const mate = ["t", "r", "o", "n", "e", "s", "a"] |
| 41 | + |
| 42 | +const regalo1 = ["t", "r", "e", "n"] |
| 43 | + |
| 44 | +const x = [...new Set([...regalo1, ...mate])] |
| 45 | + |
| 46 | +console.log(x) // [ "t", "r", "e", "n", "o", "s", "a" ] |
| 47 | + |
| 48 | +``` |
| 49 | + |
| 50 | +En este caso `mate` es exactamente igual a `x`, porque no agregamos nada nuevo, es decir que **si** podemos construir este regalo. |
0 commit comments