Orivel Orivel
Abrir menu

Función de Python para la resolución de dependencias de paquetes

Compara respuestas de modelos para esta tarea benchmark de Programación y revisa puntuaciones, comentarios y ejemplos relacionados.

Inicia sesion o registrate para usar me gusta y favoritos. Registrarse

X f L

Indice

Resumen de la tarea

Generos de Comparacion

Programación

Modelo creador de la tarea

Modelos participantes

Modelos evaluadores

Enunciado de la tarea

Escribe una función de Python llamada `resolve_dependencies` que tome un diccionario de paquetes y sus dependencias y devuelva un orden de instalación válido. La función debe manejar correctamente las dependencias circulares y las dependencias hacia paquetes que no estén definidos en la entrada.

Informacion complementaria

La función debe aceptar un argumento: un diccionario donde las claves son nombres de paquetes (cadenas) y los valores son listas de cadenas que representan sus dependencias directas. Function Signature: `def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]:` Requirements: 1. **Successful Resolution:** Si existe un orden de instalación válido, devolver una lista de nombres de paquetes. En esta lista, para cualquier paquete dado, todas sus dependencias deben aparecer antes que él. 2. **Circular D...

Mostrar mas

La función debe aceptar un argumento: un diccionario donde las claves son nombres de paquetes (cadenas) y los valores son listas de cadenas que representan sus dependencias directas. Function Signature: `def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]:` Requirements: 1. **Successful Resolution:** Si existe un orden de instalación válido, devolver una lista de nombres de paquetes. En esta lista, para cualquier paquete dado, todas sus dependencias deben aparecer antes que él. 2. **Circular Dependency:** Si las dependencias forman un ciclo (por ejemplo, A depende de B y B depende de A), la función debe lanzar un `ValueError` con un mensaje descriptivo. 3. **Missing Dependency:** Si un paquete depende de otro paquete que no es una clave en el diccionario de entrada, la función debe lanzar un `ValueError` con un mensaje descriptivo. 4. **Self-Contained:** La solución no debe importar librerías externas. Example 1 (Valid): Input: `{'A': ['B', 'C'], 'B': ['C'], 'C': []}` A possible valid output: `['C', 'B', 'A']` Example 2 (Circular Dependency): Input: `{'A': ['B'], 'B': ['A']}` Expected behavior: Raise `ValueError`. Example 3 (Missing Dependency): Input: `{'A': ['B'], 'B': ['C']}` Expected behavior: Raise `ValueError` because 'C' is a dependency but not a defined package.

Politica de evaluacion

Una buena respuesta debe ser funcionalmente correcta, robusta y bien redactada. Las soluciones mejor valoradas producirán correctamente un orden topológico válido para todas las entradas válidas y, crucialmente, identificarán y lanzarán un `ValueError` tanto para dependencias circulares como para dependencias faltantes según lo especificado. El código debe ser eficiente (por ejemplo, usando un algoritmo estándar como el de Kahn o un ordenamiento topológico basado en DFS), legible y seguir las convenciones habituale...

Mostrar mas

Una buena respuesta debe ser funcionalmente correcta, robusta y bien redactada. Las soluciones mejor valoradas producirán correctamente un orden topológico válido para todas las entradas válidas y, crucialmente, identificarán y lanzarán un `ValueError` tanto para dependencias circulares como para dependencias faltantes según lo especificado. El código debe ser eficiente (por ejemplo, usando un algoritmo estándar como el de Kahn o un ordenamiento topológico basado en DFS), legible y seguir las convenciones habituales de Python. Los mensajes de error deben ser claros y útiles. Las soluciones que fallen en casos límite (p. ej., un diccionario de entrada vacío, un grafo con componentes desconectados) o que sean innecesariamente complejas obtendrán una calificación inferior.

Respuestas

Respuesta A: OpenAI GPT-5.4

def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]: """ Devuelve un orden de instalación válido para el grafo de dependencias de paquetes dado. Reglas: - Cada dependencia debe aparecer antes del paquete que depende de ella. - Genera ValueError si falta una dependencia en la entrada. - Genera ValueError si se detecta una dependencia circular. """ if not isinstance(packages, dict): raise ValueError("packages debe ser un diccionario que mapea nombres de paquetes a listas de dependencias") visited = set() # Paquetes completamente procesados vis...

Mostrar respuesta completa

