An open API service indexing awesome lists of open source software.

https://github.com/tanrax/soy-un-buen-programador-js

Juego con retos sencillos de JavaScript para probarte a ti mismo que sabes lo que haces
https://github.com/tanrax/soy-un-buen-programador-js

functional-programming javascript programming-exercises

Last synced: 2 months ago
JSON representation

Juego con retos sencillos de JavaScript para probarte a ti mismo que sabes lo que haces

Awesome Lists containing this project

README

        

# Soy un buen programador JS

Juego con retos sencillos de JavaScript para probarte a ti mismo que sabes lo que haces.

## Solo 2 Reglas

1. Todas las variables deben ser constantes. No uses ni `let` ni `var`, solo `const`.
2. Prohibido usar los bucles: `while` y `for`.

## ¿Cómo se entrega?

Crea un Issue y pégame el código. Encantado te daré retroalimentación.

## ¿Cuál es la recompensa?

- Si haces ejercicios: Mi feedback.
- Si completas todos los ejercicios correctamente: Un diploma donde personalmente certifico tus habilidades.

## ✅ Reto 1

Crea un `Array` con números de 0 al 10.

**Solución**:

Videoexplicación: https://youtu.be/ROijmck2a6w

```javascript
// Forma 1 - La más equilibrada en recursos.
Array(11).fill().map((valor, indice) => indice);

// Forma 2
[...Array(11).keys()]

// Forma 3
Array.from({length: 11}, (v, i) => i);
```

## ✅ Reto 2

A partir del siguiente `Array`.

```javascript
const miLista = [1, 9, 87, 3, 10, 4, 20, 2, 45];
```

Crea una nueva lista con números de 1 digito.

```javascript
// [1, 9, 3, 4, 2];
```

**Solución**:

Videoexplicación: https://youtu.be/OfUt_BjoGcg

```javascript
const miLista = [1, 9, 87, 3, 10, 4, 20, 2, 45];
const miLista1Decimal = miLista.filter((numero) => /\b-?[0-9]\b/.test(numero));
```

## ✅ Reto 3

A partir del siguiente `Array`.

```javascript
const miLista = ["Lisp", "Clojure", "Haskell", "PHP", "Racket"]
```

Elimina el elemento que se encuentra en la posición 3. Insisto: posición 3, no por el string "PHP".

**Solución**:

```javascript
const miLista = ["Lisp", "Clojure", "Haskell", "PHP", "Racket"]

const miListaSinPHP = semana.filter(function(valor, indice) {
return indice !== 3
});
```

## ✅ Reto 4

A partir del siguiente `Array`.

```javascript
const miLista = ["Lisp", "Clojure", "Haskell", "Elm", "Racket", "Swift", "Erlang", "Scala"]
```

Obtén el número de elementos que contienen una letra "s" en su valor (o una "s" en su texto).

Si quieres subir el nivel, no uses "length".

**Solución**:

```javascript
// Solución 1 - Larga
const miLista = [ "Lisp", "Clojure", "Haskell", "Elm", "Racket", "Swift", "Erlang", "Scala" ];
const letra = "s";

const resultado = miLista
.filter((texto) => texto.toUpperCase().includes(letra.toUpperCase()))
.reduce((contador) => (contador += 1), 0);
// 4

// Solucion 2 - Corta
const resultado = miLista
.filter((texto) => /s/i.test(texto))
.reduce((contador) => (contador += 1), 0);
// 4
```

## ✅ Reto 5

Crea una función que elimine los acentos de un `string`. Prohibido usar `Regex` o `replace`.

**Solución**:

``` javascript
/**
* Devuelve un texto sin acentos
* @param {string} text - Texto con acentos.
* @return {string}
*/
function removeAccents(text) {
const sustitutions = {
àáâãäå: "a",
ÀÁÂÃÄÅ: "A",
èéêë: "e",
ÈÉÊË: "E",
ìíîï: "i",
ÌÍÎÏ: "I",
òóôõö: "o",
ÒÓÔÕÖ: "O",
ùúûü: "u",
ÙÚÛÜ: "U",
ýÿ: "y",
ÝŸ: "Y",
ß: "ss",
ñ: "n",
Ñ: "N"
};
// Devuelve un valor si 'letter' esta incluido en la clave
function getLetterReplacement(letter, replacements) {
const findKey = Object.keys(replacements).reduce(
(origin, item, index) => (item.includes(letter) ? item : origin),
false
);
return findKey !== false ? replacements[findKey] : letter;
}
// Recorre letra por letra en busca de una sustitución
return text
.split("")
.map((letter) => getLetterReplacement(letter, sustitutions))
.join("");
}

removeAccents("El bárbaro entró en cólera");
// "El barbaro entro en colera"
```

## ✅ Reto 6

Crea una `Array` que muestre los primeros 10 números de la secuencia de Fibonacci.

¿Subimos el nivel? Crea una función donde le indiques la cantidad de números que quieres en la secuencia.

**Solución**:

``` javascript
/**
* Devuelve una lista con la secuencia de Fibonacci
* @param {number} long - Número de elementos deseados.
* @param {Array} sequence - Secuencia inicial.
* @return {Array}
*/
function generate_fibonacci_sequence(long, sequence = [0, 1]) {
return sequence.length < long
? generate_fibonacci_sequence(
long,
sequence.concat(sequence.at(-1) + sequence.at(-2))
)
: sequence;
}

generate_fibonacci_sequence(4);
// [0, 1, 1, 2]

generate_fibonacci_sequence(10);
// [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
```

## ✅ Reto 7

Crea una `Array` con 10 números aleatorios enteros sin que se repitan y estén ordenados de menor a mayor.

**Solución**:

``` javascript
function obtenerListaAleatoria(longitud, lista=[]) {
const randomInt = parseInt(Math.random() * 100);
const nuevaListaConRandomInt = lista.concat(randomInt);
const nuevaListaSinRepetidos = [...(new Set(nuevaListaConRandomInt))];
const nuevaListaOrdenada = nuevaListaSinRepetidos.sort((a, b) => a - b);
return longitud <= lista.length ? lista : obtenerListaAleatoria(longitud, nuevaListaOrdenada);
}

console.log(obtenerListaAleatoria(10));
// [ 6, 26, 35, 41, 43, 60, 61, 67, 88, 93 ]
```

## ✅ Reto 8

Crea una función que mueva elementos dentro de una `Array`. Por ejemplo, si quisiera mover Scala, que esta en la posición 7, a la posición 1:

``` javascript
const miLista = ["Lisp", "Clojure", "Haskell", "Elm", "Racket", "Swift", "Erlang", "Scala"]

moverElemento(7, 1, miLista);

// ["Lisp", "Scala", "Clojure", "Haskell", "Elm", "Racket", "Swift", "Erlang"]

```

Como puedes observar, no solo se han intercambiado, sino que el resto de elementos se han movido para hacerle sitio.

**Solución**:

``` javascript
function moverElemento(
indexFrom,
indexTo,
list
) {
// Guarda el elemento a mover
const moveValue = list[index];
// Crea una lista sin el elemento a mover
const listNotValue = list.filter(
(currentValue, currentIndex) => currentIndex != index
);
// Concadena todos los fragmentos: inicio del array + elemento + resto del array
return listNotValue
.slice(0, newPosition)
.concat(moveValue, listNotValue.slice(newPosition));
}

moverElemento(7, 1, miLista);
// ["Lisp", "Scala", "Clojure", "Haskell", "Elm", "Racket", "Swift", "Erlang"]
```