Skip to content

Commit d7b1adc

Browse files
committed
✨ Add explanations and code examples for solutions in README files
1 parent f19d53d commit d7b1adc

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed

2024/01-primer-regalo-repetido/README.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,27 @@ const preparedGifts3 = prepareGifts(gifts3)
1818
console.log(preparedGifts3) // []
1919
// No hay regalos, la lista queda vacía
2020
```
21+
22+
## Mi solución explicada
23+
24+
```js
25+
function prepareGifts(gifts) {
26+
return [...new Set(gifts)].sort((a, b) => a - b);
27+
}
28+
```
29+
30+
Primero, creamos un nuevo `Set` a partir de la lista de regalos. Un `Set` es una colección de valores únicos, por lo que automáticamente elimina los duplicados.
31+
32+
```js
33+
[...new Set(gifts)]
34+
```
35+
36+
Después, convertimos el `Set` en un array con el operador de propagación (`...`) y lo ordenamos en orden ascendente con el método `sort`.
37+
38+
Hay que tener en cuenta que el trabajar con números, el método `sort` por defecto ordena los elementos como si fueran cadenas de texto. Por lo tanto, es necesario pasar una función de comparación que convierta los elementos a números antes de compararlos.
39+
40+
```js
41+
[...new Set(gifts)].sort((a, b) => a - b)
42+
```
43+
44+
Finalmente, devolvemos el array resultante.

2024/02-enmarcando-nombres/README.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,43 @@ createFrame(['a', 'bb', 'ccc'])
3939

4040
createFrame(['a', 'bb', 'ccc', 'dddd'])
4141
```
42+
43+
## Mi solución explicada
44+
45+
```js
46+
function createFrame(names) {
47+
const maxLength = Math.max(...names.map((name) => name.length));
48+
const border = '*'.repeat(maxLength + 4);
49+
const framedNames = names.map((name) => `* ${name.padEnd(maxLength, ' ')} *`);
50+
51+
return [border, ...framedNames, border].join('\n');
52+
}
53+
```
54+
55+
Primero obtenemos la longitud del nombre más largo de la lista. Para ello, usamos el método `map` para obtener un array con las longitudes de cada nombre, y luego usamos el método `Math.max` para obtener el valor máximo de ese array.
56+
57+
```js
58+
const maxLength = Math.max(...names.map((name) => name.length));
59+
```
60+
61+
Despues, creamos el borde del marco con una línea de asteriscos. La longitud de este borde será igual a la longitud del nombre más largo más 4 espacios (2 a cada lado).
62+
63+
```js
64+
const border = '*'.repeat(maxLength + 4);
65+
```
66+
67+
A continuación, generamos un array con los nombres enmarcados. Para ello, usamos el método `map` para recorrer cada nombre y añadirle un asterisco al principio y al final, y rellenamos con espacios hasta la longitud del nombre más largo.
68+
69+
El método `padEnd` añade espacios al final de la cadena hasta que esta tenga la longitud especificada.
70+
71+
```js
72+
const framedNames = names.map((name) => `* ${name.padEnd(maxLength, ' ')} *`);
73+
```
74+
75+
Finalmente, unimos el borde, los nombres enmarcados y el borde nuevamente, separados por saltos de línea.
76+
77+
```js
78+
return [border, ...framedNames, border].join('\n');
79+
```
80+
81+
**Para este reto me base en mi solucion propuesta para el ADVENTJS del 2021, el cual puedes encontrar [aqui](https://github.com/marcode24/adventjs-solutions/blob/main/2021/13-envuelve-regalos-con-asteriscos/index.js).**

0 commit comments

Comments
 (0)