Orivel Orivel
Ouvrir le menu

Fonction Python pour la résolution des dépendances de paquets

Comparez les reponses des modeles pour cette tache benchmark en Programmation et consultez scores, commentaires et exemples lies.

Connectez-vous ou inscrivez-vous pour utiliser les likes et favoris. Inscription

X f L

Sommaire

Vue d ensemble de la tache

Genres de comparaison

Programmation

Modele createur de la tache

Modeles participants

Modeles evaluateurs

Consigne de la tache

Écrivez une fonction Python nommée `resolve_dependencies` qui prend un dictionnaire de paquets et de leurs dépendances et renvoie un ordre d'installation valide. La fonction doit gérer correctement les dépendances circulaires et les dépendances sur des paquets non définis dans l'entrée.

Informations complementaires

La fonction doit accepter un argument : un dictionnaire dont les clés sont des noms de paquets (chaînes) et les valeurs sont des listes de chaînes représentant leurs dépendances directes. Signature de la fonction : `def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]:`

Politique d evaluation

Une bonne réponse doit être fonctionnellement correcte, robuste et bien rédigée. Les solutions les mieux notées produiront correctement un tri topologique valide pour toutes les entrées valides et, surtout, identifieront et lèveront correctement une `ValueError` à la fois pour les dépendances circulaires et pour les dépendances manquantes comme spécifié. Le code doit être efficace (par exemple, en utilisant un algorithme standard comme celui de Kahn ou un tri topologique basé sur DFS), lisible et respecter les conv...

Afficher plus

Une bonne réponse doit être fonctionnellement correcte, robuste et bien rédigée. Les solutions les mieux notées produiront correctement un tri topologique valide pour toutes les entrées valides et, surtout, identifieront et lèveront correctement une `ValueError` à la fois pour les dépendances circulaires et pour les dépendances manquantes comme spécifié. Le code doit être efficace (par exemple, en utilisant un algorithme standard comme celui de Kahn ou un tri topologique basé sur DFS), lisible et respecter les conventions Python courantes. Les messages d'erreur doivent être clairs et utiles. Les solutions qui échouent sur des cas limites (par exemple, un dictionnaire d'entrée vide, un graphe avec des composantes déconnectées) ou qui sont inutilement complexes seront notées plus bas.

Reponses

Reponse A: OpenAI GPT-5.4

def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]: """ Retourne un ordre d'installation valide pour le graphe de dépendances de paquets donné. Règles : - Chaque dépendance doit apparaître avant le paquet qui en dépend. - Lève une ValueError si une dépendance est manquante dans l'entrée. - Lève une ValueError si une dépendance circulaire est détectée. """ if not isinstance(packages, dict): raise ValueError("packages doit être un dictionnaire mappant les noms de paquets à des listes de dépendances") visited = set() # Paquets entièrement traités...

Afficher la reponse complete

def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]: """ Retourne un ordre d'installation valide pour le graphe de dépendances de paquets donné. Règles : - Chaque dépendance doit apparaître avant le paquet qui en dépend. - Lève une ValueError si une dépendance est manquante dans l'entrée. - Lève une ValueError si une dépendance circulaire est détectée. """ if not isinstance(packages, dict): raise ValueError("packages doit être un dictionnaire mappant les noms de paquets à des listes de dépendances") visited = set() # Paquets entièrement traités visiting = set() # Paquets actuellement dans la pile DFS 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( "Dépendance circulaire détectée : " + " -> ".join(cycle) ) if package not in packages: raise ValueError(f"Dépendance manquante : '{package}' n'est pas un paquet défini") visiting.add(package) path.append(package) dependencies = packages[package] if not isinstance(dependencies, list): raise ValueError(f"Les dépendances du paquet '{package}' doivent être une liste") for dep in dependencies: if dep not in packages: raise ValueError( f"Dépendance manquante : le paquet '{package}' dépend du paquet non défini '{dep}'" ) dfs(dep) path.pop() visiting.remove(package) visited.add(package) order.append(package) for package in packages: dfs(package) return order

Resultat

#2

Votes gagnants

1 / 3

Score moyen

87
Modeles evaluateurs OpenAI GPT-5.2

Score total

88

Commentaire global

Implémente un tri topologique correct basé sur DFS avec détection explicite des dépendances circulaires (via un ensemble de pile de récursion) et des dépendances manquantes (à la fois lors de l'entrée dans dfs et lors de l'itération des dépendances). Produit un ordre valide de dépendances d'abord à travers des composantes déconnectées et gère une entrée vide. Les messages d'erreur sont descriptifs et incluent un chemin de cycle. Les inconvénients mineurs sont quelques vérifications redondantes (le paquet n'est pas dans les paquets dans dfs est inaccessible étant donné la vérification de dépendance antérieure) et un travail supplémentaire sur la validation des entrées au-delà des exigences, mais cela ne nuit pas à la correction.

Afficher le detail de l evaluation

Exactitude

Poids 35%
92

Ordre de tri topologique DFS correct avec détection de cycle par pile de récursion ; lève correctement ValueError pour les cycles et pour les dépendances non présentes dans l'entrée ; maintient l'invariant dépendance avant dépendant.

Completude

Poids 20%
90

Couvre tous les comportements spécifiés (ordre valide, erreur de cycle, erreur de dépendance manquante) et fonctionne pour les graphes vides et déconnectés ; inclut des messages descriptifs.

Qualite du code

Poids 20%
78

Lisible et bien structuré avec docstring et noms de variables clairs ; légère redondance (vérification de paquet manquant dans dfs plus vérification de dépendance) et travail supplémentaire sur le chemin/l'index mais acceptable.

Valeur pratique

Poids 15%
84

Plus pratique en utilisation réelle grâce à des vérifications défensives (par exemple, type de liste de dépendances) et des messages d'erreur détaillés incluant la chaîne de cycle.

Respect des consignes

Poids 10%
96

Respecte l'intention de la signature, n'utilise aucune bibliothèque externe, lève ValueError pour les deux cas d'erreur requis avec des messages descriptifs et renvoie un ordre valide.

Modeles evaluateurs Anthropic Claude Sonnet 4.6

Score total

82

Commentaire global

La réponse A implémente un tri topologique correct basé sur DFS avec une bonne gestion des erreurs. Elle détecte correctement les dépendances circulaires et manquantes. Cependant, il y a un bug subtil : la vérification des dépendances manquantes pour un paquet qui n'est pas dans `packages` est effectuée au début de `dfs`, mais la vérification `if package not in packages` se produit avant la vérification `visiting`, ce qui signifie que si un paquet manquant est atteint d'une manière ou d'une autre, il est correctement signalé. Plus important encore, la vérification `if dep not in packages` dans la boucle est redondante avec la vérification en haut de `dfs`, mais les deux sont présentes. Le code inclut également une validation supplémentaire (vérifications isinstance) qui ajoute de la robustesse. Le suivi du chemin pour la détection de cycles est correct. Le code est propre et bien documenté.

Afficher le detail de l evaluation

Exactitude

Poids 35%
85

La réponse A implémente correctement le tri topologique avec DFS, détecte les dépendances circulaires avec suivi de chemin et lève une ValueError pour les dépendances manquantes. La logique est saine et gère correctement les trois exemples de cas. Redondance mineure dans les vérifications de dépendances manquantes mais pas de bugs fonctionnels.

Completude

Poids 20%
85

La réponse A gère tous les cas requis : résolution valide, dépendances circulaires et dépendances manquantes. Elle ajoute également une validation supplémentaire pour les types d'entrée. La docstring explique clairement les règles.

Qualite du code

Poids 20%
75

La réponse A est lisible et bien commentée. Cependant, elle présente une certaine redondance : la dépendance manquante est vérifiée à la fois au début de dfs (pour le paquet lui-même) et dans la boucle (pour les dépendances). L'utilisation des ensembles `visited` et `visiting` ainsi que d'une liste `path` est légèrement plus complexe que nécessaire.

Valeur pratique

Poids 15%
75

La réponse A fournit des messages d'erreur clairs avec le contexte (quel paquet dépend de quel paquet indéfini, et le chemin complet du cycle). La validation supplémentaire isinstance ajoute une certaine robustesse pour une utilisation réelle.

Respect des consignes

Poids 10%
90

La réponse A suit toutes les instructions : signature de fonction correcte, lève une ValueError pour les dépendances circulaires et manquantes, aucune importation externe, et retourne un ordre d'installation valide.

Modeles evaluateurs Google Gemini 2.5 Pro

Score total

90

Commentaire global

La réponse A fournit une solution correcte et robuste utilisant un tri topologique standard basé sur DFS. Ses points forts incluent une gestion claire de l'état avec les ensembles `visited` et `visiting` et un excellent message d'erreur pour les dépendances circulaires qui montre le cycle exact. Cependant, elle mélange la logique de vérification des dépendances manquantes avec l'algorithme de tri, ce qui entraîne des vérifications potentiellement redondantes et un code légèrement moins propre par rapport à une validation effectuée au préalable. Elle inclut également des vérifications de type supplémentaires qui, bien que robustes, ajoutent un peu de verbosité.

Afficher le detail de l evaluation

Exactitude

Poids 35%
90

La solution est fonctionnellement correcte et gère tous les cas spécifiés, y compris les graphes valides, les dépendances circulaires et les dépendances manquantes. La logique DFS implémente correctement un tri topologique.

Completude

Poids 20%
100

La réponse répond entièrement à toutes les exigences de la consigne. Elle renvoie une liste valide, lève une ValueError pour les deux conditions d'erreur spécifiées et n'utilise aucune bibliothèque externe.

Qualite du code

Poids 20%
80

Le code est de bonne qualité, avec des noms de variables clairs et une implémentation DFS standard. Le message d'erreur pour les cycles est particulièrement utile. Cependant, il mélange la validation (vérifications des dépendances manquantes) à l'intérieur de l'algorithme de tri, ce qui est une conception légèrement moins propre.

Valeur pratique

Poids 15%
85

La fonction est une implémentation pratique et utile d'un résolveur de dépendances. Elle pourrait être utilisée dans des scénarios réels. Le message d'erreur détaillé du cycle ajoute une valeur pratique significative pour le débogage.

Respect des consignes

Poids 10%
100

La solution suit parfaitement toutes les instructions, y compris la signature de la fonction, les types d'erreurs requis et la contrainte de ne pas utiliser de bibliothèques externes.

def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]: """Résoudre les dépendances des paquets et retourner un ordre d'installation valide. Args: packages: Dictionnaire associant les noms des paquets à leur liste de dépendances. Returns: Une liste de noms de paquets dans un ordre d'installation valide (dépendances d'abord). Raises: ValueError: S'il y a une dépendance circulaire ou une dépendance manquante. """ # D'abord, vérifier les dépendances manquantes all_package_names = set(packages.keys()) for package, deps in packages.i...

Afficher la reponse complete

def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]: """Résoudre les dépendances des paquets et retourner un ordre d'installation valide. Args: packages: Dictionnaire associant les noms des paquets à leur liste de dépendances. Returns: Une liste de noms de paquets dans un ordre d'installation valide (dépendances d'abord). Raises: ValueError: S'il y a une dépendance circulaire ou une dépendance manquante. """ # D'abord, vérifier les dépendances manquantes all_package_names = set(packages.keys()) for package, deps in packages.items(): for dep in deps: if dep not in all_package_names: raise ValueError( f"Dépendance manquante : le paquet '{package}' dépend de '{dep}', " f"qui n'est pas défini dans l'entrée." ) # Tri topologique utilisant DFS # États : 0 = non visité, 1 = dans le chemin actuel (en cours de visite), 2 = entièrement traité state = {pkg: 0 for pkg in packages} order = [] def dfs(node, path): if state[node] == 2: return if state[node] == 1: # Trouver le cycle dans le chemin cycle_start = path.index(node) cycle = path[cycle_start:] + [node] raise ValueError( f"Dépendance circulaire détectée : {' -> '.join(cycle)}" ) state[node] = 1 path.append(node) for dep in packages[node]: dfs(dep, path) path.pop() state[node] = 2 order.append(node) for package in packages: if state[package] == 0: dfs(package, []) return order

Resultat

#1 | Gagnant

Votes gagnants

2 / 3

Score moyen

89
Modeles evaluateurs OpenAI GPT-5.2

Score total

85

Commentaire global

Implémente un tri topologique DFS correct avec une vérification claire des dépendances manquantes et une détection de cycle à l'aide d'une carte d'état et d'une liste de chemins. Il devrait fonctionner pour des entrées valides typiques et des graphes déconnectés. Cependant, il n'effectue aucune validation indiquant que les valeurs de dépendance sont des listes (pourrait planter avec une TypeError), et sa signature dfs inclut une liste de chemins mutable passée récursivement, ce qui est acceptable mais légèrement moins propre. Il manque également toute protection pour les entrées non-dict. Globalement solide mais un peu moins robuste que A.

Afficher le detail de l evaluation

Exactitude

Poids 35%
88

Produit un ordre topologique correct et lève une ValueError pour les dépendances manquantes (pré-vérification) et les cycles (état==1). Légèrement moins résistant aux formes d'entrée inattendues (peut lever une exception non-ValueError si les dépendances ne sont pas itérables), ce qui peut affecter la correction sous une interprétation plus large.

Completude

Poids 20%
83

Couvre les principaux comportements spécifiés et les graphes avec plusieurs composantes ; les dépendances manquantes sont gérées globalement avant le parcours. Ne gère pas explicitement les listes de dépendances malformées, ce qui peut entraîner des exceptions en dehors du modèle de ValueError requis.

Qualite du code

Poids 20%
80

Propre et direct avec une approche claire de machine à états et une docstring. Passer le chemin comme paramètre est acceptable mais un peu plus bruyant ; globalement légèrement plus propre que A en structure.

Valeur pratique

Poids 15%
79

Pratique pour les entrées bien formées et donne des messages d'erreur utiles ; moins robuste aux entrées malformées (peut lever une TypeError), réduisant la fiabilité dans une utilisation réelle.

Respect des consignes

Poids 10%
94

Suit la règle de non-importation et répond aux exigences principales avec des ValueErrors pour les dépendances manquantes et les cycles ; alignement légèrement plus faible dans le sens où les entrées malformées peuvent lever des exceptions non-ValueError.

Modeles evaluateurs Anthropic Claude Sonnet 4.6

Score total

88

Commentaire global

La réponse B est propre, bien structurée et correcte. Elle sépare la vérification des dépendances manquantes dans une passe préliminaire avant le DFS, ce qui est une conception plus propre. Le DFS utilise un dictionnaire d'état (0/1/2) qui est une approche classique et efficace. La détection de cycle avec suivi de chemin est correcte. Le code est lisible, bien documenté avec une docstring appropriée, et gère les cas limites comme une entrée vide et des composantes déconnectées. Le seul problème mineur est que la liste `path` est passée en argument à `dfs` plutôt que d'être une variable de fermeture, ce qui est légèrement moins élégant mais fonctionnellement correct.

Afficher le detail de l evaluation

Exactitude

Poids 35%
90

La réponse B implémente correctement le tri topologique avec DFS en utilisant une approche par machine à états. La passe préliminaire pour les dépendances manquantes est propre et correcte. La détection de cycle avec suivi de chemin fonctionne correctement. Gère tous les cas limites, y compris l'entrée vide et les composantes déconnectées.

Completude

Poids 20%
90

La réponse B gère complètement tous les cas requis. La docstring avec les sections Args, Returns et Raises est complète. La passe préliminaire pour les dépendances manquantes et le DFS pour le tri topologique couvrent tous les scénarios.

Qualite du code

Poids 20%
85

La réponse B utilise une machine à états propre (0/1/2) qui est une approche standard et efficace. La séparation de la vérification des dépendances manquantes de la logique DFS améliore la lisibilité. Le code est concis et suit bien les conventions Python.

Valeur pratique

Poids 15%
80

La réponse B fournit des messages d'erreur clairs et descriptifs. La séparation nette de la validation et de la logique de l'algorithme la rend plus facile à maintenir et à étendre. Le code est pratique et prêt pour la production.

Respect des consignes

Poids 10%
90

La réponse B suit toutes les instructions : signature de fonction correcte, lève ValueError pour les dépendances circulaires et manquantes avec des messages descriptifs, aucune importation externe, et retourne un ordre d'installation valide.

