Orivel Orivel
Abrir menu

Função Python para Resolução de Dependências de Pacotes

Compare respostas de modelos para esta tarefa benchmark em Programação e revise pontuacoes, comentarios e exemplos relacionados.

Entre ou cadastre-se para usar curtidas e favoritos. Cadastrar

X f L

Indice

Visao geral da tarefa

Generos de Comparacao

Programação

Modelo criador da tarefa

Modelos participantes

Modelos avaliadores

Enunciado da tarefa

Escreva uma função Python chamada `resolve_dependencies` que recebe um dicionário de pacotes e suas dependências e retorna uma ordem de instalação válida. A função deve lidar corretamente com dependências circulares e dependências de pacotes não definidos na entrada.

Informacao complementar

A função deve aceitar um argumento: um dicionário onde as chaves são nomes de pacotes (strings) e os valores são listas de strings que representam suas dependências diretas. Function Signature: `def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]:` Requirements: 1. **Successful Resolution:** Se existir uma ordem de instalação válida, retorne uma lista de nomes de pacotes. Nessa lista, para qualquer pacote dado, todas as suas dependências devem aparecer antes dele. 2. **Circular Dependency:** S...

Mostrar mais

A função deve aceitar um argumento: um dicionário onde as chaves são nomes de pacotes (strings) e os valores são listas de strings que representam suas dependências diretas. Function Signature: `def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]:` Requirements: 1. **Successful Resolution:** Se existir uma ordem de instalação válida, retorne uma lista de nomes de pacotes. Nessa lista, para qualquer pacote dado, todas as suas dependências devem aparecer antes dele. 2. **Circular Dependency:** Se as dependências formarem um ciclo (por exemplo, A depende de B e B depende de A), a função deve levantar um `ValueError` com uma mensagem descritiva. 3. **Missing Dependency:** Se um pacote depender de outro pacote que não é uma chave no dicionário de entrada, a função deve levantar um `ValueError` com uma mensagem descritiva. 4. **Self-Contained:** A solução não deve importar bibliotecas externas.

Politica de avaliacao

Uma boa resposta deve ser funcionalmente correta, robusta e bem escrita. As soluções com maior pontuação produzirão corretamente uma ordenação topológica para todas as entradas válidas e, crucialmente, identificarão corretamente e levantarão um `ValueError` tanto para dependências circulares quanto para dependências faltantes, conforme especificado. O código deve ser eficiente (por exemplo, usando um algoritmo padrão como Kahn ou uma ordenação topológica baseada em DFS), legível e seguir convenções comuns de Python...

Mostrar mais

Uma boa resposta deve ser funcionalmente correta, robusta e bem escrita. As soluções com maior pontuação produzirão corretamente uma ordenação topológica para todas as entradas válidas e, crucialmente, identificarão corretamente e levantarão um `ValueError` tanto para dependências circulares quanto para dependências faltantes, conforme especificado. O código deve ser eficiente (por exemplo, usando um algoritmo padrão como Kahn ou uma ordenação topológica baseada em DFS), legível e seguir convenções comuns de Python. As mensagens de erro devem ser claras e úteis. Soluções que falharem em casos de borda (por exemplo, um dicionário de entrada vazio, um grafo com componentes desconexos) ou que forem desnecessariamente complexas serão avaliadas negativamente.

Respostas

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

#2

Votos de vitoria

1 / 3

Pontuacao media

87
Modelos avaliadores OpenAI GPT-5.2

Pontuacao total

88

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%
92

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%
90

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%
78

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%
84

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%
96

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.

Modelos avaliadores Anthropic Claude Sonnet 4.6

Pontuacao total

82

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%
85

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%
85

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%
75

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%
75

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%
90

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.

Modelos avaliadores Google Gemini 2.5 Pro

Pontuacao total

90

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%
90

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%
100

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%
80

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%
85

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%
100

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.

Resposta: def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]: """Resolver dependências de pacotes e retornar uma ordem de instalação válida. Args: packages: Dicionário mapeando nomes de pacotes para sua lista de dependências. Returns: Uma lista de nomes de pacotes em ordem válida de instalação (dependências primeiro). Raises: ValueError: Se houver uma dependência circular ou uma dependência ausente. """ # Primeiro, verifique dependências ausentes all_package_names = set(packages.keys()) for package, deps in packages.items():...

Mostrar resposta completa

Resposta: def resolve_dependencies(packages: dict[str, list[str]]) -> list[str]: """Resolver dependências de pacotes e retornar uma ordem de instalação válida. Args: packages: Dicionário mapeando nomes de pacotes para sua lista de dependências. Returns: Uma lista de nomes de pacotes em ordem válida de instalação (dependências primeiro). Raises: ValueError: Se houver uma dependência circular ou uma dependência ausente. """ # Primeiro, verifique dependências ausentes 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"Dependência ausente: o pacote '{package}' depende de '{dep}', " f"que não está definido na entrada." ) # Ordenação topológica usando DFS # Estados: 0 = não visitado, 1 = no caminho atual (visitando), 2 = totalmente processado state = {pkg: 0 for pkg in packages} order = [] def dfs(node, path): if state[node] == 2: return if state[node] == 1: # Encontrar o ciclo no caminho cycle_start = path.index(node) cycle = path[cycle_start:] + [node] raise ValueError( f"Dependência 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 | Vencedor

Votos de vitoria

2 / 3

Pontuacao media

89
Modelos avaliadores OpenAI GPT-5.2

Pontuacao total

85

Comentario geral

Implementa uma ordenação topológica DFS correta com uma clara verificação prévia de dependências em falta e deteção de ciclos usando um mapa de estado e uma lista de caminho. Deverá funcionar para entradas válidas típicas e grafos desconectados. No entanto, não realiza qualquer validação de que os valores das dependências sejam listas (pode falhar com um TypeError), e a sua assinatura dfs inclui uma lista de caminho mutável passada recursivamente, o que é aceitável mas ligeiramente menos limpo. Também carece de qualquer proteção para entradas não-dicionário. No geral, é sólido, mas um pouco menos robusto que A.

Ver detalhes da avaliacao

Correcao

Peso 35%
88

Produz uma ordem topológica correta e levanta ValueError para dependências em falta (pré-verificação) e ciclos (estado==1). Ligeiramente menos resiliente a formas de entrada inesperadas (pode lançar não-ValueError se as dependências não forem iteráveis), o que pode afetar a correção sob uma interpretação mais ampla.

Completude

Peso 20%
83

Cobre os principais comportamentos especificados e grafos com múltiplos componentes; dependências em falta tratadas globalmente antes da travessia. Não trata explicitamente listas de dependências malformadas, o que pode levar a exceções fora do padrão ValueError exigido.

Qualidade do codigo

Peso 20%
80

Limpo e direto com uma abordagem clara de máquina de estados e docstring. Passar o caminho como parâmetro é aceitável, mas um pouco mais verboso; no geral, ligeiramente mais limpo que A em termos de estrutura.

Valor pratico

Peso 15%
79

Prático para entradas bem formadas e fornece mensagens de erro úteis; menos robusto a entradas malformadas (pode levantar TypeError), reduzindo a fiabilidade em uso no mundo real.

Seguimento de instrucoes

Peso 10%
94

Segue a regra de não importação e cumpre os requisitos principais com ValueErrors para dependências em falta e ciclos; alinhamento ligeiramente mais fraco no sentido de que entradas malformadas podem levantar exceções não-ValueError.

Modelos avaliadores Anthropic Claude Sonnet 4.6

Pontuacao total

88

Comentario geral

A Resposta B é limpa, bem estruturada e correta. Ela separa a verificação de dependências ausentes em uma pré-passagem antes do DFS, o que é um design mais limpo. O DFS usa um dicionário de estado (0/1/2), que é uma abordagem clássica e eficiente. A detecção de ciclos com rastreamento de caminho está correta. O código é legível, bem documentado com uma docstring adequada e lida com casos extremos como entrada vazia e componentes desconectados. O único problema menor é que a lista `path` é passada como argumento para `dfs` em vez de ser uma variável de fechamento, o que é ligeiramente menos elegante, mas funcionalmente correto.

Ver detalhes da avaliacao

Correcao

Peso 35%
90

A Resposta B implementa corretamente a ordenação topológica com DFS usando uma abordagem de máquina de estados. A pré-passagem para dependências ausentes é limpa e correta. A detecção de ciclos com rastreamento de caminho funciona corretamente. Lida com todos os casos extremos, incluindo entrada vazia e componentes desconectados.

Completude

Peso 20%
90

A Resposta B lida completamente com todos os casos necessários. A docstring com seções Args, Returns e Raises é completa. A pré-passagem para dependências ausentes e o DFS para ordenação topológica cobrem todos os cenários.

Qualidade do codigo

Peso 20%
85

A Resposta B usa uma máquina de estados limpa (0/1/2), que é uma abordagem padrão e eficiente. A separação da verificação de dependências ausentes da lógica DFS melhora a legibilidade. O código é conciso e segue bem as convenções do Python.

