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 Flash VS OpenAI GPT-5.4

Implementar una caché LRU concurrente sin bloqueo global

Implementa una caché LRU (Least Recently Used) segura para subprocesos en Python que admita lecturas y escrituras concurrentes sin usar un bloqueo global para cada operación. Tu implementación debe cumplir los siguientes requisitos: 1. **Interfaz**: La caché debe soportar estas operaciones: - `__init__(self, capacity: int)` — Inicializa la caché con una capacidad máxima dada (entero positivo). - `get(self, key: str) -> Optional[Any]` — Devuelve el valor asociado a la clave si existe (y lo marca como utilizado recientemente), o devuelve `None` si la clave no está en la caché. - `put(self, key: str, value: Any) -> None` — Inserta o actualiza el par clave-valor. Si la caché excede la capacidad después de la inserción, expulsa el elemento menos recientemente usado. - `delete(self, key: str) -> bool` — Elimina la clave de la caché. Devuelve `True` si la clave estaba presente, `False` en caso contrario. - `keys(self) -> List[str]` — Devuelve una lista de todas las claves actualmente en la caché, ordenadas desde la más recientemente usada hasta la menos recientemente usada. 2. **Concurrencia**: La caché debe ser segura para ser usada desde múltiples hilos simultáneamente. Apunta a un diseño que permita que las lecturas concurrentes procedan sin bloquearse entre sí cuando sea posible (por ejemplo, utilizando locks de lectura/escritura, bloqueo fino por fragmentos, o técnicas lock-free). Un mutex global único que serialice cada operación se considera una solución básica pero subóptima. 3. **Corrección bajo contención**: Bajo acceso concurrente, la caché nunca debe devolver datos obsoletos o corrompidos, nunca debe exceder su capacidad indicada y debe mantener un orden LRU consistente. 4. **Casos límite a manejar**: - Capacidad de 1 - `put` con una clave que ya existe (debe actualizar el valor y moverla a la más reciente) - `delete` de una clave que no existe - `put` y `get` concurrentes sobre la misma clave - Evicciones secuenciales rápidas cuando muchos hilos insertan simultáneamente 5. **Pruebas**: Incluye una función de prueba `run_tests()` que demuestre la corrección de todas las operaciones tanto en escenarios mono-hilo como multi-hilo. La prueba multi-hilo debe usar al menos 8 hilos que realicen una mezcla de operaciones `get`, `put` y `delete` sobre claves superpuestas, y debe afirmar que la caché nunca excede la capacidad y que `get` nunca devuelve un valor para una clave que nunca fue insertada. Proporciona tu implementación completa en Python. Usa únicamente la biblioteca estándar (sin paquetes de terceros). Incluye docstrings y comentarios que expliquen tu estrategia de concurrencia y cualquier compensación de diseño que hayas hecho.

34
23 Mar 2026 17:47

Programación

Anthropic Claude Opus 4.6 VS OpenAI GPT-5.4

Almacén de pares clave-valor en memoria con soporte para transacciones

Escribe una clase de Python `InMemoryDB` que implemente un sencillo almacén de datos en memoria de clave-valor con soporte para transacciones anidadas. La clase debe tener los siguientes métodos: - `get(key)`: Devuelve el valor asociado a una clave. Si la clave no existe, debe devolver `None`. - `set(key, value)`: Establece el valor para una clave dada. Si hay una transacción en curso, este cambio solo debe ser visible dentro de esa transacción hasta que se confirme (commit). - `begin()`: Inicia una nueva transacción. Las transacciones pueden anidarse. - `commit()`: Confirma todos los cambios realizados en la transacción actual a la transacción padre (o al almacén principal si es la transacción más externa). Si no hay ninguna transacción activa, debe lanzar un error. - `rollback()`: Descarta todos los cambios realizados en la transacción actual. Si no hay ninguna transacción activa, debe lanzar un error. context: El desafío clave es gestionar el estado a través de transacciones anidadas. Un `rollback` debe deshacer únicamente los cambios realizados en la transacción no confirmada más reciente. Un `commit` debe fusionar los cambios de la transacción actual en el ámbito de la transacción padre. Solo cuando la transacción más externa se confirme, los cambios se vuelven permanentes en el almacén de datos principal. Example usage: ```python db = InMemoryDB() # No transaction print(db.get("a")) # Expected: None db.set("a", 10) print(db.get("a")) # Expected: 10 # Transaction db.begin() db.set("a", 20) print(db.get("a")) # Expected: 20 # Nested transaction db.begin() db.set("a", 30) print(db.get("a")) # Expected: 30 # Rollback nested db.rollback() print(db.get("a")) # Expected: 20 # Commit outer db.commit() print(db.get("a")) # Expected: 20 # Error cases try: db.commit() # No transaction active except Exception as e: print(f"Error: {e}") ```

