Todos los Problemas

Explora nuestra colección de 109 desafíos de programación

109
Total Problemas
65
Fáciles
26
Medios
18
Difíciles
Fácil Python

Contador de Números Pares

Este código cuenta cuántos números pares hay del 1 al 10. Usamos un bucle for para recorrer los números, el operador % (módulo) para verificar si son pares, y un contador que se incrementa cada vez que encontramos uno.

Resolver problema →
Fácil Python

Contador de Números Pares

Este código recorre los números del 1 al 10 y cuenta cuántos son pares usando el operador módulo (%). Si el residuo de dividir entre 2 es 0, el número es par.

Resolver problema →
Medio Python

Detector de Palíndromos Múltiples

Este código usa diccionarios por comprensión para verificar cada palabra contra su reverso (p[::-1]), luego filtra con list comprehension solo los valores True. Combina múltiples conceptos en 4 líneas elegantes.

Resolver problema →
Medio Python

Contador de Vocales por Palabra

Este código usa list comprehension con diccionarios para contar cuántas vocales tiene cada palabra. La expresión anidada 'sum(1 for letra in p if letra.lower() in vocales)' recorre cada letra de la palabra y suma 1 por cada vocal encontrada.

Resolver problema →
Fácil TypeScript

Contador de Números Pares

Este código recorre un array de números y cuenta cuántos son pares usando el operador módulo (%). Si el residuo de dividir entre 2 es 0, el número es par.

Resolver problema →
Difícil JavaScript

Caché Inteligente con Closures

Función de orden superior que crea un closure con Map para cachear resultados de funciones async. Combina closures, async/await y operador spread para optimizar llamadas costosas.

Resolver problema →
Fácil Java

¿Puerta Abierta o Cerrada?

El operador lógico OR (||) devuelve true si AL MENOS UNA condición es verdadera. Como es de día (true), se abre la puerta aunque no haya luz adicional.

Resolver problema →
Fácil JavaScript

Contador de Números Pares

Este código cuenta cuántos números pares hay del 1 al 10. Usa el operador módulo (%) para detectar si un número es divisible entre 2, incrementando el contador cada vez que encuentra uno.

Resolver problema →
Fácil Python

Contador de Números Pares

Este código recorre una lista de números y cuenta cuántos son pares usando el operador módulo (%). Si el residuo de dividir entre 2 es 0, el número es par. Los números pares son 12, 18 y 22.

Resolver problema →
Medio Java

Palíndromo con Streams

Usamos streams para invertir la palabra convirtiendo cada char en un objeto Character, luego usamos reduce para construir la palabra al revés concatenando cada carácter al inicio. Finalmente comparamos si la palabra original es igual a su versión invertida.

Resolver problema →
Difícil Java

Filtrado de Números Primos con Streams

Usamos streams con filter() para encontrar números primos. El predicado lambda verifica que ningún número entre 2 y n-1 divida exactamente a n. IntStream.range() genera la secuencia y noneMatch() confirma que no hay divisores.

Resolver problema →
Fácil Python

¿Contraseña Segura?

Evaluamos si una contraseña es segura verificando tres condiciones con operadores lógicos: longitud mínima de 8 caracteres AND contiene números AND contiene mayúsculas. Todas deben ser True para ser segura.

Resolver problema →
Fácil Java

Contador de Vocales en Nombre

Este código cuenta cuántas vocales hay en un nombre. Recorre cada letra, la convierte a minúscula y verifica si es vocal (a, e, i, o, u). En 'Maria' hay 3 vocales: a, i, a.

Resolver problema →
Fácil JavaScript

Construye una Escalera

Este código construye una escalera visual usando el símbolo #. En cada iteración, añadimos más símbolos usando repeat() y creamos una nueva línea con \n. Es perfecto para practicar loops y manipulación de strings.

Resolver problema →
Fácil Java

Suma de Múltiplos

Este código suma todos los números del 1 al 20 que son múltiplos de 3 O múltiplos de 5. Encuentra: 3,5,6,9,10,12,15,18,20 y los suma.

Resolver problema →
Fácil Java

Cuenta Dígitos Pares