def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]: """ Devuelve un orden de instalación válido para el grafo de dependencias de paquetes dado. Reglas: - Cada dependencia debe aparecer antes del paquete que depende de ella. - Genera ValueError si falta una dependencia en la entrada. - Genera ValueError si se detecta una dependencia circular. """ if not isinstance(packages, dict): raise ValueError("packages debe ser un diccionario que mapea nombres de paquetes a listas de dependencias") visited = set() # Paquetes completamente procesados visiting = set() # Paquetes actualmente en la pila 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( "Se detectó una dependencia circular: " + " -> ".join(cycle) ) if package not in packages: raise ValueError(f"Dependencia faltante: '{package}' no es un paquete definido") visiting.add(package) path.append(package) dependencies = packages[package] if not isinstance(dependencies, list): raise ValueError(f"Las dependencias del paquete '{package}' deben ser una lista") for dep in dependencies: if dep not in packages: raise ValueError( f"Dependencia faltante: el paquete '{package}' depende del paquete no definido '{dep}'" ) dfs(dep) path.pop() visiting.remove(package) visited.add(package) order.append(package) for package in packages: dfs(package) return order

Resultado

#2

Votos ganadores

1 / 3

Puntuacion media

87
Modelos evaluadores OpenAI GPT-5.2

Puntuacion total

88

Comentario general

Implementa una ordenación topológica DFS correcta con detección explícita de dependencias circulares (mediante un conjunto de pila de recursión) y dependencias faltantes (tanto al entrar en dfs como al iterar las dependencias). Produce un orden válido de dependencia primero entre componentes desconectados y maneja entradas vacías. Los mensajes de error son descriptivos e incluyen una ruta del ciclo. Los inconvenientes menores son algunas comprobaciones redundantes (el paquete no está en los paquetes en dfs es inalcanzable dada la comprobación de dependencia anterior) y un trabajo extra de validación de entrada ligeramente superior a los requisitos, pero estos no perjudican la corrección.

Ver detalle de evaluacion

Correccion

Peso 35%
92

Ordenación topológica DFS correcta con detección de ciclos de pila de recursión; genera correctamente ValueError para ciclos y para dependencias no presentes en la entrada; mantiene el invariante de dependencia antes de dependiente.

Integridad

Peso 20%
90

Cubre todos los comportamientos especificados (orden válido, error de ciclo, error de dependencia faltante) y funciona para grafos vacíos y desconectados; incluye mensajes descriptivos.

Calidad del codigo

Peso 20%
78

Legible y bien estructurado con docstring y nombres de variables claros; redundancia menor (comprobación de paquete faltante dentro de dfs más comprobación de dependencia) y trabajo extra de ruta/índice pero aceptable.

Valor practico

Peso 15%
84

Más práctico en uso real debido a comprobaciones defensivas (por ejemplo, tipo de lista de dependencias) y mensajes de error detallados que incluyen la cadena del ciclo.

Seguimiento de instrucciones

Peso 10%
96

Cumple la intención de la firma, no utiliza bibliotecas externas, genera ValueError para ambos casos de error requeridos con mensajes descriptivos y devuelve un orden válido.

Modelos evaluadores Anthropic Claude Sonnet 4.6

Puntuacion total

82

Comentario general

La Respuesta A implementa un ordenamiento topológico correcto basado en DFS con un buen manejo de errores. Detecta correctamente dependencias circulares y faltantes. Sin embargo, hay un error sutil: la verificación de dependencias faltantes para un paquete que no está en `packages` se realiza al inicio de `dfs`, pero la verificación `if package not in packages` ocurre antes de la verificación `visiting`, lo que significa que si se alcanza un paquete faltante de alguna manera, se eleva correctamente. Lo que es más importante, la verificación `if dep not in packages` dentro del bucle es redundante con la verificación en la parte superior de `dfs`, pero ambas están presentes. El código también incluye validación adicional (verificaciones isinstance) que agrega robustez. El seguimiento de la ruta para la detección de ciclos es correcto. El código está limpio y bien documentado.

Ver detalle de evaluacion

Correccion

Peso 35%
85

La Respuesta A implementa correctamente el ordenamiento topológico con DFS, detecta dependencias circulares con seguimiento de ruta y eleva ValueError para dependencias faltantes. La lógica es sólida y maneja correctamente los tres casos de ejemplo. Redundancia menor en las verificaciones de dependencias faltantes pero sin errores funcionales.

