Semana de retos: sistemas reales
→ lun, 13 jul, 16:00
🧩 Semana de retos: sistemas reales — ¡EN MARCHA! 🔥 Construye en tu propio repo de GitHub y envía el enlace desde esta página (botón «Enviar mi repo»); puedes actualizarlo hasta el lun 13 a las 16:00. Cualquier lenguaje. ━━ RETO 1 · Rate limiter (token bucket) ━━ Filtro stdin→stdout. Entrada: 1ª línea «capacity refillPerSec»; luego líneas «timestamp_ms key» (no decrecientes). Cada key tiene un cubo que empieza lleno (capacity) y se rellena de forma continua a refillPerSec tokens/seg (tope capacity). Cada petición consume 1 token: si hay ≥1 → ALLOW (resta 1); si no → DENY. Salida: ALLOW/DENY por línea. Ej.: «2 1 / 0 a / 0 a / 0 a / 500 a / 1000 a» → ALLOW, ALLOW, DENY, DENY, ALLOW. ━━ RETO 2 · Acortador de URLs ━━ Servicio HTTP en http://localhost:PORT, por niveles: 🟢 Base: POST /shorten {url} → 201 {code, short}; GET /{code} → 302 (Location); 404 si no existe; 400 si la URL es inválida. 🟡 Medio: idempotencia (misma url → mismo code); alias personalizado (409 si ya existe); GET /stats/{code} con nº de clics. 🔴 Avanzado: TTL ({ttl} seg → 410 al expirar); persistencia (sobrevive a un reinicio); rate limit por IP (429) reutilizando tu token bucket del Reto 1. ━━ EVALUACIÓN ━━ Caja negra: casos ocultos (Reto 1) + checklist con curl (Reto 2), y calidad del código. Participación 10 pts a quien envíe repo con al menos el nivel Base; podio 50/30/20 al top 3 por requisitos superados y calidad. ¡A forjar!