Cada semana un nuevo ejercicio para mejorar tu lógica de programación.

 
Totalmente gratis y a tu ritmo
Basados en pruebas técnicas y entrevistas de trabajo
Usa el lenguaje de programación que quieras
En constante actualización
Corrección y revisión en directo
Con el apoyo de la comunidad. Soluciones a los ejercicios en lenguajes como Kotlin, Swift, JavaScript, TypeScript, Go, Rust, Python, C#, Dart, PHP, Java, Cobol…
 
¿Te parece útil? Compártelo en Twitter
 

→ ¿CÓMO PUEDO PARTICIPAR EN LOS RETOS?

Recuerda que puedes utilizar cualquier lenguaje para resolver los ejercicios.
 
Puedes seguir los siguientes pasos (haz clic para verlos)
  1. ACCEDE al repositorio de GitHub.
  1. Si quieres apoyar el proyecto, puedes hacer "✭ Star” en este.
  1. Haz un FORK del repositorio. En el README del repositorio tienes información más detallada.
  1. En el proyecto tienes un directorio para cada ejercicio. Dentro de cada directorio encontrarás un fichero llamado ejercicio.md con el enunciado de cada reto.
  1. Si quieres compartir tu propia solución de un ejercicio con la comunidad, crea un fichero de código con tu nombre y extensión, y realiza una PULL REQUEST contra el repositorio.
  1. El fichero de código debe situarse dentro del directorio del reto, en la carpeta correspondiente al lenguaje de programación utilizado (si no existe la carpeta del lenguaje, créala con todas sus letras en minúsculas). Por ejemplo, si has resuelto el reto #0 utilizando el lenguaje de programación Kotlin y tu usuario de GitHub se llama mouredev, tu corrección deberá estar en "Retos/Reto #0/kotlin/mouredev.kt”. El título de la Pull Request también debe seguir este formato: "Reto #[número] - [lenguaje_utilizado]”. En el ejemplo anterior sería “Reto #0 - Kotlin". Se rechazarán las Pull Request que no sigan este formato o contengan ficheros adicionales.
  1. Cada SEMANA (consulta el día en el ejercicio correspondiente) realizaré una transmisión en directo desde Twitch corrigiendo el reto, revisando soluciones de la comunidad y publicando un nuevo ejercicio.
  1. Si necesitas ayuda o quieres comentar cualquier cosa sobre los retos semanales, tienes el canal "reto-semanal” en nuestro servidor de Discord (también el día y horario de corrección en la sección “Eventos”).
  1. Puedes proponer Pull Request con propuestas o correcciones sobre ejercicios del resto de la comunidad si estos poseen errores.
  1. Si se te solicita un cambio/corrección en una Pull Request, y al cabo de 2 semanas no se muestra nueva actividad, se cerrará esa petición para mantener el repositorio limpio. Por supuesto, puedes volver a enviar la Pull Request cuando quieras.
 
Guía rápida de Git y GitHub
  1. Hacer un FORK del repositorio de retos semanales desde GitHub.
  1. CLONAR ese repositorio a tu máquina local:
    1. git clone [TU-REPOSITORIO]
  1. Crear una RAMA para la solución:
    1. git checkout [EL-NOMBRE-DE-TU-RAMA]
  1. Añadir el fichero de tu solución al STAGE:
    1. git add [FICHERO-DE-TU-RETO]
  1. Hacer COMMIT con mensaje de la solución:
    1. git commit -m "Reto #[NÚMERO-RETO] [LENGUAJE-UTILIZADO]"
  1. Hacer PUSH:
    1. git push [EL-NOMBRE-DE-TU-RAMA]
  1. En nuestro repositorio ir a la rama y hacer PULL REQUEST:
    1. Contribute
    2. Create Pull Request
 

→ PREGUNTAS FRECUENTES

 
¿Puedo utilizar cualquier lenguaje de programación para aportar mi solución?
Por supuesto. Recuerda que lo más importante es entender los pasos lógicos que hemos seguido para llegar a una solución. Los lenguajes de programación suelen ser muy parecidos entre ellos.
¿Puedo resolver un reto si no he realizado los anteriores?
Claro. Los retos no tienen relación entre ellos. Puedes resolverlos de manera totalmente independiente. Simplemente revisa su nivel de dificultad.
¿Cómo consulto las correcciones de un reto?
Una vez se haya cumplido la semana de publicación del reto, podrás consultar mi corrección y las de la comunidad en cualquier lenguaje de programación.
¿Qué pasa si encuentro un error en alguna corrección de un ejercicio?
Como en cualquier programa, pueden existir bugs. Si detectas alguno, simplemente realiza una Pull Request con tu corrección. De esta manera colaboraremos para crear un repositorio cada vez más valioso.
Nombres de directorios "conflictivos" para lenguajes programación
Si tienes dudas con el nombre del directorio de algún lenguaje, intenta consultar el nombre que se ha empleado en ejercicios anteriores. Algunos ejemplos que puedes llegar a dudar:
  • c#, no csharp
  • c++, no cplusplus
  • go, no golang
  • javascript, no js
 
 

¿Quieres estar al tanto de todas las novedades, preguntar dudas o prestar ayuda a la comunidad?

