Skip to content

Repositorio para la participación del Nivel Intermedio de competencia CodExpress

Notifications You must be signed in to change notification settings

ComputerSocietyUN/CodExpress-NivelIntermedio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 

Repository files navigation

CodExpress — Nivel Intermedio (Estructuras + POO)

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).

Flujo de trabajo (fork & PR)

  1. Haz fork y clona tu copia.
  2. Usa un <ALIAS> sin espacios ni acentos (tu usuario de GitHub o nombre-apellido en minúsculas).
  3. Para cada mini-reto: crea un archivo con formato exacto <CODIGO_RETO>_<ALIAS>_v<N>.<ext> (ej.: 2004_maria-perez_v1.py o 2004_maria-perez_v1.java).
  4. Si haces la app: crea 2900_<ALIAS>_app/ con README.md (cómo ejecutar) y, si quieres, src/ y requirements.txt.
  5. Abre un Pull Request a main titulado <ALIAS> — Entrega Nivel Intermedio PRO.

Códigos

  • 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>


Mini-retos (más desafiantes, con variantes “PLUS”)

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ódigoNombreRequisitos POO y reglasEntrada/SalidaArchivoDocs
2001ContactBook (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++
2002Semester 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 · AVGprom=XX.XX · LIST (créditos desc, luego nombre) · IMPORT.2002_<ALIAS>_v1.(py|java|cpp)Decimal · BigDecimal
2003Stack<T> con MinStack/UndoClase 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
2004Queue con métricasClase 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
2005BiDictionary (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
2006WordSearch 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
2007Secuencias: interfaz/abstractaDefine 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
2008Maze BFS con portalesClase 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

Requisitos mínimos por mini-reto

  • 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%.

App integrada (2900) — Organizer 1.0 (POO)

CódigoDebe reutilizarQué agregaEntregablesPuntaje máx.
29002001, 2002, 2003, 2004, 2005Menú 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 ser deque/ArrayDeque/std::deque.

Puntajes — Nivel Intermedio

  • 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%).

Bonificaciones creativas (opcionales, suman — tope +100 pts por equipo)

  • 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.


Anti-IA desde la consigna (verificación integrada)

  • Estructuras/clases obligatorias (ej.: deque/ArrayDeque/std::deque en 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.

Checklist final

  • 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.

Documentación

Python · Java · C++ · deque (Py) · ArrayDeque (Java) · abc · lru_cache · json

clases y funciones.

Flujo de trabajo (fork & PR)

  1. Haz fork de este repo y clónalo.
  2. Usa un <ALIAS> sin espacios ni acentos: tu usuario de GitHub o nombre-apellido en minúsculas.
  3. Para cada mini-reto crea un archivo con formato exacto: <CODIGO_RETO>_<ALIAS>_v<N>.<ext> (ej.: 2004_maria-perez_v1.py o 2004_maria-perez_v1.java).
  4. Si construyes la app, crea 2900_<ALIAS>_app/ con README.md (cómo ejecutar), y si quieres src/ y requirements.txt.
  5. Abre un Pull Request a main con título: <ALIAS> — Entrega Nivel Intermedio.

Códigos (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>


Mini-retos (entrega 7 u 8)

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
2001Agenda 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 / .cppPOO Python · POO Java
2002Agenda 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 · AVGprom=XX.XX · LIST.2002_<ALIAS>_v1.py / .java / .cppdecimal · BigDecimal
2003Pila 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 / .cpplist.pop/append · Stack
2004Cola (Queue) con dequeClase 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 / .cppdeque · ArrayDeque
2005Diccionario 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 / .cppdict · json
2006Sopa 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 / .cppitertools
2007Fibonacci por interfaz/clase abstractaDefine 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 / .cppabc · lru_cache
2008Laberinto (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 / .cppdeque · std::deque

Requisitos mínimos por mini-reto

  • 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%.

App integrada (2900) — Organizer 1.0 (POO)

Código Debe reutilizar Qué agrega Entregables Puntaje máx.
29002001, 2002, 2003, 2004, 2005Un 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 ser deque/ArrayDeque/std::deque.

Puntajes — Nivel Intermedio

  • 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%).

Bonificaciones creativas (opcionales, suman puntos)

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.


Requisitos de precisión y anti-IA desde la consigna

  • Estructuras/clases obligatorias cuando se indiquen (ej.: ArrayDeque/deque en 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.


Checklist final

  • 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.

Documentación

Python · Java · C++ · deque (Py) · ArrayDeque (Java) · abc · lru_cache · json

About

Repositorio para la participación del Nivel Intermedio de competencia CodExpress

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published