Resposta A: OpenAI GPT-5.4
def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]: """ Retorna uma ordem de instalação válida para o grafo de dependência de pacotes fornecido. Regras: - Toda dependência deve aparecer antes do pacote que depende dela. - Levanta ValueError se uma dependência estiver faltando na entrada. - Levanta ValueError se uma dependência circular for detectada. """ if not isinstance(packages, dict): raise ValueError("packages deve ser um dicionário mapeando nomes de pacotes para listas de dependências") visited = set() # Pacotes totalmente processados...
Mostrar resposta completa ▼
def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]: """ Retorna uma ordem de instalação válida para o grafo de dependência de pacotes fornecido. Regras: - Toda dependência deve aparecer antes do pacote que depende dela. - Levanta ValueError se uma dependência estiver faltando na entrada. - Levanta ValueError se uma dependência circular for detectada. """ if not isinstance(packages, dict): raise ValueError("packages deve ser um dicionário mapeando nomes de pacotes para listas de dependências") visited = set() # Pacotes totalmente processados visiting = set() # Pacotes atualmente na pilha 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( "Dependência circular detectada: " + " -> ".join(cycle) ) if package not in packages: raise ValueError(f"Dependência faltando: '{package}' não é um pacote definido") visiting.add(package) path.append(package) dependencies = packages[package] if not isinstance(dependencies, list): raise ValueError(f"Dependências para o pacote '{package}' devem ser uma lista") for dep in dependencies: if dep not in packages: raise ValueError( f"Dependência faltando: o pacote '{package}' depende do pacote indefinido '{dep}'" ) dfs(dep) path.pop() visiting.remove(package) visited.add(package) order.append(package) for package in packages: dfs(package) return order
Resultado
Votos de vitoria
1 / 3
Pontuacao media
Pontuacao total
Comentario geral
Implementa uma ordenação topológica correta baseada em DFS com deteção explícita de dependências circulares (através de um conjunto de pilha de recursão) e dependências em falta (tanto ao entrar na dfs como ao iterar as dependências). Produz uma ordem válida de dependência primeiro em componentes desconectados e lida com entrada vazia. As mensagens de erro são descritivas e incluem um caminho de ciclo. Pequenas desvantagens são algumas verificações redundantes (pacote não em pacotes em dfs é inalcançável dada a verificação de dependência anterior) e validação de entrada ligeiramente extra além dos requisitos, mas estas não prejudicam a correção.
Ver detalhes da avaliacao ▼
Correcao
Peso 35%Ordenação topológica DFS correta com deteção de ciclo de pilha de recursão; levanta corretamente ValueError para ciclos e para dependências não presentes na entrada; mantém o invariante dependência-antes-dependente.
Completude
Peso 20%Cobre todos os comportamentos especificados (ordem válida, erro de ciclo, erro de dependência em falta) e funciona para grafos vazios e desconectados; inclui mensagens descritivas.
Qualidade do codigo
Peso 20%Legível e bem estruturado com docstring e nomes de variáveis claros; pequena redundância (verificação de pacote em falta dentro de dfs mais verificação de dependência) e trabalho extra de caminho/índice, mas aceitável.
Valor pratico
Peso 15%Mais prático em uso real devido a verificações defensivas (por exemplo, tipo de lista de dependências) e mensagens de erro detalhadas, incluindo a cadeia de ciclo.
Seguimento de instrucoes
Peso 10%Cumpre a intenção da assinatura, não usa bibliotecas externas, levanta ValueError para ambos os casos de erro necessários com mensagens descritivas e retorna uma ordem válida.
Pontuacao total
Comentario geral
A Resposta A implementa uma ordenação topológica correta baseada em DFS com bom tratamento de erros. Detecta corretamente dependências circulares e ausentes. No entanto, há um bug subtil: a verificação de dependência ausente para um pacote que não está em `packages` é feita no início de `dfs`, mas a verificação `if package not in packages` ocorre antes da verificação `visiting`, o que significa que se um pacote ausente for alcançado de alguma forma, ele é levantado corretamente. Mais importante ainda, a verificação `if dep not in packages` dentro do loop é redundante com a verificação no topo de `dfs`, mas ambas estão presentes. O código também inclui validação extra (verificações isinstance) que adiciona robustez. O rastreamento de caminho para detecção de ciclo está correto. O código é limpo e bem documentado.
Ver detalhes da avaliacao ▼
Correcao
Peso 35%A Resposta A implementa corretamente a ordenação topológica com DFS, detecta dependências circulares com rastreamento de caminho e levanta ValueError para dependências ausentes. A lógica é sólida e lida corretamente com todos os três casos de exemplo. Redundância menor nas verificações de dependência ausente, mas sem bugs funcionais.
Completude
Peso 20%A Resposta A lida com todos os casos necessários: resolução válida, dependências circulares e dependências ausentes. Também adiciona validação extra para tipos de entrada. A docstring explica as regras claramente.
Qualidade do codigo
Peso 20%A Resposta A é legível e bem comentada. No entanto, tem alguma redundância: a dependência ausente é verificada tanto no início de dfs (para o próprio pacote) quanto dentro do loop (para as dependências). O uso de ambos os conjuntos `visited` e `visiting` mais uma lista `path` é ligeiramente mais complexo do que o necessário.
Valor pratico
Peso 15%A Resposta A fornece mensagens de erro claras com contexto (qual pacote depende de qual pacote indefinido e o caminho completo do ciclo). A validação extra isinstance adiciona alguma robustez para uso no mundo real.
Seguimento de instrucoes
Peso 10%A Resposta A segue todas as instruções: assinatura de função correta, levanta ValueError para dependências circulares e ausentes, sem importações externas e retorna uma ordem de instalação válida.
Pontuacao total
Comentario geral
A Resposta A fornece uma solução correta e robusta usando uma ordenação topológica padrão baseada em DFS. Seus pontos fortes incluem o gerenciamento claro do estado com os conjuntos `visited` e `visiting` e uma excelente mensagem de erro para dependências circulares que mostra o ciclo exato. No entanto, ela mistura a lógica de verificação de dependências ausentes com o algoritmo de ordenação, levando a verificações potencialmente redundantes e um código ligeiramente menos limpo em comparação com a realização da validação antecipadamente. Ela também inclui alguma verificação de tipo extra que, embora robusta, adiciona um pouco de verbosidade.
Ver detalhes da avaliacao ▼
Correcao
Peso 35%A solução é funcionalmente correta e lida com todos os casos especificados, incluindo grafos válidos, dependências circulares e dependências ausentes. A lógica DFS implementa corretamente uma ordenação topológica.
Completude
Peso 20%A resposta atende integralmente a todos os requisitos da solicitação. Ela retorna uma lista válida, levanta ValueError para as duas condições de erro especificadas e não usa bibliotecas externas.
Qualidade do codigo
Peso 20%O código é de boa qualidade, com nomes de variáveis claros e uma implementação DFS padrão. A mensagem de erro para ciclos é particularmente útil. No entanto, ela mistura a validação (verificações de dependências ausentes) dentro do algoritmo de ordenação, o que é um design ligeiramente menos limpo.
Valor pratico
Peso 15%A função é uma implementação prática e útil de um resolvedor de dependências. Ela poderia ser usada em cenários do mundo real. A mensagem de erro detalhada de ciclo adiciona um valor prático significativo para depuração.
Seguimento de instrucoes
Peso 10%A solução segue perfeitamente todas as instruções, incluindo a assinatura da função, os tipos de erro exigidos e a restrição de não usar bibliotecas externas.