CLRS Kit Españolclrs-kit-esp es una extensión para Visual Studio Code orientada al soporte de un lenguaje de programación tipo pseudocódigo, fuertemente inspirado en la sintaxis utilizada en el libro Introducción a Algoritmos (CLRS) 4ta Edición. 💻 Inicio rápido
RecomendadoRecursos opcionales que podrían mejorar tu experiencia con esta extensión. RequisitoEs necesario tener Node.js instalado en el sistema. CLRS Kit Español lo utiliza como entorno de ejecución (Runtime) para correr el código JavaScript generado durante el proceso de transpilación. Licencia (GPL versión 2.0)Este proyecto es de código abierto y se distribuye bajo los términos de la licencia GPLv2. Puede ser modificado y distribuido libremente, siempre que se conserve el software resultante bajo la misma licencia. ⌨️ Comandos para VS Code
⚙️ Estado actual (versión 1.5.6)Lenguaje de programación
Herramientas de edición integradas a VS Code
Herramientas de aprendizaje integradas a VS Code
📖 Filosofía del proyectoEl proyecto está diseñado bajo los siguientes principios:
En una época donde la construcción de código se delega cada vez más a la inteligencia artificial, el trabajo del humano evoluciona hacia la orquestación estratégica de la toma de decisiones guiada por el criterio y el ingenio. CLRS Kit Español busca hacer accesible, ejecutable y observable el razonamiento computacional, para que el estudiante no sólo escriba una solución, sino que pueda comprenderla, comprobarla, analizarla y justificarla. 🧮 Características del lenguajeComentariosCLRS admite comentarios de una sola línea mediante
Variables y tipos de datosLas variables en CLRS son dinámicas, débilmente tipadas y mutables. No existe una declaración separada de variables ni soporte para constantes. La primera asignación mediante
Las variables no pueden declararse sin un valor inicial. CLRS admite tres tipos básicos de valores:
Una variable puede cambiar el tipo de valor que almacena durante la ejecución.
Ámbito de las variablesLas variables pueden tener ámbito global o ámbito de función. Las estructuras
Entrada y salida
|
| Secuencia | Significado |
|---|---|
\n |
Nueva línea |
\t |
Tabulación |
\r |
Retorno de carro |
\b |
Retroceso |
\" |
Comillas dobles |
Ejemplo:
escribir "Hola\nMundo"
Arreglos
Los arreglos en CLRS son dinámicos.
Su tamaño y número de dimensiones se determinan conforme se utilizan nuevas posiciones.
numeros[0] = 10
numeros[1] = 20
numeros[2] = 30
También pueden utilizarse arreglos multidimensionales:
matriz[0][0] = 10
matriz[0][1] = 20
matriz[1][0] = 30
Es posible asignar arreglos completos entre variables. La asignación copia el contenido correspondiente.
A[0] = 10
A[1] = 20
B = A
Estructuras de selección
CLRS dispone de una única estructura principal de selección: si.
Puede combinarse con sino si y sino.
edad = 20
si edad >= 18
escribir "Mayor de edad"
sino
escribir "Menor de edad"
También pueden encadenarse varias condiciones:
calificacion = 85
si calificacion >= 90
escribir "Excelente"
sino si calificacion >= 70
escribir "Aprobado"
sino
escribir "No aprobado"
Los bloques de código se delimitan mediante indentación, por lo que debe mantenerse una estructura consistente.
Operadores
CLRS incluye operadores similares a los utilizados en otros lenguajes de programación.
Aritméticos
+ - * / % ^
Relacionales
== != < > <= >=
Lógicos
y o no
Ejemplo:
si edad >= 18 y activo
escribir "Acceso permitido"
Estructuras repetitivas
para hasta
La variante hasta incrementa automáticamente la variable de iteración hasta alcanzar el valor final.
para i = 1 hasta 5
escribir i
Resultado:
1
2
3
4
5
para bajando
La variante bajando realiza el recorrido en sentido descendente.
para i = 5 bajando 1
escribir i
Resultado:
5
4
3
2
1
mientras
La estructura mientras ejecuta repetidamente un bloque mientras su condición sea verdadera.
i = 1
mientras i <= 5
escribir i
i = i + 1
Funciones
Las funciones se definen mediante:
- un identificador;
- una lista de parámetros;
- un bloque de instrucciones.
La convención utilizada en CLRS consiste en escribir los nombres de las funciones en mayúsculas, utilizando _ para separar palabras.
SUMAR(a, b)
retornar a + b
Las funciones pueden recibir cualquier cantidad de parámetros.
PROMEDIO(a, b, c)
retornar (a + b + c) / 3
La instrucción retornar permite devolver un valor.
Llamadas a funciones
Una función se invoca utilizando su nombre y sus argumentos:
resultado = SUMAR(10, 20)
Las llamadas también pueden utilizarse directamente dentro de expresiones:
total = SUMAR(10, 20) * 2
Después de una llamada no debe agregarse un bloque indentado, ya que este podría interpretarse como la definición de una función.
Arreglos como parámetros
Las funciones pueden recibir arreglos.
Para indicar que un parámetro es un arreglo se especifica su número de dimensiones:
MOSTRAR(datos[])
para i = 0 hasta LONG(datos) - 1
escribir datos[i]
Para arreglos de dos dimensiones:
PROCESAR(matriz[][])
Al realizar la llamada, únicamente se utiliza el identificador del arreglo:
MOSTRAR(numeros)
Función PRINCIPAL
Una función llamada PRINCIPAL puede utilizarse como punto de entrada del programa.
PRINCIPAL()
escribir "Inicio del programa"
No es necesario invocarla explícitamente.
PRINCIPAL()
se ejecuta automáticamente como punto de inicio del programa.
Ejemplo funcional de código
Algoritmo clásico de ordenamiento burbuja.

