Mejoras al juego del 1 al 100

Para todos aquellos que ya habéis implementado la lógica del juego de clicar números, unas posibles mejoras:

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

Ejercicio juego clicar números

Vamos a hacer el juego de clicar 100 números en orden correlativo. Lo enlazan aquí: Del 1 al 100 y la fuente es aquí: 1-100 click me.

Vamos a empezar creando la web, que se compone de un panel superior con la cantidad de números que nos quedan por clicar, los que hemos clicado, la puntuación y un contador.

Debajo tenemos un div donde están los números del 1 al 100 en orden aleatorio.

Hacemos la web con el diseño que queramos (pero que quede bonito).

Hacemos el javascript que nos genere 100 elementos con los números del 1 al 100 y que nos los coloque de manera aleatorio. Pueden ser botones, pueden ser divs, os recomiendo flexbox, pero que cada vez que actualicemos la página se nos genere otra configuración.

Ejercicios JS

Teníamos una función conjetura que nos comprobaba la conjetura de Collatz. Si la probamos vemos que hay números que tienen muchos pasos y otros que tienen pocos. Me interesa saber, en los números del 1 al 100, cual es el que tiene más pasos, el segundo y el tercero. Crear una función que nos los devuelva junto con el número de pasos. Le pasamos como parámetro el número máximo que queremos evaluar y nos devolverá los 3 números con más pasos. Dejo a vuestra elección el formato en el que se devuelven los valores.

Teníamos una función que nos creaba un array con diferentes productos. Sobre ese array vamos a crear las siguientes funciones:

getByReference(reference)->Array con los productos cuya referencia comience por la cadena que le pasemos. Longitud máxima 3, si es mayor devolvemos un array vacío.

getInventory()->Nos devuelve el total de stock de los productos

getValuedInventory()->Nos devuelve el total del stock multiplicado por el precio de los productos

getPriceRange(min,max)->Nos devuelve los productos cuyo precio esté en ese rango, valores incluidos

getSortValuedInventory()->Nos devuelve un array con los productos ordenados por el precio multiplicado por el stock.

JS copiar arrays

let a = [1, 2, 3]

let b = a

console.log(b == a) //true porque apuntan al mismo sitio

b[2] = 4

console.log(a) //1,2,4 porque son el mismo

let c = a.slice()

console.log(c) //1,2,4 porque lo copia

console.log(c == a) //false porque es copia

let d = a.concat()

console.log(d) //1,2,4 porque lo copia

console.log(d == a) //false porque es copia

let e = [...a]

console.log(e) //1,2,4 porque lo copia

console.log(e == a) //false porque es copia

Ejercicio repaso JS

Queremos guardar los datos de una serie de productos, lo hacemos en un objeto que tiene como campos clave ‘nombre’, ‘referencia’, ‘precio’, ‘stock’.

Decidimos crear una función que, pasándole esos parámetros, nos cree un objeto con los valores. Se deben introducir todos los valores.

El precio tiene que ser mayor o igual que 0, el stock lo mismo.

La referencia tiene el siguiente formato: XXX12345 donde XXX son tres letras en mayúsculas [A-Z] y 12345 cinco dígitos. La referencia debe ser correcta.

Si falta algún valor, precio y stock no tienen los valores adecuados, o la referencia es incorrecta se devuelve ‘null’

Para hacer un test nos han pedido que creemos un array de 100 productos. El nombre de los productos será ‘producto’ + número de índice. La referencia será ‘AAA’ para los 10 primeros, ‘BBB’ para los 10 segundos y así sucesivamente. El número de la referencia será el mismo número de índice que el del producto. (p.ej., el producto ‘producto4’ tendrá como referencia ‘AAA00004’, el producto31 tendrá como referencia ‘DDD00031’). El precio será un valor aleatorio entero entre 2 y 50. El stock será un valor aleatorio entero entre 10 y 200.

Ejercicio javascript

Hay una conjetura matemática que dice que lo siguiente:

Sea la siguiente operación, aplicable a cualquier número entero positivo:

  • Si el número es par, se divide entre 2.
  • Si el número es impar, se multiplica por 3 y se suma 1.

Al final siempre obtenemos uno.

Ejemplo:  13, 40, 20, 10, 5, 16, 8, 4, 2, 1.

Crearemos una función ‘conjetura’ a la que le pasaremos un número y nos devolverá una cadena con los pasos.

Ejemplo:
conjetura(13)-> 13, 40, 20, 10, 5, 16, 8, 4, 2, 1
conjetura(128)->128,64,32,16,8,4,2,1
conjetura(5)->5, 16, 8, 4, 2, 1

Función que dado un número de teléfono nos diga si es válido (true) o no (false). Un número de teléfono es válido si tiene una longitud de nueve cifras y todas son números. Ejemplo: telefonoValido(“666999666”)->true telefonoValido(“33666999666”)->false

Función que dado un número de teléfono válido nos lo muestre en formato xxx-xxx-xxx. Ejemplo: formatTelefono(“666999666”)-> “666-999-666”

Función que nos diga si un cif es válido o no. Los cifs válidos con una letra+8 caracteres. Ejemplo: cifValido(‘B12345678’)->true

Escribe una función a la que le pasemos dos cadenas y nos devuelva la más larga. Ejemplo: masLarga(“hola,”,”adios”)->”adios”

Modificar la función anterior para admitir un número indefinido de cadenas.