Respuesta A: Anthropic Claude Sonnet 4.6
Respuesta: import threading import time class TokenBucketRateLimiter: def __init__(self, capacity, refill_rate): """ Inicializa el limitador de tasa Token Bucket. :param capacity: Número máximo de tokens que puede contener el bucket. :param refill_rate: Número de tokens añadidos al bucket por segundo. """ self.capacity = capacity self.refill_rate = refill_rate self._tokens = capacity # Comienza con el bucket lleno self._last_refill_time = time.monotonic() self._lock = threading.Lock() def _refill(self): """...
Mostrar respuesta completa ▼
Respuesta: import threading import time class TokenBucketRateLimiter: def __init__(self, capacity, refill_rate): """ Inicializa el limitador de tasa Token Bucket. :param capacity: Número máximo de tokens que puede contener el bucket. :param refill_rate: Número de tokens añadidos al bucket por segundo. """ self.capacity = capacity self.refill_rate = refill_rate self._tokens = capacity # Comienza con el bucket lleno self._last_refill_time = time.monotonic() self._lock = threading.Lock() def _refill(self): """ Rellena el bucket según el tiempo transcurrido desde el último relleno. Este método debe llamarse mientras se mantiene el bloqueo. """ now = time.monotonic() elapsed = now - self._last_refill_time tokens_to_add = elapsed * self.refill_rate self._tokens = min(self.capacity, self._tokens + tokens_to_add) self._last_refill_time = now def consume(self, tokens): """ Intenta consumir una cantidad determinada de tokens del bucket. :param tokens: Número de tokens a consumir. :return: True si los tokens se consumieron correctamente, False en caso contrario. """ if tokens <= 0: raise ValueError("El número de tokens a consumir debe ser positivo.") if tokens > self.capacity: # Nunca podrá satisfacerse ni siquiera con un bucket lleno return False with self._lock: self._refill() if self._tokens >= tokens: self._tokens -= tokens return True return False
Resultado
Votos ganadores
3 / 3
Puntuacion media
Puntuacion total
Comentario general
La respuesta A proporciona una implementación altamente correcta y bien estructurada del limitador de velocidad Token Bucket. Su calidad de código es excelente, con docstrings claras y adhesión a las convenciones de Python. Implementa correctamente la seguridad de hilos y maneja explícitamente los casos extremos especificados, lo que la convierte en una solución robusta y mantenible.
Ver detalle de evaluacion ▼
Correccion
Peso 35%El algoritmo para recargar y consumir tokens está implementado correctamente. El límite de capacidad se aplica adecuadamente y la lógica de recarga basada en el tiempo es sólida.
Integridad
Peso 20%La respuesta proporciona una implementación de clase completa con todos los métodos especificados (`__init__`, `consume`) y las importaciones necesarias.
Calidad del codigo
Peso 20%El código es limpio, legible y sigue las convenciones estándar de Python. Incluye excelentes docstrings para los métodos públicos y un comentario claro para el método privado de recarga, lo que mejora significativamente la mantenibilidad.
Valor practico
Peso 15%La implementación utiliza correctamente `threading.Lock` para garantizar la seguridad de hilos, lo que la hace adecuada para entornos concurrentes. Es una solución prácticamente sólida.
Seguimiento de instrucciones
Peso 10%La solución maneja explícitamente todos los casos extremos mencionados en la sección 'Robustez y casos extremos' del prompt: genera `ValueError` para `tokens` no positivos y devuelve `False` inmediatamente si `tokens` excede la `capacity`. El estado inicial también se establece correctamente.
Puntuacion total
Comentario general
Implementa un limitador de cubo de fichas correcto con tiempo monótono, recargas fraccionarias, limitación de capacidad y bloqueo adecuado alrededor de la recarga+consumo. También maneja el importante caso límite de solicitudes mayores que la capacidad devolviendo Falso. Desventaja menor: lanza una excepción en tokens<=0 (dependiente de la política; algunos podrían preferir tratar 0 como un True sin efecto) y no valida las entradas de capacidad/tasa de recarga.
Ver detalle de evaluacion ▼
Correccion
Peso 35%Recarga correcta del cubo de fichas basada en el tiempo monótono transcurrido, limita a la capacidad y realiza la recarga+consumo atómicamente bajo un bloqueo. Utiliza fichas fraccionarias apropiadamente.
Integridad
Peso 20%Proporciona una clase completa con importaciones, un ayudante de recarga interno y un método de consumo; incluye el manejo explícito de tokens>capacidad. Falta validación para los valores de capacidad/tasa de recarga.
Calidad del codigo
Peso 20%Legible, estilo PEP8, con docstrings que explican el comportamiento y las expectativas de bloqueo. Estructura sencilla.
Valor practico
Peso 15%Práctico para uso típico; el Falso inmediato para solicitudes grandes imposibles es útil. Lanzar una excepción en tokens<=0 puede ser inconveniente en algunas integraciones; no hay validación de parámetros para capacidad/tasa de recarga.
Seguimiento de instrucciones
Peso 10%Cumple los requisitos: seguro para hilos, sin bibliotecas de estado externas, métodos y comportamiento correctos, e incluye las importaciones necesarias.
Puntuacion total
Comentario general
La respuesta A proporciona una implementación correcta, completa y bien documentada del limitador de tasa de cubo de tokens. Implementa correctamente el algoritmo con la seguridad de hilos adecuada utilizando threading.Lock, maneja casos extremos como consumir más tokens que la capacidad (devuelve False) y consumir cero o tokens negativos (genera ValueError). El código incluye docstrings claros que explican el propósito y los parámetros de cada método. Utiliza time.monotonic() para un seguimiento fiable del tiempo. El código es limpio, legible y sigue bien las convenciones de Python.
Ver detalle de evaluacion ▼
Correccion
Peso 35%Implementa correctamente el algoritmo del cubo de tokens con el cálculo de recarga adecuado, el límite de capacidad y las operaciones de consumo atómicas. Maneja el caso extremo de solicitar más tokens que la capacidad devolviendo False de forma temprana. Genera ValueError para solicitudes de tokens no positivas.
Integridad
Peso 20%Cubre los __init__, consume y seguridad de hilos requeridos. Maneja casos extremos: tokens cero/negativos (ValueError), tokens que exceden la capacidad (devuelve False). Comienza con un cubo lleno. Incluye todas las importaciones necesarias.
Calidad del codigo
Peso 20%Bien documentado con docstrings claros para la clase y cada método. Se proporcionan descripciones de los parámetros. El código es limpio, legible y sigue las convenciones de PEP 8. Se señala claramente que el método privado _refill requiere que el bloqueo esté activo.
Valor practico
Peso 15%Listo para usar en escenarios de producción. El retorno temprano para tokens que exceden la capacidad es una optimización práctica. El ValueError para entradas inválidas ayuda en la depuración. Utiliza time.monotonic() para una temporización fiable.
Seguimiento de instrucciones
Peso 10%Sigue todas las instrucciones: implementa la clase con el nombre especificado, __init__ con capacidad y tasa de recarga, método consume que devuelve True/False, seguridad de hilos con threading.Lock, e incluye las importaciones necesarias. Proporciona una implementación completa de la clase según lo solicitado.