Skip to content

Commit 434480c

Browse files
committed
Explicación Reto 2
1 parent 4dc832a commit 434480c

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

retos/reto-2/README.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
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

Comments
 (0)