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