Copiar código
BURBUJA(A)
n = LONG(A)
para i = 0 hasta n - 2
para j = 0 hasta n - i - 2
si A[j] > A[j + 1]
intercambio = A[j]
A[j] = A[j + 1]
A[j + 1] = intercambio
retornar A
PRINCIPAL()
A[0] = 5
A[1] = 2
A[2] = 9
A[3] = 1
A[4] = 6
escribir "Sin ordenar:"
escribir A
escribir "Ordenado:"
A = BURBUJA(A)
escribir A
Diagnósticos
Los errores causados por el código CLRS se muestran en español y conservan la ubicación obtenida del código fuente.
CLRS Runtime
────────────────────────
▶ programa.clrs
✕ Error de sintaxis
Se esperaba «)», pero se encontró «escribir».
Línea 2, columna 5
────────────────────────
Estado: No ejecutado
📚 Biblioteca estándar de CLRS
La biblioteca estándar de CLRS proporciona funciones integradas para el manejo operaciones matemáticas, cadenas, arreglos y archivos.
📁 Archivos
| Función CLRS | Descripción | Retorno |
|---|---|---|
LEER_ARCHIVO(ruta) |
Lee el contenido de un archivo de texto. | Cadena |
EXISTE_ARCHIVO(ruta) |
Verifica si un archivo existe. | Lógico |
PESO_ARCHIVO(ruta) |
Obtiene el tamaño del archivo en bytes. | Número |
CREAR_ARCHIVO(ruta) |
Crea un archivo vacío. | - |
ESCRIBIR_ARCHIVO(ruta, contenido) |
Escribe contenido al final del archivo. | - |
ELIMINAR_ARCHIVO(ruta) |
Elimina un archivo si existe. | - |
🔢 Matemáticas
| Función CLRS | Descripción | Retorno |
|---|---|---|
ABS(x) |
Valor absoluto de un número. | Número |
MIN(a, b) |
Devuelve el menor de dos valores. | Número |
MAX(a, b) |
Devuelve el mayor de dos valores. | Número |
REDONDEA(x) |
Redondea al entero más cercano. | Número |
PISO(x) |
Redondea hacia abajo. | Número |
RAIZ(x) |
Raíz cuadrada. | Número |
RAIZCUB(x) |
Raíz cúbica. | Número |
EXP(x) |
e elevado a x. | Número |
LOGN(x) |
Logaritmo natural. | Número |
LOG10(x) |
Logaritmo base 10. | Número |
LOG2(x) |
Logaritmo base 2. | Número |
SEN(x) |
Seno de un ángulo. | Número |
COS(x) |
Coseno de un ángulo. | Número |
TAN(x) |
Tangente de un ángulo. | Número |
ARC(x) |
Arcoseno. | Número |
ARCOCOS(x) |
Arcocoseno. | Número |
RAD(x) |
Convierte grados a radianes. | Número |
GRAD(x) |
Convierte radianes a grados. | Número |
PI() |
Constante π. | Número |
E() |
Constante e. | Número |
ALEAT(min, max) |
Número aleatorio. | Número |
PROM(x) |
Promedio de un arreglo. | Número |
SUM(x) |
Suma total de un arreglo. | Número |
MED(x) |
Mediana de un conjunto. | Número |
VAR(x) |
Varianza de un conjunto. | Número |
🔤 Cadenas
| Función CLRS | Descripción | Retorno |
|---|---|---|
LONG(x) |
Longitud de una cadena o estructura. | Número |
CAR_EN(cadena, posición) |
Obtiene un carácter en una posición. | Cadena |
SUBCAD(cadena, inicio, fin) |
Extrae una subcadena. | Cadena |
MAYUS(cadena) |
Convierte a mayúsculas. | Cadena |
MINUS(cadena) |
Convierte a minúsculas. | Cadena |
RECORTA(cadena) |
Elimina espacios en blanco. | Cadena |
REEMP(cadena, viejo, nuevo) |
Reemplaza texto. | Cadena |
DIV(cadena, separador) |
Divide en arreglo. | Arreglo |
ES_CAD_NUM(cadena) |
Verifica si es número. | Lógico |
ES_VAC(cadena) |
Verifica si está vacía. | Lógico |
EMP_CON(cadena, texto) |
Verifica prefijo. | Lógico |
TERM_CON(cadena, texto) |
Verifica sufijo. | Lógico |
📦 Arreglos
| Función CLRS | Descripción | Retorno |
|---|---|---|
AGREGA(arreglo, valor) |
Agrega un elemento al final. | Arreglo |
ELIM(arreglo, índice) |
Elimina un elemento. | Arreglo |
INSER(arreglo, índice, valor) |
Inserta en posición. | Arreglo |
INDICE(arreglo, valor) |
Índice de un elemento. | Número |
CONT(arreglo, valor) |
Verifica existencia. | Lógico |
ORDENA(arreglo) |
Ordena el arreglo. | Arreglo |
INVER(arreglo) |
Invierte el arreglo. | Arreglo |
COPIA(arreglo) |
Copia el arreglo. | Arreglo |
UNE(arreglo, separador) |
Une elementos en cadena. | Cadena |
🔩 Tipos
| Función CLRS | Descripción | Retorno |
|---|---|---|
ES_NUM(valor) |
Verifica si un valor es de tipo numérico. | Lógico |
ES_CAD(valor) |
Verifica si un valor es de tipo cadena. | Lógico |
ES_LOG(valor) |
Verifica si un valor es de tipo lógico (booleano). | Lógico |
A_CAD(valor) |
Convierte un valor a una cadena de texto. | Cadena |
A_NUM(valor) |
Convierte un valor a un número. | Número |
A_LOG(valor) |
Convierte un valor a un valor lógico. | Lógico |
⚠️ Errores
| Función CLRS | Descripción | Retorno |
|---|---|---|
LANZAR_ERROR(mensaje) |
Genera un error con un mensaje personalizado e interrumpe la ejecución. | - |
📊 Análisis algorítmico
CLRS Kit Español incluye herramientas para estudiar el comportamiento teórico de un algoritmo directamente desde el código fuente.
El análisis se divide en dos partes:
- Análisis de costo: muestra cómo se construye la función de costo a partir de las instrucciones.
- Análisis de complejidad: simplifica ese costo y determina, cuando es posible, su orden de crecimiento asintótico.
🧮 Análisis de costo
El análisis de costo permite observar cuánto trabajo aporta cada parte de un algoritmo.
Las expresiones se generan automáticamente a partir del Árbol de Sintaxis Abstracta (AST).
| Funcionalidad | Descripción |
|---|---|
| Costo por instrucción | Muestra la expresión de costo asociada a una línea de código. |
| Costo de ciclos | Calcula el número de iteraciones cuando puede determinarse. |
| Costo de condicionales | Representa el trabajo producido por las diferentes ramas. |
| Costo entre funciones | Propaga el costo de funciones llamadas desde otras funciones. |
| Mostrar/Ocultar | Permite activar o esconder las expresiones de costo en el editor. |
Ejemplo:

Copiar código
SUMAR(A[])
total = 0
para i = 0 hasta LONG(A) - 1
total = total + A[i]
retornar total
El analizador puede reconocer que el cuerpo del ciclo se ejecuta aproximadamente n veces y construir una función de costo a partir de sus instrucciones.
Iteraciones
El analizador intenta determinar cuántas veces se ejecuta cada ciclo.
Ciclos para
Reconoce recorridos ascendentes y descendentes:
para i = 0 hasta n - 1
escribir i
para i = n bajando 1
escribir i
Ciclos mientras
También reconoce progresiones sencillas.
Crecimiento aditivo
i = 0
mientras i < n
i = i + 1
El número de iteraciones crece linealmente con n.
Reducción multiplicativa
i = n
mientras i > 1
i = i / 2
El número de iteraciones crece logarítmicamente.
También se reconocen algunas transformaciones equivalentes:
i = PISO(i / 2)
i = REDONDEA(i / 2)
Cuando el costo no puede determinarse
El analizador utiliza un criterio conservador.
Si no puede demostrar cuántas veces se ejecuta una estructura, la cantidad se conserva como desconocida:
?
Esto puede ocurrir, por ejemplo, cuando:
- el límite cambia dentro del ciclo;
- la actualización depende de una condición;
- el paso no puede determinarse;
- no puede demostrarse la terminación;
- intervienen funciones cuyo efecto no puede analizarse.
El analizador evita asumir automáticamente que un ciclo realiza n iteraciones cuando no existe evidencia suficiente.
Llamadas entre funciones
El costo puede propagarse entre funciones propias del programa.
PROCESAR(A[])
ORDENAR(A)
retornar A
El análisis conserva:
- la función llamada;
- los parámetros utilizados;
- los argumentos reales;
- el costo transferido entre funciones.
Los parámetros que no participan en la complejidad no afectan innecesariamente el resultado.
📈 Análisis de complejidad
El análisis de complejidad utiliza las expresiones de costo para estudiar cómo crece el trabajo del algoritmo conforme aumenta el tamaño de la entrada.
El informe puede analizar cada función de manera independiente.
| Funcionalidad | Descripción |
|---|---|
| Informe por función | Muestra el costo, su simplificación y la conclusión asintótica. |
| Mejor caso | Analiza el escenario de menor trabajo cuando puede determinarse. |
| Peor caso | Analiza el escenario de mayor trabajo cuando puede determinarse. |
| CodeLens | Muestra Ver análisis de complejidad sobre las funciones. |
| Ir al código fuente | Permite regresar directamente a la declaración analizada. |
| Verificación | Explica qué evidencia respalda la conclusión obtenida. |
Interpretación de los resultados
El informe distingue diferentes tipos de conclusiones.
| Resultado | Significado |
|---|---|
| Θ(f(n)) | Se determinó una cota ajustada para el crecimiento. |
| O(f(n)) | Se determinó una cota superior. |
| Ω(f(n)) | Se determinó una cota inferior. |
| Bajo condiciones | El resultado depende de ciertas hipótesis sobre la entrada o el algoritmo. |
| Cota estructural conservadora | La conclusión se obtiene únicamente a partir de la estructura demostrable del código. |
| No determinado | No existe evidencia suficiente para justificar una complejidad. |
Cuando el resultado no puede justificarse, la interfaz muestra:
No determinado
Simplificación asintótica
El clasificador puede:
- eliminar constantes;
- ignorar coeficientes constantes;
- combinar productos;
- reconocer ciclos anidados;
- seleccionar términos dominantes;
- conservar diferentes variables cuando existen varias medidas de entrada.
Por ejemplo:
3n² + 5n + 8
se clasifica como:
O(n²)
Complejidad multivariable
Cuando un algoritmo depende de varias entradas independientes, el análisis puede conservar diferentes variables.
Por ejemplo:
PROCESAR(A[], B[])
puede producir una clasificación como:
O(n + m)
donde n representa el tamaño de A y m el tamaño de B.
Complejidades reconocidas
El analizador puede determinar automáticamente muchas familias comunes:
| Complejidad | Soporte | Ejemplo típico |
|---|---|---|
| O(1) | ✅ | Operaciones constantes |
| O(n) | ✅ | Recorrido de un arreglo |
| O(n²) | ✅ | Dos ciclos anidados |
| O(n³) | ✅ | Tres ciclos anidados |
| O(nᵏ) | ✅ | Número fijo de ciclos anidados |
| O(log n) | ✅ | División repetida del tamaño |
| O(n log n) | ✅ | Combinación de trabajo lineal y logarítmico |
| O(2ⁿ) | ✅ | Algunas recurrencias con ramificación constante |
| O(n!) | ✅ | Algunas recurrencias con ramificación variable |
| Recurrencias | ⚠️ Parcial | Depende de que la estructura pueda demostrarse |
Sumatorias y ciclos dependientes
El analizador también puede reconocer algunas sumatorias cuyo número de iteraciones depende del índice.
Por ejemplo:
para i = 1 hasta n
para j = 1 hasta n / i
escribir j
La suma:
n/1 + n/2 + n/3 + ... + n/n
puede clasificarse como:
O(n log n)
Cuando la forma de la sumatoria no puede demostrarse de manera segura, el resultado permanece como No determinado.
Funciones recursivas
Las funciones recursivas se estudian mediante sus relaciones de recurrencia.
El analizador puede reconocer reducciones como:
T(n - 1)
T(n / 2)
2T(n / 2)
T(√n)
y algunas estructuras más complejas.
Según el caso, puede utilizar métodos como:
| Método | Uso principal |
|---|---|
| Sustitución | Reducciones aditivas sencillas |
| Teorema Maestro | Subproblemas del mismo tamaño |
| Akra–Bazzi | Algunas particiones desiguales |
| Raíces características | Algunas recurrencias ramificadas |
| Productos factoriales | Recurrencias donde el número de llamadas depende de n |
Ejemplos que pueden reconocerse:
T(n) = T(n - 1) + O(1)
T(n) = 2T(n / 2) + O(n)
T(n) = T(√n) + O(1)
En el último caso puede obtenerse:
O(log log n)
cuando las condiciones necesarias pueden demostrarse.
Recursión mutua
El analizador también estudia grupos de funciones que se llaman entre sí.
A(n)
B(n - 1)
B(n)
A(n - 1)
Estas relaciones se analizan mediante el grafo de llamadas.
Si el sistema no puede demostrar una reducción válida, un caso base o una familia de recurrencia soportada, el resultado permanece como:
No determinado
Informe de complejidad
El botón Mostrar informe de complejidad algorítmica abre una vista dedicada al análisis de las funciones del documento.

