102 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Prompt: Generador de Tests JSON
 | 
						||
 | 
						||
Genera un único archivo JSON válido y bien formateado que contenga un Test de preguntas conforme a estas reglas.
 | 
						||
 | 
						||
## 1) Objetivo y salida
 | 
						||
- Crea un archivo JSON (pretty-printed) con la estructura indicada más abajo.
 | 
						||
- Devuélveme solo el JSON (sin explicaciones ni texto extra).
 | 
						||
 | 
						||
## 2) Estructura del fichero (raíz)
 | 
						||
- El JSON será un array con un objeto que incluye:
 | 
						||
  - `origin`: String (autor/fuente de las preguntas)
 | 
						||
  - `title`: String (título del grupo)
 | 
						||
  - `group`: String (clave id de grupo, debe cumplir la regex `/^[a-z0-9_]+$/i`)
 | 
						||
  - `source`: String | Array[String] (fuentes / enlaces)
 | 
						||
  - `queries`: Array[Question]
 | 
						||
 | 
						||
## 3) Estructura de cada Question (cada elemento de `queries`)
 | 
						||
- `question`: String | Array[String] (texto de la pregunta; puede haber variantes)
 | 
						||
- `rights`: Array[String] (una o más respuestas correctas)
 | 
						||
- `wrongs`: Array[String] (mínimo 3 respuestas incorrectas)
 | 
						||
 | 
						||
Reglas obligatorias:
 | 
						||
- No hay un número mínimo de preguntas, pero intentar siempre hacer cuántas más mejor.
 | 
						||
- Por cada pregunta, cuántas más opciones para la misma pregunta, mejor.
 | 
						||
- Cada pregunta debe tener al menos 1 elemento en `rights`, pero cuántas más mejor.
 | 
						||
- Cada pregunta debe tener al menos 3 elementos en `wrongs`, pero cuántas más mejor.
 | 
						||
- `rights` y `wrongs` pueden contener tantas opciones adicionales como quieras.
 | 
						||
- Los strings pueden incluir estructuras tokenizadas (ver sección tokens). Cuantas más, más variedad pueden tener y por tanto, mejor, pero siempre han de ser coherentes y lógicas a su propósito. Cantidad con calidad.
 | 
						||
 | 
						||
## 4) Gramática de tokens permitidos (solo dentro de strings; NO como una respuesta completa)
 | 
						||
- Formato general: `{nombre:parametros,valores}`
 | 
						||
  - `nombre`: letras (p. ej. `rand`, `mix`, `select`, `range`, `serie`)
 | 
						||
  - `parametros`: opcionales, separados por comas
 | 
						||
  - `valores`: opciones separadas por `|`
 | 
						||
- Tokens soportados (sintaxis y efecto):
 | 
						||
  - `{rand:op1|op2|op3}` → sustituye por una de las opciones aleatorias.
 | 
						||
    - Ej: `"La opción correcta es {rand:la A|la B|la C}"`
 | 
						||
  - `{mix:sep,op1|op2|op3}` → mezcla `op1..opN` y devuelve la lista separada por comas, usando `sep` antes del último elemento.
 | 
						||
    - Ej: `"{mix: y,rojo|azul|verde}"` → `"rojo, azul y verde"`
 | 
						||
  - `{Mix:sep,op1|op2|op3}` → igual que `mix` pero capitaliza la primera letra del resultado.
 | 
						||
  - `{select:desde-hasta,sep,op1|op2|op3}` → selecciona aleatoriamente entre N elementos (`rango desde-hasta`) sin repetir y los une con `sep`.
 | 
						||
    - Ej: `"{select:1-2,y,manzana|pera|uva}"` puede dar `"Manzana y pera"` (si usas `Select` capitaliza).
 | 
						||
  - `{range:n1-n2|n3|n4-n5}` → elige un número aleatorio dentro de uno de los rangos/secciones.
 | 
						||
    - Ej: `"{range:3-8|11|20-50}"`
 | 
						||
  - `{serie:n1-n2|n3|...}` → como `range`, pero mantiene memoria en el archivo: la primera aparición toma un valor; la siguiente aparición de la misma serie incrementa o iguala según el diseño. (Memoria scope: por archivo).
 | 
						||
  - `{Mix:sep,op1|op2|op3}` → igual que `mix` pero capitaliza la primera letra del resultado.
 | 
						||
  - `{select:desde-hasta,sep,op1|op2|op3}` → selecciona aleatoriamente entre N elementos (`rango desde-hasta`) sin repetir y los une con `sep`.
 | 
						||
    - Ej: `"{select:1-2,y,manzana|pera|uva}"` puede dar `"Manzana y pera"` (si usas `Select` capitaliza).
 | 
						||
  - `{range:n1-n2|n3|n4-n5}` → elige un número aleatorio dentro de uno de los rangos/secciones.
 | 
						||
    - Ej: `"{range:3-8|11|20-50}"`
 | 
						||
  - `{serie:n1-n2|n3|...}` → como `range`, pero mantiene memoria en el archivo: la primera aparición toma un valor; la siguiente aparición de la misma serie incrementa o iguala según el diseño. (Memoria scope: por archivo).
 | 
						||
  - Capitalización general: `{Cap:texto}` daría `Texto`.
 | 
						||
 | 
						||
