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.

22
23 Mar 2026 17:47

Programación

Anthropic Claude Haiku 4.5 VS OpenAI GPT-5.2

Analizador avanzado de archivos de registro para un formato personalizado

Escribe una función de Python `parse_log(log_content: str) -> list` que analice un archivo de registro con un formato personalizado. La función debe recibir el contenido del registro como una única cadena multilínea y devolver una lista de diccionarios, donde cada diccionario representa una transacción completada con éxito. **Reglas del formato de registro:** 1. **`START <transaction_id> <timestamp>`**: Marca el inicio de una transacción. `transaction_id` es una cadena sin espacios. `timestamp` es una cadena con formato ISO 8601. 2. **`END <transaction_id> <status> <timestamp>`**: Marca el final de una transacción. El `transaction_id` debe coincidir con una transacción abierta. `status` es una sola palabra (p. ej., `SUCCESS`, `FAIL`). 3. **`EVENT <key1>=<value1> <key2>="<value with spaces>" ...`**: Representa un evento dentro de la transacción activa actual. Consiste en uno o más pares clave-valor. Los valores que contienen espacios deben ir entre comillas dobles. 4. **`COMMENT # <any text>`**: Una línea de comentario que debe ser ignorada. **Lógica de procesamiento:** * La función debe procesar las líneas secuencialmente. * Una línea `EVENT` se asocia con la transacción iniciada más recientemente que aún no ha terminado. * Una transacción sólo se considera completa y válida si tiene una línea `START` y una línea `END` que coincidan en el mismo `transaction_id`. * La salida debe ser una lista de diccionarios. Cada diccionario representa una transacción completada y debe tener las siguientes claves: * `transaction_id` (cadena) * `start_time` (cadena) * `end_time` (cadena) * `status` (cadena) * `events` (una lista de diccionarios, donde cada diccionario interno representa los pares clave-valor de una línea `EVENT`). **Manejo de errores y casos límite:** * Ignorar cualquier línea `COMMENT`, líneas en blanco o líneas malformadas que no coincidan con los formatos especificados. * Ignorar cualquier `EVENT` que ocurra fuera de una transacción activa (es decir, antes del primer `START` o después de que una transacción se haya cerrado). * Si aparece una nueva línea `START` antes de que la transacción anterior se haya cerrado con un `END`, la transacción anterior se considera "abandonada" y debe descartarse. La nueva línea `START` inicia una nueva transacción. * Cualquier transacción que permanezca abierta al final del archivo de registro también se considera "abandonada" y no debe incluirse en la salida final.

30
23 Mar 2026 08:42

Programación

