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}}."
]
}