Tiempo: 3 horas · Meta: completar 7 u 8 mini-retos y, si te alcanza, una app integrada (código 2900) que reutilice tus propias clases y funciones. Lenguajes: Python, Java o C++ (usando POO).
- Haz fork y clona tu copia.
- Usa un <ALIAS> sin espacios ni acentos (tu usuario de GitHub o
nombre-apellidoen minúsculas). - Para cada mini-reto: crea un archivo con formato exacto
<CODIGO_RETO>_<ALIAS>_v<N>.<ext>(ej.:2004_maria-perez_v1.pyo2004_maria-perez_v1.java). - Si haces la app: crea
2900_<ALIAS>_app/conREADME.md(cómo ejecutar) y, si quieres,src/yrequirements.txt. - Abre un Pull Request a
maintitulado <ALIAS> — Entrega Nivel Intermedio PRO.
- Mini-retos: 2001–2008 (elige 7 u 8)
- App integrada: 2900 (Organizer 1.0 — POO)
Nombre de archivo obligatorio: <CODIGO_RETO>_<ALIAS>_v<N>.<ext>
Usa solo librerías estándar. Al final de cada archivo agrega, en comentarios, 3 pruebas (entrada → salida esperada). La salida se compara literalmente. Cuando se pida una estructura/clase, debes implementarla.
| Código | Nombre | Requisitos POO y reglas | Entrada/Salida | Archivo | Docs |
|---|---|---|---|---|---|
| 2001 | ContactBook (CRUD, POO) | Clases: Contact y ContactBook. Alta/baja/búsqueda case-insensitive (nombre/email) y listado con orden estable apellido,nombre. Email duplicado → ERROR:DUP. PLUS: persistencia JSON de la lista y un índice por dominio de email @dominio para LIST domain=gmail.com. | Comandos stdin: ADD nombre;apellido;email;tel · DEL email · FIND texto · LIST (o LIST domain=...). LIST imprime apellido,nombre <email> tel. | 2001_<ALIAS>_v1.(py|java|cpp) | POO Py · POO Java · POO C++ |
| 2002 | Semester GPA (POO + precisión) | Clases: Course y Semester. Promedio ponderado con Decimal/BigDecimal (2 decimales, ROUND_HALF_UP). Duplicado por nombre → ERROR:DUP. PLUS: aceptar importación CSV simple desde stdin (nombre,creditos,nota) con IMPORT y reportar cuántas filas válidas/erróneas. | Comandos: ADD nombre;creditos;nota · AVG → prom=XX.XX · LIST (créditos desc, luego nombre) · IMPORT. | 2002_<ALIAS>_v1.(py|java|cpp) | Decimal · BigDecimal |
| 2003 | Stack<T> con MinStack/Undo | Clase genérica Stack<T> con push/pop/peek/size O(1). Vacía → ERROR:EMPTY. Documenta complejidad. PLUS (elige uno): (a) MinStack que devuelve mínimo en O(1) o (b) par UndoStack/RedoStack con UNDO/REDO sobre una pila principal. | Operaciones por línea: PUSH x · POP · PEEK · SIZE (+ MIN o UNDO/REDO si haces PLUS). | 2003_<ALIAS>_v1.(py|java|cpp) | list.pop/append |
| 2004 | Queue con métricas | Clase Queue implementada con deque/ArrayDeque/std::deque. ENQUEUE id @timestamp, DEQUEUE @timestamp. Reporta wait_avg y len. Vacía → ERROR:EMPTY. PLUS: rate-limit por ventana de 60s (máx K ops; K se pasa por SETK K). | Operaciones por línea. STATS imprime len=L wait_avg=SEGUNDOS (entero). | 2004_<ALIAS>_v1.(py|java|cpp) | deque · ArrayDeque |
| 2005 | BiDictionary (bijección estricta) | Clase BiDictionary con dos mapas sincronizados (es↔en). ADD es:en (minúsculas normalizadas con casefold/toLowerCase), ?palabra, LIST (ordenado por es). Reasignar palabra usada (en cualquier lado) → ERROR:DUP. PLUS: BULKADD (varias en un bloque): carga todo o nada; si hay conflicto imprime ERROR:BULK y no cambia estado. | Consulta imprime es=... en=... o NOTFOUND. EXPORT opcional a JSON. | 2005_<ALIAS>_v1.(py|java|cpp) | json |
| 2006 | WordSearch PRO (8 direcciones) | Clase Grid con find(word). Busca en 8 direcciones con orden fijo N,NE,E,SE,S,SW,W,NW. PLUS: aceptar una lista de palabras y devolver todas las ubicaciones en orden estable por palabra y por coordenada inicial. | Entrada: matriz A-Z (sin espacios), línea vacía, palabra(s). Salida: r,c del primer carácter o NO; en PLUS, múltiples líneas palabra:r,c. | 2006_<ALIAS>_v1.(py|java|cpp) | for |
| 2007 | Secuencias: interfaz/abstracta | Define interfaz Sequence (Java) o clase abstracta (Python abc.ABC) con compute(n). Implementa FibIter (iterativa) y FibFast (fast-doubling o recursiva con @lru_cache/memo). PLUS: añade Tribonacci que implementa la misma interfaz. Imprime tiempo/llamadas. | Entrada: n. Salida: fib_iter=... fib_fast=... t_ms=... (calls=... si aplica). En PLUS: trib=.... | 2007_<ALIAS>_v1.(py|java|cpp) | abc · lru_cache |
| 2008 | Maze BFS con portales | Clase Maze con shortestPath(). Mapa con #=muro, .=libre, S=inicio, E=salida, y letras A..Z que representan portales pareados (mismo carácter = teletransporte O(1)). Vecinos en orden fijo U,D,L,R y luego teletransporte si aplica. PLUS: imprime también la ruta (U/D/L/R y T para teleporte). | Entrada: matriz rectangular. Salida base: dist=K (o NO). PLUS: línea adicional con la secuencia. | 2008_<ALIAS>_v1.(py|java|cpp) | deque |
- E/S exacta (comparación literal).
- 3 pruebas (entrada → salida) en comentarios al final del archivo.
- Solo librería estándar.
- POO explícita: clases, métodos y cuando aplique, interfaz/abstracta.
- Nomenclatura exacta del archivo. Nombre incorrecto: −5%.
| Código | Debe reutilizar | Qué agrega | Entregables | Puntaje máx. |
|---|---|---|---|---|
| 2900 | 2001, 2002, 2003, 2004, 2005 | Menú en consola que integra ContactBook, Semester, Stack (para deshacer CRUD) y Queue (turnos). Reuso real de tus clases (importa/instancia, no copies). Manejo consistente de errores. | Carpeta 2900_<ALIAS>_app/ con README.md (cómo correr, qué módulos integra) y, si quieres, src/. | 180 |
- Organiza en módulos/paquetes; evita “monolitos”.
- Incluye un diagrama textual de clases en el README.
- La opción “deshacer” debe usar tu
Stack(2003). La cola (2004) debe serdeque/ArrayDeque/std::deque.
- Mini-reto (máx. 90 pts): funciona (60%) · casos borde / 3 pruebas (20%) · diseño POO/claridad (10%) · defensa breve (10%).
- App 2900 (máx. 180 pts): integración (50%) · cohesión/reuso (20%) · manejo de errores (20%) · README (10%).
- GUI real para 2900 (Tkinter Python / Swing o JavaFX en Java / Qt o FLTK en C++): +30 pts (formularios para contactos, cursos y turnos; usa tus clases debajo).
- TUI navegable (menús de texto tipo curses): +15 pts.
- Persistencia en 2900 (guardar/cargar JSON o archivo plano sin romper la CLI): +15 pts.
- Tests automatizados (unittest/JUnit/asserts) con ≥6 casos cubriendo errores y duplicados: +10 pts.
- Import/Export robusto en 2005 con merge sin duplicados y reporte de conflictos: +10 pts.
- PLUS implementados en al menos 3 mini-retos distintos: +20 pts.
Nota: Evita dependencias pesadas. Si tu GUI no compila en mesa, adjunta capturas/GIF + binario. La bonificación se evalúa como demo siempre que la lógica sea la tuya.
- Estructuras/clases obligatorias (ej.:
deque/ArrayDeque/std::dequeen 2004; interfaz/abstracta en 2007). - Orden y formato deterministas (direcciones fijas en 2006; vecinos U,D,L,R en 2008; mensajes exactos
ERROR:DUP,ERROR:EMPTY). - Precisión controlada con Decimal/BigDecimal en 2002.
- Defensa y edición en vivo (≤2 min): se pedirá ajustar formato o añadir un caso borde.
- 7 u 8 mini-retos con nombres correctos:
200x_<ALIAS>_vN.(py|java|cpp). - 3 pruebas en comentarios por archivo.
- Si hiciste la app:
2900_<ALIAS>_app/+README.md+ menú funcional (o GUI/TUI si tomaste bonificación). - PR:
<ALIAS> — Entrega Nivel Intermedio PRO.
Python · Java · C++ · deque (Py) · ArrayDeque (Java) · abc · lru_cache · json
clases y funciones.- Haz fork de este repo y clónalo.
- Usa un <ALIAS> sin espacios ni acentos: tu usuario de GitHub o
nombre-apellidoen minúsculas. - Para cada mini-reto crea un archivo con formato exacto:
<CODIGO_RETO>_<ALIAS>_v<N>.<ext>(ej.:2004_maria-perez_v1.pyo2004_maria-perez_v1.java). - Si construyes la app, crea
2900_<ALIAS>_app/conREADME.md(cómo ejecutar), y si quieressrc/yrequirements.txt. - Abre un Pull Request a
maincon título: <ALIAS> — Entrega Nivel Intermedio.
- Mini-retos: 2001–2008 (elige 7 u 8).
- App integrada: 2900 (Organizer 1.0 — POO).
Nombre de archivo obligatorio: <CODIGO_RETO>_<ALIAS>_v<N>.<ext>
Lenguajes permitidos: Python, Java o C++ (usando POO). Usa solo librerías estándar. Al final de cada archivo agrega, en comentarios, 3 pruebas (entrada → salida esperada). La salida se compara literalmente (cuida espacios y saltos de línea). Cuando se pida una estructura o clase, debes implementarla.
| Código | Nombre | Qué se espera (POO y verificación) | Entrada / Salida | Archivo | Docs |
|---|---|---|---|---|---|
| 2001 | Agenda de contactos (CRUD, POO) | Clase Contact (nombre, apellido, email, tel) + clase ContactBook con add, delete, find, list. Búsqueda case-insensitive por nombre o email. Orden estable por apellido, nombre. Email duplicado → ERROR:DUP. En Java: sobrescribe equals/hashCode por email; en Python/C++ documenta la clave única. | Comandos por stdin: ADD nombre;apellido;email;tel · DEL email · FIND texto · LIST. LIST: apellido,nombre <email> tel. | 2001_<ALIAS>_v1.py / .java / .cpp | POO Python · POO Java |
| 2002 | Agenda académica (POO + promedio ponderado) | Clase Course (nombre, créditos, nota) y clase Semester con add, avg, list. Promedio ponderado con Decimal/BigDecimal (2 decimales, ROUND_HALF_UP). Duplicados por nombre → ERROR:DUP. LIST: créditos desc, luego nombre. | Comandos: ADD nombre;creditos;nota · AVG → prom=XX.XX · LIST. | 2002_<ALIAS>_v1.py / .java / .cpp | decimal · BigDecimal |
| 2003 | Pila genérica (Stack<T>) | Clase Stack<T> con push, pop, peek, size. O(1) por operación (lista al final / std::vector). Vacía en pop/peek → ERROR:EMPTY. Documenta complejidad en docstring/Javadoc. | Una operación por línea: PUSH x · POP · PEEK · SIZE. Imprime resultado de POP/PEEK/SIZE. | 2003_<ALIAS>_v1.py / .java / .cpp | list.pop/append · Stack |
| 2004 | Cola (Queue) con deque | Clase Queue con enqueue, dequeue, front, length. Implementación obligatoria con collections.deque (Python) / ArrayDeque (Java) / std::deque (C++). Vacía en dequeue/front → ERROR:EMPTY. No se acepta list.pop(0) por costo O(n). | Comandos: ENQUEUE x · DEQUEUE · FRONT · LENGTH. Imprime resultado de DEQUEUE/FRONT/LENGTH. | 2004_<ALIAS>_v1.py / .java / .cpp | deque · ArrayDeque |
| 2005 | Diccionario ES↔EN (bidireccional, POO) | Clase BiDictionary con dos mapas sincronizados (es→en y en→es). Comandos: ADD es:en (minúsculas); ?palabra consulta en ambas direcciones; LIST ordenado por clave es; EXPORT opcional a JSON. Reasignar palabra usada (en cualquier lado) → ERROR:DUP. Normaliza con casefold() (Py) / toLowerCase() (Java). | Consulta: es=... en=... o NOTFOUND. | 2005_<ALIAS>_v1.py / .java / .cpp | dict · json |
| 2006 | Sopa de letras (WordSearch) | Clase Grid con método find(word) que busca en 8 direcciones (N, NE, E, SE, S, SW, W, NW). Devuelve primera coincidencia siguiendo barrido por filas. Coordenadas 0-based. | Entrada: matriz A-Z (sin espacios), línea vacía, palabra. Salida: r,c o NO. | 2006_<ALIAS>_v1.py / .java / .cpp | itertools |
| 2007 | Fibonacci por interfaz/clase abstracta | Define interfaz Sequence (Java) o clase abstracta (Python abc.ABC) con compute(n). Implementa RecursiveFib con memoización (@lru_cache/map) y IterativeFib. Deben coincidir; imprime calls= de la recursiva. 0 ≤ n ≤ 45. | Entrada: n. Salida: rec=... it=... calls=.... | 2007_<ALIAS>_v1.py / .java / .cpp | abc · lru_cache |
| 2008 | Laberinto (Maze BFS, POO) | Clase Maze que parsea mapa (#=muro, .=libre, S=inicio, E=salida) y shortestPath() con BFS. Imprime dist=K y ruta con movimientos en orden fijo U,D,L,R. Si no hay camino: NO. | Entrada: matriz rectangular. Salida: dist=K y, en la siguiente línea, la secuencia; o NO. | 2008_<ALIAS>_v1.py / .java / .cpp | deque · std::deque |
- E/S exacta: la comparación es literal.
- 3 pruebas (entrada → salida) en comentarios al final del archivo.
- Solo librería estándar.
- POO explícita: clases, métodos y, cuando se pida, interfaz/abstracta.
- Nomenclatura exacta del archivo. Nombre incorrecto: −5%.
| Código | Debe reutilizar | Qué agrega | Entregables | Puntaje máx. |
|---|---|---|---|---|
| 2900 | 2001, 2002, 2003, 2004, 2005 | Un menú en consola que integra ContactBook, Semester, Stack (para “deshacer” CRUD) y Queue (turnos). Reuso real de tus clases (importa/instancia, no copies). Manejo básico de errores con mensajes consistentes. | Carpeta 2900_<ALIAS>_app/ con README.md (cómo correr, qué módulos integra) y, si quieres, src/. | 180 |
- Organiza tus clases en módulos/paquetes; evita “monolitos”.
- Incluye un diagrama textual de clases en el README.
- La opción “deshacer” debe usar tu
Stack(2003). La cola (2004) debe serdeque/ArrayDeque/std::deque.
- Mini-reto (máx. 90 pts): funciona (60%) · casos borde / 3 pruebas (20%) · diseño POO/claridad (10%) · defensa breve (10%).
- App 2900 (máx. 180 pts): integración (50%) · cohesión/reuso (20%) · manejo de errores (20%) · README (10%).
Se suman al total del equipo: tope +80 pts. No sustituyen los requisitos de base.
- GUI real para la app 2900 (ventanas y formularios para Contactos, Cursos y Turnos) con Tkinter (Python, estándar) o Swing/JavaFX (Java) o Qt/FLTK (C++): +30 pts. Debe respetar la lógica de tus clases y permitir alta/baja/consulta.
- TUI mejorada (interfaz de texto con menús/navegación, p. ej., curses en Python): +15 pts.
- Persistencia simple (guardar/cargar contactos y cursos en JSON o archivo plano, sin romper la CLI): +15 pts.
- Tests automatizados (Python unittest / Java JUnit / C++ simple con asserts) con al menos 6 casos que cubran errores y duplicados: +10 pts.
- Export/Import en 2005 (BiDictionary) a JSON con validación y merge sin duplicados: +10 pts.
Notas: Evita dependencias pesadas. Si usas JavaFX/Qt y no compila en mesa, adjunta GIF o capturas + binario/ejecutable; la bonificación se evalúa como “demo” siempre que la lógica siga siendo la tuya.
- Estructuras/clases obligatorias cuando se indiquen (ej.:
ArrayDeque/dequeen 2004; interfaz/abstracta en 2007). - Orden y formato deterministas (ej.: direcciones fijas en 2006, vecinos U,D,L,R en 2008).
- Gramática de comandos exacta y mensajes de error literales (
ERROR:DUP,ERROR:EMPTY). - Complejidad documentada en docstring/Javadoc de 2003/2004.
En la revisión se puede pedir una edición en vivo (≤2 min) para ajustar formato, añadir caso borde o modificar una clase. Debes poder hacerlo sin rehacer todo.
- 7 u 8 mini-retos con nombres correctos:
200x_<ALIAS>_vN.(py|java|cpp). - 3 pruebas en comentarios por archivo.
- Si hiciste la app: carpeta
2900_<ALIAS>_app/+README.md+ menú funcional (o GUI/TUI si aplicaste bonificación). - Pull Request:
<ALIAS> — Entrega Nivel Intermedio.
Python · Java · C++ · deque (Py) · ArrayDeque (Java) · abc · lru_cache · json