Este código cuenta cuántos dígitos pares tiene un número. Extrae cada dígito con % 10, verifica si es par, y divide el número entre 10 para pasar al siguiente dígito.

Resolver problema →
Medio Java

Extractor de Dominios Únicos

Usando streams, extraemos el dominio de cada email con substring() buscando después del '@', luego recolectamos en un Set que automáticamente elimina duplicados. El resultado muestra cuántos dominios únicos existen en la lista.

Resolver problema →
Fácil JavaScript

¿Puerta Abierta o Cerrada?

Una puerta inteligente se abre solo cuando los interruptores 1 y 3 están activados (true) Y el interruptor 2 está desactivado (false). Usamos operadores lógicos AND (&&) y NOT (!) para evaluar la condición completa.

Resolver problema →
Difícil JavaScript

Detector de Números Triangulares

Un número triangular se forma sumando enteros consecutivos (1+2+3+4=10). El algoritmo acumula sumas hasta alcanzar o superar n, verificando si coincide exactamente.

Resolver problema →
Fácil Python

Validador de Triángulo

Para que tres lados formen un triángulo válido, la suma de cualquier par de lados debe ser mayor que el tercer lado. Este código verifica las tres condiciones necesarias usando operadores lógicos.

Resolver problema →
Fácil JavaScript

Detecta el Horario

Este código clasifica una hora del día (formato 24h) en tres momentos: Mañana (6-11), Tarde (12-19) o Noche (20-5). Usa operadores lógicos && para verificar rangos y estructuras if-else anidadas.

Resolver problema →
Medio TypeScript

Contador de Vocales Consecutivas

Divide el texto por consonantes, creando grupos de vocales consecutivas. Luego encuentra el grupo más largo usando reduce y Math.max. En 'beauuutiful', 'eau' tiene 3 vocales seguidas.

Resolver problema →
Difícil TypeScript

Máximo Común Divisor Recursivo

El algoritmo de Euclides encuentra el máximo común divisor recursivamente: si b es 0, retorna a; si no, calcula mcd(b, a % b). Para 48 y 18: mcd(18, 12) → mcd(12, 6) → mcd(6, 0) → 6

Resolver problema →
Fácil Java

¿Dónde está el Dígito?

Convierte el número a String usando valueOf() y encuentra la posición del dígito con indexOf(). El 7 está en la posición 1 (segunda posición, indexado desde 0). Si no existe, retorna -1.

Resolver problema →
Medio Java

Multiplicador de Caracteres Mágico

Este código transforma cada carácter multiplicándolo por su valor numérico en Unicode (mod 10). 'H'=72→2 veces, 'o'=111→1 vez, 'l'=108→8 veces, 'a'=97→7 veces. Usa streams, mapToObj, repeat() y reduce para crear esta transformación mágica.

Resolver problema →
Fácil Java

¿Descuento Aplicable?

Se otorga descuento cuando el precio supera $500 Y la persona es jubilada (65+ años). Ambas condiciones deben cumplirse usando el operador lógico &&.

Resolver problema →
Difícil TypeScript

Magia de Template Literal Types

TypeScript permite crear tipos dinámicos con Template Literal Types. Aquí definimos un tipo Ruta que solo acepta strings con formato específico: 'api/{nombre}/v{número}'. El tipo R se convierte en literalmente ese patrón, validando el formato en tiempo de compilación.

Resolver problema →
Fácil Java

Calculadora de Edad de Perro

Convierte años humanos a años perrunos (x7) y ladra una vez por cada año humano. ¡Un perro de 3 años humanos tiene 21 años perrunos y ladra 3 veces!

Resolver problema →
Fácil TypeScript

¿Cuántos Números?

En TypeScript/JavaScript, puedes modificar la propiedad length de un array directamente. Aumentarla crea espacios vacíos (holes) que no son undefined, sino 'empty items'. Esto es diferente a hacer push() de valores undefined.

Resolver problema →
Fácil TypeScript

Escalera de Asteriscos

Este código crea una escalera de asteriscos usando un bucle for. En cada iteración, imprime asteriscos según el número actual (i), creando un patrón ascendente.

