Las restricciones eliminan configuraciones posibles y exigen analizar con cuidado qué decisiones siguen disponibles en cada etapa.
Los principios básicos de conteo funcionan mejor cuando todas las opciones son válidas. En problemas reales suelen aparecer condiciones: un símbolo no puede ocupar una posición, dos tareas no pueden estar juntas o una selección debe incluir cierto elemento.
Contar con restricciones consiste en describir esas condiciones y determinar cómo modifican el espacio de posibilidades.
| Tipo | Ejemplo | Estrategia habitual |
|---|---|---|
| Posición fija | A debe ocupar el primer lugar. | Fijar una posición y contar las restantes. |
| Elemento prohibido | B no puede aparecer. | Reducir el conjunto o usar complemento. |
| Inclusión obligatoria | El grupo debe contener a A. | Fijar A y completar las posiciones restantes. |
| Adyacencia | A y B deben estar juntas. | Tratar el grupo como bloque. |
| Separación | A y B no pueden ser vecinas. | Contar total y restar casos prohibidos. |
Si un código tiene 4 posiciones y se forma con 5 símbolos, el total sin restricciones es:
Si el primer símbolo no puede ser A, hay 4 opciones para la primera posición y 5 para las restantes:
Elige la cantidad de símbolos, la longitud de la secuencia y una restricción. La simulación genera el espacio completo para casos pequeños y conserva solo las secuencias válidas.
Para contar secuencias de longitud k que contienen al menos una A, podemos usar complemento:
Si n = 3 y k = 4:
Esta función cuenta secuencias que comienzan con un símbolo específico.
function contarConInicioFijo(cantidadSimbolos, longitud) {
if (longitud === 0) return 0;
return cantidadSimbolos ** (longitud - 1);
}
console.log(contarConInicioFijo(5, 4));
La primera posición ya está fijada, por lo que quedan 5 opciones para cada una de las 3 posiciones restantes.
Si no se permite repetir y además una posición está fija, las opciones restantes disminuyen. Por ejemplo, con 6 elementos, A fijo en la primera posición y 3 posiciones totales:
Si dos elementos deben estar juntos, podemos tratarlos como un bloque. En una fila con A y B juntos, el bloque puede aparecer como AB o BA.
Si dos elementos no pueden estar juntos, contamos todos los ordenamientos y restamos los que los tienen como vecinos.
Una restricción puede producir varios tipos de casos inválidos. Si esos casos se superponen, debemos combinar el complemento con inclusión y exclusión para no restar dos veces.
Para un espacio pequeño, podemos generar todas las configuraciones y comprobar la condición una por una.
const simbolos = ["A", "B", "C"];
const validas = [];
for (const primero of simbolos) {
for (const segundo of simbolos) {
const secuencia = primero + segundo;
if (!secuencia.startsWith("A")) validas.push(secuencia);
}
}
console.log(validas);
console.log(`Total válido: ${validas.length}`);
La enumeración ayuda a comprobar la fórmula, pero no debe ser la estrategia principal cuando el espacio de búsqueda es grande.
Contar con restricciones exige describir qué configuraciones están permitidas y cómo las condiciones afectan las decisiones. Las herramientas estudiadas —producto, complemento, bloques e inclusión y exclusión— permiten construir conteos precisos.
En el próximo tema estudiaremos el conteo de posiciones y asignaciones, donde las restricciones se aplicarán a lugares y recursos concretos.