Orivel Orivel
Abrir menu

Ultimas tareas y discusiones

Explora el contenido benchmark mas reciente de tareas y discusiones. Filtra por genero para centrarte en lo que quieres comparar.

Generos de Comparacion

Lista de Modelos

Programación

Google Gemini 2.5 Pro VS OpenAI GPT-5.2

Implementar un limitador de tasa concurrente con ventana deslizante y colas de prioridad

Diseña e implementa un limitador de tasa (rate limiter) en Python que sea seguro para hilos (thread-safe) y que admita las siguientes características: 1. **Limitación de tasa con ventana deslizante**: En lugar de usar ventanas de tiempo fijas, implementa un algoritmo de ventana deslizante real. Cada cliente (identificado por una clave de tipo cadena) puede realizar como máximo `max_requests` solicitudes dentro de cualquier ventana móvil de `window_seconds` segundos. 2. **Niveles de prioridad**: Cada solicitud tiene un nivel de prioridad (entero 1-5, donde 1 es la prioridad más alta). Cuando se alcanza el límite de tasa para un cliente, las solicitudes de menor prioridad (número mayor) deben rechazarse primero. Específicamente, si llega una nueva solicitud con prioridad P y la ventana está llena, el limitador debe comprobar si existe alguna solicitud en la ventana actual con prioridad estrictamente menor (número mayor) que P. Si es así, se "revoca" la solicitud de prioridad más baja (mayor número) y se admite la nueva solicitud de mayor prioridad. La solicitud revocada debe registrarse para que pueda informarse. Si no existe ninguna solicitud de menor prioridad para revocar, la nueva solicitud se rechaza. 3. **Permiso de ráfaga (Burst Allowance)**: Cada cliente puede opcionalmente tener una asignación de ráfaga `burst` (por defecto 0). Esto permite hasta `burst` solicitudes adicionales por encima de `max_requests` en una ventana, pero sólo si al menos la mitad de la duración de la ventana ha transcurrido desde la primera solicitud del cliente en la ventana actual. 4. **Seguridad para hilos (Thread Safety)**: El limitador de tasa debe ser seguro para uso concurrente desde múltiples hilos. Demuestra esto con un escenario de prueba. 5. **Estadísticas**: El limitador debe rastrear estadísticas por cliente: total de solicitudes admitidas, total rechazadas, total revocadas (removidas por solicitudes de mayor prioridad) y utilización actual de la ventana (como un float de 0.0 a 1.0). Implementa la siguiente interfaz: ```python class RateLimiter: def __init__(self, max_requests: int, window_seconds: float, default_burst: int = 0): ... def set_client_burst(self, client_id: str, burst: int) -> None: """Override burst allowance for a specific client.""" ... def allow(self, client_id: str, priority: int = 3, timestamp: float = None) -> bool: """ Check if a request is allowed. If timestamp is None, use current time. Returns True if the request is admitted, False if rejected. """ ... def get_stats(self, client_id: str) -> dict: """ Return a dict with keys: 'admitted', 'rejected', 'revoked', 'utilization' """ ... def get_revoked_log(self, client_id: str) -> list: """ Return a list of (timestamp, priority) tuples for revoked requests for the given client, in chronological order. """ ... ``` Proporciona una implementación completa y ejecutable junto con un script de demostración que: - Cree un limitador con max_requests=5, window_seconds=10.0, default_burst=2 - Simule una secuencia de solicitudes de dos clientes con prioridades y marcas de tiempo variables que ejerciten todas las características (expiración por ventana deslizante, revocación por prioridad, activación de ráfaga y rechazo) - Imprima las estadísticas y los registros de revocación para cada cliente al final - Incluya una breve prueba multihilo con al menos 4 hilos realizando solicitudes concurrentes Asegúrate de manejar casos límite tales como: - Validación del valor de prioridad (debe ser 1-5) - Solicitudes que llegan exactamente en los límites de la ventana - Múltiples revocaciones en secuencia - Activación de la asignación de ráfaga exactamente en el punto de la mitad de la ventana - IDs de cliente vacíos o desconocidos en consultas de estadísticas

50
19 Mar 2026 14:46

Programación

Google Gemini 2.5 Pro VS Anthropic Claude Sonnet 4.6

Implementar un almacén de clave-valor versionado con consultas históricas

Escriba código que implemente un almacén de clave-valor versionado en memoria que soporte lecturas históricas. El almacén comienza vacío y procesa una secuencia de comandos. Cada comando mutador exitoso crea exactamente un nuevo número de versión global, empezando desde 1. Los comandos de solo lectura no deben crear una versión. Las claves y los valores son cadenas sensibles a mayúsculas y minúsculas sin espacios. Las versiones son enteros positivos. Commands: SET key value Create or overwrite key with value. DELETE key Remove key if it exists. GET key Return the current value for key, or NULL if the key does not exist. GET_VERSION key version Return the value associated with key immediately after the specified global version was created, or NULL if the key did not exist at that version. If version is greater than the latest existing version, treat it as invalid and return INVALID_VERSION. HISTORY key Return all historical states for the key in increasing version order, including deletions, formatted as version:value pairs separated by commas. Use NULL for deleted or absent-after-mutation states. If the key has never been affected by any mutating command, return EMPTY. Input format: The first line contains an integer N, the number of commands. The next N lines each contain one command. Output format: For every GET, GET_VERSION, and HISTORY command, print one line with the result. Behavior details and edge cases: - Every SET always creates a new version, even if the value is unchanged. - Every DELETE always creates a new version, even if the key does not exist. - Versions are global across all keys, not per key. - HISTORY for a key should include only versions where that key was directly affected by SET or DELETE. - If a key was deleted and later set again, both events must appear in HISTORY. - Efficiency matters: assume up to 200000 commands, with many historical queries. Your solution should read from standard input and write to standard output. Include the full working program in one file. You may use any mainstream programming language, but the code should be complete and executable as written.

61
18 Mar 2026 22:33

Enlaces relacionados

X f L