Google Gemini 2.5 Flash-Lite VS OpenAI GPT-5 mini

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**: El limitador debe usar un algoritmo de ventana deslizante (no ventanas fijas) para hacer el seguimiento del número de solicitudes. Dado un máximo de `max_requests` permitido dentro de un periodo de `window_seconds` segundos, debe determinar con precisión si una nueva solicitud está permitida en cualquier momento. 2. **Múltiples niveles**: El limitador debe soportar múltiples niveles con nombre (por ejemplo, \"free\", \"standard\", \"premium\"), cada uno con su propia configuración de `max_requests` y `window_seconds`. Los clientes se asignan a un nivel al registrarse. 3. **Cola de prioridad para solicitudes diferidas**: Cuando una solicitud queda limitada por la tasa, en lugar de rechazarla simplemente, el limitador debe encolarla en una cola de prioridad por nivel. Cada solicitud tiene una prioridad entera (número menor = mayor prioridad). El limitador debe proporcionar un método que, cuando haya capacidad disponible, desencole y procese la solicitud en espera de mayor prioridad para un cliente dado. 4. **Seguridad para hilos**: Todas las operaciones (`allow_request`, `enqueue`, `dequeue`, `register_client`) deben ser seguras para ser llamadas concurrentemente desde múltiples hilos. 5. **Limpieza**: Proporciona un método para eliminar los datos de seguimiento expirados de clientes que no hayan realizado solicitudes en los últimos `cleanup_threshold_seconds` (configurable). Tu implementación debe incluir: - Una clase `RateLimiter` con la interfaz descrita. - Un dataclass `Request` o namedtuple que contenga como mínimo: `client_id`, `timestamp`, `priority` y `payload`. - Manejo adecuado de casos límite: registro duplicado de clientes, solicitudes para clientes no registrados, colas de prioridad vacías, modificaciones concurrentes y problemas de precisión del reloj. Asimismo, escribe un script de demostración (en el bloque `if __name__ == "__main__"`) que: - Crea un limitador de tasa con al menos dos niveles. - Registra varios clientes. - Simula una ráfaga de solicitudes desde múltiples hilos, mostrando que algunas son permitidas y otras quedan encoladas. - Muestra cómo las solicitudes diferidas se procesan cuando se libera capacidad. - Imprime una salida clara que muestre la secuencia de eventos. Explica tus decisiones de diseño en comentarios, especialmente en lo relativo a tu implementación de la ventana deslizante, la elección de primitivos de sincronización y los compromisos que hayas hecho entre precisión y rendimiento.

39
21 Mar 2026 08:40

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

45
19 Mar 2026 14:46

Programación

Google Gemini 2.5 Flash-Lite VS OpenAI GPT-5.2

Implementar una caché LRU concurrente sin bloqueo

Diseña e implementa una caché LRU (Least Recently Used) en Python que sea segura para hilos (thread-safe) y que admita lecturas y escrituras concurrentes sin usar un bloqueo global para cada operación. Tu implementación debe satisfacer los siguientes requisitos: 1. La caché tiene una capacidad máxima fija especificada en el momento de la construcción. 2. Soporta tres operaciones: - get(key): Devuelve el valor asociado con la clave, o None si la clave no está presente. Acceder a una clave debe marcarla como la más recientemente usada. - put(key, value): Inserta o actualiza el par clave-valor. Si la caché está a capacidad y se inserta una clave nueva, debe expulsarse la entrada menos recientemente usada. - delete(key): Elimina la clave de la caché si está presente. Devuelve True si la clave se encontró y se eliminó, False en caso contrario. 3. La caché debe ser segura para su uso desde múltiples hilos simultáneamente. Las operaciones get concurrentes sobre claves distintas no deberían bloquearse entre sí. Debes minimizar la contención: un único bloqueo de grano grueso alrededor de todo no es aceptable. 4. La política de expulsión debe ser estrictamente LRU: la entrada que haya sido accedida (vía get o put) hace más tiempo debe ser la que se expulse. 5. Maneja casos límite: capacidad de 1, put concurrentes rápidos que desencadenen expulsiones, get/put/delete entrelazados sobre la misma clave desde distintos hilos, y capacidad cero o negativa (lanza ValueError). Proporciona tu implementación completa como un único módulo Python. Incluye una breve explicación de tu estrategia de concurrencia y por qué preserva la corrección. También incluye una breve demostración (en un bloque main o una función de prueba) que genere múltiples hilos que realicen operaciones mixtas get/put/delete y que verifique (mediante aserciones) que la caché nunca supera su capacidad y que no se produce corrupción de datos.

59
19 Mar 2026 11:51

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}") ```

54
19 Mar 2026 02:35

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.

59
18 Mar 2026 22:33

Programación

Google Gemini 2.5 Flash VS OpenAI GPT-5.2

Implementar una skip list concurrente sin bloqueo con consultas por rango

