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 resolver el ejercicio utilizando el lenguaje Swift puedes acceder en este caso a este 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 fichero para cada ejercicio. Si ya se ha corregido, tendrás la solución que yo he aportado (no tiene porqué ser la única posible)
  1. Si quieres compartir la solución de un ejercicio con la comunidad, resuélvelo en el fichero original (o creando uno nuevo) y realiza una PULL REQUEST contra mi repositorio.
  1. En la sección de PULL REQUEST de cada repositorio puedes encontrar las soluciones a los ejercicios que han compartido otros miembros de la comunidad:
    1. Soluciones de la comunidad en cualquier lenguaje
    2. Soluciones de la comunidad utilizando el lenguaje Swift
  1. Cada LUNES (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 uno nuevo.
  1. Si necesitas ayuda o quieres comentar cualquier cosa sobre los retos semanales, tienes el canal "reto-semanal” en nuestro servidor de Discord.
 
🆕 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 "Solución 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
 
 

RETO DE LA SEMANA ↓

Este es el ejercicio que se está llevando a cabo durante la semana. ¿Te animas a participar junto a la comunidad?
 
NOTA: Cuando realices una Pull Request para aportar tu solución al ejercicio sigue esta convención: “Solución Reto #[número] [lenguaje]" (Ej: Solución Reto #0 Python)
 

Reto #39: TOP ALGORITMOS | QUICK SORT

MEDIA | Publicación: 27/09/22 | Resolución: 03/10/22
/* * Enunciado: 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. */
 
Corrección y nuevo reto: Lunes 03/10/22
 

RETOS CORREGIDOS ↓

Estos son los ejercicios pasados que ya poseen mi corrección y las de la comunidad (en la sección PULL REQUEST). Están ordenados desde el más reciente.
 

Reto #38: BINARIO A DECIMAL

MEDIA | Publicación: 19/09/22 | Resolución: 27/09/22
/* * Enunciado: Crea un programa se encargue de transformar un número binario * a decimal sin utilizar funciones propias del lenguaje que * lo hagan directamente. */

Reto #37: LOS LANZAMIENTOS DE "THE LEGEND OF ZELDA”

MEDIA | Publicación: 14/09/22 | Resolución: 19/09/22
/* * Enunciado: ¡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) */

Reto #36: LOS ANILLOS DE PODER

MEDIA | Publicación: 06/09/22 | Resolución: 14/09/22
/* * Enunciado: ¡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 */

Reto #35: BATALLA POKÉMON

MEDIA | Publicación: 29/08/22 | Resolución: 06/09/22
/* * Enunciado: 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. */

Reto #34: LOS NÚMEROS PERDIDOS

MEDIA | Publicación: 22/08/22 | Resolución: 29/08/22
/* * Enunciado: Dado un array de enteros ordenado y sin repetidos, * crea una función que calcule y retorne todos los que faltan entre * el mayor y el menor. * - Lanza un error si el array de entrada no es correcto. */

Reto #33: CICLO SEXAGENARIO CHINO

MEDIA | Publicación: 15/08/22 | Resolución: 22/08/22
/* * Enunciado: 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). */

Reto #32: EL SEGUNDO

FÁCIL | Publicación: 08/08/22 | Resolución: 15/08/22
/* * Dado un listado de números, encuentra el SEGUNDO más grande. */

Reto #31: AÑOS BISIESTOS

FÁCIL | Publicación: 01/08/22 | Resolución: 08/08/22
/* * Crea una función que imprima los 30 próximos años bisiestos * siguientes a uno dado. * - Utiliza el menor número de líneas para resolver el ejercicio. */
 

→ Corrección retos #21 al #30 en YouTube

 

Reto #30: MARCO DE PALABRAS

FÁCIL | Publicación: 26/07/22 | Resolución: 01/08/22
/* * Crea una función que reciba un texto y muestre cada palabra en una línea, * formando un marco rectangular de asteriscos. * - ¿Qué te parece el reto? Se vería así: * ********** * * ¿Qué * * * te * * * parece * * * el * * * reto? * * ********** */

Reto #29: ORDENA LA LISTA

FÁCIL | Publicación: 18/07/22 | Resolución: 26/07/22
/* * 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. */

Reto #28: MÁQUINA EXPENDEDORA

MEDIA | Publicación: 11/07/22 | Resolución: 18/07/22
/* * 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. */

Reto #27: VECTORES ORTOGONALES

FÁCIL | Publicación: 07/07/22 | Resolución: 11/07/22
/* * Crea un programa que determine si dos vectores son ortogonales. * - Los dos array deben tener la misma longitud. * - Cada vector se podría representar como un array. Ejemplo: [1, -2] */

Reto #26: CUADRADO Y TRIÁNGULO 2D

FÁCIL | Publicación: 27/06/22 | Resolución: 07/07/22
/* * Crea un programa que dibuje un cuadrado o un triángulo con asteriscos "*". * - Indicaremos el tamaño del lado y si la figura a dibujar es una u otra. * - EXTRA: ¿Eres capaz de dibujar más figuras? */

Reto #25: PIEDRA, PAPEL, TIJERA

MEDIA | Publicación: 20/06/22 | Resolución: 27/06/22
/* * 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". */

Reto #24: ITERATION MASTER

FÁCIL | Publicación: 13/06/22 | Resolución: 20/06/22
/* * Quiero contar del 1 al 100 de uno en uno (imprimiendo cada uno). * ¿De cuántas maneras eres capaz de hacerlo? * Crea el código para cada una de ellas. */

Reto #23: MÁXIMO COMÚN DIVISOR Y MÍNIMO COMÚN MÚLTIPLO

MEDIA | Publicación: 07/06/22 | Resolución: 13/06/22
/* * Crea dos funciones, una que calcule el máximo común divisor (MCD) y otra * que calcule el mínimo común múltiplo (mcm) de dos números enteros. * - No se pueden utilizar operaciones del lenguaje que * lo resuelvan directamente. */

Reto #22: CONJUNTOS

FÁCIL | Publicación: 01/06/22 | Resolución: 07/06/22
/* * 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. */

Reto #21: CALCULADORA .TXT

MEDIA | Publicación: 23/05/22 | Resolución: 01/06/22
/* * 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. */
 

→ Corrección retos #11 al #20 en YouTube

 

Reto #20: PARANDO EL TIEMPO

MEDIA | Publicación: 16/05/22 | Resolución: 23/05/22
/* * 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. */

Reto #19: CONVERSOR TIEMPO

FÁCIL | Publicación: 09/05/22 | Resolución: 16/05/22
/* * Crea una función que reciba días, horas, minutos y segundos (como enteros) * y retorne su resultado en milisegundos. */

Reto #18: TRES EN RAYA

DIFÍCIL | Publicación: 02/05/22 | Resolución: 09/05/22
/* * 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. */

Reto #17: LA CARRERA DE OBSTÁCULOS

MEDIA | Publicación: 25/04/22 | Resolución: 02/05/22
/* * 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. */

Reto #16: EN MAYÚSCULA

FÁCIL | Publicación: 18/04/22 | Resolución: 25/04/22
/* * Crea una función que reciba un String de cualquier tipo y se encargue de * poner en mayúscula la primera letra de cada palabra. * - No se pueden utilizar operaciones del lenguaje que * lo resuelvan directamente. */

Reto #15: ¿CUÁNTOS DÍAS?

DIFÍCIL | Publicación: 11/04/22 | Resolución: 18/04/22
/* * 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. */

Reto #14: ¿ES UN NÚMERO DE ARMSTRONG?

FÁCIL | Publicación: 04/04/22 | Resolución: 11/04/22
/* * Escribe una función que calcule si un número dado es un número de Armstrong * (o también llamado narcisista). * Si no conoces qué es un número de Armstrong, debes buscar información * al respecto. */

Reto #13: FACTORIAL RECURSIVO

FÁCIL | Publicación: 28/03/22 | Resolución: 04/04/22
/* * Escribe una función que calcule y retorne el factorial de un número dado * de forma recursiva. */

Reto #12: ¿ES UN PALÍNDROMO?

MEDIA | Publicación: 21/03/22 | Resolución: 28/03/22
/* * 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. */

Reto #11: ELIMINANDO CARACTERES

FÁCIL | Publicación: 14/03/22 | Resolución: 21/03/22
/* * 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. */
 

→ Corrección retos #5 al #10 en YouTube

 

Reto #10: EXPRESIONES EQUILIBRADAS

MEDIA | Publicación: 07/03/22 | Resolución: 14/03/22
/* * 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 } */

Reto #9: CÓDIGO MORSE

MEDIA | Publicación: 02/03/22 | Resolución: 07/03/22
/* * 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. */

Reto #8: DECIMAL A BINARIO

FÁCIL | Publicación: 18/02/22 | Resolución: 02/03/22
/* * Crea un programa se encargue de transformar un número * decimal a binario sin utilizar funciones propias del lenguaje que lo hagan directamente. */

Reto #7: CONTANDO PALABRAS

MEDIA | Publicación: 14/02/22 | Resolución: 21/02/22
/* * 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. */

Reto #6: INVIRTIENDO CADENAS

FÁCIL | Publicación: 07/02/22 | Resolución: 14/02/22
/* * Crea un programa que invierta el orden de una cadena de texto * sin usar funciones propias del lenguaje que lo hagan de forma automática. * - Si le pasamos "Hola mundo" nos retornaría "odnum aloH" */

Reto #5: ASPECT RATIO DE UNA IMAGEN

DIFÍCIL | Publicación: 01/02/22 | Resolución: 07/02/22
/* * 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/mouredev/ * mouredev/master/mouredev_github_profile.png * - Por ratio hacemos referencia por ejemplo a los "16:9" de una * imagen de 1920*1080px. */
 

→ Corrección retos #0 al #4 en YouTube

 

Reto #4: ÁREA DE UN POLÍGONO

FÁCIL | Publicación: 24/01/22 | Resolución: 31/01/22
/* * 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. */

Reto #3: ¿ES UN NÚMERO PRIMO?

MEDIA | Publicación: 17/01/22 | Resolución: 24/01/22
/* * Escribe un programa que se encargue de comprobar si un número es o no primo. * Hecho esto, imprime los números primos entre 1 y 100. */

Reto #2: LA SUCESIÓN DE FIBONACCI

DIFÍCIL | Publicación: 10/01/22 | Resolución: 17/01/22
/* * Escribe un programa que imprima los 50 primeros números de la sucesión * de Fibonacci empezando en 0. * - La serie Fibonacci se compone por una sucesión de números en * la que el siguiente siempre es la suma de los dos anteriores. * 0, 1, 1, 2, 3, 5, 8, 13... */

Reto #1: ¿ES UN ANAGRAMA?

MEDIA | Publicación: 03/01/22 | Resolución: 10/01/22
/* * 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. */

Reto #0: EL FAMOSO "FIZZ BUZZ”

FÁCIL | Publicación: 27/12/21 | Resolución: 03/01/22
/* * 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". */
 
 

→ ¿QUIERES CONSULTAR LOS RETOS MENSUALES?

Creamos 12 aplicaciones (basadas en pruebas de acceso) en 12 meses para mejorar nuestro portfolio. ¡Envía tu resolución, gana 100€ y obtén feedback técnico gracias a Rviewer!
 
 
 
notion image