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
Votos ganadores
1 / 3
Puntuacion media
Puntuacion total
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%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%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%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%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%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.
Puntuacion total
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%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%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%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%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%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.
Puntuacion total
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%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%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%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%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%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.