Resolver problema →
Difícil JavaScript

El Misterio del Array Vacío

¡Sorpresa! Modificar la propiedad 'length' de un array a 0 elimina TODOS sus elementos instantáneamente. Es una forma poco conocida de vaciar arrays, pero puede causar bugs si no sabes que existe. arr[0] es undefined porque el array quedó completamente vacío.

Resolver problema →
Fácil TypeScript

Convierte Minutos a Horas

Dividimos los minutos totales entre 60 para obtener las horas completas con Math.floor(), y usamos el operador módulo (%) para obtener los minutos restantes. Perfecto para convertir duraciones.

Resolver problema →
Fácil Java

Contador de Vocales

Recorremos cada letra de la palabra y verificamos si es una vocal (A o E). El método indexOf retorna -1 si no encuentra la letra, por eso comparamos >= 0. En 'JAVA' hay 2 vocales: A y A.

Resolver problema →
Fácil Java

División Misteriosa

¡Sorpresa! En Java, cuando divides dos enteros (int), el resultado siempre es un entero. La división 5/2 matemáticamente es 2.5, pero Java descarta la parte decimal automáticamente. Para obtener 2.5, necesitarías usar double: (double)a / b

Resolver problema →
Medio JavaScript

El Algoritmo de Euclides

El Algoritmo de Euclides, creado hace más de 2000 años, es uno de los algoritmos más antiguos que aún se usa. Calcula el Máximo Común Divisor (MCD) mediante divisiones sucesivas. ¿Sabías que este algoritmo griego antiguo sigue siendo el más eficiente para encontrar el MCD?

Resolver problema →
Medio JavaScript

¿Cuántos Bits en un Byte?

Un byte siempre contiene 8 bits. En este código, convertimos el número binario 11111111 (que representa un byte completo con todos los bits en 1) a string binario y contamos su longitud. Esta es una verdad fundamental de la computación: 1 byte = 8 bits, lo que permite representar valores de 0 a 255.

Resolver problema →
Fácil Python

Multiplicación Invisible

En Python, ¡puedes multiplicar strings! El operador * repite la cadena el número de veces indicado. Es una característica única que convierte 'Hola' * 3 en 'HolaHolaHola'.

Resolver problema →
Fácil TypeScript

Calcula el Precio con Descuento

Calcula el precio final aplicando un porcentaje de descuento. Primero calcula cuánto es el 15% de 80, luego lo resta del precio original.

Resolver problema →
Medio Python

El Número de Grace Hopper

Grace Hopper, pionera de la programación, usaba cables de 30cm para enseñar qué tan lejos viaja la luz en un nanosegundo. En 1947 también encontró el primer 'bug' real: una polilla en una computadora. ¡Por eso llamamos 'bugs' a los errores!

Resolver problema →
Medio Java

Inversor de Dígitos con Streams

Convierte el número a String, usa StringBuilder para invertirlo con reverse(), y luego lo parsea de vuelta a entero. Una forma elegante de invertir dígitos sin bucles matemáticos.

Resolver problema →
Difícil TypeScript

Validador de Estructura JSON Anidada

Usa generics con DeepPartial para validación de tipos, async/await para operaciones asíncronas, y every() como reduce implícito. El resultado es false porque falta la propiedad 'activo' en los datos.

Resolver problema →
Fácil Java

¿Cabe en la Maleta?

La lógica evalúa: (maleta Y NO elefante) O ratón. Como llevaElefante es true, la primera parte es false. Como llevaRaton es false, todo el resultado es false y imprime 'No cabe!' - ¡Obvio que un elefante no cabe en una maleta! 🐘

Resolver problema →
Medio TypeScript

¿Qué es un Hash?

Un hash convierte datos de cualquier tamaño en un número fijo. El algoritmo multiplica por 31 (número primo) y suma el código ASCII de cada letra. Se usa en tablas hash, contraseñas y detección de cambios. ¡La misma entrada siempre da el mismo hash!

Resolver problema →
Difícil Python

¿Cuántos 'S' tiene tu dinero?