Únete a los canales de chat "reto-semanal” y "reto-mensual” de nuestro servidor gratuito de Discord y consulta la sección “eventos” para no perderte los directos en los que corregimos los ejercicios.
 

RETO DE LA SEMANA ↓

Este es el ejercicio que se está llevando a cabo durante la semana actual. ¿Te animas a participar junto a la comunidad?
 
NOTAS PULL REQUEST:
  • Cuando realices una Pull Request para aportar tu solución al ejercicio sigue esta convención: “Retos/[directorio_reto]/[lenguaje_utilizado]/[usuario_github.extension]" (Ej: Retos/Reto #0/kotlin/mouredev.kt)
  • Para mantener una uniformidad, vamos a intentar mantener una estructura en el título de la Pull Request: "Reto #[número] - [lenguaje_utilizado]” (Ej: Reto #0 - Kotlin)
  • Si la Pull Request no se corresponde con una corrección del ejercicio, describe con claridad en su título y mensaje cuál es la finalidad de esta. Puedes proponer cambios y correcciones en ejercicios del resto de la comunidad si estos no son correctos.
 

Reto #13: ADIVINA LA PALABRA

MEDIA | Publicación: 27/03/23 | Resolución: 03/04/23
/* * 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 */
 
Corrección y nuevo reto: Lunes 03/04/23

RETOS CORREGIDOS ↓

Estos son los ejercicios pasados que ya poseen mi corrección y las de la comunidad. Están ordenados desde el más reciente y en cada uno de ellos encontrarás las soluciones agrupadas por lenguaje de programación.
 

Reto #12: VIERNES 13

FÁCIL | Publicación: 20/03/23 | Resolución: 27/03/23
/* * Crea una función que sea capaz de detectar si existe un viernes 13 * en el mes y el año indicados. * - La función recibirá el mes y el año y retornará verdadero o falso. */
Correcciones:

Reto #11: URL PARAMS

FÁCIL | Publicación: 13/03/23 | Resolución: 20/03/23
/* * Dada una URL con parámetros, crea una función que obtenga sus valores. * No se pueden usar operaciones del lenguaje que realicen esta tarea directamente. * * Ejemplo: En la url https://retosdeprogramacion.com?year=2023&challenge=0 * los parámetros serían ["2023", "0"] */
Correcciones:

Reto #10: LA API

MEDIA | Publicación: 06/03/23 | Resolución: 13/03/23
/* * 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 */
Correcciones:

Reto #9: HETEROGRAMA, ISOGRAMA Y PANGRAMA

FÁCIL | Publicación: 27/02/23 | Resolución: 06/03/23
/* * Crea 3 funciones, cada una encargada de detectar si una cadena de * texto es un heterograma, un isograma o un pangrama. * - Debes buscar la definición de cada uno de estos términos. */
Correcciones:

Reto #8: EL GENERADOR PSEUDOALEATORIO

MEDIA | Publicación: 20/02/23 | Resolución: 27/02/23
/* * Crea un generador de números pseudoaleatorios entre 0 y 100. * - No puedes usar ninguna función "random" (o semejante) del * lenguaje de programación seleccionado. * * Es más complicado de lo que parece... */
Correcciones:

Reto #7: EL SOMBRERO SELECCIONADOR

MEDIA | Publicación: 13/02/23 | Resolución: 20/02/23
/* * 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. */
Correcciones:

Reto #6: PIEDRA, PAPEL, TIJERA, LAGARTO, SPOCK

MEDIA | Publicación: 06/02/23 | Resolución: 13/02/23
/* * 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. */
Correcciones:

Reto #5: ¡HOLA MUNDO!

FÁCIL | Publicación: 30/01/23 | Resolución: 06/02/23
¡Tengo una gran noticia! Twitch nos ha seleccionado como #PequeñaGranComunidad por nuestra labor ayudando a aprender programación a todo el mundo. Puedes leer la noticia aquí. ¡Gracias!
¿Batimos el récord de contribuciones con este ejercicio?
/* * 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í... */
Correcciones:

Reto #4: PRIMO, FIBONACCI Y PAR

MEDIA | Publicación: 23/01/23 | Resolución: 30/01/23
/* * Escribe un programa que, dado un número, compruebe y muestre si es primo, * fibonacci y par. * Ejemplos: * - Con el número 2, nos dirá: "2 es primo, fibonacci y es par" * - Con el número 7, nos dirá: "7 es primo, no es fibonacci y es impar" */
Correcciones:

Reto #3: EL GENERADOR DE CONTRASEÑAS

MEDIA | Publicación: 16/01/23 | Resolución: 23/01/23
/* * 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) */
Correcciones:

Reto #2: EL PARTIDO DE TENIS

MEDIA | Publicación: 09/01/23 | Resolución: 16/01/23
/* * 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. */
Correcciones:

Reto #1: EL "LENGUAJE HACKER"

FÁCIL | Publicación: 02/01/23 | Resolución: 09/01/23
/* * 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") */
Correcciones:

Reto #0: EL FAMOSO "FIZZ BUZZ”

FÁCIL | Publicación: 26/12/22 | Resolución: 02/01/23
/* * 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". */
Correcciones: