← Menú

CodeBreaker

Descifra el código secreto

Elige un color y haz clic en los huecos
📊 Tabla de Probabilidades
% por posición · TOTAL = suma de fila (máx 400%)
Alta (>25%)
Media (12–25%)
Baja (<12%)
Imposible
💡 Sugerencia óptima
Calculando…

📖 Cómo Jugar al Mastermind

Todo lo que necesitas saber para descifrar el código

El Objetivo

El juego oculta un código secreto formado por una secuencia de colores. Tu misión es descubrirlo en el menor número de intentos posible, usando la lógica y los indicadores de retroalimentación que el juego te proporciona tras cada intento.

🎨
Colores

Hay 8 colores disponibles para formar el código secreto.

🔢
Longitud

El código tiene 4 posiciones (o 5 en modo avanzado). Cada posición lleva un color.

🔄
Duplicados

Por defecto sin repetición. Puedes activar duplicados para aumentar la dificultad.

⏱️
Intentos

Tienes 8 intentos por defecto para resolver el código (configurable).

Mecánica Básica

Cada turno introduces una combinación de colores. Al confirmarla, el juego te responde con dos tipos de indicadores:

Los Dos Tipos de Pistas
Respuesta
⚫ Rojo
El color está en el lugar correcto
Respuesta
⚪ Blanco
El color existe pero en otra posición
Respuesta
⬜ Vacío
El color no aparece en el código ✗

Ejemplo Práctico Paso a Paso

Supongamos que el código secreto es 🔴 Rojo · 🔵 Azul · 🟡 Amarillo · 🟢 Verde (oculto). Veamos cómo avanzar:

Partida de Ejemplo
Intento 1
🔴 en pos 1 ✓ — Morado, Blanco, Negro ausentes
Intento 2
🔴🔵 bien colocados · Verde y Amarillo existen pero mal puestos
Intento 3
¡4 rojos! 🎉 Código resuelto en 3 intentos

Condiciones de Victoria y Derrota

Ganas cuando los 4 indicadores son rojos (todos los colores en su posición exacta). Pierdes si agotas todos tus intentos sin encontrar el código. Al perder, el código secreto queda revelado.

💡 Consejo inicial: En tu primer intento, usa 4 colores completamente distintos para maximizar la información recibida. Así sabes de golpe cuántos de esos colores aparecen en el código.

⚔️ Estrategias para Ganar

Desde la apertura hasta el cierre: cómo pensar como un maestro descifrador

La Apertura: El Primer Intento

El primer intento es crucial porque no tienes información previa. Existen tres filosofías de apertura:

01
4 Colores Distintos (Óptima)
Usa ROJO·AZUL·VERDE·AMARILLO. Te informa sobre 4 colores a la vez con el mayor retorno informacional posible. Es la apertura matemáticamente más eficiente.
02
2+2 (Conservadora)
Usa ROJO·ROJO·AZUL·AZUL. Útil si los duplicados están activados: descubres si un color aparece 0, 1 o 2 veces exactamente.
03
Apertura Estática Knuth
La apertura 1122 (o equivalente 2 pares) es la óptima demostrada por el algoritmo de Knuth. Reduce el peor caso a 5 intentos siempre.

Estrategia de Eliminación

Cada respuesta del juego elimina una fracción del espacio de posibilidades. El objetivo es elegir combinaciones que reduzcan al máximo los códigos restantes sea cual sea la respuesta.

Razonamiento por eliminación

Si obtienes 0 pistas (ni rojo ni blanco) para un color, ese color está ausente del código. Jamás vuelvas a usarlo. Si obtienes 1 blanco para un color en posición 1, sabes que ese color existe pero no está en la posición 1. Elimina la posición 1 para ese color.

Ve anotando mentalmente (o en papel) las restricciones acumuladas. Después de 2-3 intentos bien hechos, el espacio posible colapsa drásticamente.

Ataques y Enfoques Avanzados

04
Minimax (Peor Caso)
Elige el intento que minimiza el peor resultado posible. Para cada candidato calcula cuántos códigos quedarían en el peor escenario. Elige el que tenga el menor peor caso. Esta app lo calcula por ti en "Sugerencia óptima".
05
Máxima Entropía
Elige el intento que distribuye más uniformemente los códigos restantes entre las posibles respuestas. No es idéntico a minimax pero a menudo da mejores resultados en promedio.
06
Intento Viable
Siempre que sea posible, elige un intento que podría ser la solución real. Si aciertas, ganas en ese turno. La penalización en calidad de separación suele ser mínima cuando el espacio es pequeño.
07
Confirmación Cruzada
Cuando crees saber 2 colores y sus posiciones, colócalos en una permutación diferente en el siguiente intento. Los blancos se convertirán en rojos o darán información nueva sobre el tercer y cuarto color.

Jugadas Automáticas — Situaciones Tipo

🔴 Situación "3 rojos en intento N": Solo quedan a lo sumo 3 códigos posibles (permutar el color no confirmado con los restantes). Aplica Minimax o simplemente prueba uno directamente.

Situación "todo blancos": Has encontrado exactamente los colores correctos pero en orden incorrecto. El código es una permutación exacta de tu intento. Prueba permutaciones sistemáticamente.

Situación "0 pistas en intento 1": Los 4 colores usados están ausentes. El código usa solo los 4 colores restantes. El espacio se reduce a 4! = 24 posibilidades (sin duplicados). Puedes resolver en 2-3 intentos más.

🎯 Regla del intento 4: Si llevas 3 intentos con buena estrategia, deberías tener ≤ 6 códigos posibles. En ese punto, casi siempre puedes resolver en 2 intentos más con Minimax. Si tienes más de 15 posibles en el intento 4, algo salió mal en la estrategia.

¿Cuándo Arriesgar vs. Cuándo Optimizar?

Si te quedan 3 o más intentos y tienes muchos posibles, optimiza (usa Minimax). Si te quedan 1-2 intentos, debes arriesgar y elegir directamente un código del espacio viable, apostando a que sea el correcto. Nunca desperdicies el último intento en un código informativo que sabes que no es la solución.

∑ Teoría Matemática

Combinatoria, teoría de la información y algoritmos óptimos

1. El Espacio de Búsqueda

Con 8 colores y 4 posiciones sin repetición, el número total de códigos posibles es una permutación:

P(8, 4) = 8 × 7 × 6 × 5 = 1.680 códigos
Permutaciones de 8 colores tomados de 4 en 4

En general, con n colores y k posiciones sin repetición:

P(n, k) = n! / (n−k)! = n · (n−1) · … · (n−k+1)

Si se permiten duplicados, el espacio crece a:

n^k = 8⁴ = 4.096 códigos
Variaciones con repetición

2. Teoría de la Información — Entropía de Shannon

Cada intento puede producir distintas respuestas (combinaciones de rojos y blancos). Si cada respuesta divide el espacio en grupos de tamaño n₁, n₂, …, nₘ, la entropía esperada de ese intento es:

H = −∑ᵢ pᵢ · log₂(pᵢ)
donde pᵢ = nᵢ / N es la probabilidad de cada respuesta posible

El intento óptimo maximiza H, lo que equivale a distribuir los códigos restantes lo más uniformemente posible. Un reparto perfecto sería si todas las respuestas son igualmente probables.

📊 Ejemplo concreto: Si quedan 1.680 códigos y tu intento los divide en grupos de 420, 420, 420, 420 (4 grupos iguales), la entropía es H = log₂(4) = 2 bits, lo que significa que eliminas exactamente el 75% del espacio con certeza matemática.

3. El Algoritmo Minimax de Knuth (1977)

Donald Knuth demostró en 1977 que Mastermind con 6 colores y 4 posiciones siempre puede resolverse en 5 intentos. La estrategia usa el criterio Minimax:

c* = argminᶜ [ maxₛ |Part(c, s)| ]
Elige el candidato c que minimiza el tamaño máximo de cualquier partición

Donde Part(c, s) es el subconjunto de códigos que producen la respuesta s cuando se intenta c. En esta versión con 8 colores:

Número de respuestas posibles por intento

Las respuestas posibles son pares (rojos, blancos) con rojos + blancos ≤ k. Para k=4:

RojosBlancos posiblesTotal combinaciones
00, 1, 2, 3, 45
10, 1, 2, 34
20, 1, 23
301 (4 rojos = victoria)
Total respuestas distintas14 (excluyendo 3R+1B que es imposible)

4. Expected Size — La Métrica Real de Calidad

Esta app califica tus jugadas usando el tamaño esperado del espacio restante tras tu intento:

E[|S'|] = ∑ₛ P(s|c) · |Part(c,s)| = ∑ₛ nₛ² / N
Cuanto menor E[|S'|], mejor divide tu intento el espacio

La calificación de tu jugada se calcula como el ratio entre tu expected size y el óptimo:

Calificación = 10 · (E_óptima / E_tuya)
10/10 si tu jugada iguala al óptimo, menos si es subóptima

5. Árbol de Juego y Profundidad Óptima

El juego puede modelarse como un árbol de decisión donde cada nodo es un intento y cada rama es una respuesta posible. La profundidad del árbol corresponde al número máximo de intentos necesarios.

ColoresPosicionesEspacioPeor caso (Minimax)Promedio
641.2965~4.3
841.6806~4.7
844.096 (con dup.)7~5.2
856.7207~5.5

6. Cota Inferior Informacional

¿Cuál es el mínimo teórico de intentos posible? Como cada intento puede producir como mucho 14 respuestas distintas, y necesitamos distinguir entre N códigos, se puede calcular una cota inferior:

intentos_mínimos ≥ ⌈log₁₄(N)⌉
Para N=1.680: ⌈log₁₄(1.680)⌉ = ⌈2.78⌉ = 3

Esto significa que en teoría podrían bastar 3 intentos. En la práctica el mejor algoritmo conocido necesita 6 en el peor caso porque las particiones no son perfectamente uniformes.

🧮 La brecha teoría-práctica: La cota informacional dice 3, el algoritmo óptimo necesita 6. Esta brecha de 3 intentos existe porque no podemos garantizar que cada respuesta elimine exactamente 1/14 del espacio — la estructura combinatoria del juego impone restricciones geométricas sobre qué particiones son alcanzables.

7. Probabilidad Bayesiana y la Tabla de Esta App

La tabla de probabilidades que muestra esta app aplica inferencia bayesiana. Antes de jugar, cada código es igualmente probable:

P(código = c) = 1/N para todo c ∈ S

Tras un intento con respuesta r, actualizamos mediante Bayes:

P(c | r) = P(r | c) · P(c) / P(r)
Como P(r|c) ∈ {0,1}, esto equivale a filtrar S eliminando códigos incompatibles

La tabla muestra entonces P(color_i en posición_j), calculada como la fracción de los códigos viables restantes que tienen el color i en la posición j:

P(cᵢ en pⱼ) = |{c ∈ S : c[j] = cᵢ}| / |S|

💡 Ventaja competitiva directa: Si ves un 85% en una celda, ese color casi con certeza ocupa esa posición. Un 0% significa que es imposible. Usar esta tabla con conciencia es el equivalente a jugar con un asistente estadístico en tiempo real.

8. Complejidad Computacional

Calcular la jugada óptima exacta (Minimax completo) tiene complejidad:

O(n^k · |S|)
Para cada candidato (n^k), evalúa la partición contra los códigos viables (|S|)

Con n=8, k=4 y |S| ≤ 4096, esto es hasta ~16 millones de operaciones por turno — manejable en JavaScript. Esta app usa una optimización: cuando |S| > 30, reduce el pool de candidatos a los propios viables, sacrificando optimalidad marginal a cambio de velocidad instantánea.