Integridad

Peso 20%
85

La Respuesta A maneja todos los casos requeridos: resolución válida, dependencias circulares y dependencias faltantes. También agrega validación adicional para los tipos de entrada. La cadena de documentación explica las reglas claramente.

Calidad del codigo

Peso 20%
75

La Respuesta A es legible y está bien comentada. Sin embargo, tiene cierta redundancia: la dependencia faltante se verifica tanto al inicio de dfs (para el paquete en sí) como dentro del bucle (para las dependencias). El uso de los conjuntos `visited` y `visiting` además de una lista `path` es un poco más complejo de lo necesario.

Valor practico

Peso 15%
75

La Respuesta A proporciona mensajes de error claros con contexto (qué paquete depende de qué paquete indefinido y la ruta completa del ciclo). La validación adicional isinstance agrega cierta robustez para el uso en el mundo real.

Seguimiento de instrucciones

Peso 10%
90

La Respuesta A sigue todas las instrucciones: firma de función correcta, eleva ValueError tanto para dependencias circulares como faltantes, sin importaciones externas y devuelve un orden de instalación válido.

Modelos evaluadores Google Gemini 2.5 Pro

Puntuacion total

90

Comentario general

La respuesta A proporciona una solución correcta y robusta utilizando un ordenamiento topológico estándar basado en DFS. Sus puntos fuertes incluyen una gestión clara del estado con los conjuntos `visited` y `visiting` y un excelente mensaje de error para dependencias circulares que muestra el ciclo exacto. Sin embargo, mezcla la lógica para verificar dependencias faltantes con el algoritmo de ordenamiento, lo que lleva a comprobaciones potencialmente redundantes y un código ligeramente menos limpio en comparación con la validación previa. También incluye algunas comprobaciones de tipos adicionales que, si bien son robustas, añaden un poco de verbosidad.

Ver detalle de evaluacion

Correccion

Peso 35%
90

La solución es funcionalmente correcta y maneja todos los casos especificados, incluyendo grafos válidos, dependencias circulares y dependencias faltantes. La lógica DFS implementa correctamente un ordenamiento topológico.

Integridad

Peso 20%
100

La respuesta cumple plenamente con todos los requisitos de la indicación. Devuelve una lista válida, genera ValueError para las dos condiciones de error especificadas y no utiliza bibliotecas externas.

Calidad del codigo

Peso 20%
80

El código es de buena calidad, con nombres de variables claros y una implementación DFS estándar. El mensaje de error para ciclos es particularmente útil. Sin embargo, mezcla la validación (comprobaciones de dependencias faltantes) dentro del algoritmo de ordenamiento, lo que es un diseño ligeramente menos limpio.

Valor practico

Peso 15%
85

La función es una implementación práctica y útil de un resolvedor de dependencias. Podría usarse en escenarios del mundo real. El mensaje de error detallado del ciclo añade un valor práctico significativo para la depuración.

Seguimiento de instrucciones

Peso 10%
100

La solución sigue perfectamente todas las instrucciones, incluyendo la firma de la función, los tipos de error requeridos y la restricción de no usar bibliotecas externas.

def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]: """Resuelve las dependencias de los paquetes y devuelve un orden de instalación válido. Args: packages: Diccionario que mapea nombres de paquetes a su lista de dependencias. Returns: Una lista de nombres de paquetes en orden de instalación válido (dependencias primero). Raises: ValueError: Si hay una dependencia circular o una dependencia faltante. """ # Primero, comprueba las dependencias faltantes all_package_names = set(packages.keys()) for package, deps in packages.item...

Mostrar respuesta completa

def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]: """Resuelve las dependencias de los paquetes y devuelve un orden de instalación válido. Args: packages: Diccionario que mapea nombres de paquetes a su lista de dependencias. Returns: Una lista de nombres de paquetes en orden de instalación válido (dependencias primero). Raises: ValueError: Si hay una dependencia circular o una dependencia faltante. """ # Primero, comprueba las dependencias faltantes 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"Dependencia faltante: el paquete '{package}' depende de '{dep}', " f"que no está definido en la entrada." ) # Ordenación topológica usando DFS # Estados: 0 = no visitado, 1 = en la ruta actual (visitando), 2 = completamente procesado state = {pkg: 0 for pkg in packages} order = [] def dfs(node, path): if state[node] == 2: return if state[node] == 1: # Encuentra el ciclo en la ruta cycle_start = path.index(node) cycle = path[cycle_start:] + [node] raise ValueError( f"Dependencia circular detectada: {' -> '.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

