Crossword Generator
Genera crucigramas con backtracking automatico. La BD guarda solo palabras y pistas; el motor construye el grid y asigna numeros de pista.
Uso
const result = engine.generateCrossword( [ { answer: 'CAT', clue: { type: 'TEXT', value: 'A small animal' } }, { answer: 'ACT', clue: { type: 'TEXT', value: 'To do something' } }, { answer: 'DOG', clue: { type: 'TEXT', value: 'A loyal pet' } }, ], 10, // gridSize);Respuesta
{ "grid": [ ["", "", "C", "", ""], ["", "", "A", "", ""], ["C", "A", "T", "", ""], ["D", "O", "G", "", ""] ], "placements": [ { "word": "CAT", "clue": { "type": "TEXT", "value": "A small animal" }, "row": 2, "col": 0, "direction": "across", "number": 1 }, { "word": "ACT", "clue": { "type": "TEXT", "value": "To do something" }, "row": 0, "col": 2, "direction": "down", "number": 2 } ], "size": 10}El campo number es el numero de pista que el usuario usa como clave en answer al evaluar.
Algoritmo
- Ordena palabras de mayor a menor longitud.
- Coloca la primera palabra horizontalmente cerca del centro.
- Para cada palabra restante, busca intersecciones validas con backtracking (hasta 50 intentos).
- Valida que no haya conflictos de letras adyacentes perpendiculares.
- Si no puede cruzar, usa modo lineal (palabras separadas).
- Asigna numeros de pista de izquierda a derecha, arriba a abajo.
Conexion con la evaluacion
El number de cada placement en la respuesta corresponde a la clave en el answer al evaluar:
// Generador: placement.number = 1 para "CAT"// Evaluacion: answer = "{\"1\":\"cat\"}"