Mini ejercicio modulos

Vamos a crear un script tiradas que nos va a proporcionar diferentes tiradas para juegos.
Tendrá una función dado que nos devuelve un valor entre 1 y 6
Una moneda que nos devuelve ‘cara’ o ‘cruz’
Una ruleta que nos devuelve ‘rojo’,’negro’ o ‘doble cero’

Creamos una página para probarla. En un script importamos todas las funciones y probamos que van bien.

Para nota:
En la página poned un input con un número (por defecto 5) y tres botones: dado, moneda y ruleta. Al pulsar en el botón en un div debajo (y que sea medio bonito) poned los resultados de realizar ese número de tiradas.

Para más nota:
Si alguien se anima estas navidades que pruebe ese método infalible de la ruleta que siempre da ganancias (guiño, guiño)

Juego del 1 al 100

Tenemos 100 botones con los números del 1 al 100 y hay que pulsarlos correlativamente:

https://www.microsiervos.com/archivo/juegos-y-diversion/del-1-al-100-juego-numeros.html

¿Seríamos capaz de hacer algo parecido?

Posibles mejoras:

– Poder elegir la cantidad de números y/o el tiempo disponible
– Implementar un botón ‘trampa’ que nos permita localizar el número actual por si estamos rayados. Sólo se permite una trampa por juego.
-Implementar un botón pausa que pause el juego poniendo una capa encima que esconda los números (para que no se pueda hacer trampa) y que cerrando esa capa o con otro botón volvamos al juego. El juego original tiene un botón de pausa por si queréis ver el funcionamiento esperado.
– Que pulsando la tecla ‘P’ se consiga el mismo efecto.
– No podemos deshabilitar la búsqueda del navegador, pero sí que cuando pulse CTRL+F no le funcione y le salga un mensaje de tramposo.
– Posibilidad de dos modos de juego: contrarreloj como ahora o sin límite de tiempo a ver cuanto se tarda.

Ejercicios de todo un poco

Cread una función que nos diga si una palabra es un anagrama de otra. Por ejemplo ‘rosa’ y ‘raso’ son anagramas una de otra, pero ‘rosa’ y ‘ruso’, no.

Cread una función a la que le pasemos una cadena y nos la devuelva con las palabras ordenadas por longitud y, a igual longitud, por orden alfabético.
“hola que tal estás”->”que tal estás hola”

Cread una función a la que le pasamos una cantidad variable de palabras y nos devuelva la palabra de mayor longitud.

Cread una página que muestre, en grande, un reloj con la hora, minutos y segundos que se vaya actualizando.

Para los dos ejercicios primeros, cread una página que tenga unos inputs para poner las palabras y la frase y que nos las evalue.

Ejemplos fechas

let now = new Date();
let desde1970 = new Date(1000 * 60 * 60 * 24 * 365 * 10);
let deCadena = new Date("2024-12-01 10:24:30");
let desglosado = new Date(2023, 0, 44, 17, 15, 20);

console.log(now);
console.log(desde1970);
console.log(deCadena);
console.log(desglosado);
console.log(desglosado.toDateString());
console.log(desglosado.toLocaleString());
console.log(desglosado.toLocaleDateString());

// Todas las fechas de 2024
for(let i=1;i<=365;i++){
    console.log(new Date(2024,0,i));
}

console.log(now.getFullYear(),now.getMonth(), now.getDate(), now.getHours(),now.getMinutes(),now.getSeconds(), now.getMilliseconds());

console.log(now.getDay(),now.getTime());

let inicio=new Date().getTime();
console.log(inicio)
for(let i=0;i<100000000;i++){
    let a=2**i;
}
let fin=new Date().getTime();
console.log(fin)

console.log(fin-inicio)

Chuleta fechas en JS

Ejemplo spread y destructuring


// tenemos un array con un nombre y apellido
let arr = ["John", "Smith"]

// asignación desestructurante
// fija firstName = arr[0]
// y surname = arr[1]
let [firstName, surname] = arr;
/*
let firstName=arr[0];
let surname=arr[1];
*/
console.log(firstName)
console.log(surname)
console.log(arr)

// segundo elemento no es necesario
let [nombre, , title] = ["Julius", "Caesar", "Consul", "of the Roman Republic"];
console.log(nombre)
console.log(title)

