# Patrón IA

Los Tests no son más que archivos JSON con la siguiente estructura:

```json
[{
    "origin" : "Quién lo hizo", 
    "sources" : ["Links para el origen de los datos/Tests."], 
    "title" : "Título del Test.", 
    "queries" : [{
        "question" : "Pregunta arealizar.", 
        "rights" : ["Respuestas correctas simples.", ["Respuestas correctas porcentuadas.", 0.5]], 
        "wrongs" : ["Respuestas incorrectas simples.", ["Respuestas incorrectas porcentuadas.", 0.5]]
    }]
}]
```

* **origin**: String. Nombre de la entidad o fuente de la información.
* **sources**: Array de Strings. Fuentes de la que parte la información.
* **title**: String. Título del tema a tratar.
* **Queries**: Array de diccionario. Conjunto de posibles preguntas.
    * **question**: String. Texto de la pregunta.
    * **rights** y **wrongs**: Array de Strings (Respuesta directa) y/o Array bidimensional con:
        0. String. Respuesta.
        1. Float. Probabilidad de prebalecer como seleccionada.

Todos los campos ahnde existir siempre y el tipado va acorde a lo expuesto.

Los Array indican que pueden tener uno o más elementos, a excepción de "sources", que puede estar vacío.

Las respuestas porcentuadas indican cuál es la probabilidad de que una vez elegida por el programa, ésta se quede como respuesta y no se seleccione otra. Esto vale para equivaler conjuntos de respuestas dinámicas y estáticas. El valor que lo acompaña es la probabilidad de que permanezcan siendo 1 el 100% y 0 el 0%.

Lo interesante es que halla cuántas más posibles respuestas mejor. No hay un número mínimo ni máximo.

Las respuestas pueden tener factores dinámicos para que una sea más flexibles y dé más resultados. No puede haber anidamientos de éstos. Éstos se basan en claves las cuales son los siguientes.

## rand

Indica un conjunto de elementos de los cuales se eligirá uno aleatoriamente.

```txt
[[rand,opcion1|opcion2|opcion3|opcionN]]
```

```json
{
    "wrongs" : ["Esto es [[rand,esto|eso|aquello]]."]
}
```

En el ejemplo puede dar como resultado que es "esto", o "eso" o "aquello".

## range

Indica uno o más rangos o valores fijos numéricos enteros de donde se sacarán valores aleatorios.

```txt
[[rand,desde1-hasta1|desde2-hasta2|desde3-hasta3|desdeN-hastaN]]
```

```txt
[[rand,valor1|valor2|valor3|valorN]]
```

```txt
[[rand,desde1-hasta1|desde2-hasta2|valor3|desdeN-hastaN]]
```

```json
{
    "wrongs" : ["Esto es [[range,0-10|15-20|23|31-60]]."]
}
```

En el ejemplo puede coger cualquier valor comprendido entre 0 y 10, 15 y 20, el valor 23, y entre 31 y 60.

## serie

Es como el rango pero con memoria, y la siguiente serie del mismo texto procesado ha de ser igual o más grande.

```json
{
    "wrongs" : ["Esto está entre [[serie,0-25]] y [[serie,10-50]]."]
}
```

En el ejemplo, el primer valor puede coger cualquier valor comprendido entre el 0 y el 25; y el segundo puede ser entre 10 si el primero es menor que 10 o desde el primero en caso contrario, hasta el 50.

Sólo se contabiliza una serie por pregunta/respuesta.