### Reglas de parseo (aclaración breve)
 | 
						||
- Evaluación: los tokens se deben evaluar de dentro hacia fuera (innermost-first). Es decir, primero localizar y resolver el token más interior `{...}`, sustituir su texto resultante y continuar hasta no quedar tokens.
 | 
						||
- Nombres de token: son case‑insensitive. El motor debe tratar `mix`, `Mix` o `MIX` como el mismo token funcional; ciertas variantes (por ejemplo `Mix` o `Select`) se definen aquí para indicar capitalización del resultado cuando se indique.
 | 
						||
 | 
						||
 | 
						||
Reglas sobre tokens:
 | 
						||
- Deben aparecer embebidos en texto (no pueden ser la única cosa de una opción).
 | 
						||
- Pueden anidarse si es razonable, p. ej. `"{mix: y,{rand:a|b}|{rand:c|d}}"`
 | 
						||
- Si usas `serie`, especifica en el texto si quieres reinicio o wrap (por defecto: incrementa hasta el máximo y vuelve al inicio).
 | 
						||
 | 
						||
## 5) Contenido temático y alcance
 | 
						||
- Tema: Constitución Española (Art.87 y Art.166). Genera todas las preguntas que se te ocurran sobre esos artículos (tantas como el tema permita), mínimo 10 preguntas sensatas.
 | 
						||
- Mantén fidelidad al texto: las `rights` deben ser correctas según los artículos; `wrongs` deben ser plausibles, pero incorrectas.
 | 
						||
- Es importante entender que las preguntas pertenecen a una batería de preguntas que las une y por tanto, es importante determinar de qué se habla en las mismas para evitar ambigüedades.
 | 
						||
 | 
						||
## 6) Formato y validaciones exigidas por la salida
 | 
						||
- El JSON resultante debe ser válido (parseable por un JSON parser).
 | 
						||
- Validaciones automáticas a cumplir:
 | 
						||
  - `group` cumple `/^[a-z0-9_]+$/i`
 | 
						||
  - Cada `query` tiene >=1 `rights` y >=3 `wrongs`
 | 
						||
  - Ninguna `rights` ni `wrongs` es null/empty
 | 
						||
  - Tokens sólo embebidos en strings (no elementos token-only)
 | 
						||
- Salida: devuelve SOLO el JSON (pretty-printed).
 | 
						||
 | 
						||
## 7) Malas prácticas
 | 
						||
 | 
						||
- Hacer uso de `rand`, `select` o `mix` para un único elemento, a excepción del `rand` para determinar si sale o no aleatoriamente.
 | 
						||
- Hacer uso de `range` o `serie` para un único valor numérico.
 | 
						||
- Hacer uso de un rango y no un valor fijo numérico para determinar un único valor en `range` y `serie`.
 | 
						||
- Hacer uso de `Cap` para capitalizar un texto no dinámico.
 | 
						||
- Hacer uso de `mix` en las respuestas "wrongs" y no `select` para implementar más difícultad y opciones.
 | 
						||
 | 
						||
## 8) Trucos
 | 
						||
 | 
						||
- Para determinar si un texto pueda salir o no aleatoriamente se puede hacer uso de `rand` de la siguiente forma: `Esto es un ejemplo{rand:|, que puede ser extendido o no}.`
 | 
						||
 | 
						||
## 9) Ejemplo mínimo de una pregunta válida
 | 
						||
```json
 | 
						||
{
 | 
						||
  "question": "Según el art.87.1. ¿A quién corresponde la iniciativa legislativa?",
 | 
						||
  "rights": ["{Mix:y,al Gobierno|al Congreso|al Senado}, de acuerdo con {mix:y,la Constitución|los Reglamentos de las Cámaras}"],
 | 
						||
  "wrongs": [
 | 
						||
    "Sólo {rand:al {rand:Gobierno|Congreso|Senado}|a las {rand:Cámaras|Cortes{rand:| Generales}|Comunidades Autónomas|Diputaciones{rand:| Provinciales}}|a la Constitución}",
 | 
						||
    "{Cap:{rand:al {rand:Gobierno|Congreso|Senado}|a las {rand:Cámaras|Cortes{rand:| Generales}|Comunidades Autónomas|Diputaciones{rand:| Provinciales}}|a la Constitución}} exclusivamente.", 
 | 
						||
    "{Select:1-5,y,al Gobierno|al Congreso|al Senado|a las Cámaras|a las Cortes Generales}{rand:|, de acuerdo con {Select:1-3,y,a las Comunidades Autónomas|a las Diputaciones{rand:| Provinciales}|a la Constitución}}."
 | 
						||
  ]
 | 
						||
}
 | 
						||
```
 |