Cada función puede mostrar:
- Función de costo
- Simplificación algebraica
- Conclusión asintótica
- Verificación del resultado
Las expresiones matemáticas se muestran mediante KaTeX.
Cuando intervienen varias funciones, el informe puede mostrar también la cadena de llamadas utilizada para obtener el resultado.
PRINCIPAL
↓
ORDENAR
↓
PARTICIONAR
Desde el informe es posible regresar a la declaración correspondiente mediante Ir al código fuente.
Mejor y peor caso
Cuando la estructura del algoritmo permite distinguir diferentes comportamientos, el informe presenta por separado:
Mejor caso
y
Peor caso
Cada resultado indica además si se trata de:
- una cota ajustada;
- una cota superior o inferior;
- un resultado condicionado;
- una cota conservadora;
- un resultado no determinado.
Alcance del análisis
El análisis es deliberadamente conservador.
Una complejidad sólo se presenta cuando existe evidencia suficiente para justificarla. Algunos algoritmos, ciclos o recurrencias pueden permanecer como No determinado si su comportamiento no puede demostrarse automáticamente.
El análisis automático no sustituye el razonamiento manual. Su objetivo es proporcionar una referencia visual y ayudar a comprender cómo el código se relaciona con su función de costo y su crecimiento asintótico.
🗺️ Generador de diagramas de flujo
El generador de diagramas de flujo convierte automáticamente el código CLRS en una representación visual del flujo del programa.
El diagrama se abre dentro de Visual Studio Code y permanece sincronizado con el archivo mientras trabajas.

