7.0 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			7.0 KiB
		
	
	
	
	
	
	
	
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. rightsywrongspueden 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 comasvalores: 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}" 
- Ej: 
 {mix:sep,op1|op2|op3}→ mezclaop1..opNy devuelve la lista separada por comas, usandosepantes del último elemento.- Ej: 
"{mix: y,rojo|azul|verde}"→"rojo, azul y verde" 
- Ej: 
 {Mix:sep,op1|op2|op3}→ igual quemixpero 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 consep.- Ej: 
"{select:1-2,y,manzana|pera|uva}"puede dar"Manzana y pera"(si usasSelectcapitaliza). 
- Ej: 
 {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}" 
- Ej: 
 {serie:n1-n2|n3|...}→ comorange, 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 quemixpero 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 consep.- Ej: 
"{select:1-2,y,manzana|pera|uva}"puede dar"Manzana y pera"(si usasSelectcapitaliza). 
- Ej: 
 {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}" 
- Ej: 
 {serie:n1-n2|n3|...}→ comorange, 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íaTexto. 
 
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,MixoMIXcomo el mismo token funcional; ciertas variantes (por ejemploMixoSelect) 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 
rightsdeben ser correctas según los artículos;wrongsdeben 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:
groupcumple/^[a-z0-9_]+$/i- Cada 
querytiene >=1rightsy >=3wrongs - Ninguna 
rightsniwrongses 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,selectomixpara un único elemento, a excepción delrandpara determinar si sale o no aleatoriamente. - Hacer uso de 
rangeoseriepara un único valor numérico. - Hacer uso de un rango y no un valor fijo numérico para determinar un único valor en 
rangeyserie. - Hacer uso de 
Cappara capitalizar un texto no dinámico. - Hacer uso de 
mixen las respuestas "wrongs" y noselectpara implementar más difícultad y opciones. 
8) Trucos
- Para determinar si un texto pueda salir o no aleatoriamente se puede hacer uso de 
randde la siguiente forma:Esto es un ejemplo{rand:|, que puede ser extendido o no}. 
9) Ejemplo mínimo de una pregunta válida
{
  "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}}."
  ]
}