Este código cuenta cuántos dígitos '5' (eses) aparecen en tu cantidad de dinero Y en el doble de esa cantidad. Con 555: tiene tres '5', pero 555×2=1110 tiene cero '5', total = 3+1=4. ¡Matemática caprichosa! 🎲

Resolver problema →
Medio Java

El Paradigma de Djikstra

Edsger Djikstra, famoso por su algoritmo de camino más corto, también introdujo el concepto de 'programación estructurada' eliminando el uso de GOTO. Este código demuestra un patrón iterativo simple que Djikstra defendía: bucles con propósito claro y variables bien definidas.

Resolver problema →
Medio Python

El Teorema de Turing

Alan Turing demostró en 1936 que es matemáticamente imposible crear un algoritmo que determine si cualquier programa terminará o se ejecutará infinitamente. Este es el famoso 'Problema de la Parada' (Halting Problem), uno de los límites fundamentales de la computación.

Resolver problema →
Fácil Python

Pirámide de Sumas

Este código construye una pirámide donde cada nivel muestra la suma acumulada de números desde 1 hasta ese nivel. Por ejemplo, el nivel 3 suma 1+2+3=6. Usa un bucle for para iterar niveles y la función sum() con range() para calcular cada suma.

Resolver problema →
Medio JavaScript

Rotador de Matriz Numérica

Rota una matriz 90 grados en sentido horario. Primero transponemos (intercambiamos filas por columnas) usando map con el índice, luego invertimos cada columna para completar la rotación.

Resolver problema →
Difícil Python

Operador Morsa con Iterador Condicional

El operador morsa := (walrus operator) asigna y evalúa en una sola expresión. Aquí calculamos x², lo guardamos en y, verificamos si y > 10, y si es true multiplicamos y por 2. ¡Tres operaciones en una línea de comprensión!

Resolver problema →
Fácil Python

¿El Gato Roba Comida?

El gato solo roba comida cuando tiene hambre Y el dueño no está presente Y la comida está al alcance. Si falta alguna condición, el gato se comporta. ¡Lógica felina perfecta!

Resolver problema →
Medio TypeScript

¿Cuál es el Límite de Recursión?

La mayoría de motores de JavaScript tienen un límite de ~10,000-15,000 llamadas recursivas antes de lanzar un error de desbordamiento de pila. Este límite existe porque cada llamada recursiva ocupa espacio en el call stack, que tiene tamaño finito. Para números grandes, ¡necesitas iteración o recursión de cola optimizada!

Resolver problema →
Difícil JavaScript

Cuenta Picos en el Array

Un 'pico' es un número mayor que sus vecinos inmediatos. En el array, 3 > (1,2), 5 > (2,4), y 7 > (4,6), por lo que hay 3 picos. Usa filter con índices para verificar cada elemento contra sus adyacentes.

Resolver problema →
Medio JavaScript

La Paradoja del Punto Flotante

En JavaScript (y la mayoría de lenguajes), los números decimales usan el estándar IEEE 754 de punto flotante. Esto causa errores de precisión: 0.1 + 0.2 = 0.30000000000000004, ¡no exactamente 0.3! Este es uno de los bugs más famosos que sorprende a programadores principiantes.

Resolver problema →
Medio Java

¿Cuándo Se Inventó el Operador Ternario?

El operador ternario (? :) fue introducido en el lenguaje BCPL en 1966 y heredado por C en 1972. Java lo adoptó como una forma compacta de escribir if-else simples. La sintaxis es: condición ? valorSiTrue : valorSiFalse

Resolver problema →
Fácil JavaScript

Bucle Fantasma

¡Sorpresa! El bucle termina antes que los setTimeout, por eso 'i' ya vale 3 cuando se ejecutan. Además, 'Fin' aparece primero porque setTimeout pospone la ejecución aunque sea 0ms. Es un clásico de JavaScript asíncrono y closures.

Resolver problema →
Medio Java

Comparador de Strings Trampa

¡Sorpresa! compareTo() compara lexicográficamente, no numéricamente. '1' viene ANTES que '2' en Unicode, así que "100" < "20" retorna true. Para comparar números, debes convertir: Integer.parseInt(a) > Integer.parseInt(b)