Abrir el diagrama
Puedes abrirlo desde:
- Paleta de comandos →
Mostrar diagrama de flujo
El diagrama aparecerá en un panel junto al editor.
Sincronización con el código
El diagrama se actualiza automáticamente cuando modificas el archivo.
También se sincroniza con la posición del cursor:
- La instrucción actual se resalta en el diagrama.
- Al seleccionar un nodo, el editor puede llevarte a su línea correspondiente.
- No es necesario regenerar manualmente el diagrama después de cada cambio.
Esto permite utilizar el diagrama como una representación visual del código mientras programas.
Diagramar sólo una parte del código
Si seleccionas un fragmento antes de abrir el generador, se crea un diagrama únicamente para esa selección.
Esto resulta útil para estudiar:
- una función;
- un ciclo;
- un condicional;
- una sección concreta de un programa grande.
El contenido seleccionado permanece como ámbito del diagrama durante esa sesión.

Elementos compatibles
El generador reconoce las principales estructuras de CLRS.
| Elemento | Soporte |
|---|---|
PRINCIPAL |
✅ |
| Funciones | ✅ |
| Llamadas a funciones | ✅ |
| Asignaciones | ✅ |
leer |
✅ |
escribir |
✅ |
si |
✅ |
sino si |
✅ |
sino |
✅ |
mientras |
✅ |
para |
✅ |
retornar |
✅ |
Las funciones se muestran como subgrafos independientes, facilitando la lectura de programas con varias funciones.
Apariencia
El diagrama puede adaptarse visualmente desde su barra de herramientas.
El tema predeterminado es VS Code, por lo que utiliza los colores del tema activo del editor.
Esto permite que el diagrama se adapte automáticamente a:
- temas claros;
- temas oscuros;
- temas de alto contraste.
También están disponibles otros estilos:
| Tema |
|---|
| VS Code |
| Clásico |
| Moderno |
| Pastel |
| Sobrio |
| Oscuro |

