npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

conwords-generator

v0.2.5

Published

Allows generating crosswords using genetic algorithms, based on a set of dictionaries of terms and definitions.

Downloads

117

Readme

conwords-generator

Permite generar crucigramas mediante algoritmos genéticos sobre diccionarios de términos y definiciones.

Instalación:

npm i conwords-generator

Uso:

const ConwordsGenerator = require('conwords-generator');

Los diccionarios deben ser arrays de arrays con la siguiente estructura:

[
  [
    /**Respuesta*/
    String,
    /**Pregunta 1*/
    String,
    /**Pregunta 2*/
    String,...
  ],..
]

Por ejemplo:

[
  ["hola", "saludo", "saludo informal"],
  ["adios", "despedida", "despedida formal", "chao"]
]

Ver mas diccionarios

Antes de generar un crucigrama se debe realizar una compilación de diccionarios, donde se selecciona que diccionarios vas a usar. Esta compilación permite generar los crucigramas más rápido, y se realiza de la siguiente manera:

const compilacionInformatica = ConwordsGenerator.compilar([
  // Agrega los diccionarios que sean necesarios
  diccionarioGPTInformatica,
  diccionarioTriviaInformatica,
]);

El siguiente paso es inicializar un Generador de Crucigramas:

/**El generador usará compilacionInformatica
 * para crear crucigramas tamaño 16x16  */
const generador = new ConwordsGenerator({
  compilacion: compilacionInformatica,
  ancho: 16,
  alto: 16,
});

Luego se debe iniciar la matriz sobre la que trabajara el algoritmo, luego se debe iterar sobre esa matriz para obtener los mejores resultados, para finalmente aplicar un método que completa los espacios restantes.

//Genera una matriz inicial
let matriz = generador.generar();
//Itera 8 veces, mejorando la solución en cada iteración
for (let i = 0; i < 8; i++) {
  matriz = generador.iterar(matriz);
}
//Completa los espacios restantes
matriz = generador.completar(matriz);

Luego puede ver el resultado mediante: console.log(generador.toString(matriz, true))

    0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5

00  · · R D · · R E T U R N · A I ·
01  D D · E · R · · E · · O · N · I
02  E · A S S E M B L E R · C D · N
03  S · · C · N · · N · · I · R · S
04  P I · A U · W · E V E N T O · E
05  L · · R · · O · T · · · · I · R
06  A · I G N O R E · C L O U D · T
07  Z · · A · · D · S · E · · · · B
08  A W S · K · P R I N T · D O C E
09  M · E · E · R · · S · · · L · F
10  I N T E R N E T · A T · N E R O
11  E · · · N · S · Q · A · E · · R
12  N · · T E N S O R F L O W · · E
13  T R Y · L · · · · · K · S S H ·
14  O · · P · I · · · A · B · U · ·
15  · E N C A P S U L A C I Ó N · ·


HORIZONTAL:
0200:RD: MS-DOS: COMANDO PARA BORRAR UN DIRECTORIO
1300:AI: INTELIGENCIA ARTIFICIAL. PARTE DE LA INFORMÁTICA QUE ESTUDIA LA SIMULACIÓN DE LA INTELIGENCIA
0001:DD: SÍMBOLO DEL FORMATO DE DÍA EN 2 DÍGITOS, EN ESPAÑOL
...

Y tambien puede obtener el resultado en formato JSON mediante: generador.getJSON(matriz) con el siguiente formato:

[
  {
    /**respuesta (debe tener solo letras (pueden tener acentos),
     sin espacios,  sin números, sin caracteres especiales)*/
    "palabra": String,
    /**true si la pregunta es horizontal y false si es vertical*/
    "horizontal": boolean,
    /**posición x de la palabra en la matriz (comienza en 0)*/
    "x": int,
    /**posición y de la palabra en la matriz (comienza en 0)*/
    "y": int,
    /**pregunta o definición de la palabra*/
    "pregunta": String
  },...
]

Los parámetros por defecto del generador son:

   {Object} options.compilacion - Compilación  de diccionarios (null por defecto, debe proveerse)
   {Number} options.ancho - Ancho del crucigrama (24 por defecto)
   {Number} options.alto - Alto del crucigrama (22 por defecto)
   {String} options.espacioVacio - Carácter del espacio no usado ('·' por defecto)
   {Number} options.palabrasPorIteracion - Cantidad de palabras agregadas en cada nueva iteración (2 por defecto)
   {Number} options.solucionesSeleccionadas - Cantidad de soluciones seleccionadas de la generación anterior para ser usadas en la siguiente iteración (22 por defecto)
   {Number} options.solucionesPorIteracion - Cantidad de soluciones generadas en iteración, a partir de las soluciones seleccionadas de la generación anterior (33 por defecto)
   {Number} options.palabrasEnBorde - Cantidad de palabras en los bordes [0, 1] (0.9 por defecto)
   {Number} options.factorLargoMinimo - Factor de disminución del largo minimo en las iteraciones: mientras sea mayor mas rapidamente el largo minimo de las palabras ira disminuyendo entre cada iteración (1 por defecto)
   {Number} options.finishAt - Cantidad maximo de intentos para encontrar una solucion, despues de alcanzado estos intentos esa solución se marca como finalizado y no se intentaran mas soluciones (600 por defecto)
   {Function} options.fnPuntaje - Es una función que asigna un puntaje al crucigrama y que depende del porcentaje de llenado, la cantidad de cruces de palabras y la cantidad de palabras solas (que no se cruzan con otras) ((llenado * 4 + 2 * cruces) / (1 + solas * 4) por defecto))

Ver código de ejemplo