Saltearse al contenido

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

  1. Ordena palabras de mayor a menor longitud.
  2. Coloca la primera palabra horizontalmente cerca del centro.
  3. Para cada palabra restante, busca intersecciones validas con backtracking (hasta 50 intentos).
  4. Valida que no haya conflictos de letras adyacentes perpendiculares.
  5. Si no puede cruzar, usa modo lineal (palabras separadas).
  6. 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\"}"

Ver Crossword - evaluacion.