tanrax / soy-un-buen-programador-js

Juego con retos sencillos de JavaScript para probarte a ti mismo que sabes lo que haces
11 stars 2 forks source link

Reto 2 + retos 5-8 #7

Open nuria-marmol opened 2 years ago

nuria-marmol commented 2 years ago

Reto 2:

    const miLista = [1, 9, 87, 3, 10, 4, 20, 2, 45];
    console.log(miLista);

    // Nueva lista con números de 1 dígito
    const listaCambiada = miLista.map(function(elemento) {
        /* Pasamos el número a string para poder usar slice. Cortamos el segundo dígito. Después lo volvemos a transformar en núm. */
        return parseInt(elemento.toString().slice(0, 1));
    })
    console.log(listaCambiada);

Reto 5:

     /**
     * Elimina los acentos de una cadena
     *
     * @param {string} Texto del que queremos quitar las tildes
     * @returns {string} Texto sin acentos
     */
    function quitarAcentos(string) {
        // NFD: la forma descompuesta de Unicode. Por defecto sería NFC
        return string.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
    }

    console.log(quitarAcentos("Tú quitarás estos acentos rápidamente."));

Reto 6:

     /**
     * Crea un array con los números de Fibonacci
     *
     * @param {number} cantidadElementos Cuántos números queremos en nuestro array; su largo
     * @returns {array} arrayFibonacci Array con la secuencia de Fibonacci
     */
    function fibonacci(cantidadElementos) {
        /* La secuencia de Fibonacci empieza por 0, 1... Y los siguientes núms. son el resultado de la suma de sus dos anteriores */
        // Creamos un array con x número de elementos. Este array empieza por 0 y va incrementando de 1 en 1
        const array = Array.from({length: cantidadElementos}, function(valor, indice) {
            return indice;
        })
        // Cambiamos los números del array para que sean los de Fibonacci
        const arrayFibonacci = array.map(function(valor, indice, array) {
            // El primero lo mantiene
            if (indice == 0) {
                return 0;
            // No cambia tampoco el segundo elemento, 1
            } else if (indice == 1) {
                return 1;
            // A partir del tercer elemento, va recorriendo así:
            } else {
                // Guardamos tanto la posición actual como su posición anterior y la previa a esta última
                const posicionActual = indice;
                const posicionAnterior = posicionActual - 1;
                const posicionPreviaAnterior = posicionAnterior - 1;
                // Cada número es el resultado de la suma de los dos núms. que le preceden
                return array[posicionActual] = array[posicionAnterior] + array[posicionPreviaAnterior];
            }
        })
        return arrayFibonacci;
    }

    console.log(fibonacci(10));

Reto 7:

     /**
     * Crea un número al azar entre el 1 y el 30, ambos incluidos
     *
     * @returns {number} Número entero random
     */
    function generarNumero() {
        return Math.floor(Math.random() * 30) + 1;
    }

    /**
     * Genera un array de 10 elementos con números aleatorios
     *
     * @returns {array} arrayAComprobar Dicho array
     */
    function crearArray() {
        const arrayAComprobar = Array(10).fill().map(() => {
            return generarNumero();
        })
        return arrayAComprobar;
    }

    /**
     * Comprueba si hay números repetidos en el array y los elimina, reemplazándolos por otros
     *
     * @returns {array} arraySinRepetidos El array de 10 elementos sin repetir
     */
    function rellenarSet() {
        // Pasamos el array a comprobar a un set para quitar los repetidos
        const arraySinRepetidos = new Set(crearArray());
        // Añadimos nuevo número al set
        arraySinRepetidos.add(generarNumero());
        // Si ya hay 10 elementos que NO son iguales, pasa el set a array y lo devuelve ordenado de menor a mayor
        if (arraySinRepetidos.size == 10) {
            return Array.from(arraySinRepetidos).sort(function(num1, num2) {
                return num1 - num2;
            });
        }
        // Recursividad para seguir añadiendo números hasta que se cumpla la condición anterior
        return rellenarSet();
    }

    console.log(rellenarSet());

Reto 8:

    const sieteGrupos = ["Queen", "Cream", "The Doors", "The Who", "Blondie", "The Police", "Kiss"];

    /**
     * Cambia un elemento a otra posición dentro del array, moviendo el resto de elementos
     *
     * @param {number} posicionInicial El elemento que queremos "mover"
     * @param {number} posicionFinal El índice donde queremos que esté
     * @param {array} array El array original que vamos a modificar
     * @returns {array} El array modificado
     */
    function moverElemento(posicionInicial, posicionFinal, array) {
        /* Realmente estamos duplicando el elemento y poniéndolo en la posición final, haciendo que todos se muevan. 0 porque en la posición final no queremos que elimine ningún elemento */
        array.splice(posicionFinal, 0, array[posicionInicial]);
        // Como el elemento original se ha movido una posición:
        const posicionActual = posicionInicial + 1;
        // En esa posición queremos que nos quite 1 elemento, el duplicado
        array.splice(posicionActual, 1);
        return array;
    }

    // Movemos The Doors a la primera posición del array
    console.log(moverElemento(2, 0, sieteGrupos));