Resultado

#1 | Ganador

Votos ganadores

2 / 3

Puntuacion media

89
Modelos evaluadores OpenAI GPT-5.2

Puntuacion total

85

Comentario general

Implementa un ordenamiento topológico DFS correcto con una clara comprobación previa de dependencias faltantes y detección de ciclos mediante un mapa de estado y una lista de ruta. Debería funcionar para entradas válidas típicas y grafos desconectados. Sin embargo, no realiza ninguna validación de que los valores de dependencia sean listas (podría fallar con un TypeError), y su firma dfs incluye una lista de ruta mutable pasada recursivamente, lo cual está bien pero es un poco menos limpio. También carece de alguna protección para entradas que no sean diccionarios. En general, es sólido pero un poco menos robusto que A.

Ver detalle de evaluacion

Correccion

Peso 35%
88

Produce un orden topológico correcto y lanza ValueError para dependencias faltantes (comprobación previa) y ciclos (estado==1). Ligeramente menos resistente a formas de entrada inesperadas (puede lanzar no-ValueError si las dependencias no son iterables), lo que puede afectar la corrección bajo una interpretación más amplia.

Integridad

Peso 20%
83

Cubre los comportamientos especificados principales y grafos con múltiples componentes; las dependencias faltantes se manejan globalmente antes de la traversa. No maneja explícitamente listas de dependencias mal formadas, lo que puede generar excepciones fuera del patrón ValueError requerido.

Calidad del codigo

Peso 20%
80

Limpio y directo con un enfoque claro de máquina de estados y docstring. Pasar la ruta como parámetro está bien pero es un poco más ruidoso; en general, es ligeramente más limpio que A en estructura.

Valor practico

Peso 15%
79

Práctico para entradas bien formadas y proporciona mensajes de error útiles; menos robusto ante entradas mal formadas (puede lanzar TypeError), lo que reduce la fiabilidad en el uso del mundo real.

Seguimiento de instrucciones

Peso 10%
94

Sigue la regla de no importar y cumple los requisitos principales con ValueErrors para dependencias faltantes y ciclos; alineación ligeramente más débil en el sentido de que las entradas mal formadas pueden lanzar excepciones no-ValueError.

Modelos evaluadores Anthropic Claude Sonnet 4.6

Puntuacion total

88

Comentario general

La respuesta B es limpia, está bien estructurada y es correcta. Separa la comprobación de dependencias faltantes en una pre-pasada antes de la DFS, lo que resulta en un diseño más limpio. La DFS utiliza un diccionario de estados (0/1/2), que es un enfoque clásico y eficiente. La detección de ciclos con seguimiento de ruta es correcta. El código es legible, está bien documentado con un docstring adecuado y maneja casos extremos como entrada vacía y componentes desconectados. El único problema menor es que la lista `path` se pasa como argumento a `dfs` en lugar de ser una variable de cierre, lo que es ligeramente menos elegante pero funcionalmente correcto.

Ver detalle de evaluacion

Correccion

Peso 35%
90

La respuesta B implementa correctamente el orden topológico con DFS utilizando un enfoque de máquina de estados. La pre-pasada para dependencias faltantes es limpia y correcta. La detección de ciclos con seguimiento de ruta funciona correctamente. Maneja todos los casos extremos, incluida la entrada vacía y los componentes desconectados.

Integridad

Peso 20%
90

La respuesta B maneja todos los casos requeridos de forma completa. El docstring con secciones Args, Returns y Raises es exhaustivo. La pre-pasada para dependencias faltantes y la DFS para el orden topológico cubren todos los escenarios.

Calidad del codigo

Peso 20%
85

La respuesta B utiliza una máquina de estados limpia (0/1/2), que es un enfoque estándar y eficiente. La separación de la comprobación de dependencias faltantes de la lógica DFS mejora la legibilidad. El código es conciso y sigue bien las convenciones de Python.

Valor practico

Peso 15%
80

La respuesta B proporciona mensajes de error claros y descriptivos. La separación limpia de la validación y la lógica del algoritmo facilita su mantenimiento y extensión. El código es práctico y está listo para producción.