Los cambios se aplican inmediatamente.
Dirección del flujo
Puedes cambiar la orientación del diagrama.
| Dirección | Descripción |
|---|---|
| Vertical | Flujo de arriba hacia abajo |
| Horizontal | Flujo de izquierda a derecha |
La orientación se aplica tanto al flujo principal como a las funciones.

Navegación
El diagrama puede explorarse de forma interactiva.
Entre las acciones disponibles se encuentran:
- acercar y alejar con zoom;
- desplazar el diagrama;
- ajustar todo el contenido al panel;
- centrar el nodo actual;
- abrir una instrucción directamente en el editor;
- navegar entre nodos mediante teclado;
- consultar la línea y columna de una instrucción.
Esto facilita trabajar con diagramas grandes sin perder la referencia del código original.
Buscar nodos
El campo Buscar nodo… permite localizar contenido dentro del diagrama.
La búsqueda puede encontrar:
- texto de instrucciones;
- identificadores;
- tipos de nodo;
- referencias.
No distingue entre mayúsculas, minúsculas o tildes.
Controles disponibles:
| Acción | Control |
|---|---|
| Siguiente resultado | Enter o ↓ |
| Resultado anterior | Mayús + Enter o ↑ |
Las coincidencias se resaltan y la coincidencia activa se centra automáticamente.
Mostrar sólo una parte del flujo
La opción Flujo visible permite seleccionar qué parte del programa quieres visualizar.
Puedes mostrar:
- todo el programa;
- flujo principal;
- flujo global;
- una función concreta.
Cuando una función se muestra de forma aislada, la sincronización con el código sigue funcionando.
Si exportas el diagrama en ese momento, sólo se exportará el flujo visible.
Minimapa
El minimapa muestra una vista general del diagrama.
Permite:
- conocer qué parte del diagrama estás observando;
- seguir el zoom y desplazamiento;
- moverte rápidamente haciendo clic en otra zona.
Puede mostrarse u ocultarse desde la barra de herramientas.
Visualización de la ejecución
El diagrama también puede mostrar el recorrido real de un programa mientras se ejecuta.
Con el diagrama abierto, utiliza:
Ejecutar código CLRS
La ejecución continúa realizándose normalmente en la terminal integrada.
Por lo tanto, características como:
leer;escribir;- errores de ejecución;
mantienen su comportamiento habitual.