65
19 Mar 2026 02:35

Programación

Anthropic Claude Sonnet 4.6 VS OpenAI GPT-5.4

Implementar un resolvedor de dependencias en Python

Se le ha encomendado crear un resolvedor de dependencias para un sistema simple de gestión de paquetes. Escriba una función Python `resolve_dependencies(package_definitions, target_package)` que determine el orden correcto de instalación para un paquete dado y sus dependencias. El argumento `package_definitions` es una lista de cadenas. Cada cadena define un paquete y sus dependencias directas en el formato: `'PackageName: Dep1, Dep2, ...'`. Si un paquete no tiene dependencias, el formato es `'PackageName:'`. Su función debe: 1. Analizar las cadenas de entrada para construir un grafo de dependencias. 2. Dado un `target_package`, encontrar todas sus dependencias (incluyendo las transitivas). 3. Devolver una única lista de cadenas que represente el orden de instalación. Esta lista debe estar ordenada topológicamente (una dependencia debe aparecer siempre antes que el paquete que depende de ella). El `target_package` en sí debe ser el último elemento de la lista. La lista no debe contener duplicados. 4. Detectar dependencias circulares. Si se encuentra un ciclo, lanzar un `ValueError` con un mensaje que indique claramente el ciclo (por ejemplo, 'Se detectó una dependencia circular que involucra: A -> B -> A'). 5. Detectar paquetes faltantes. Si un paquete lista una dependencia que no está definida en `package_definitions`, lanzar un `ValueError` con un mensaje como 'Falta la definición del paquete para: C'.

63
18 Mar 2026 20:21

Programación

OpenAI GPT-5.4 VS Anthropic Claude Haiku 4.5

Analizador de archivos de registro para actividad de usuarios

Escribe una función de Python `analyze_logs(log_data)` que toma una única cadena multilínea `log_data` como entrada. Cada línea en la cadena representa una entrada de registro en el formato `[TIMESTAMP] LEVEL: MESSAGE`. La función debe analizar estos registros y devolver un diccionario que resuma los datos. El diccionario resumen debe tener tres claves: 1. `counts_by_level`: Un diccionario donde las claves son los niveles de registro (p. ej., 'INFO', 'WARN', 'ERROR') y los valores son el recuento de registros para ese nivel. 2. `successful_logins`: Una lista de nombres de usuario únicos (cadenas) que iniciaron sesión con éxito. Un inicio de sesión exitoso está indicado por un mensaje como "Usuario 'username' inició sesión...". 3. `failed_login_ips`: Un diccionario donde las claves son direcciones IP (cadenas) y los valores son el recuento de intentos fallidos de inicio de sesión desde esa IP. Un intento fallido de inicio de sesión está indicado por un mensaje como "Intento de inicio de sesión fallido para el usuario 'username' desde la IP 'ip_address'". Tu función debe ser robusta y manejar líneas de registro malformadas o irrelevantes de forma elegante ignorándolas. El análisis de los niveles de registro debe ser insensible a mayúsculas y minúsculas (p. ej., 'info' y 'INFO' deben contarse ambos hacia el total, que debe almacenarse bajo la clave en mayúsculas 'INFO').

80
15 Mar 2026 08:13

Enlaces relacionados

X f L