Resolver problema →
Difícil JavaScript

Reduce con Promesas Encadenadas

¡TRUCO! Aunque funciona, hay un problema oculto: reduce NO espera cada promesa antes de la siguiente iteración. Las promesas se crean todas al mismo tiempo, creando una cadena de 'await (await (await 0) + 1) + 2) + 3'. Con operaciones async reales (fetch, setTimeout), el orden puede ser impredecible. La forma correcta es usar un for...of loop o Promise.all() para controlar la ejecución. ¡Reduce con async es una trampa común!

Resolver problema →
Fácil Java

¿El Precio Tiene Descuento?

Se aplica descuento si el precio es mayor a 50 y el descuento es al menos del 10%. Usamos el operador lógico && (AND) para verificar ambas condiciones.

Resolver problema →
Difícil TypeScript

La Trampa del NaN Silencioso

parseInt('25años') devuelve NaN, no 25. Aunque TypeScript lo tipifica como number, NaN >= 18 siempre es false. Este es un gotcha común: NaN es de tipo number pero falla en todas las comparaciones numéricas.

Resolver problema →
Medio Java

¿Qué Es el Número de Dunbar?

El Número de Dunbar (150) es el límite cognitivo de relaciones sociales estables que un humano puede mantener. En ciencias de la computación, este concepto inspira diseños de redes sociales, sistemas de mensajería y arquitecturas distribuidas. El código compara si una red social excede este límite cognitivo.

Resolver problema →
Fácil Python

Cuenta las Letras Repetidas

Este código cuenta cuántas veces aparece la letra más repetida en una palabra. Usa un diccionario para contar cada letra y luego encuentra el valor máximo. En 'Montana', tanto 'a' como 'n' aparecen 2 veces.

Resolver problema →
Medio Python

Suma de Claves Misteriosa

¡Trampa de tipos! Las claves string '1' y '2' NO son comparables con 3 (TypeError potencial), pero Python solo suma las claves int (1 y 2). El resultado es 1+2=3, NO los valores del diccionario. Muchos esperan 70 o un error.

Resolver problema →
Difícil Java

Comparador de Strings sin compareTo()

Usando streams para comparar strings carácter por carácter sin métodos nativos. El IntStream crea índices, map calcula diferencias ASCII, filter encuentra la primera diferencia no-cero, y orElse maneja strings de diferente longitud. Resultado negativo significa que 'a' va antes alfabéticamente.

Resolver problema →
Fácil TypeScript

¿TypeScript Puede Sumar Strings?

En TypeScript, cuando sumas un string con un number, JavaScript convierte el número a string y concatena. El resultado es '53' de tipo string, no 8. ¡La coerción de tipos en acción!

Resolver problema →
Difícil TypeScript

La Paradoja del Objeto Congelado

Object.freeze() hace que el objeto sea inmutable. Intentar modificar user.age falla silenciosamente en modo no-estricto (no lanza error), pero el valor nunca cambia. ¡La asignación se ignora completamente! En strict mode, lanzaría TypeError. Este es un gotcha común al trabajar con objetos congelados.

Resolver problema →
Medio JavaScript

¿Cuál Fue el Primer Lenguaje de Alto Nivel?

FORTRAN (FORmula TRANslation) fue el primer lenguaje de programación de alto nivel, creado por John Backus en IBM en 1957. Revolucionó la programación al permitir escribir código científico de manera más natural que en ensamblador.

Resolver problema →
Fácil TypeScript

Promedio de Impares

Recorre el array, identifica números impares (3, 7, 9), los suma (19) y divide por la cantidad (3) para obtener el promedio: 6.33

Resolver problema →
Fácil Python

¿Qué significa HTTP?

HyperText Transfer Protocol - protocolo de transferencia de hipertexto

Resolver problema →
Medio JavaScript

Detector de Escalera Numérica

Verifica si un array forma una escalera numérica (diferencia constante entre elementos consecutivos). Usa .every() para comparar cada elemento con el anterior y validar que la diferencia sea siempre la misma.