Durante la ejecución
El diagrama muestra visualmente el recorrido realizado por el programa.
| Estado | Comportamiento |
|---|---|
| Nodo actual | Se resalta y se centra automáticamente |
| Nodos visitados | Permanecen señalados |
| Ejecución correcta | Se muestra como finalización correcta |
| Error | Se identifica el último nodo alcanzado |
| Interrupción | La ejecución se marca como interrumpida |
Esto permite observar el algoritmo como una secuencia de pasos reales.
Revisar la traza
Después o durante la ejecución puedes revisar el recorrido mediante los controles inferiores.
Entre las acciones disponibles se encuentran:
- ir al primer paso;
- paso anterior;
- reproducir;
- pausar;
- paso siguiente;
- regresar al paso más reciente.
La reproducción admite diferentes velocidades:
0.5×
1×
2×
Cuando estás situado en el paso más reciente, los nuevos eventos pueden seguirse en vivo.
La traza corresponde al código ejecutado
La traza pertenece exactamente a la versión del archivo que fue ejecutada.
Si modificas el código después de la ejecución, la traza anterior se descarta para evitar mostrar pasos que ya no corresponden con el nuevo programa.
El diagrama y el depurador funcionan de manera independiente.
Límite de la traza
Por seguridad, el panel conserva como máximo:
10 000 pasos
Si el programa supera esta cantidad, la ejecución continúa normalmente, pero el diagrama indica que la traza fue limitada.
Exportar el diagrama
Los diagramas pueden exportarse como archivos SVG.
Utiliza:
- Paleta de comandos →
Exportar diagrama de flujo SVG
Después selecciona la ubicación y el nombre del archivo.
El formato SVG puede ampliarse sin perder calidad.
Es especialmente útil para:
- documentación;
- reportes;
- presentaciones;
- tareas;
- proyectos académicos.
Exportación de vistas parciales
Si estás visualizando únicamente una función o un flujo específico, la exportación genera solamente esa parte del diagrama.
Esto permite crear diagramas individuales de funciones sin tener que modificar el código fuente.
Consideraciones
- Los diagramas se generan a partir del Árbol de Sintaxis Abstracta (AST) del programa.
- El código debe ser sintácticamente válido para poder generar el diagrama.
- Las funciones se organizan automáticamente como subgrafos.
- La vista se mantiene sincronizada con el documento mientras trabajas.
- El diagrama de ejecución normal y el depurador funcionan de forma independiente.
- Si el código cambia, las trazas antiguas se descartan para evitar mostrar información incorrecta.
Uso práctico
El generador puede utilizarse principalmente para tres tareas:
| Uso | Para qué sirve |
|---|---|
| Comprender | Visualizar cómo se organiza el flujo del algoritmo |
| Revisar | Seguir condiciones, ciclos, funciones y llamadas |
| Documentar | Exportar diagramas para reportes o proyectos |
El objetivo del generador no es sustituir la lectura del código, sino hacer visible su estructura y su ejecución de una forma más fácil de seguir.
🎮 BROKER.95
BROKER.95 es un videojuego educativo integrado en CLRS Kit Español.
Su objetivo es convertir la práctica de programación en una experiencia basada en contratos, progresión, recompensas, riesgo y aprendizaje. El código continúa escribiéndose normalmente en el editor de Visual Studio Code.
Puedes abrirlo mediante:
- Paleta de comandos →
Jugar BROKER.95 - El botón con icono de mando disponible en documentos
.clrs

CIPHER
Dentro del juego interactúas con CIPHER, una inteligencia artificial que participa como:
- generador de contratos;
- tutor durante la resolución;
- asistente para dudas;
- evaluador de entregas.
CIPHER puede ayudarte a comprender errores y orientar tu solución, pero el progreso del juego depende de los resultados obtenidos al resolver los contratos.