Modeles evaluateurs Google Gemini 2.5 Pro

Score total

95

Commentaire global

La réponse B présente une solution très bien structurée et correcte. Sa force principale réside dans la séparation nette des responsabilités : elle valide d'abord l'entrée en vérifiant toutes les dépendances manquantes en un seul passage, puis procède au tri topologique. Cela rend le code plus efficace et plus facile à comprendre. L'implémentation DFS est standard, et les messages d'erreur sont très descriptifs, en particulier pour les cycles. Le code est propre, lisible et suit les bonnes pratiques.

Afficher le detail de l evaluation

Exactitude

Poids 35%
95

La solution est hautement correcte. Elle identifie correctement les dépendances manquantes dans une étape de pré-traitement, puis utilise un algorithme DFS standard pour trouver un ordre valide ou détecter des cycles. Tous les cas limites sont gérés correctement.

Completude

Poids 20%
100

La réponse est entièrement complète. Elle respecte toutes les exigences, y compris la signature de la fonction, le type de retour, la gestion des erreurs pour les dépendances circulaires et manquantes, et le fait d'être autonome.

Qualite du code

Poids 20%
90

La qualité du code est excellente. La séparation de la vérification des dépendances manquantes de l'algorithme de tri est un choix de conception supérieur, rendant le code plus propre et plus efficace. La docstring est bien formatée et les messages d'erreur sont descriptifs.

Valeur pratique

Poids 15%
90

Cette solution a une grande valeur pratique. Sa structure épurée, avec la validation séparée de la logique principale, la rend plus robuste et maintenable, ce qui est très souhaitable dans les applications pratiques.

Respect des consignes

Poids 10%
100

La solution respecte parfaitement toutes les instructions données dans l'énoncé. La signature de la fonction est correcte, les exceptions requises sont levées et aucune importation n'est utilisée.

Resume comparatif

Pour chaque tache et discussion, le classement final est determine par agregation des rangs par evaluateur (rang moyen + departage Borda). Le score moyen est affiche a titre indicatif.

Evaluateurs: 3

Votes gagnants

1 / 3

Score moyen

87
Voir cette reponse

Votes gagnants

2 / 3

Score moyen

89
Voir cette reponse

Resultats de l evaluation

Modeles evaluateurs Google Gemini 2.5 Pro

Raison du gagnant

La réponse B est la gagnante en raison de sa structure de code supérieure. En effectuant une pré-vérification de toutes les dépendances manquantes avant de commencer le tri topologique, elle sépare la validation de l'algorithme principal. Cette approche est plus efficace (évite les vérifications redondantes) et aboutit à un code plus propre et plus facile à maintenir que la réponse A, qui mélange ces préoccupations au sein de sa fonction de parcours.

Modeles evaluateurs Anthropic Claude Sonnet 4.6

Raison du gagnant

Les deux réponses sont fonctionnellement correctes et gèrent tous les cas requis. La réponse B est légèrement meilleure en raison de sa séparation plus nette des préoccupations (passe préliminaire pour les dépendances manquantes par rapport aux vérifications en ligne), de l'utilisation d'un dictionnaire d'état pour une gestion plus propre de l'état DFS, et d'une structure de code globalement plus propre. La réponse A présente une certaine redondance dans ses vérifications de dépendances manquantes (vérification à la fois en haut du dfs et à l'intérieur de la boucle) et inclut une validation isinstance supplémentaire qui, bien que robuste, ajoute une complexité non requise par la spécification. L'approche de la réponse B est plus idiomatique et lisible pour une implémentation de tri topologique.

Modeles evaluateurs OpenAI GPT-5.2

Raison du gagnant

La réponse A est plus robuste et alignée sur les exigences : elle détecte les dépendances manquantes au point d'utilisation, fournit des erreurs claires de cycle et de dépendance manquante, et inclut des vérifications de type de base qui empêchent les erreurs d'exécution inattendues. La réponse B est en grande partie correcte, mais elle est moins défensive (peut planter sur des listes de dépendances malformées) et offre une validation légèrement moins complète, ce qui fait de A la meilleure réponse globale pour le benchmark.

X f L