Resolver problema →
Fácil Java

El Reloj Misterioso

Este código convierte horas y minutos a minutos totales (15*60+45 = 945), luego divide por 100 y muestra solo la parte entera (9). ¿Por qué dividir por 100? Es el acertijo - ¡descubre el patrón oculto!

Resolver problema →
Fácil Python

Lista Multiplicada

En Python, multiplicar una lista por un número NO multiplica sus elementos, sino que REPITE la lista completa. Este es un error común que sorprende a muchos programadores. Si quisieras multiplicar cada elemento, necesitarías usar un list comprehension: [x * 2 for x in numeros]

Resolver problema →
Fácil Python

Suma Confusa

Cuando multiplicas un string por un número en Python, ¡repite el string! '5' * 3 = '555', no 15. Es un error común al olvidar convertir tipos.

Resolver problema →
Fácil Java

El Código Secreto

Este código convierte cada letra de 'JAVA' a su valor ASCII. J=74, A=65, V=86, A=65. ¡Es como un código secreto usando números!

Resolver problema →
Fácil Python

Complejidad Algoritmica

Búsqueda binaria divide el espacio a la mitad en cada paso: O(log n)

Resolver problema →
Fácil Python

Bug en el Print

Debe usar comillas consistentes: dobles O simples, no mezclar

Resolver problema →
Fácil Python

Condicional Completo

else maneja el caso cuando la condición es falsa

Resolver problema →
Fácil Python

Git Commit

FALSO - Puedes usar git reset, git revert, o git commit --amend

Resolver problema →
Fácil Python

Bug en el Print

Debe usar comillas consistentes: dobles O simples, no mezclar

Resolver problema →
Fácil JavaScript

Array Mágico

Cuando asignas un valor a un índice muy alto en un array, JavaScript automáticamente ajusta la longitud del array a ese índice + 1. Los espacios entre quedan como 'empty slots'. ¡Es una característica sorprendente de los arrays en JavaScript!

Resolver problema →
Fácil Python

Python es Case-Sensitive

FALSO - Python es case-sensitive, son variables diferentes

Resolver problema →
Fácil TypeScript

Encuentra el Nombre Más Largo

El código itera sobre un array de nombres y compara la longitud de cada uno usando .length. Mantiene en 'masLargo' el nombre con más caracteres encontrado hasta el momento. Al final imprime 'Roberto' porque tiene 7 letras, más que todos los demás.

Resolver problema →
Fácil Python

El Eco Numérico

La palabra 'NUEVE' tiene 5 letras. El código calcula 5 * 5 - 5 = 20. ¡El eco devuelve un número diferente al que dice la palabra!

Resolver problema →
Fácil TypeScript

Escalera de Multiplicaciones

Esta función genera una escalera de cubos. Para cada número del 1 al n, calcula su cubo (i³) y lo imprime. Con n=4 obtenemos: 1³=1, 2³=8, 3³=27, 4³=64. Es una forma creativa de practicar bucles y exponenciación.

Resolver problema →
Fácil Java

El Operador Misterioso >>>

El operador >>> es el desplazamiento de bits sin signo en Java. A diferencia de >>, rellena con ceros a la izquierda sin importar el signo. Convierte -8 a bits (11111111...11111000), desplaza 2 posiciones a la derecha rellenando con ceros, resultando en un número positivo enorme.

Resolver problema →
Fácil Java

El Contador de Vocales Consecutivas

El código cuenta cuántas veces aparecen dos vocales seguidas en una palabra. En 'aeiou' hay 4 pares consecutivos: ae, ei, io, ou. Usa indexOf() para verificar si un carácter es vocal y compara posiciones adyacentes.

Resolver problema →
Fácil JavaScript

El Intercambio sin Variable Extra

JavaScript permite intercambiar valores sin usar una variable temporal. Usando matemáticas: primero guardamos la suma, luego recuperamos el valor original de 'a' restando 'b', y finalmente obtenemos el original de 'b' restando el nuevo valor. ¡Los valores se intercambiaron sin ayuda extra!

Resolver problema →
Fácil JavaScript

El Misterio de las Llaves Flotantes

