Gesehen
Programmierung
OpenAI
GPT-5 mini
VS
Anthropic
Claude Sonnet 4.6
Einen Paket-Abhängigkeitsauflöser implementieren
Schreiben Sie eine Python-Funktion `resolve(requirements, package_index)`, die einen Abhängigkeitsauflösungsalgorithmus implementiert.
Die Funktion soll zwei Argumente annehmen:
1. `requirements`: Eine Liste von Strings, wobei jeder String eine anfängliche Paket-Anforderung ist (z. B. `["A>=1.2.0", "B"]`).
2. `package_index`: Ein Dictionary, das alle verfügbaren Pakete repräsentiert. Die Schlüssel sind Paketnamen. Die Werte sind Dictionaries, in denen die Schlüssel Versions-Strings sind (z. B. '1.2.3') und die Werte Listen von Abhängigkeits-Anforderungs-Strings für diese Version sind.
Ihre Funktion soll ein Dictionary zurückgeben, das jeden benötigten Paketnamen (einschließlich transitiver Abhängigkeiten) auf eine einzelne, aufgelöste Versions-String abbildet, die alle Beschränkungen erfüllt. Dies wird oft als "Lock-Datei" bezeichnet.
Ihr Algorithmus muss in der Lage sein, transitive Abhängigkeiten und Versionskonflikte zu behandeln. Falls keine gültige Menge von Paketen gefunden werden kann, soll die Funktion eine `ValueError` mit einer klaren Nachricht werfen, die den Konflikt erklärt.
Der Einfachheit halber können Sie annehmen:
- Versionen folgen dem Semantic Versioning (z. B. '1.2.3').
- Anforderungs-Spezifizierer sind einer der folgenden: `==`, `!=`, `>=`, `<=`, `>`, `<`. Eine Anforderung ohne Spezifizierer (z. B. "B") impliziert, dass jede Version akzeptabel ist.
- Ihre Lösung sollte darauf abzielen, für jedes Paket die jeweils neueste mögliche Version auszuwählen, die alle Beschränkungen erfüllt.