Utiliza el lenguaje de programación que tú quieras para resolver ejercicios que te ayudarán a mejorar tu forma de pensar y enfrentarte a retos de código.
Consulta correcciones de la comunidad en los repositorios de código de los diferentes retos. Se han dividido entre los resueltos en 2022 y 2023 (consulta su etiqueta).
/*
* Escribe un programa que muestre por consola (con un print) los
* números de 1 a 100 (ambos incluidos y con un salto de línea entre
* cada impresión), sustituyendo los siguientes:
* - Múltiplos de 3 por la palabra "fizz".
* - Múltiplos de 5 por la palabra "buzz".
* - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz".
*/
/*
* Escribe una función que reciba dos palabras (String) y retorne
* verdadero o falso (Bool) según sean o no anagramas.
* - Un Anagrama consiste en formar una palabra reordenando TODAS
* las letras de otra palabra inicial.
* - NO hace falta comprobar que ambas palabras existan.
* - Dos palabras exactamente iguales no son anagrama.
*/
/*
* Crea una única función (importante que sólo sea una) que sea capaz
* de calcular y retornar el área de un polígono.
* - La función recibirá por parámetro sólo UN polígono a la vez.
* - Los polígonos soportados serán Triángulo, Cuadrado y Rectángulo.
* - Imprime el cálculo del área de un polígono de cada tipo.
*/
/*
* Crea un programa que se encargue de calcular el aspect ratio de una
* imagen a partir de una url.
* - Url de ejemplo:
* https://raw.githubusercontent.com/mouredevmouredev/master/mouredev_github_profile.png
* - Por ratio hacemos referencia por ejemplo a los "16:9" de una
* imagen de 1920*1080px.
*/
/*
* Crea un programa que cuente cuantas veces se repite cada palabra
* y que muestre el recuento final de todas ellas.
* - Los signos de puntuación no forman parte de la palabra.
* - Una palabra es la misma aunque aparezca en mayúsculas y minúsculas.
* - No se pueden utilizar funciones propias del lenguaje que
* lo resuelvan automáticamente.
*/
/*
* Crea un programa que sea capaz de transformar texto natural a código
* morse y viceversa.
* - Debe detectar automáticamente de qué tipo se trata y realizar
* la conversión.
* - En morse se soporta raya "—", punto ".", un espacio " " entre letras
* o símbolos y dos espacios entre palabras " ".
* - El alfabeto morse soportado será el mostrado en
* https://es.wikipedia.org/wiki/Código_morse.
*/
/*
* Crea un programa que comprueba si los paréntesis, llaves y corchetes
* de una expresión están equilibrados.
* - Equilibrado significa que estos delimitadores se abren y cieran
* en orden y de forma correcta.
* - Paréntesis, llaves y corchetes son igual de prioritarios.
* No hay uno más importante que otro.
* - Expresión balanceada: { [ a * ( c + d ) ] - 5 }
* - Expresión no balanceada: { a * ( c + d ) ] - 5 }
*/
/*
* Crea una función que reciba dos cadenas como parámetro (str1, str2)
* e imprima otras dos cadenas como salida (out1, out2).
* - out1 contendrá todos los caracteres presentes en la str1 pero NO
* estén presentes en str2.
* - out2 contendrá todos los caracteres presentes en la str2 pero NO
* estén presentes en str1.
*/
/*
* Escribe una función que reciba un texto y retorne verdadero o
* falso (Boolean) según sean o no palíndromos.
* Un Palíndromo es una palabra o expresión que es igual si se lee
* de izquierda a derecha que de derecha a izquierda.
* NO se tienen en cuenta los espacios, signos de puntuación y tildes.
* Ejemplo: Ana lleva al oso la avellana.
*/
/*
* Crea una función que calcule y retorne cuántos días hay entre dos cadenas
* de texto que representen fechas.
* - Una cadena de texto que representa una fecha tiene el formato "dd/MM/yyyy".
* - La función recibirá dos String y retornará un Int.
* - La diferencia en días será absoluta (no importa el orden de las fechas).
* - Si una de las dos cadenas de texto no representa una fecha correcta se
* lanzará una excepción.
*/
/*
* Crea una función que evalúe si un/a atleta ha superado correctamente una
* carrera de obstáculos.
* - La función recibirá dos parámetros:
* - Un array que sólo puede contener String con las palabras
* "run" o "jump"
* - Un String que represente la pista y sólo puede contener "_" (suelo)
* o "|" (valla)
* - La función imprimirá cómo ha finalizado la carrera:
* - Si el/a atleta hace "run" en "_" (suelo) y "jump" en "|" (valla)
* será correcto y no variará el símbolo de esa parte de la pista.
* - Si hace "jump" en "_" (suelo), se variará la pista por "x".
* - Si hace "run" en "|" (valla), se variará la pista por "/".
* - La función retornará un Boolean que indique si ha superado la carrera.
* Para ello tiene que realizar la opción correcta en cada tramo de la pista.
*/
/*
* Crea una función que analice una matriz 3x3 compuesta por "X" y "O"
* y retorne lo siguiente:
* - "X" si han ganado las "X"
* - "O" si han ganado los "O"
* - "Empate" si ha habido un empate
* - "Nulo" si la proporción de "X", de "O", o de la matriz no es correcta.
* O si han ganado los 2.
* Nota: La matriz puede no estar totalmente cubierta.
* Se podría representar con un vacío "", por ejemplo.
*/
/*
* Crea una función que sume 2 números y retorne su resultado pasados
* unos segundos.
* - Recibirá por parámetros los 2 números a sumar y los segundos que
* debe tardar en finalizar su ejecución.
* - Si el lenguaje lo soporta, deberá retornar el resultado de forma
* asíncrona, es decir, sin detener la ejecución del programa principal.
* Se podría ejecutar varias veces al mismo tiempo.
*/
/*
* Lee el fichero "Challenge21.txt" incluido en el proyecto, calcula su
* resultado e imprímelo.
* - El .txt se corresponde con las entradas de una calculadora.
* - Cada línea tendrá un número o una operación representada por un
* símbolo (alternando ambos).
* - Soporta números enteros y decimales.
* - Soporta las operaciones suma "+", resta "-", multiplicación "*"
* y división "/".
* - El resultado se muestra al finalizar la lectura de la última
* línea (si el .txt es correcto).
* - Si el formato del .txt no es correcto, se indicará que no se han
* podido resolver las operaciones.
*/
/*
* Crea una función que reciba dos array, un booleano y retorne un array.
* - Si el booleano es verdadero buscará y retornará los elementos comunes
* de los dos array.
* - Si el booleano es falso buscará y retornará los elementos no comunes
* de los dos array.
* - No se pueden utilizar operaciones del lenguaje que
* lo resuelvan directamente.
*/
/*
* Crea un programa que calcule quien gana más partidas al piedra,
* papel, tijera.
* - El resultado puede ser: "Player 1", "Player 2", "Tie" (empate)
* - La función recibe un listado que contiene pares, representando cada jugada.
* - El par puede contener combinaciones de "R" (piedra), "P" (papel)
* o "S" (tijera).
* - Ejemplo. Entrada: [("R","S"), ("S","R"), ("P","S")]. Resultado: "Player 2".
*/
/*
* Simula el funcionamiento de una máquina expendedora creando una operación
* que reciba dinero (array de monedas) y un número que indique la selección
* del producto.
* - El programa retornará el nombre del producto y un array con el dinero
* de vuelta (con el menor número de monedas).
* - Si el dinero es insuficiente o el número de producto no existe,
* deberá indicarse con un mensaje y retornar todas las monedas.
* - Si no hay dinero de vuelta, el array se retornará vacío.
* - Para que resulte más simple, trabajaremos en céntimos con monedas
* de 5, 10, 50, 100 y 200.
* - Debemos controlar que las monedas enviadas estén dentro de las soportadas.
*/
/*
* Crea una función que ordene y retorne una matriz de números.
* - La función recibirá un listado (por ejemplo [2, 4, 6, 8, 9]) y un parámetro
* adicional "Asc" o "Desc" para indicar si debe ordenarse de menor a mayor
* o de mayor a menor.
* - No se pueden utilizar funciones propias del lenguaje que lo resuelvan
* automáticamente.
*/
/*
* Crea un función, que dado un año, indique el elemento
* y animal correspondiente en el ciclo sexagenario del zodíaco chino.
* - Info: https://www.travelchinaguide.com/intro/astrology/60year-cycle.htm
* - El ciclo sexagenario se corresponde con la combinación de los elementos
* madera, fuego, tierra, metal, agua y los animales rata, buey, tigre,
* conejo, dragón, serpiente, caballo, oveja, mono, gallo, perro, cerdo
* (en este orden).
* - Cada elemento se repite dos años seguidos.
* - El último ciclo sexagenario comenzó en 1984 (Madera Rata).
*/
/*
* Crea un programa que calcule el daño de un ataque durante
* una batalla Pokémon.
* - La fórmula será la siguiente: daño = 50 * (ataque / defensa) * efectividad
* - Efectividad: x2 (súper efectivo), x1 (neutral), x0.5 (no es muy efectivo)
* - Sólo hay 4 tipos de Pokémon: Agua, Fuego, Planta y Eléctrico
* (buscar su efectividad)
* - El programa recibe los siguientes parámetros:
* - Tipo del Pokémon atacante.
* - Tipo del Pokémon defensor.
* - Ataque: Entre 1 y 100.
* - Defensa: Entre 1 y 100.
*/
/*
* ¡La Tierra Media está en guerra! En ella lucharán razas leales
* a Sauron contra otras bondadosas que no quieren que el mal reine
* sobre sus tierras.
* Cada raza tiene asociado un "valor" entre 1 y 5:
* - Razas bondadosas: Pelosos (1), Sureños buenos (2), Enanos (3),
* Númenóreanos (4), Elfos (5)
* - Razas malvadas: Sureños malos (2), Orcos (2), Goblins (2),
* Huargos (3), Trolls (5)
* Crea un programa que calcule el resultado de la batalla entre
* los 2 tipos de ejércitos:
* - El resultado puede ser que gane el bien, el mal, o exista un empate.
* Dependiendo de la suma del valor del ejército y el número de integrantes.
* - Cada ejército puede estar compuesto por un número de integrantes variable
* de cada raza.
* - Tienes total libertad para modelar los datos del ejercicio.
* Ej: 1 Peloso pierde contra 1 Orco
* 2 Pelosos empatan contra 1 Orco
* 3 Pelosos ganan a 1 Orco
*/
/*
* ¡Han anunciado un nuevo "The Legend of Zelda"!
* Se llamará "Tears of the Kingdom" y se lanzará el 12 de mayo de 2023.
* Pero, ¿recuerdas cuánto tiempo ha pasado entre los distintos
* "The Legend of Zelda" de la historia?
* Crea un programa que calcule cuántos años y días hay entre 2 juegos de Zelda
* que tú selecciones.
* - Debes buscar cada uno de los títulos y su día de lanzamiento
* (si no encuentras el día exacto puedes usar el mes, o incluso inventártelo)
*/
/*
* Implementa uno de los algoritmos de ordenación más famosos:
* el "Quick Sort", creado por C.A.R. Hoare.
* - Entender el funcionamiento de los algoritmos más utilizados de la historia
* Nos ayuda a mejorar nuestro conocimiento sobre ingeniería de software.
* Dedícale tiempo a entenderlo, no únicamente a copiar su implementación.
* - Esta es una nueva serie de retos llamada "TOP ALGORITMOS",
* donde trabajaremos y entenderemos los más famosos de la historia.
*/
/*
* Crea una función que calcule el valor del parámetro perdido
* correspondiente a la ley de Ohm.
* - Enviaremos a la función 2 de los 3 parámetros (V, R, I), y retornará
* el valor del tercero (redondeado a 2 decimales).
* - Si los parámetros son incorrectos o insuficientes, la función retornará
* la cadena de texto "Invalid values".
*/
/*
* Este es un reto especial por Halloween.
* Deberemos crear un programa al que le indiquemos si queremos realizar "Truco
* o Trato" y un listado (array) de personas con las siguientes propiedades:
* - Nombre de la niña o niño
* - Edad
* - Altura en centímetros
*
* Si las personas han pedido truco, el programa retornará sustos (aleatorios)
* siguiendo estos criterios:
* - Un susto por cada 2 letras del nombre por persona
* - Dos sustos por cada edad que sea un número par
* - Tres sustos por cada 100 cm de altura entre todas las personas
* - Sustos: 🎃 👻 💀 🕷 🕸 🦇
*
* Si las personas han pedido trato, el programa retornará dulces (aleatorios)
* siguiendo estos criterios:
* - Un dulce por cada letra de nombre
* - Un dulce por cada 3 años cumplidos hasta un máximo de 10 años por persona
* - Dos dulces por cada 50 cm de altura hasta un máximo de 150 cm por persona
* - Dulces: 🍰 🍬 🍡 🍭 🍪 🍫 🧁 🍩
* - En caso contrario retornará un error.
*/
/*
* Crea una función que retorne el número total de bumeranes de
* un array de números enteros e imprima cada uno de ellos.
* - Un bumerán (búmeran, boomerang) es una secuencia formada por 3 números
* seguidos, en el que el primero y el último son iguales, y el segundo
* es diferente. Por ejemplo [2, 1, 2].
* - En el array [2, 1, 2, 3, 3, 4, 2, 4] hay 2 bumeranes ([2, 1, 2]
* y [4, 2, 4]).
*/
/*
* Dado un array de números enteros positivos, donde cada uno
* representa unidades de bloques apilados, debemos calcular cuantas unidades
* de agua quedarán atrapadas entre ellos.
*
* - Ejemplo: Dado el array [4, 0, 3, 6, 1, 3].
*
* ⏹
* ⏹
* ⏹💧💧⏹
* ⏹💧⏹⏹💧⏹
* ⏹💧⏹⏹💧⏹
* ⏹💧⏹⏹⏹⏹
*
* Representando bloque con ⏹︎ y agua con 💧, quedarán atrapadas 7 unidades
* de agua. Suponemos que existe un suelo impermeable en la parte inferior
* que retiene el agua.
*/
/*
* Calcula dónde estará un robot (sus coordenadas finales) que se
* encuentra en una cuadrícula representada por los ejes "x" e "y".
* - El robot comienza en la coordenada (0, 0).
* - Para idicarle que se mueva, le enviamos un array formado por enteros
* (positivos o negativos) que indican la secuencia de pasos a dar.
* - Por ejemplo: [10, 5, -2] indica que primero se mueve 10 pasos, se detiene,
* luego 5, se detiene, y finalmente 2.
* El resultado en este caso sería (x: -5, y: 12)
* - Si el número de pasos es negativo, se desplazaría en sentido contrario al
* que está mirando.
* - Los primeros pasos los hace en el eje "y". Interpretamos que está mirando
* hacia la parte positiva del eje "y".
* - El robot tiene un fallo en su programación: cada vez que finaliza una
* secuencia de pasos gira 90 grados en el sentido contrario a las agujas
* del reloj.
*/
/*
* ¿Conoces el calendario de adviento de la comunidad (https://adviento.dev)?
* 24 días, 24 regalos sorpresa relacionados con desarrollo de software,
* ciencia y tecnología desde el 1 de diciembre.
*
* Enunciado: Crea una función que reciba un objeto de tipo "Date" y retorne
* lo siguiente:
* - Si la fecha coincide con el calendario de aDEViento 2022: Retornará el regalo
* de ese día (a tu elección) y cuánto queda para que finalice el sorteo de ese día.
* - Si la fecha es anterior: Cuánto queda para que comience el calendario.
* - Si la fecha es posterior: Cuánto tiempo ha pasado desde que ha finalizado.
*
* Notas:
* - Tenemos en cuenta que cada día del calendario comienza a medianoche 00:00:00
* y finaliza a las 23:59:59.
* - Debemos trabajar con fechas que tengan año, mes, día, horas, minutos
* y segundos.
*/
/*
* Crea una función que sea capaz de detectar y retornar todos los
* handles de un texto usando solamente Expresiones Regulares.
* Debes crear una expresión regular para cada caso:
* - Handle usuario: Los que comienzan por "@"
* - Handle hashtag: Los que comienzan por "#"
* - Handle web: Los que comienzan por "www.", "http://", "https://"
* y finalizan con un dominio (.com, .es...)
*/
/*
* Crea tu propio enunciado para que forme parte de los retos de 2023.
* - Ten en cuenta que su dificultad debe ser asumible por la comunidad y seguir
* un estilosemejante a los que hemos realizado durante el año.
* - Si quieres también puedes proponer tu propia solución al reto
* (en el lenguaje que quieras).
*/
/*
* Escribe un programa que muestre por consola (con un print) los
* números de 1 a 100 (ambos incluidos y con un salto de línea entre
* cada impresión), sustituyendo los siguientes:
* - Múltiplos de 3 por la palabra "fizz".
* - Múltiplos de 5 por la palabra "buzz".
* - Múltiplos de 3 y de 5 a la vez por la palabra "fizzbuzz".
*/
/*
* Escribe un programa que reciba un texto y transforme lenguaje natural a
* "lenguaje hacker" (conocido realmente como "leet" o "1337"). Este lenguaje
* se caracteriza por sustituir caracteres alfanuméricos.
* - Utiliza esta tabla (https://www.gamehouse.com/blog/leet-speak-cheat-sheet)
* con el alfabeto y los números en "leet".
* (Usa la primera opción de cada transformación. Por ejemplo "4" para la "a")
*/
/*
* Escribe un programa que muestre cómo transcurre un juego de tenis y quién lo ha ganado.
* El programa recibirá una secuencia formada por "P1" (Player 1) o "P2" (Player 2), según quien
* gane cada punto del juego.
*
* - Las puntuaciones de un juego son "Love" (cero), 15, 30, 40, "Deuce" (empate), ventaja.
* - Ante la secuencia [P1, P1, P2, P2, P1, P2, P1, P1], el programa mostraría lo siguiente:
* 15 - Love
* 30 - Love
* 30 - 15
* 30 - 30
* 40 - 30
* Deuce
* Ventaja P1
* Ha ganado el P1
* - Si quieres, puedes controlar errores en la entrada de datos.
* - Consulta las reglas del juego si tienes dudas sobre el sistema de puntos.
*/
/*
* Escribe un programa que sea capaz de generar contraseñas de forma aleatoria.
* Podrás configurar generar contraseñas con los siguientes parámetros:
* - Longitud: Entre 8 y 16.
* - Con o sin letras mayúsculas.
* - Con o sin números.
* - Con o sin símbolos.
* (Pudiendo combinar todos estos parámetros entre ellos)
*/
/*
* Escribe un !Hola Mundo! en todos los lenguajes de programación que puedas.
* Seguro que hay algún lenguaje que te llama la atención y nunca has utilizado,
* o quizás quieres dar tus primeros pasos... ¡Pues este es el momento!
*
* A ver quién se atreve con uno de esos lenguajes que no solemos ver por ahí...
*/
/*
* Crea un programa que calcule quien gana más partidas al piedra,
* papel, tijera, lagarto, spock.
* - El resultado puede ser: "Player 1", "Player 2", "Tie" (empate)
* - La función recibe un listado que contiene pares, representando cada jugada.
* - El par puede contener combinaciones de "🗿" (piedra), "📄" (papel),
* "✂️" (tijera), "🦎" (lagarto) o "🖖" (spock).
* - Ejemplo. Entrada: [("🗿","✂️"), ("✂️","🗿"), ("📄","✂️")]. Resultado: "Player 2".
* - Debes buscar información sobre cómo se juega con estas 5 posibilidades.
*/
/*
* Crea un programa que simule el comportamiento del sombrero selccionador del
* universo mágico de Harry Potter.
* - De ser posible realizará 5 preguntas (como mínimo) a través de la terminal.
* - Cada pregunta tendrá 4 respuestas posibles (también a selecciona una a través de terminal).
* - En función de las respuestas a las 5 preguntas deberás diseñar un algoritmo que
* coloque al alumno en una de las 4 casas de Hogwarts:
* (Gryffindor, Slytherin , Hufflepuff y Ravenclaw)
* - Ten en cuenta los rasgos de cada casa para hacer las preguntas
* y crear el algoritmo seleccionador:
* Por ejemplo, en Slytherin se premia la ambición y la astucia.
*/
/*
* Llamar a una API es una de las tareas más comunes en programación.
*
* Implementa una llamada HTTP a una API (la que tú quieras) y muestra su
* resultado a través de la terminal. Por ejemplo: Pokémon, Marvel...
*
* Aquí tienes un listado de posibles APIs:
* https://github.com/public-apis/public-apis
*/
/*
* Crea un pequeño juego que consista en adivinar palabras en un número máximo de intentos:
* - El juego comienza proponiendo una palabra aleatoria incompleta
* - Por ejemplo "m_ur_d_v", y el número de intentos que le quedan
* - El usuario puede introducir únicamente una letra o una palabra (de la misma longitud que
* la palabra a adivinar)
* - Si escribe una letra y acierta, se muestra esa letra en la palabra. Si falla, se resta
* uno al número de intentos
* - Si escribe una resolución y acierta, finaliza el juego, en caso contrario, se resta uno
* al número de intentos
* - Si el contador de intentos llega a 0, el jugador pierde
* - La palabra debe ocultar de forma aleatoria letras, y nunca puede comenzar
* ocultando más del 60%
* - Puedes utilizar las palabras que quieras y el número de intentos que consideres
*/
/*
* Crea una función que sea capaz de transformar Español al lenguaje básico
* del universo Star Wars: el "Aurebesh".
* - Puedes dejar sin transformar los caracteres que no existan en "Aurebesh".
* - También tiene que ser capaz de traducir en sentido contrario.
*
* ¿Lo has conseguido? Nómbrame en twitter.com/mouredev y escríbeme algo en Aurebesh.
*
* ¡Que la fuerza os acompañe!
*/
/*
* Crea una función que dibuje una escalera según su número de escalones.
* - Si el número es positivo, será ascendente de izquiera a derecha.
* - Si el número es negativo, será descendente de izquiera a derecha.
* - Si el número es cero, se dibujarán dos guiones bajos (__).
*
* Ejemplo: 4
* _
* _|
* _|
* _|
* _|
*
*/
/*
* ¡Estoy de celebración! He publicado mi primer libro:
* "Git y GitHub desde cero"
* - Papel: mouredev.com/libro-git
* - eBook: mouredev.com/ebook-git
*
* ¿Sabías que puedes leer información de Git y GitHub desde la gran
* mayoría de lenguajes de programación?
*
* Crea un programa que lea los últimos 10 commits de este repositorio y muestre:
* - Hash
* - Autor
* - Mensaje
* - Fecha y hora
*
* Ejemplo de salida:
* Commit 1 (el más reciente) | 12345A | MoureDev | Este es un commit | 24/04/2023 21:00
*
* Se permite utilizar librerías que nos faciliten esta tarea.
*/
/*
* El día 128 del año celebramos en la comunidad el "Hola Mundo day"
* Vamos a hacer "web scraping" sobre su sitio web: https://holamundo.day
*
* Crea un programa que se conecte a la web del evento e imprima únicamente la agenda de eventos
* del día 8. Mostrando hora e información de cada uno.
* Ejemplo: "16:00 | Bienvenida"
*
* Se permite utilizar librerías que nos faciliten esta tarea.
*/
/*
* ¡El nuevo "The Legend of Zelda: Tears of the Kingdom" ya está disponible!
*
* Crea un programa que dibuje una Trifuerza de "Zelda"
* formada por asteriscos.
* - Debes indicarle el número de filas de los triángulos con un entero positivo (n).
* - Cada triángulo calculará su fila mayor utilizando la fórmula 2n-1.
*
* Ejemplo: Trifuerza 2
*
* *
* ***
* * *
* *** ***
*/
/*
* Crea un programa que encuentre y muestre todos los pares de números primos
* gemelos en un rango concreto.
* El programa recibirá el rango máximo como número entero positivo.
*
* - Un par de números primos se considera gemelo si la diferencia entre
* ellos es exactamente 2. Por ejemplo (3, 5), (11, 13)
*
* - Ejemplo: Rango 14
* (3, 5), (5, 7), (11, 13)
*/
/*
* Realiza una conexión desde el lenguaje que hayas seleccionado a la siguiente
* base de datos MySQL:
* - Host: mysql-5707.dinaserver.com
* - Port: 3306
* - User: mouredev_read
* - Password: mouredev_pass
* - Database: moure_test
*
* Una vez realices la conexión, lanza la siguiente consulta e imprime el resultado:
* - SELECT * FROM `challenges`
*
* Se pueden usar librerías para realizar la lógica de conexión a la base de datos.
*/
/*
* Crea tres test sobre el reto 12: "Viernes 13".
* - Puedes copiar una solución ya creada por otro usuario en
* el lenguaje que estés utilizando.
* - Debes emplear un mecanismo de ejecución de test que posea
* el lenguaje de programación que hayas seleccionado.
* - Los tres test deben de funcionar y comprobar
* diferentes situaciones (a tu elección).
*/
/*
* Crea una función que reciba dos parámetros para crear una cuenta atrás.
* - El primero, representa el número en el que comienza la cuenta.
* - El segundo, los segundos que tienen que transcurrir entre cada cuenta.
* - Sólo se aceptan números enteros positivos.
* - El programa finaliza al llegar a cero.
* - Debes imprimir cada número de la cuenta atrás.
*/
/*
* Crea una función que reciba una expresión matemática (String)
* y compruebe si es correcta. Retornará true o false.
* - Para que una expresión matemática sea correcta debe poseer
* un número, una operación y otro número separados por espacios.
* Tantos números y operaciones como queramos.
* - Números positivos, negativos, enteros o decimales.
* - Operaciones soportadas: + - * / %
*
* Ejemplos:
* "5 + 6 / 7 - 4" -> true
* "5 a 6" -> false
*/
/*
* Crea una función que reciba dos cadenas de texto casi iguales,
* a excepción de uno o varios caracteres.
* La función debe encontrarlos y retornarlos en formato lista/array.
* - Ambas cadenas de texto deben ser iguales en longitud.
* - Las cadenas de texto son iguales elemento a elemento.
* - No se pueden utilizar operaciones propias del lenguaje
* que lo resuelvan directamente.
*
* Ejemplos:
* - Me llamo mouredev / Me llemo mouredov -> ["e", "o"]
* - Me llamo.Brais Moure / Me llamo brais moure -> [" ", "b", "m"]
*/
/*
* Los primeros dispositivos móviles tenían un teclado llamado T9
* con el que se podía escribir texto utilizando únicamente su
* teclado numérico (del 0 al 9).
*
* Crea una función que transforme las pulsaciones del T9 a su
* representación con letras.
* - Debes buscar cuál era su correspondencia original
* - Cada bloque de pulsaciones va separado por un guión.
* - Si un bloque tiene más de un número, debe ser siempre el mismo.
* - Ejemplo:
* Entrada: 6-666-88-777-33-3-33-888
* Salida: MOUREDEV
*/
/*
* Crea una función que sea capaz de leer el número representado por el ábaco.
* - El ábaco se representa por un array con 7 elementos.
* - Cada elemento tendrá 9 "O" (aunque habitualmente tiene 10 para realizar
* operaciones) para las cuentas y una secuencia de "---" para el alambre.
* - El primer elemento del array representa los millones, y el último las unidades.
* - El número en cada elemento se representa por las cuentas que están a
* la izquierda del alambre.
*
* Ejemplo de array y resultado:
* ["O---OOOOOOOO",
* "OOO---OOOOOO",
* "---OOOOOOOOO",
* "OO---OOOOOOO",
* "OOOOOOO---OO",
* "OOOOOOOOO---",
* "---OOOOOOOOO"]
*
* Resultado: 1.302.790
*/
/*
* Crea un programa capaz de gestionar una pieza de Tetris.
* - La pantalla de juego tiene 10 filas y 10 columnas representadas por símbolos 🔲
* - La pieza de tetris a manejar será la siguiente (si quieres, puedes elegir otra):
* 🔳
* 🔳🔳🔳
* - La pieza aparecerá por primera vez en la parte superior izquierda de la pantalla de juego.
* 🔳🔲🔲🔲🔲🔲🔲🔲🔲🔲
* 🔳🔳🔳🔲🔲🔲🔲🔲🔲🔲
* 🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲
* 🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲
* 🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲
* 🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲
* 🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲
* 🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲
* 🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲
* 🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲
* - Debes desarrollar una función capaz de desplazar y rotar la pieza en el tablero,
* recibiendo una acción cada vez que se llame, mostrando cómo se visualiza en
* la pantalla de juego.
* - Las acciones que se pueden aplicar a la pieza son: derecha, izquierda, abajo, rotar.
* - Debes tener en cuenta los límites de la pantalla de juego.
*/
/*
* Crea un programa capaz de interactuar con un fichero TXT.
* IMPORTANTE: El fichero TXT NO debe subirse como parte de la corrección.
* Únicamente el código.
*
* - Si no existe, debe crear un fichero llamado "text.txt".
* - Desde el programa debes ser capaz de introducir texto por consola y guardarlo
* en una nueva línea cada vez que se pulse el botón "Enter".
* - Si el fichero existe, el programa tiene que dar la opción de seguir escribiendo
* a continuación o borrar su contenido y comenzar desde el principio.
* - Si se selecciona continuar escribiendo, se tiene que mostrar por consola
* el texto que ya posee el fichero.
*/
/*
* Como cada año, el día 256 se celebra el "Día de la Programación".
* En nuestra comunidad siempre hacemos una gran fiesta donde repartirmos
* 256 regalos para seguir aprendiendo programación:
* https://diadelaprogramacion.com
*
* Para seguir ayudando, te propongo este reto:
* Mostrar la sintaxis de los principales elementos de un lenguaje
* en TODOS los lenguajes de programación que podamos. ¿Llegaremos a 50?
*
* En un fichero, haz lo siguiente (si el lenguaje lo soporta),
* y comenta cada bloque para identificar con qué se corresponde:
* - Haz un "Hola, mundo!"
* - Crea variables de tipo String, numéricas (enteras y decimales)
* y Booleanas (o cualquier tipo de dato primitivo).
* - Crea una constante.
* - Usa un if, else if y else.
* - Crea estructuras como un array, lista, tupla, set y diccionario.
* - Usa un for, foreach y un while.
* - Crea diferentes funciones (con/sin parámetros y con/sin retorno).
* - Crea una clase.
* - Muestra el control de excepciones.
*
* Así, cualquier persona podrá consultar rápidamente diferentes ejemplos
* de sintaxis básica de muchos lenguajes.
*
* ¡Muchas gracias!
*/
/*
* Crea una función que encuentre todas las combinaciones de los números
* de una lista que suman el valor objetivo.
* - La función recibirá una lista de números enteros positivos
* y un valor objetivo.
* - Para obtener las combinaciones sólo se puede usar
* una vez cada elemento de la lista (pero pueden existir
* elementos repetidos en ella).
* - Ejemplo: Lista = [1, 5, 3, 2], Objetivo = 6
* Soluciones: [1, 5] y [1, 3, 2] (ambas combinaciones suman 6)
* (Si no existen combinaciones, retornar una lista vacía)
*/
/*
* Crea una función que encuentre todos los triples pitagóricos
* (ternas) menores o iguales a un número dado.
* - Debes buscar información sobre qué es un triple pitagórico.
* - La función únicamente recibe el número máximo que puede
* aparecer en el triple.
* - Ejemplo: Los triples menores o iguales a 10 están
* formados por (3, 4, 5) y (6, 8, 10).
*/
/*
* Este es un reto especial por Halloween.
* Te encuentras explorando una mansión abandonada llena de habitaciones.
* En cada habitación tendrás que resolver un acertijo para poder avanzar a la siguiente.
* Tu misión es encontrar la habitación de los dulces.
*
* Se trata de implementar un juego interactivo de preguntas y respuestas por terminal.
* (Tienes total libertad para ser creativo con los textos)
*
* - 🏰 Casa: La mansión se corresponde con una estructura cuadrada 4 x 4
* que deberás modelar. Las habitaciones de puerta y dulces no tienen enigma.
* (16 habitaciones, siendo una de entrada y otra donde están los dulces)
* Esta podría ser una representación:
* 🚪⬜️⬜️⬜️
* ⬜️👻⬜️⬜️
* ⬜️⬜️⬜️👻
* ⬜️⬜️🍭⬜️
* - ❓ Enigmas: Cada habitación propone un enigma aleatorio que deberás responder con texto.
* Si no lo aciertas no podrás desplazarte.
* - 🧭 Movimiento: Si resuelves el enigma se te preguntará a donde quieres desplazarte.
* (Ejemplo: norte/sur/este/oeste. Sólo deben proporcionarse las opciones posibles)
* - 🍭 Salida: Sales de la casa si encuentras la habitación de los dulces.
* - 👻 (Bonus) Fantasmas: Existe un 10% de que en una habitación aparezca un fantasma y
* tengas que responder dos preguntas para salir de ella.
*/
/*
* Crea una función que calcule el punto de encuentro de dos objetos en movimiento
* en dos dimensiones.
* - Cada objeto está compuesto por una coordenada xy y una velocidad de desplazamiento
* (vector de desplazamiento) por unidad de tiempo (también en formato xy).
* - La función recibirá las coordenadas de inicio de ambos objetos y sus velocidades.
* - La función calculará y mostrará el punto en el que se encuentran y el tiempo que
* tardarn en lograrlo.
* - La función debe tener en cuenta que los objetos pueden no llegar a encontrarse.
*/
/*
* Crea una función que simule las condiciones climáticas (temperatura y probabilidad de lluvia)
* de un lugar ficticio al pasar un número concreto de días según estas reglas:
* - La temperatura inicial y el % de probabilidad de lluvia lo define el usuario.
* - Cada día que pasa:
* - 10% de posibilidades de que la temperatura aumente o disminuya 2 grados.
* - Si la temperatura supera los 25 grados, la probabilidad de lluvia al día
* siguiente aumenta en un 20%.
* - Si la temperatura baja de 5 grados, la probabilidad de lluvia al día
* siguiente disminuya en un 20%.
* - Si llueve (100%), la temperatura del día siguiente disminuye en 1 grado.
* - La función recibe el número de días de la predicción y muestra la temperatura
* y si llueve durante todos esos días.
* - También mostrará la temperatura máxima y mínima de ese periodo y cuántos días va a llover.
*/
/*
* Crea un juego interactivo por terminal en el que tendrás que adivinar
* el resultado de diferentes operaciones matemáticas aleatorias
* (suma, resta, multiplicación o división de dos números enteros).
* - Tendrás 3 segundos para responder correctamente.
* - El juego finaliza si no se logra responder en ese tiempo.
* - Al finalizar el juego debes mostrar cuántos cálculos has acertado.
* - Cada 5 aciertos debes aumentar en uno el posible número de cifras
* de la operación (cada vez en un operando):
* - Preguntas 1 a 5: X (entre 0 y 9) operación Y (entre 0 y 9)
* - Preguntas 6 a 10: XX (entre 0 y 99) operación Y (entre 0 y 9)
* - Preguntas 11 a 15: XX operación YY
* - Preguntas 16 a 20: XXX (entre 0 y 999) operación YY
* ..
*/
/*
* ¿Conoces el calendario de aDEViento de la comunidad (https://adviento.dev)?
* 24 días, 24 regalos sorpresa relacionados con desarrollo de software.
* Desde el 1 al 24 de diciembre.
*
* Crea un programa que simule el mecanismo de participación:
* - Mediante la terminal, el programa te preguntará si quieres añadir y borrar
* participantes, mostrarlos, lanzar el sorteo o salir.
* - Si seleccionas añadir un participante, podrás escribir su nombre y pulsar enter.
* - Si seleccionas añadir un participante, y este ya existe, avisarás de ello.
* (Y no lo duplicarás)
* - Si seleccionas mostrar los participantes, se listarán todos.
* - Si seleccionas eliminar un participante, podrás escribir su nombre y pulsar enter.
* (Avisando de si lo has eliminado o el nombre no existe)
* - Si seleccionas realizar el sorteo, elegirás una persona al azar
* y se eliminará del listado.
* - Si seleccionas salir, el programa finalizará.
*/
/*
* Crea un programa que simule la competición de dos coches en una pista.
* - Los dos coches estarán representados por 🚙 y 🚗. Y la meta por 🏁.
* - Cada pista tendrá entre 1 y 3 árboles 🌲 colocados de forma aleatoria.
* - Las dos pistas tendrán una longitud configurable de guiones bajos "_".
* - Los coches comenzarán en la parte derecha de las pistas. Ejemplo:
* 🏁____🌲_____🚙
* 🏁_🌲____🌲___🚗
*
* El juego se desarrolla por turnos de forma automática, y cada segundo
* se realiza una acción sobre los coches (moviéndose a la vez), hasta que
* uno de ellos (o los dos a la vez) llega a la meta.
* - Acciones:
* - Avanzar entre 1 a 3 posiciones hacia la meta.
* - Si al avanzar, el coche finaliza en la posición de un árbol,
* se muestra 💥 y no avanza durante un turno.
* - Cada turno se imprimen las pistas y sus elementos.
* - Cuando la carrera finalice, se muestra el coche ganador o el empate.
*/
/*
* La última semana de 2021 comenzamos la actividad de retos de programación,
* con la intención de resolver un ejercicio cada semana para mejorar
* nuestra lógica... ¡Hemos llegado al EJERCICIO 100! Gracias 🙌
*
* Crea un programa que calcule los puntos de una palabra.
* - Cada letra tiene un valor asignado. Por ejemplo, en el abecedario
* español de 27 letras, la A vale 1 y la Z 27.
* - El programa muestra el valor de los puntos de cada palabra introducida.
* - El programa finaliza si logras introducir una palabra de 100 puntos.
* - Puedes usar la terminal para interactuar con el usuario y solicitarle
* cada palabra.
*/
/*
* Todo llega a su fin... Este es el último reto de programación
* semanal de 2023.
*
* Crea un programa que muestre un listado calculado en tiempo real
* con todos los usuarios que han resuelto algún reto de programación
* de este año.
* - El listado debe estar ordenado por el número de ejercicios resueltos
* por cada usuario (y mostrar ese contador al lado de su nombre).
* - También se debe de mostrar el número de usuarios que han participado
* y el número de correcciones enviadas.
*
* Muchísimas gracias por ayudar a crear este gran recurso
* para la comunidad... ¡Prepárate para 2024!
*/
¿Cómo puedo participar en los retos?
A parte de poder consultar la corrección de los retos, también puedes enviar tus propias soluciones al repositorio. Consulta las instrucciones de participación en cada uno de los repositorios de GitHub correspondientes.
¿Puedo utilizar cualquier lenguaje de programación?
Por supuesto. Lo bueno de los retos de lógica es que su principal valor es enseñarnos a pensar y seguir un razonamiento a la hora de resolver un problema. La manera de enfocarlo es independiente al lenguaje de programación.
¿Se van a añadir más ejercicios al listado?
Por el momento, este listado se corresponde con los ejercicios lógicos resueltos en 2022 y 2023. Para consultar los retos lógicos de 2024 debes de visitar la sección llamada "roadmap de retos", ya que son ligeramente diferentes.
¿Qué diferencia hay entre los retos de 2022 y 2023?
La principal diferencia es la manera de aportar tu propia corrección (consulta las instrucciones del repositorio). También ha variado el lenguaje con el que se aporta la corrección principal, pero no es algo relevante en lógica.
¿Existe algún orden para resolver los ejercicios?
Cada reto es independiente del resto y posee una etiqueta con su dificultad estimada (Fácil, Medio o Difícil). De esta manera podrás identificar los retos que mejor se adapten a tus habilidades y subir de nivel gradualmente.
¿Y si mi corrección no se parece a la solución?
Ante todo, estos ejercicios sirven para poner a prueba tus habilidades, y la solución sólo es una posible opción. La tuya puede ser diferente, o incluso poseer errores, pero lo importante es que a programar se aprende programando.
¿Cómo puedo participar en los retos?
A parte de poder consultar la corrección de los retos, también puedes enviar tus propias soluciones al repositorio. Consulta las instrucciones de participación en cada uno de los repositorios de GitHub correspondientes.
¿Puedo utilizar cualquier lenguaje de programación?
Por supuesto. Lo bueno de los retos de lógica es que su principal valor es enseñarnos a pensar y seguir un razonamiento a la hora de resolver un problema. La manera de enfocarlo es independiente al lenguaje de programación.
¿Se van a añadir más ejercicios al listado?
Por el momento, este listado se corresponde con los ejercicios lógicos resueltos en 2022 y 2023. Para consultar los retos lógicos de 2024 debes de visitar la sección llamada "roadmap de retos", ya que son ligeramente diferentes.
¿Qué diferencia hay entre los retos de 2022 y 2023?
La principal diferencia es la manera de aportar tu propia corrección (consulta las instrucciones del repositorio). También ha variado el lenguaje con el que se aporta la corrección principal, pero no es algo relevante en lógica.
¿Existe algún orden para resolver los ejercicios?
Cada reto es independiente del resto y posee una etiqueta con su dificultad estimada (Fácil, Medio o Difícil). De esta manera podrás identificar los retos que mejor se adapten a tus habilidades y subir de nivel gradualmente.
¿Y si mi corrección no se parece a la solución?
Ante todo, estos ejercicios sirven para poner a prueba tus habilidades, y la solución sólo es una posible opción. La tuya puede ser diferente, o incluso poseer errores, pero lo importante es que a programar se aprende programando.
>_PythonSwiftKotlinJavaC++PHPRustGoJavaScriptDartRubyC#TypeScriptCobolLuaCPowerShellAssemblyRObjective-CF#HaskellFortranLispScalaPerlGroovySolidityAdaPlankalkül
>_PythonSwiftKotlinJavaC++PHPRustGoJavaScriptDartRubyC#TypeScriptCobolLuaCPowerShellAssemblyRObjective-CF#HaskellFortranLispScalaPerlGroovySolidityAdaPlankalkül