Diseña e implementa una estructura de datos skip list concurrente en el lenguaje de tu elección (C++, Java, Rust, Go o Python) que admita las siguientes operaciones: 1. **insert(key, value)** – Inserta un par clave-valor. Si la clave ya existe, actualiza el valor de forma atómica. Devuelve true si se insertó una clave nueva, false si se actualizó. 2. **remove(key)** – Elimina lógicamente el par clave-valor. Devuelve true si la clave se encontró y fue eliminada, false en caso contrario. 3. **find(key)** – Devuelve el valor asociado a la clave, o indica ausencia. 4. **range_query(low, high)** – Devuelve todos los pares clave-valor donde low <= key <= high, como una lista ordenada por clave. El resultado debe ser una instantánea consistente: no debe incluir claves que nunca estuvieron presentes simultáneamente durante la ejecución de la operación. 5. **size()** – Devuelve el número aproximado de elementos activos (no eliminados). Requisitos y restricciones: - La skip list debe ser segura para uso concurrente por múltiples hilos que ejecuten cualquier mezcla de las operaciones anteriores simultáneamente, sin un bloqueo global único. Puedes usar bloqueo de grano fino, técnicas sin bloqueo (CAS) o una combinación. - La eliminación perezosa es aceptable: los nodos pueden marcarse lógicamente como eliminados antes de su remoción física. - La generación probabilística de niveles debe usar una distribución geométrica estándar con p=0.5 y un nivel máximo de 32. - Las claves son enteros de 64 bits; los valores son cadenas. - Incluye consideraciones adecuadas de seguridad de memoria. Si usas un lenguaje sin recolector de basura, explica o implementa tu estrategia de recuperación de memoria (por ejemplo, reclamación basada en épocas (epoch-based reclamation), hazard pointers). Entregables: 1. Código fuente completo, compilable/ejecutable, con comentarios que expliquen tu estrategia de concurrencia. 2. Una prueba o demostración que lance múltiples hilos ejecutando inserciones, eliminaciones, búsquedas y consultas por rango concurrentes, y valide la corrección (por ejemplo, sin actualizaciones perdidas, sin lecturas fantasma en las consultas por rango, sin fallos). 3. Una sección breve de análisis (como comentarios o un docstring) que discuta: - Las garantías de linealizabilidad (o aislamiento por instantánea) que proporciona tu implementación. - La complejidad temporal esperada de cada operación. - Limitaciones conocidas o posibles problemas ABA y cómo los abordas. Tu solución será evaluada en corrección bajo concurrencia, claridad del código, solidez de la estrategia de concurrencia, calidad del mecanismo de instantánea para consultas por rango y exhaustividad del análisis.

57 1
18 Mar 2026 22:05

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

60
18 Mar 2026 20:21

Programación

OpenAI GPT-5 mini VS Anthropic Claude Sonnet 4.6

Implementar un resolvedor de dependencias de paquetes

Escribe una función en Python `resolve(requirements, package_index)` que implemente un algoritmo de resolución de dependencias. La función debe recibir dos argumentos: 1. `requirements`: Una lista de cadenas, donde cada cadena es un requisito de paquete inicial (por ejemplo, `["A>=1.2.0", "B"]`). 2. `package_index`: Un diccionario que representa todos los paquetes disponibles. Las claves son nombres de paquetes. Los valores son diccionarios donde las claves son cadenas de versión (por ejemplo, '1.2.3') y los valores son listas de cadenas de requisitos de dependencia para esa versión. Tu función debe devolver un diccionario que asigne a cada nombre de paquete requerido (incluyendo dependencias transitivas) una única cadena de versión resuelta que satisfaga todas las restricciones. A esto se le suele llamar un 'archivo de bloqueo' (lock file). Tu algoritmo debe ser capaz de manejar dependencias transitivas y conflictos de versiones. Si no se puede encontrar un conjunto válido de paquetes, la función debe lanzar un `ValueError` con un mensaje claro que explique el conflicto. Para simplificar, puedes asumir: - Las versiones siguen versionado semántico (por ejemplo, '1.2.3'). - Los especificadores de requerimiento son uno de: `==`, `!=`, `>=`, `<=`, `>`, `<`. Un requisito sin especificador (por ejemplo, "B") implica que cualquier versión es aceptable. - Tu solución debe intentar seleccionar la versión más reciente posible de cada paquete que satisfaga todas las restricciones.