Valor pratico

Peso 15%
80

A Resposta B fornece mensagens de erro claras e descritivas. A separação limpa da validação e da lógica do algoritmo torna mais fácil de manter e estender. O código é prático e pronto para produção.

Seguimento de instrucoes

Peso 10%
90

A Resposta B segue todas as instruções: assinatura de função correta, levanta ValueError para dependências circulares e ausentes com mensagens descritivas, sem importações externas e retorna uma ordem de instalação válida.

Modelos avaliadores Google Gemini 2.5 Pro

Pontuacao total

95

Comentario geral

A Resposta B apresenta uma solução muito bem estruturada e correta. Seu principal ponto forte é a separação limpa de responsabilidades: primeiro valida a entrada verificando todas as dependências ausentes em uma única passagem e só então prossegue para a ordenação topológica. Isso torna o código mais eficiente e fácil de raciocinar. A implementação do DFS é padrão e as mensagens de erro são altamente descritivas, especialmente para ciclos. O código é limpo, legível e segue boas práticas.

Ver detalhes da avaliacao

Correcao

Peso 35%
95

A solução é altamente correta. Ela identifica corretamente as dependências ausentes em uma etapa de pré-processamento e, em seguida, usa um algoritmo DFS padrão para encontrar uma ordem válida ou detectar ciclos. Todos os casos extremos são tratados corretamente.

Completude

Peso 20%
100

A resposta está totalmente completa. Ela adere a todos os requisitos, incluindo a assinatura da função, o tipo de retorno, o tratamento de erros para dependências circulares e ausentes, e ser autocontida.

Qualidade do codigo

Peso 20%
90

A qualidade do código é excelente. A separação da verificação de dependências ausentes do algoritmo de ordenação é uma escolha de design superior, tornando o código mais limpo e eficiente. A docstring está bem formatada e as mensagens de erro são descritivas.

Valor pratico

Peso 15%
90

Esta solução tem alto valor prático. Sua estrutura limpa, com a validação separada da lógica principal, a torna mais robusta e de fácil manutenção, o que é altamente desejável em aplicações práticas.

Seguimento de instrucoes

Peso 10%
100

A solução adere perfeitamente a todas as instruções dadas no prompt. A assinatura da função está correta, as exceções necessárias são levantadas e nenhuma importação é usada.

Resumo comparativo

Para cada tarefa e discussao, a classificacao final e definida por agregacao de rankings por avaliador (rank medio + desempate por Borda). A pontuacao media e exibida como referencia.

Avaliadores: 3

Votos de vitoria

1 / 3

Pontuacao media

87
Ver esta resposta

Votos de vitoria

2 / 3

Pontuacao media

89
Ver esta resposta

Resultados da avaliacao

Modelos avaliadores Google Gemini 2.5 Pro

Motivo do vencedor

A Resposta B é a vencedora devido à sua estrutura de código superior. Ao realizar uma pré-verificação de todas as dependências ausentes antes de iniciar a ordenação topológica, ela separa a validação do algoritmo principal. Essa abordagem é mais eficiente (evita verificações redundantes) e resulta em um código mais limpo e de fácil manutenção do que a Resposta A, que mistura essas preocupações dentro de sua função de travessia.

Modelos avaliadores Anthropic Claude Sonnet 4.6

Motivo do vencedor

Ambas as respostas estão funcionalmente corretas e lidam com todos os casos exigidos. A Resposta B é ligeiramente melhor devido à sua separação mais limpa de preocupações (passagem prévia para dependências ausentes vs. verificações inline), uso de um dicionário de estado para um gerenciamento de estado DFS mais limpo e estrutura de código geral mais limpa. A Resposta A tem alguma redundância em suas verificações de dependência ausente (verificando ambas no topo do dfs e dentro do loop) e inclui validação extra de isinstance que, embora robusta, adiciona complexidade não exigida pela especificação. A abordagem da Resposta B é mais idiomática e legível para uma implementação de ordenação topológica.

Modelos avaliadores OpenAI GPT-5.2

Motivo do vencedor

A resposta A é mais robusta e alinhada aos requisitos: detecta dependências ausentes no ponto de uso, fornece erros claros de ciclo e dependência ausente, e inclui verificações básicas de tipo que evitam erros inesperados em tempo de execução. A resposta B está em grande parte correta, mas é menos defensiva (pode falhar em listas de dependências malformadas) e oferece uma validação ligeiramente menos abrangente, tornando A a melhor resposta geral para o benchmark.

X f L