Secuencias sin repetir
Cómo se juega
Un tablero de Str8ts contiene casillas blancas y negras. Las casillas negras dividen cada fila y columna en compartimentos. Todas las casillas blancas se rellenan con números entre 1 y el tamaño del tablero.
La primera regla recuerda a Sudoku: un número no puede repetirse dentro de una misma fila ni dentro de una misma columna. Si una casilla negra contiene un número, esa pista también participa en la regla de no repetición, aunque la casilla negra nunca forma parte de un compartimento.
La regla que define Str8ts está en los compartimentos blancos. Sus números deben formar un straight: un conjunto de valores consecutivos sin huecos, pero en cualquier orden. Por ejemplo, 6-4-5 es válido porque utiliza exactamente 4, 5 y 6; 2-4-5 no lo es porque falta el 3.
Un origen relativamente bien documentado
En este caso sí contamos con documentación directa del entorno editorial del propio puzzle. Syndicated Puzzles atribuye el concepto a Jeff Widderich, que lo ideó en 2008. Widderich invitó después a Andrew Stuart a convertir la idea en un puzzle operativo, trabajando en generación, solución única y estrategias lógicas.
La web oficial de Str8ts conserva la formulación esencial de las reglas: las casillas negras separan compartimentos, cada compartimento debe formar una secuencia sin huecos, ningún número puede repetirse en fila o columna y las pistas impresas en negro restringen su fila y columna sin pertenecer a ningún straight.
El problema de nuestra primera versión
La implementación inicial de PuzzleHub era solo una demostración 4×4 fija. Permitía introducir números y comprobar reglas, pero no era un producto completo: no había tamaños, niveles, generación, solver independiente ni garantía formal de que una futura variante tuviera una única solución.
La hemos sustituido por un motor nativo que representa explícitamente casillas negras, pistas negras, compartimentos horizontales y verticales, números dados y casillas jugables. Ese modelo sirve tanto a la interfaz como al solver y al selfTest().
Cómo fabricar una solución que ya respete todos los straights
El punto de partida es una cuadrícula latina cíclica. En una fila aparecen los números en orden circular y cada fila siguiente desplaza la secuencia una posición. Eso garantiza que no haya repetidos en filas ni columnas.
Sin embargo, una secuencia circular contiene un salto entre el número máximo y el 1. Un compartimento que cruzara ese salto dejaría de ser consecutivo en el sentido normal de Str8ts. La solución de construcción es colocar celdas negras precisamente en la diagonal donde ocurre ese cambio. Esas celdas rompen simultáneamente los recorridos horizontales y verticales en los lugares necesarios.
A partir de ahí podemos añadir más casillas negras. Dividir una secuencia que ya era consecutiva produce dos secuencias consecutivas más pequeñas, por lo que la propiedad se conserva. El resultado es una familia de geometrías originales que sabemos que admite, como mínimo, la solución de partida.
Las pistas negras tienen dos papeles
Una celda negra siempre separa compartimentos. Algunas variantes de Str8ts permiten que además muestre un número fijo. Ese número no pertenece al straight de ningún lado, pero sí elimina ese valor del resto de su fila y columna.
En nuestras bases usamos las pistas negras como parte de la red de restricciones. Como proceden de la misma cuadrícula latina, nunca se contradicen entre sí y ayudan a que los compartimentos blancos se crucen de una forma suficientemente informativa.
El solver: no basta con mirar mínimos y máximos al final
Para demostrar unicidad contamos soluciones desde cero. En cada casilla blanca calculamos primero los números que no chocan con su fila ni con su columna. Después filtramos ese conjunto usando los dos compartimentos a los que pertenece.
Si un compartimento tiene longitud cuatro, todos sus números completos tendrán que caber en uno de los intervalos 1–4, 2–5, 3–6 y así sucesivamente. Con una asignación parcial podemos saber enseguida si todavía existe algún intervalo de longitud cuatro capaz de contener todos los valores ya colocados. Si no existe, la rama se descarta antes de seguir profundizando.
El solver elige la celda con menos candidatos disponibles. Esa estrategia MRV reduce el árbol de búsqueda y, además, nos proporciona una señal aproximada de complejidad: contamos cuántos nodos necesita visitar para demostrar que existe exactamente una solución.
Cuatro tamaños
PuzzleHub ofrece 4×4, 6×6, 8×8 y 9×9. El 9×9 corresponde al formato clásico más conocido, mientras que los tamaños menores sirven para aprender la mecánica y permiten partidas mucho más rápidas.
En todos los tamaños el rango numérico es de 1 a N. No hay cajas Sudoku: únicamente filas, columnas, compartimentos y las pistas negras.
Cuatro dificultades sin cambiar las reglas
Fácil, Normal, Difícil y Experto utilizan la misma lógica. Lo que cambia es cuánta información blanca dejamos visible. Partimos de una base que ya tiene solución única incluso sin pistas blancas adicionales y añadimos subconjuntos anidados de números dados para construir los niveles inferiores.
El selfTest() vuelve a resolver cada nivel y exige dos propiedades: una única solución y un aumento estricto del trabajo del solver de Fácil a Experto dentro del mismo tamaño. Así el selector de dificultad no es una etiqueta cosmética.
Nuevas partidas sin una generación pesada
Las bases originales admiten transformaciones que preservan todas las reglas. Podemos reflejar, rotar o transponer el tablero porque filas y columnas desempeñan papeles equivalentes. También podemos complementar todos los números —1 pasa a N, 2 a N−1, etc.— porque una secuencia consecutiva sigue siendo consecutiva después de esa inversión.
La combinación de simetrías geométricas y complemento produce distintas presentaciones de una misma estructura lógica sin ejecutar un generador caro al pulsar “Nueva partida”. Para CI, sin embargo, no confiamos solo en la demostración matemática: las variantes se vuelven a validar con el solver.
Interfaz: hacer visibles los compartimentos
Las casillas negras tienen suficiente contraste para que la geometría del tablero se lea inmediatamente. Sus números se muestran como pistas fijas. Las pistas blancas utilizan un tratamiento visual distinto de los números introducidos por el jugador y los conflictos se marcan en cuanto una fila, columna o compartimento parcial deja de poder formar una secuencia válida.
La entrada funciona con ratón, táctil y teclado. El panel numérico se adapta al rango del tamaño elegido; las flechas mueven la selección y Supr o Retroceso limpian una casilla.
Qué verifica CI
El test recorre los cuatro tamaños y las cuatro dificultades. Comprueba que la solución completa respeta filas, columnas, pistas negras y todos los compartimentos; cuenta soluciones hasta dos; exige unicidad; verifica que la dificultad aumente; y repite el proceso con múltiples transformaciones geométricas y numéricas.
Eso convierte Str8ts en un motor reproducible. Si una refactorización futura cambia la lógica de candidatos y vuelve ambiguo un tablero, el build falla antes de llegar a producción.
Fuentes y referencias
Reglas oficiales y material de aprendizaje: Str8ts — How to Play. Para la historia del concepto y la colaboración entre Jeff Widderich y Andrew Stuart: Syndicated Puzzles — Portfolio.