let aa = 2;
let b = 7;

/*
let c=a;
a=b;
b=c;
*/
// swap de variables usando destructuring
[aa, b] = [b, aa]

console.log(aa);

let user = {
    name: "John",
    age: 30
};

// recorrer claves-y-valores con destructuring
for (let [key, value] of Object.entries(user)) {
    console.log(`${key}:${value}`); // name:John, luego age:30
}

let [name1, name2, ...rest] = ["Julius", "Caesar", "Consul", "of the Roman Republic"];

console.log(rest);

// valores predeterminados
let [name = "Guest", apellido = "Anonymous"] = ["Julius"];

let options = {
    titulo: "Menu",
    width: 100,
    height: 200
};

let { width, titulo, height } = options;

console.log(titulo)

let prueba = { a: 1, b: 2, c: 3, d: 4 };

let { a, ...resto } = prueba;

console.log(resto)

showMenu(options);

showMenu();

function showMenu({ titulo = "Untitled", width = 200, height = 100, items = [] } = {}) {
    console.log(titulo)
}

https://es.javascript.info/destructuring-assignment

https://dev.to/codingnninja/a-simple-guide-to-javascript-destructuring-3o8o

https://davidwalsh.name/spread-operator

https://codeburst.io/a-simple-guide-to-destructuring-and-es6-spread-operator-e02212af5831

https://gist.github.com/mikaelbr/9900818

Ejercicios

1.- Crear una función InternalTrim que elimine espacios de más DENTRO de una cadena.

InternalTrim(“Hola que       tal”)=>”Hola que tal”

2.- Crear una función ToTitleCase que nos ponga la primera letra de cada palabra en mayúsculas

ToTitleCase(“hoLA que TAL”)=>”Hola Que Tal”

Ejemplos funciones iteracción

let nums = [1, 2, 3, 4, 5, 6, 7, 8, 1, 3, 2, 5, 14, 23];

// Orden numérico con función flecha
let grandes = nums.filter(check);
grandes = nums.filter((item) => item % 2 == 0);
console.log(grandes)

let doble = nums.map(item => item * 2);

console.log(doble)

function check(elemento) {
    return elemento % 2 == 0;
}

let users = [
    { id: 1, name: "Celina" },
    { id: 2, name: "David" },
    { id: 3, name: "Federico" }
];

let user = users.findIndex(item => item.id == 1);
console.log(user);

let conA = users.filter(item => item.name.includes("a"));
console.log(conA);

Ordenación arrays

let nums = [1, 2, 3, 4, 5, 6, 7, 8, 1, 3, 2, 5, 14, 23];

// Orden numérico con función flecha
nums.sort((a, b) => a - b);
nums.sort(function(a, b){return a - b;});
console.log(nums);
nums.reverse();
console.log(nums);


let alumnos=["Pep","Ána","Iu"];
// Orden de cadenas con acentos
alumnos.sort((a,b)=>a.localeCompare(b));
console.log(alumnos);

// Desordenar
nums.sort(()=>0.5-Math.random());
console.log(nums);

// Ordenar creando copia
let nuevo=nums.toSorted((a, b) => a - b);
console.log(nuevo);
// Invertir creando copia
let inverso=nuevo.toReversed();
console.log(inverso);

Ejemplos array

let fruits = ["Apple", "Orange", "Plum",1,{nombre:"Ana"},[1,2,3]];

console.log(fruits[1]);

fruits[1]="Manzana";

console.log(fruits.at(-1))

frutas=fruits;
frutas[0]="Pera";
console.log(fruits);

let lista=[1,2,3,4,5];
console.log(suma(lista));
console.log(lista);

function suma(lista){
    for(let i=1;i<lista.length;i++){
        lista[0]+=lista[i];
    }
    return lista[0];
}

fruits[900]="Cacahuete";

console.log(fruits);

fruits.super="Mercadona";

console.log(fruits);

for (let valor of fruits){
    console.log(valor);
}

fruits.push("Mandarina"); // Añado un elemento
console.log(fruits);
let res=fruits.pop(); // Quito un elemento
console.log(fruits);
console.log(res)

fruits.unshift("Aguacate");
console.log(fruits);
res=fruits.shift();
console.log(res);