Skip to content

Commit

Permalink
✨ Add explanations and code examples for solutions in README files
Browse files Browse the repository at this point in the history
  • Loading branch information
marcode24 committed Dec 2, 2024
1 parent f19d53d commit d7b1adc
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 0 deletions.
24 changes: 24 additions & 0 deletions 2024/01-primer-regalo-repetido/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,27 @@ const preparedGifts3 = prepareGifts(gifts3)
console.log(preparedGifts3) // []
// No hay regalos, la lista queda vacía
```

## Mi solución explicada

```js
function prepareGifts(gifts) {
return [...new Set(gifts)].sort((a, b) => a - b);
}
```

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.

```js
[...new Set(gifts)]
```

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

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.

```js
[...new Set(gifts)].sort((a, b) => a - b)
```

Finalmente, devolvemos el array resultante.
40 changes: 40 additions & 0 deletions 2024/02-enmarcando-nombres/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,43 @@ createFrame(['a', 'bb', 'ccc'])

createFrame(['a', 'bb', 'ccc', 'dddd'])
```

## Mi solución explicada

```js
function createFrame(names) {
const maxLength = Math.max(...names.map((name) => name.length));
const border = '*'.repeat(maxLength + 4);
const framedNames = names.map((name) => `* ${name.padEnd(maxLength, ' ')} *`);

return [border, ...framedNames, border].join('\n');
}
```

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.

```js
const maxLength = Math.max(...names.map((name) => name.length));
```

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

```js
const border = '*'.repeat(maxLength + 4);
```

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.

El método `padEnd` añade espacios al final de la cadena hasta que esta tenga la longitud especificada.

```js
const framedNames = names.map((name) => `* ${name.padEnd(maxLength, ' ')} *`);
```

Finalmente, unimos el borde, los nombres enmarcados y el borde nuevamente, separados por saltos de línea.

```js
return [border, ...framedNames, border].join('\n');
```

**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 comments on commit d7b1adc

Please sign in to comment.