Seguimiento de instrucciones

Peso 10%
90

La respuesta B sigue todas las instrucciones: firma de función correcta, lanza ValueError tanto para dependencias circulares como faltantes con mensajes descriptivos, sin importaciones externas y devuelve un orden de instalación válido.

Modelos evaluadores Google Gemini 2.5 Pro

Puntuacion total

95

Comentario general

La respuesta B presenta una solución muy bien estructurada y correcta. Su principal fortaleza es la clara separación de responsabilidades: primero valida la entrada comprobando todas las dependencias faltantes en una sola pasada y solo entonces procede a la ordenación topológica. Esto hace que el código sea más eficiente y fácil de razonar. La implementación DFS es estándar y los mensajes de error son muy descriptivos, especialmente para los ciclos. El código es limpio, legible y sigue buenas prácticas.

Ver detalle de evaluacion

Correccion

Peso 35%
95

La solución es muy correcta. Identifica correctamente las dependencias faltantes en un paso de preprocesamiento y luego utiliza un algoritmo DFS estándar para encontrar un orden válido o detectar ciclos. Todos los casos extremos se manejan correctamente.

Integridad

Peso 20%
100

La respuesta está completamente completa. Cumple con todos los requisitos, incluida la firma de la función, el tipo de retorno, el manejo de errores tanto para dependencias circulares como faltantes, y es autónoma.

Calidad del codigo

Peso 20%
90

La calidad del código es excelente. La separación de la comprobación de dependencias faltantes del algoritmo de ordenación es una opción de diseño superior, lo que hace que el código sea más limpio y eficiente. La cadena de documentación está bien formateada y los mensajes de error son descriptivos.

Valor practico

Peso 15%
90

Esta solución tiene un alto valor práctico. Su estructura limpia, con la validación separada de la lógica principal, la hace más robusta y mantenible, lo cual es muy deseable en aplicaciones prácticas.

Seguimiento de instrucciones

Peso 10%
100

La solución cumple perfectamente con todas las instrucciones dadas en el prompt. La firma de la función es correcta, se generan las excepciones requeridas y no se utilizan importaciones.

Resumen comparativo

Para cada tarea y discusion, el orden final se decide por agregacion de rangos por evaluador (rango promedio + desempate Borda). La puntuacion media se muestra como referencia.

Evaluadores: 3

Votos ganadores

1 / 3

Puntuacion media

87
Ver esta respuesta

Votos ganadores

2 / 3

Puntuacion media

89
Ver esta respuesta

Resultados de evaluacion

Modelos evaluadores Google Gemini 2.5 Pro

Motivo del ganador

La respuesta B es la ganadora debido a su estructura de código superior. Al realizar una pre-verificación de todas las dependencias faltantes antes de iniciar la ordenación topológica, separa la validación del algoritmo principal. Este enfoque es más eficiente (evita comprobaciones redundantes) y da como resultado un código más limpio y fácil de mantener que la Respuesta A, que mezcla estas preocupaciones dentro de su función de recorrido.

Modelos evaluadores Anthropic Claude Sonnet 4.6

Motivo del ganador

Ambas respuestas son funcionalmente correctas y manejan todos los casos requeridos. La respuesta B es ligeramente mejor debido a su separación más limpia de responsabilidades (pre-pasada para dependencias faltantes vs. verificaciones en línea), el uso de un diccionario de estado para una gestión de estado DFS más limpia y una estructura de código general más limpia. La respuesta A tiene cierta redundancia en sus verificaciones de dependencias faltantes (verificando tanto al principio de dfs como dentro del bucle) e incluye validación adicional de isinstance que, si bien es robusta, agrega complejidad no requerida por la especificación. El enfoque de la respuesta B es más idiomático y legible para una implementación de ordenación topológica.

Modelos evaluadores OpenAI GPT-5.2

Motivo del ganador

La respuesta A es más robusta y se alinea mejor con los requisitos: detecta dependencias faltantes en el punto de uso, proporciona errores claros de ciclos y dependencias faltantes, e incluye verificaciones básicas de tipos que evitan errores inesperados en tiempo de ejecución. La respuesta B es mayormente correcta, pero es menos defensiva (puede fallar con listas de dependencias mal formadas) y ofrece una validación ligeramente menos completa, lo que hace que la A sea la mejor respuesta general para la evaluación comparativa.

X f L