En JavaScript, todas las llaves de objeto se convierten a strings. Cuando usamos obj[1.5], el número 1.5 se convierte a '1.5'. Por eso obj['1.5'] sobrescribe obj[1.5], ya que ambas son la misma llave. ¡Las llaves numéricas y string son lo mismo en objetos!

Resolver problema →
Fácil TypeScript

La Calculadora de Excusas

Este código calcula cuántas excusas necesitas generar basándose en la diferencia entre tus horas de Netflix y estudio. El loop imprime una excusa por cada hora de procrastinación. ¡La realidad duele pero el código no miente! 😅

Resolver problema →
Fácil TypeScript

El Misterio del Operador Condicional Ternario

El operador ternario anidado (?:) permite evaluar múltiples condiciones en una sola línea. Primero verifica si edad >= 18 (falso), luego si edad >= 16 (verdadero), devolviendo 'supervisado'. Es una característica poderosa de TypeScript/JavaScript para asignaciones condicionales compactas.

Resolver problema →
Fácil TypeScript

El Misterio del Timestamp Negativo

new Date(0) crea una fecha con el timestamp Unix 0, que corresponde al 1 de enero de 1970 a las 00:00:00 UTC. Este es el punto de referencia del tiempo Unix. getFullYear() retorna 1970.

Resolver problema →
Fácil Python

El Validador de Contraseñas Roto

El bug está en la lógica de validación. Aunque isalnum() confirma que no hay caracteres especiales, no verifica que exista al menos un número Y una letra. Necesitamos usar any() con generadores para asegurar que la contraseña contiene tanto dígitos como letras.

Resolver problema →
Fácil Java

El Contador de Mentiras del Desarrollador

¡Este código tiene un bug deliberado! En Java, los nombres de variables NO pueden tener comillas. La variable debería ser bugs_reportados (sin comillas). Si corregimos eso, el loop suma 0+1+2+3+4 = 10. La ironía: reportamos 47 bugs pero solo había 10 reales. ¡Típico de developers exagerando en los reportes! 😄

Resolver problema →
Fácil Java

El Misterio del Switch sin Break

Sin declaraciones 'break', el switch ejecuta todos los casos desde donde coincide hasta el final (fall-through). Aunque dia=2 coincide con case 2, también ejecuta case 3, asignando "fin" como valor final.

Resolver problema →
Fácil TypeScript

El Misterio del Array Reverse

El método .reverse() modifica el array original directamente (es un método mutante). Después de llamar a reverse(), el array 'nums' queda como [3, 2, 1], por lo que nums[0] es 3. Este es un concepto importante: algunos métodos de array modifican el original, mientras que otros retornan una copia nueva.

Resolver problema →
Fácil TypeScript

El Misterio del Array Vacío vs Null

¡Trampa de comparación! Aunque arr.length es 0 y null se coerce a 0 en comparaciones numéricas, usar == con null es especial: solo null == undefined es true. Además, [] == null es false porque los objetos no se convierten a null. TypeScript permite any aquí, pero esto muestra por qué el tipado estricto es importante.

Resolver problema →
Medio Python

Encriptador de Coordenadas GPS

En GPS, las longitudes oeste se representan como negativas. Al multiplicar por -1, convertimos -74.0060 a 74.0060 para mostrarlo como positivo con el sufijo °W. El código procesa coordenadas GPS y las formatea en un string legible.

Resolver problema →
Difícil TypeScript

Promise Race con Side Effects

Promise.race() retorna cuando el primer Promise se resuelve, pero NO cancela los otros Promises. Esto significa que ambas llamadas fetch() se completan, desperdiciando ancho de banda y procesamiento. La solución usa AbortController para cancelar explícitamente la petición perdedora después de que race() se resuelva.

Resolver problema →
Fácil Python

¿Qué Devuelve la Comparación Encadenada?

Python permite comparaciones encadenadas. La expresión '18 < edad < 30' evalúa si edad está entre 18 y 30 (exclusivo). Como 25 cumple ambas condiciones (25 > 18 AND 25 < 30), el resultado es True.

Resolver problema →
Difícil JavaScript