Contratos
Los contratos representan problemas de programación que debes resolver utilizando CLRS.
Cada contrato puede incluir:
- descripción del problema;
- requerimientos;
- casos de prueba;
- recompensa potencial;
- nivel de riesgo.
El flujo principal es:
OBTENER CONTRATO
↓
ACEPTAR
↓
PROGRAMAR EN CLRS
↓
REVISAR
↓
ENTREGAR
↓
RESULTADO Y RECOMPENSA
Los contratos pueden abarcar desde ejercicios elementales hasta problemas algorítmicos más avanzados.
Riesgo y recompensa
Los contratos pueden tener diferentes niveles de riesgo:
| Riesgo | Enfoque general |
|---|---|
| Bajo | Problemas sencillos |
| Medio | Mayor variedad de casos |
| Alto | Soluciones más exigentes |
| Extremo | Problemas algorítmicos avanzados |
Una mejor resolución puede producir una mayor recompensa.
El juego también mantiene elementos como:
- saldo;
- alerta;
- contratos completados;
- contratos fallidos;
- estadísticas;
- progreso.
Aprendizaje
BROKER.95 incluye un modo de aprendizaje estructurado en dos rutas:
| Ruta | Lecciones |
|---|---|
| Programación | 50 |
| Algoritmia | 57 |
Programación está disponible desde el inicio.
Algoritmia se desbloquea después de completar la ruta de Programación.

Ruta de aprendizaje
Cada ruta se presenta como un recorrido progresivo formado por secciones y lecciones.
Las lecciones pueden incluir:
- objetivo;
- explicación;
- ejemplos en CLRS;
- conceptos nuevos;
- notas;
- ejercicios prácticos.
El progreso se conserva y las lecciones se desbloquean de forma secuencial.

Ejercicios educativos
Desde una lección puedes solicitar un ejercicio relacionado con los conocimientos estudiados hasta ese momento.
Los ejercicios:
- mantienen una dificultad reducida;
- utilizan conocimientos ya introducidos;
- evitan conceptos futuros;
- se evalúan principalmente por su funcionamiento;
- pueden recomendar herramientas de CLRS como apoyo, pero nunca exigirlas.
Ayuda durante un contrato
BROKER.95 dispone de varias formas de interactuar con CIPHER.
| Comando | Función |
|---|---|
ai -review |
Revisa tu solución y proporciona orientación |
ai -ask [pregunta] |
Permite hacer una pregunta sobre el contrato y tu código |
ai -push |
Entrega la solución para su evaluación |
ai -ask está pensado para resolver dudas sin entregar ni evaluar todavía el contrato.
Terminal de BROKER.95
El juego incluye una terminal propia para administrar contratos.
Algunos comandos principales son:
| Comando | Acción |
|---|---|
ai -gameinfo |
Explica cómo funciona BROKER.95 |
ai -new |
Solicita un nuevo contrato |
ai -get |
Muestra los contratos disponibles |
ai -read <id> |
Consulta un contrato |
ai -set <id> |
Acepta un contrato |
ai -review |
Solicita una revisión |
ai -ask |
Pregunta a CIPHER |
ai -push |
Entrega la solución |
ai -info |
Muestra el estado actual de la partida |

El código sigue en Visual Studio Code
BROKER.95 no incluye un editor de código independiente.
Los programas se escriben directamente en archivos .clrs utilizando el editor habitual de Visual Studio Code.
Esto permite utilizar junto al juego las demás herramientas de CLRS Kit Español, como:
- diagnósticos;
- ejecución;
- depuración;
- diagramas de flujo;
- análisis algorítmico.
BROKER.95 funciona como una capa de práctica y aprendizaje alrededor del entorno normal de CLRS, no como un sustituto del editor.
Modelos de IA
CIPHER puede utilizar diferentes proveedores de IA o un modelo local.
Entre las opciones disponibles se encuentran:
- OpenAI;
- Groq;
- Gemini;
- DeepSeek;
- Ollama local.
La configuración se realiza desde el propio panel de BROKER.95.
Se recomienda ampliamente un modelo igual o superior a 7B de parámetros para una experiencia rápida y respuestas precisas.
Progreso persistente
La partida conserva automáticamente información como:
- dinero;
- alerta;
- contratos;
- estadísticas;
- progreso educativo;
- mejores resultados.
El progreso de Programación y Algoritmia se mantiene de forma independiente.
Objetivo de BROKER.95
BROKER.95 busca transformar la práctica repetida de programación en una experiencia más motivadora mediante:
APRENDER
↓
RECIBIR UN RETO
↓
PROGRAMAR
↓
COMPROBAR
↓
RECIBIR RETROALIMENTACIÓN
↓
MEJORAR
↓
PROGRESAR
La idea central no es sustituir el aprendizaje tradicional, sino ofrecer un entorno donde practicar programación y algoritmia mediante problemas concretos, progresión y retroalimentación continua.