65
15 Mar 2026 08:52

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

68
15 Mar 2026 08:13

Programación

OpenAI GPT-5 mini VS Anthropic Claude Haiku 4.5

Implementar un resolutor de dependencias con versionado semántico

Tu tarea es escribir una función que simule el resolutor de dependencias de un gestor de paquetes. La función debe recibir una lista de todos los paquetes disponibles, un paquete objetivo para instalar y su requisito de versión. Debe devolver una lista plana de paquetes (nombre y versión específica) que necesitan instalarse, en un orden topológico válido (dependencias antes que dependientes). El resolutor debe manejar restricciones de versionado semántico (SemVer). Para esta tarea, solo necesitas soportar versiones exactas, y los especificadores caret (`^`) y tilde (`~`). - `1.2.3`: Debe ser exactamente la versión 1.2.3. - `^1.2.3`: Permite versiones desde 1.2.3 hasta, pero sin incluir, 2.0.0 (es decir, `>=1.2.3 <2.0.0`). - `~1.2.3`: Permite versiones desde 1.2.3 hasta, pero sin incluir, 1.3.0 (es decir, `>=1.2.3 <1.3.0`). Tu implementación debe: 1. Seleccionar la versión más alta posible de cada paquete que satisfaga todas las restricciones impuestas sobre él por otros paquetes en el árbol de dependencias. 2. Producir una lista ordenada topológicamente de paquetes para la instalación. 3. Manejar y reportar de forma adecuada errores para: - Conflictos de versión irresolubles (p. ej., una dependencia requiere `^1.0.0` y otra requiere `^2.0.0` del mismo paquete). - Dependencias circulares (p. ej., el paquete A depende de B y B depende de A). - Un paquete o versión requerida que no esté disponible. Puedes elegir cualquier lenguaje de programación para tu implementación. Define la firma de la función y las estructuras de datos según lo consideres apropiado, pero hazlas claras.

82
15 Mar 2026 06:11

Programación

OpenAI GPT-5 mini VS Google Gemini 2.5 Flash-Lite

Implementar una caché LRU (Least Recently Used)

Implementa una estructura de datos de caché LRU (Least Recently Used) en Python que admita las siguientes operaciones, cada una con complejidad temporal promedio O(1): 1. `get(key)` — Devuelve el valor asociado con la clave si existe en la caché; de lo contrario, devuelve -1. Acceder a una clave la marca como recientemente usada. 2. `put(key, value)` — Inserta o actualiza el par clave-valor. Si la caché ha alcanzado su capacidad, expulsa el elemento menos recientemente usado antes de insertar el nuevo. Tu implementación debe ser una clase llamada `LRUCache` con la siguiente interfaz: ``` cache = LRUCache(capacity) cache.put(key, value) result = cache.get(key) ``` Demuestra tu implementación con la siguiente secuencia de prueba: ``` cache = LRUCache(2) cache.put(1, 10) cache.put(2, 20) print(cache.get(1)) # Expected: 10 cache.put(3, 30) # Evicts key 2 print(cache.get(2)) # Expected: -1 cache.put(4, 40) # Evicts key 1 print(cache.get(1)) # Expected: -1 print(cache.get(3)) # Expected: 30 print(cache.get(4)) # Expected: 40 ``` Requisitos: - NO uses `functools.lru_cache` ni `collections.OrderedDict`. Implementa la estructura subyacente tú mismo. - Usa una combinación de un mapa hash (hash map) y una lista doblemente enlazada (doubly linked list). - Incluye comentarios claros que expliquen tu enfoque. - Maneja casos límite como capacidad 0 o 1. - Proporciona el código completo y ejecutable incluyendo la secuencia de prueba anterior con su salida esperada.

87
12 Mar 2026 19:00

Enlaces relacionados

X f L