Notebook de algoritmos y estructuras de datos del equipo "Dónde estás CR7" para competencias de programación competitiva ACM ICPC.
Este proyecto genera automáticamente un PDF a partir de snippets de código C++ organizados por categorías, optimizado para llevar impreso a competencias, con soporte para impresión en formato de cuadernillo (libro).
-
Python 3.7+
- Descargar desde: https://www.python.org/downloads/
-
MiKTeX (Distribución LaTeX para Windows)
- Descargar desde: https://miktex.org/download
- Durante la instalación, seleccionar "Install missing packages on-the-fly: Yes"
-
Librerías Python:
pip install pypdf
DondeEst-sCR7/
│
├── Snippets/ # Carpeta principal de códigos
│ ├── Algos/ # Categoría de algoritmos
│ │ ├── Binary Search.cpp
│ │ ├── Binary Search.template # Descripción opcional del algoritmo
│ │ └── ...
│ ├── Graph/ # Categoría de grafos
│ │ ├── BFS.cpp
│ │ ├── DFS.cpp
│ │ ├── folder.template # Descripción opcional de la carpeta
│ │ └── ...
│ ├── DP/ # Programación dinámica
│ └── ...
│
├── img/ # Imágenes (ej: portada)
│ └── cr7.jpg
│
├── generate_pdf.py # Script principal para generar PDF
├── create_booklet.py # Script para crear formato cuadernillo
├── config.py # Configuración (opcional)
├── preamble.tex # Preámbulo LaTeX (auto-generado)
├── requirements.txt # Dependencias Python
│
├── Snippets.tex # Archivo LaTeX generado
├── Snippets.pdf # PDF final generado
└── Snippets_Booklet.pdf # PDF en formato cuadernillo
-
Clonar o copiar el repositorio
git clone https://github.com/zlarosav/DondeEst-sCR7.git cd DondeEst-sCR7
-
Instalar dependencias Python
pip install -r requirements.txtO manualmente:
pip install pypdf
-
Instalar MiKTeX
- Descargar e instalar desde https://miktex.org/download
- Asegurarse de que
pdflatexesté en el PATH del sistema
-
Instalar Python 3.7+
- https://www.python.org/downloads/
- Durante la instalación, marcar "Add Python to PATH"
-
Instalar MiKTeX
- https://miktex.org/download
- Configurar para instalar paquetes automáticamente
-
Copiar el proyecto completo
- Copiar toda la carpeta
DondeEst-sCR7/al nuevo PC
- Copiar toda la carpeta
-
Instalar dependencias
cd DondeEst-sCR7 pip install pypdf
Para agregar algoritmos o técnicas al notebook:
- Navega a la carpeta
Snippets/ - Crea una carpeta para la categoría (si no existe):
Snippets/MiCategoria/ - Agrega tus archivos
.cppcon las implementaciones - (Opcional) Crea archivos
.templatepara descripciones:folder.template: Descripción de la categoría completaNombreArchivo.template: Descripción del algoritmo (complejidad, uso, etc.)
Ejemplo de estructura:
Snippets/
└── Graph/
├── BFS.cpp
├── BFS.template # "BFS - O(V+E) - Búsqueda en anchura"
├── Dijkstra.cpp
└── folder.template # "Algoritmos de teoría de grafos"
Ejemplo de .template para algoritmo:
Dijkstra - O((V+E)log V)
Encuentra el camino más corto desde un nodo fuente a todos los demás nodos.
Requiere aristas con pesos no negativos.
python generate_pdf.pyEsto creará:
preamble.tex(si no existe)Snippets.tex(código LaTeX generado)Snippets.pdf(PDF final en formato vertical, una columna)
Salida esperada:
✅ Encontrado pdflatex en: C:\...\pdflatex.exe
PDF generado exitosamente!
python create_booklet.pySalida esperada:
Hoja 1: Anverso [36, 1], Reverso [2, 35]
Hoja 2: Anverso [34, 3], Reverso [4, 33]
...
✅ Cuadernillo creado exitosamente!
📄 Páginas originales: 33
📄 Páginas en cuadernillo: 36 (con 3 páginas en blanco)
📋 Hojas a imprimir: 9 (imprimir ambas caras)
💾 Guardado en: Snippets_Booklet.pdf
Esto creará Snippets_Booklet.pdf con 2 páginas por cara (4 por hoja), ordenadas para formar un libro al doblarlas.
Edita generate_pdf.py en la sección PDFConfig:
@dataclass
class PDFConfig:
title: str = "Mi Título"
author: str = "Mi Nombre"
date_format: str = "%d/%m/%Y"En generate_pdf.py, dentro del método ensure_preamble():
basicstyle=\ttfamily,
keywordstyle=\color{darkblue}\ttfamily, # Palabras clave (int, for, etc)
stringstyle=\color{magenta}\ttfamily, # Cadenas de texto
commentstyle=\color{OliveGreen}\ttfamily, # Comentarios //
morecomment=[l][\color{Purple}]{\#}, # Directivas #define, #includeColores disponibles: darkblue, OliveGreen, Purple, magenta, RedOrange, cyan, red, blue, green, etc.
En generate_pdf.py, sección de márgenes:
%%% Margenes
\addtolength{\textheight}{1.5in} # Altura del texto
\addtolength{\topmargin}{-0.75in} # Margen superior
\addtolength{\textwidth}{2.0in} # Ancho del texto
\addtolength{\oddsidemargin}{-1.0in} # Margen izquierdoReemplaza img/cr7.jpg con tu propia imagen, o edita generate_pdf.py:
lines.append("\\centering{\\includegraphics[width=5.5cm]{img/tu_imagen.jpg}}\\\\[0.5cm]\n")El formato cuadernillo está optimizado para llevar el notebook impreso a competencias de manera compacta y fácil de consultar.
-
Abrir
Snippets_Booklet.pdf -
Configurar impresora:
- Modo: Doble cara (o imprimir impares, luego voltear e imprimir pares)
- Escala: 100% o "Tamaño real" (sin ajustar a la página)
- Orientación: Vertical/Portrait
-
Imprimir todas las páginas
-
Apilar las hojas en orden (página 1 arriba, última abajo)
-
Doblar todo el conjunto por la mitad verticalmente
-
Grapar en el centro del doblez (donde se pliega)
Un cuadernillo donde las páginas están en orden correcto (1, 2, 3, 4...) cuando hojeas el libro.
Solución:
- Verifica que MiKTeX esté instalado
- Agrega MiKTeX al PATH del sistema:
- Buscar la ubicación de
pdflatex.exe(usualmente enC:\Program Files\MiKTeX\miktex\bin\x64\) - Agregar esa ruta a las variables de entorno PATH
- Buscar la ubicación de
Solución:
pip install pypdfEl script incluye sanitización automática que convierte tildes a caracteres ASCII. Si deseas mantener los caracteres especiales, edita la función sanitize_text() en generate_pdf.py.
Ajusta los márgenes en generate_pdf.py (ver sección Personalización).
Si MiKTeX no instaló automáticamente los paquetes necesarios:
- Abre MiKTeX Console
- Ve a Packages
- Busca e instala:
minted,listings,xcolor,fancyhdr,lastpage
Esto es normal. Si tu documento tiene 33 páginas, se redondea a 36 (múltiplo de 4). Las páginas 34, 35 y 36 quedan en blanco y aparecen al inicio/final del cuadernillo por diseño.
- Codificación: Los archivos
.cppse procesan con UTF-8, CP1252 y Latin-1 como fallback - Formato de código: El resaltado de sintaxis usa el paquete LaTeX
listingscon tema personalizado - Páginas en blanco: El cuadernillo agrega automáticamente páginas en blanco para completar múltiplos de 4
- Uso en competencias: El PDF generado cumple con las reglas típicas de ACM ICPC que permiten material impreso
"Dónde estás CR7" - Equipo ACM ICPC