El Enigma del Operador de Coalescencia

El operador de coalescencia nula (??) solo retorna el valor de la derecha cuando el de la izquierda es null o undefined. Como 0 es un valor válido (aunque falsy), la función retorna 0 inmediatamente, sin evaluar b ni 'default'.

Resolver problema →
Medio TypeScript

¿Qué es el Número de Erdős?

El Número de Erdős mide la 'distancia de colaboración' entre un matemático/científico y Paul Erdős. Erdős publicó más de 1,500 artículos con 511 colaboradores. Si escribiste un paper con Erdős, tu número es 1. Si escribiste con alguien que colaboró con Erdős, tu número es 2. Donald Knuth, creador de TeX, tiene Número de Erdős 4. Este concepto inspiró los 'Bacon Numbers' en Hollywood y es fundamental en teoría de grafos.

Resolver problema →
Fácil JavaScript

El Misterio del Operador de Exponenciación

El operador ** (exponenciación) tiene asociatividad de derecha a izquierda. Primero se calcula 3**2 = 9, luego 2**9 = 512. Es diferente a (2**3)**2 que sería 64.

Resolver problema →
Fácil TypeScript

El Misterio del Type Guard Automático

TypeScript tiene 'type narrowing': dentro del if, sabe que valor es string. ¡Pero fuera del if puede ser string O number, entonces toUpperCase() da error de compilación! El código nunca llega a ejecutarse porque TypeScript lo detecta antes.

Resolver problema →
Fácil TypeScript

El Enigma del Bucle Silencioso

El bucle itera 5 veces (0-4). El operador 'continue' salta las iteraciones pares (0, 2, 4), solo concatenando los números impares 1 y 3, resultando en el string '13'.

Resolver problema →
Fácil Java

El Enigma de la Suma Imposible

La suma de 7 + 3 es 10, que NO es igual a 4 * 4 (16). Por lo tanto, imprime "¡Ciencia!". Este ejercicio demuestra la evaluación de condiciones booleanas y cómo comparar operaciones matemáticas.

Resolver problema →
Fácil JavaScript

El Misterio del Operador Nullish ??

El operador ?? (nullish coalescing) solo reemplaza valores null o undefined, ¡pero NO valores falsy como 0, false o ''! A diferencia de ||, ?? preserva valores 'falsy' que son válidos. Por eso x=0 y z='', pero y='default'.

Resolver problema →
Medio TypeScript

Agrupador de Palabras por Longitud

Este código agrupa palabras según su longitud usando reduce(). Crea un objeto donde las claves son las longitudes y los valores son arrays de palabras. El operador spread (...) mantiene las palabras existentes mientras añade nuevas al grupo correspondiente.

Resolver problema →
Medio Java

Modificación de Lista Durante Iteración

¡TRAMPA! Al modificar una lista mientras la recorres con foreach, Java lanza ConcurrentModificationException. Aunque parece que debería quedar [1, 3], el código explota en runtime. La solución correcta es usar Iterator.remove() o streams con filter.

Resolver problema →
Difícil TypeScript

Undefined vs Null en Optional Chaining

¡Sorpresa! Aunque u1 tiene 'undefined' explícito, u2 tiene 'null' y u3 está vacío, el operador optional chaining (?.) devuelve 'undefined' en los tres casos. PERO hay una diferencia sutil: u1.name es undefined, u2.name es null, y u3.name es undefined. El ?. corta la cadena en null/undefined y retorna undefined, ocultando la diferencia entre null y la ausencia de propiedad. Este comportamiento sorprende porque null y undefined se tratan igual con ?., pero son distintos sin él.

Resolver problema →
Difícil JavaScript

Closure con Async Race Condicional

El código crea un closure con estado mutable (val). Aunque setTimeout incrementa val, las Promises con resolve inmediato siempre ganan el race porque el microtask de Promise.resolve se ejecuta ANTES que el timer del macrotask. Promise.race retorna la promesa que se resuelve primero. Las 3 llamadas retornan sus valores originales porque los resolves instantáneos son más rápidos que el setTimeout de 10ms.

Resolver problema →