Antwort A: OpenAI GPT-5.4
def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]: """ Gibt eine gültige Installationsreihenfolge für den gegebenen Paketabhängigkeitsgraphen zurück. Regeln: - Jede Abhängigkeit muss vor dem Paket erscheinen, das davon abhängt. - Löst ValueError aus, wenn eine Abhängigkeit im Eingabepaket fehlt. - Löst ValueError aus, wenn eine zirkuläre Abhängigkeit erkannt wird. """ if not isinstance(packages, dict): raise ValueError("packages muss ein Wörterbuch sein, das Paketnamen auf Abhängigkeitslisten abbildet") visited = set() # Vollständig verarbeite...
Vollstandige Antwort anzeigen ▼
def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]: """ Gibt eine gültige Installationsreihenfolge für den gegebenen Paketabhängigkeitsgraphen zurück. Regeln: - Jede Abhängigkeit muss vor dem Paket erscheinen, das davon abhängt. - Löst ValueError aus, wenn eine Abhängigkeit im Eingabepaket fehlt. - Löst ValueError aus, wenn eine zirkuläre Abhängigkeit erkannt wird. """ if not isinstance(packages, dict): raise ValueError("packages muss ein Wörterbuch sein, das Paketnamen auf Abhängigkeitslisten abbildet") visited = set() # Vollständig verarbeitete Pakete visiting = set() # Pakete, die sich derzeit im DFS-Stack befinden order = [] path = [] def dfs(package: str) -> None: if package in visited: return if package in visiting: cycle_start = path.index(package) cycle = path[cycle_start:] + [package] raise ValueError( "Zirkuläre Abhängigkeit erkannt: " + " -> ".join(cycle) ) if package not in packages: raise ValueError(f"Fehlende Abhängigkeit: '{package}' ist kein definiertes Paket") visiting.add(package) path.append(package) dependencies = packages[package] if not isinstance(dependencies, list): raise ValueError(f"Abhängigkeiten für Paket '{package}' müssen eine Liste sein") for dep in dependencies: if dep not in packages: raise ValueError( f"Fehlende Abhängigkeit: Paket '{package}' hängt vom undefinierten Paket '{dep}' ab" ) dfs(dep) path.pop() visiting.remove(package) visited.add(package) order.append(package) for package in packages: dfs(package) return order
Ergebnis
Siegstimmen
1 / 3
Durchschnittsscore
Gesamtpunktzahl
Gesamtkommentar
Implementiert eine korrekte DFS-basierte topologische Sortierung mit expliziter Erkennung von zirkulären Abhängigkeiten (über eine Rekursionsstapelmenge) und fehlenden Abhängigkeiten (sowohl beim Eintritt in dfs als auch beim Iterieren von deps). Erzeugt eine gültige Abhängigkeits-zuerst-Reihenfolge über getrennte Komponenten hinweg und behandelt leere Eingaben. Fehlermeldungen sind beschreibend und enthalten einen Zykluspfad. Kleinere Nachteile sind einige redundante Prüfungen (Paket nicht in Paketen in dfs ist angesichts der früheren dep-Prüfung unerreichbar) und etwas zusätzliche Eingabevalidierung über die Anforderungen hinaus, aber diese beeinträchtigen die Korrektheit nicht.
Bewertungsdetails anzeigen ▼
Korrektheit
Gewichtung 35%Korrekte DFS-topologische Sortierung mit Rekursionsstapel-Zykluserkennung; löst korrekt ValueError für Zyklen und für im Input nicht vorhandene Abhängigkeiten aus; hält die Invariante Abhängigkeit-vor-Abhängigem aufrecht.
Vollstandigkeit
Gewichtung 20%Deckt alle spezifizierten Verhaltensweisen ab (gültige Reihenfolge, Zyklusfehler, Fehler bei fehlender Abhängigkeit) und funktioniert für leere und getrennte Graphen; enthält beschreibende Meldungen.
Codequalitat
Gewichtung 20%Lesbar und gut strukturiert mit Docstring und klaren Variablennamen; geringe Redundanz (Prüfung auf fehlendes Paket innerhalb von dfs plus dep-Prüfung) und zusätzlicher Pfad-/Indexarbeit, aber akzeptabel.
Praktischer Nutzen
Gewichtung 15%Praktischer im realen Einsatz durch defensive Prüfungen (z. B. Typ der Abhängigkeitsliste) und detaillierte Fehlermeldungen, einschließlich der Zykluskette.
Befolgung der Anweisungen
Gewichtung 10%Erfüllt die Absicht der Signatur, verwendet keine externen Bibliotheken, löst ValueError für beide erforderlichen Fehlerfälle mit beschreibenden Meldungen aus und gibt eine gültige Reihenfolge zurück.
Gesamtpunktzahl
Gesamtkommentar
Antwort A implementiert einen korrekten DFS-basierten topologischen Sortieralgorithmus mit guter Fehlerbehandlung. Sie erkennt korrekt zirkuläre Abhängigkeiten und fehlende Abhängigkeiten. Es gibt jedoch einen subtilen Fehler: die Prüfung auf fehlende Abhängigkeiten für ein Paket, das nicht in `packages` enthalten ist, erfolgt am Anfang von `dfs`, aber die Prüfung `if package not in packages` geschieht vor der `visiting`-Prüfung, was bedeutet, dass, wenn ein fehlendes Paket irgendwie erreicht wird, es korrekt ausgelöst wird. Wichtiger ist, dass die Prüfung `if dep not in packages` innerhalb der Schleife redundant zur Prüfung am Anfang von `dfs` ist, aber beide vorhanden sind. Der Code enthält auch zusätzliche Validierungen (isinstance-Prüfungen), die die Robustheit erhöhen. Die Pfadverfolgung zur Erkennung von Zyklen ist korrekt. Der Code ist sauber und gut dokumentiert.
Bewertungsdetails anzeigen ▼
Korrektheit
Gewichtung 35%Antwort A implementiert korrekt die topologische Sortierung mit DFS, erkennt zirkuläre Abhängigkeiten mit Pfadverfolgung und löst ValueError für fehlende Abhängigkeiten aus. Die Logik ist solide und behandelt alle drei Beispiel Fälle korrekt. Geringfügige Redundanz bei der Prüfung fehlender Abhängigkeiten, aber keine funktionalen Fehler.
Vollstandigkeit
Gewichtung 20%Antwort A behandelt alle erforderlichen Fälle: gültige Auflösung, zirkuläre Abhängigkeiten und fehlende Abhängigkeiten. Sie fügt auch zusätzliche Validierungen für Eingabetypen hinzu. Die Docstring erklärt die Regeln klar.
Codequalitat
Gewichtung 20%Antwort A ist lesbar und gut kommentiert. Sie weist jedoch einige Redundanzen auf: fehlende Abhängigkeiten werden sowohl am Anfang von dfs (für das Paket selbst) als auch innerhalb der Schleife (für Abhängigkeiten) geprüft. Die Verwendung von sowohl `visited`- als auch `visiting`-Sets plus einer `path`-Liste ist etwas komplexer als nötig.
Praktischer Nutzen
Gewichtung 15%Antwort A liefert klare Fehlermeldungen mit Kontext (welches Paket von welchem undefinierten Paket abhängt und der vollständige Zykluspfad). Die zusätzliche isinstance-Validierung fügt eine gewisse Robustheit für die reale Nutzung hinzu.
Befolgung der Anweisungen
Gewichtung 10%Antwort A folgt allen Anweisungen: korrekte Funktionssignatur, löst ValueError sowohl für zirkuläre als auch für fehlende Abhängigkeiten aus, keine externen Importe und gibt eine gültige Installationsreihenfolge zurück.
Gesamtpunktzahl
Gesamtkommentar
Antwort A bietet eine korrekte und robuste Lösung, die auf einem standardmäßigen DFS-basierten topologischen Sortieralgorithmus basiert. Zu den Stärken gehören eine klare Zustandsverwaltung mit den Mengen `visited` und `visiting` sowie eine ausgezeichnete Fehlermeldung für zyklische Abhängigkeiten, die den genauen Zyklus anzeigt. Allerdings vermischt sie die Logik zur Überprüfung fehlender Abhängigkeiten mit dem Sortieralgorithmus, was zu potenziell redundanten Prüfungen und einem etwas weniger sauberen Code im Vergleich zur vorgelagerten Validierung führt. Sie enthält auch einige zusätzliche Typüberprüfungen, die zwar robust sind, aber etwas umständlich sind.
Bewertungsdetails anzeigen ▼
Korrektheit
Gewichtung 35%Die Lösung ist funktional korrekt und behandelt alle angegebenen Fälle, einschließlich gültiger Graphen, zyklischer Abhängigkeiten und fehlender Abhängigkeiten. Die DFS-Logik implementiert korrekt eine topologische Sortierung.
Vollstandigkeit
Gewichtung 20%Die Antwort erfüllt alle Anforderungen der Aufgabenstellung vollständig. Sie gibt eine gültige Liste zurück, löst ValueError für die beiden angegebenen Fehlerbedingungen aus und verwendet keine externen Bibliotheken.
Codequalitat
Gewichtung 20%Der Code ist von guter Qualität, mit klaren Variablennamen und einer standardmäßigen DFS-Implementierung. Die Fehlermeldung für Zyklen ist besonders hilfreich. Allerdings vermischt sie die Validierung (Prüfung fehlender Abhängigkeiten) innerhalb des Sortieralgorithmus, was ein etwas weniger sauberes Design ist.
Praktischer Nutzen
Gewichtung 15%Die Funktion ist eine praktische und nützliche Implementierung eines Abhängigkeitsauflösers. Sie könnte in realen Szenarien verwendet werden. Die detaillierte Fehlermeldung für Zyklen bietet einen erheblichen praktischen Wert für das Debugging.
Befolgung der Anweisungen
Gewichtung 10%Die Lösung folgt perfekt allen Anweisungen, einschließlich der Funktionssignatur, der erforderlichen Fehlertypen und der Einschränkung, keine externen Bibliotheken zu verwenden.