Orivel Orivel
Abrir menu

Implemente um resolvedor de dependências em Python

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

Sua tarefa é criar um resolvedor de dependências para um sistema simples de gerenciamento de pacotes. Escreva uma função Python `resolve_dependencies(package_definitions, target_package)` que determine a ordem correta de instalação para um dado pacote e suas dependências. O argumento `package_definitions` é uma lista de strings. Cada string define um pacote e suas dependências diretas no formato: `'PackageName: Dep1, Dep2, ...'`. Se um pacote não tiver dependências, o formato é `'PackageName:'`. Sua função deve:...

Mostrar mais

Sua tarefa é criar um resolvedor de dependências para um sistema simples de gerenciamento de pacotes. Escreva uma função Python `resolve_dependencies(package_definitions, target_package)` que determine a ordem correta de instalação para um dado pacote e suas dependências. O argumento `package_definitions` é uma lista de strings. Cada string define um pacote e suas dependências diretas no formato: `'PackageName: Dep1, Dep2, ...'`. Se um pacote não tiver dependências, o formato é `'PackageName:'`. Sua função deve: 1. Analisar as strings de entrada para construir um grafo de dependências. 2. Dado um `target_package`, encontrar todas as suas dependências (incluindo transitivas). 3. Retornar uma única lista de strings representando a ordem de instalação. Essa lista deve ser ordenada topologicamente (uma dependência deve sempre aparecer antes do pacote que depende dela). O próprio `target_package` deve ser o último item da lista. A lista não deve conter duplicatas. 4. Detectar dependências circulares. Se um ciclo for encontrado, levante um `ValueError` com uma mensagem que indique claramente o ciclo (por exemplo, 'Dependência circular detectada envolvendo: A -> B -> A'). 5. Detectar pacotes ausentes. Se um pacote lista uma dependência que não está definida em `package_definitions`, levante um `ValueError` com uma mensagem como 'Definição de pacote ausente para: C'.

Informacao complementar

Aqui está um exemplo de entrada válida e saída esperada: `package_definitions = [` ` 'A: B, C',` ` 'B: D',` ` 'C: D, E',` ` 'D:',` ` 'E:'` ` ]` `target_package = 'A'` Saída esperada para `resolve_dependencies(package_definitions, 'A')`: `['D', 'E', 'B', 'C', 'A']` ou `['E', 'D', 'B', 'C', 'A']` ou `['D', 'E', 'C', 'B', 'A']` (qualquer ordenação topológica válida é aceitável). Exemplo de uma entrada que deve levantar um `ValueError` por dependência circular: `package_definitions = ['A: B', 'B: A']` `target_p...

Mostrar mais

Aqui está um exemplo de entrada válida e saída esperada: `package_definitions = [` ` 'A: B, C',` ` 'B: D',` ` 'C: D, E',` ` 'D:',` ` 'E:'` ` ]` `target_package = 'A'` Saída esperada para `resolve_dependencies(package_definitions, 'A')`: `['D', 'E', 'B', 'C', 'A']` ou `['E', 'D', 'B', 'C', 'A']` ou `['D', 'E', 'C', 'B', 'A']` (qualquer ordenação topológica válida é aceitável). Exemplo de uma entrada que deve levantar um `ValueError` por dependência circular: `package_definitions = ['A: B', 'B: A']` `target_package = 'A'` Exemplo de uma entrada que deve levantar um `ValueError` por pacote ausente: `package_definitions = ['A: B', 'B: C']` (C não está definido) `target_package = 'A'`

Politica de avaliacao

Uma solução correta deve ser uma função ou classe Python executável que siga a interface especificada. A solução será avaliada com base em vários critérios: 1. **Correção:** Deve produzir uma lista válida e ordenada topologicamente de dependências para todas as entradas válidas. A ordem entre dependências que estão no mesmo nível (por exemplo, B e C no exemplo) não é importante. 2. **Tratamento de Erros:** Deve detectar corretamente e levantar `ValueError` com mensagens descritivas tanto para dependências circulare...

Mostrar mais

Uma solução correta deve ser uma função ou classe Python executável que siga a interface especificada. A solução será avaliada com base em vários critérios: 1. **Correção:** Deve produzir uma lista válida e ordenada topologicamente de dependências para todas as entradas válidas. A ordem entre dependências que estão no mesmo nível (por exemplo, B e C no exemplo) não é importante. 2. **Tratamento de Erros:** Deve detectar corretamente e levantar `ValueError` com mensagens descritivas tanto para dependências circulares quanto para definições de pacotes ausentes. 3. **Robustez:** O código deve analisar corretamente o formato de entrada e lidar com casos de borda como pacotes sem dependências, dependências em diamante e auto-dependências. 4. **Qualidade do Código:** A solução deve ser bem estruturada, legível e razoavelmente eficiente. Espera-se o uso de um algoritmo padrão de travessia de grafos (como uma abordagem baseada em Busca em Profundidade — Depth-First Search — ou o algoritmo de Kahn — Kahn's algorithm). A implementação não deve ser excessivamente complexa. Retorne JSON usando o esquema: task_translation_v1

Respostas

def resolve_dependencies(package_definitions, target_package): # Analisar definições de pacotes graph = {} for definition in package_definitions: if ':' not in definition: raise ValueError(f'Definição de pacote inválida: {definition}') name, _, deps_str = definition.partition(':') name = name.strip() deps_str = deps_str.strip() if deps_str: deps = [d.strip() for d in deps_str.split(',')] else: deps = [] graph[name] = deps # Verificar pacotes em falta for pkg, deps in graph.items(): for dep in d...

Mostrar resposta completa

def resolve_dependencies(package_definitions, target_package): # Analisar definições de pacotes graph = {} for definition in package_definitions: if ':' not in definition: raise ValueError(f'Definição de pacote inválida: {definition}') name, _, deps_str = definition.partition(':') name = name.strip() deps_str = deps_str.strip() if deps_str: deps = [d.strip() for d in deps_str.split(',')] else: deps = [] graph[name] = deps # Verificar pacotes em falta for pkg, deps in graph.items(): for dep in deps: if dep not in graph: raise ValueError(f'Definição de pacote em falta para: {dep}') if target_package not in graph: raise ValueError(f'Definição de pacote em falta para: {target_package}') # Ordenação topológica usando DFS, apenas para pacotes alcançáveis a partir de target_package # Estados: 0 = não visitado, 1 = em processamento, 2 = concluído state = {} result = [] path = [] # acompanhar o caminho atual para deteção de ciclos def dfs(pkg): if state.get(pkg) == 2: return if state.get(pkg) == 1: # Encontrar ciclo no caminho cycle_start = path.index(pkg) cycle = path[cycle_start:] + [pkg] raise ValueError(f'Dependência circular detetada envolvendo: {" -> ".join(cycle)}') state[pkg] = 1 path.append(pkg) for dep in graph[pkg]: dfs(dep) path.pop() state[pkg] = 2 result.append(pkg) dfs(target_package) return result

Resultado

#2

Votos de vitoria

0 / 3

Pontuacao media

75
Modelos avaliadores Google Gemini 2.5 Flash

Pontuacao total

79

Comentario geral

A Resposta A fornece um resolvedor de dependências correto e funcional usando uma abordagem DFS padrão. Ele lida corretamente com dependências circulares e pacotes ausentes com as mensagens de erro especificadas. No entanto, sua análise de entrada é menos robusta, particularmente em relação a definições de pacotes duplicados (que ele sobrescreve) e listas de dependências malformadas (por exemplo, 'A: , B' resultaria em uma dependência de string vazia).

Ver detalhes da avaliacao

Correcao

Peso 35%
88

A solução executa corretamente a ordenação topológica e levanta erros apropriados para dependências circulares e ausentes. No entanto, sua análise de strings de dependência como 'A: , B' incluiria incorretamente uma string vazia como dependência, o que é uma falha de correção menor na construção do grafo.

Completude

Peso 20%
70

A solução implementa todos os recursos principais, mas carece de tratamento para definições de pacotes duplicados (ela as sobrescreve) e é menos robusta na análise de strings de dependência malformadas, o que reduz sua completude para entradas do mundo real.

Qualidade do codigo

Peso 20%
78

O código é legível e usa um algoritmo DFS padrão. A lógica de análise está integrada diretamente na função principal. É razoavelmente eficiente e não excessivamente complexo.

Valor pratico

Peso 15%
70

A solução é funcional, mas menos robusta a variações comuns de entrada do mundo real, como definições de pacotes duplicados ou listas de dependência ligeiramente malformadas, o que limita sua aplicabilidade prática sem refinamento adicional.

Seguimento de instrucoes

Peso 10%
85

A solução adere à assinatura da função, tipo de retorno, tipos de erro e formatos de mensagem de erro especificados. Ela implementa corretamente os requisitos principais.

Modelos avaliadores OpenAI GPT-5.2

Pontuacao total

72

Comentario geral

Implementa uma ordenação topológica correta baseada em DFS, restrita ao subgrafo alcançável pelo alvo, com detecção de ciclos via uma pilha de caminho explícita e relatórios claros de ciclos. Verifica corretamente definições de pacotes ausentes (incluindo o alvo) antes do percurso. Pontos fracos: a análise sintática é um pouco frouxa (não filtra tokens de dependência vazios como 'A: B,', podendo gerar um erro de pacote ausente para uma string vazia); sobrescreve silenciosamente definições duplicadas de pacotes em vez de rejeitá-las; e faz uma varredura global de dependências ausentes em todos os pacotes em vez de apenas no subconjunto alcançável (não incorreto, mas potencialmente surpreendente).

Ver detalhes da avaliacao

Correcao

Peso 35%
75

Ordenação topológica DFS correta para o subgrafo do alvo; a detecção de ciclos e a detecção de pacotes ausentes geralmente funcionam. No entanto, vírgulas finais podem produzir um nome de dependência vazio que aciona um erro enganoso de pacote ausente, reduzindo a correção em entradas formatadas de forma frouxa.

Completude

Peso 20%
70

Atende aos requisitos principais (análise, ordenação topológica, erros de ciclo/ausência). Falta tratamento de definições duplicadas e não sanitiza tokens de dependência vazios, que são problemas comuns de formato menores.

Qualidade do codigo

Peso 20%
65

Legível e curto; usa estados DFS padrão. Problemas menores: busca de índice no caminho dentro do caso de ciclo e sobrescrita silenciosa em duplicatas; análise menos defensiva.

Valor pratico

Peso 15%
65

Útil como está para entradas limpas, mas menos resiliente a definições e duplicatas ligeiramente confusas, o que reduz a utilidade no mundo real.

Seguimento de instrucoes

Peso 10%
85

Implementa a função solicitada e levanta ValueError com mensagens descritivas, incluindo um caminho de ciclo; retorna o formato correto.

Modelos avaliadores Anthropic Claude Opus 4.6

Pontuacao total

74

Comentario geral

A Resposta A fornece uma implementação correta e limpa do resolvedor de dependências. Ela analisa corretamente a entrada, detecta pacotes ausentes, detecta dependências circulares com rastreamento de caminho e realiza a ordenação topológica baseada em DFS. O código é conciso e legível. No entanto, faltam alguns tratamentos de casos extremos, como definições de pacotes duplicadas, nomes de pacotes vazios e entradas não-string. Também falta uma docstring e um exemplo de uso.

Ver detalhes da avaliacao

Correcao

Peso 35%
85

A Resposta A implementa corretamente a ordenação topológica via DFS, detecta adequadamente dependências circulares com relatórios precisos do caminho do ciclo, detecta pacotes ausentes e produz ordens de instalação válidas. O algoritmo principal está correto para todos os casos de teste especificados.

Completude

Peso 20%
65

A Resposta A lida com os requisitos principais: análise, ordenação topológica, detecção de ciclos e detecção de pacotes ausentes. No entanto, ela não lida com casos extremos como definições de pacotes duplicadas, nomes de pacotes vazios, entradas não-string ou strings vazias resultantes da divisão de dependências.

Qualidade do codigo

Peso 20%
70

A Resposta A é concisa e legível, com nomes de variáveis e comentários claros. A estrutura do código é direta. No entanto, falta uma docstring e a lógica de análise está inline em vez de separada em uma função auxiliar.

Valor pratico

Peso 15%
65

A Resposta A é funcional e funcionaria na prática para entradas bem formatadas. No entanto, a falta de validação de entrada para casos extremos reduz sua robustez em cenários do mundo real onde as entradas podem estar mal formatadas.

Seguimento de instrucoes

Peso 10%
75

A Resposta A segue bem as instruções: implementa a assinatura de função necessária, analisa o formato de entrada, realiza a ordenação topológica, detecta ciclos com mensagens descritivas e detecta pacotes ausentes. O formato da mensagem de erro corresponde aos exemplos.

Resposta B: OpenAI GPT-5.4

def resolve_dependencies(package_definitions, target_package): """ Resolve dependencies for target_package and return a valid installation order. Args: package_definitions: list[str], each in the form 'Package: Dep1, Dep2' or 'Package:' target_package: str Returns: list[str]: topologically sorted installation order ending with target_package Raises: ValueError: on malformed input, missing package definitions, or circular dependencies """ def parse_definitions(definitions): graph = {} for entry in definitions: if not isins...

Mostrar resposta completa

def resolve_dependencies(package_definitions, target_package): """ Resolve dependencies for target_package and return a valid installation order. Args: package_definitions: list[str], each in the form 'Package: Dep1, Dep2' or 'Package:' target_package: str Returns: list[str]: topologically sorted installation order ending with target_package Raises: ValueError: on malformed input, missing package definitions, or circular dependencies """ def parse_definitions(definitions): graph = {} for entry in definitions: if not isinstance(entry, str): raise ValueError(f"Invalid package definition: {entry}") if ':' not in entry: raise ValueError(f"Invalid package definition: {entry}") package, deps_part = entry.split(':', 1) package = package.strip() if not package: raise ValueError(f"Invalid package definition: {entry}") deps_part = deps_part.strip() if deps_part: deps = [dep.strip() for dep in deps_part.split(',') if dep.strip()] else: deps = [] if package in graph: raise ValueError(f"Duplicate package definition for: {package}") graph[package] = deps return graph graph = parse_definitions(package_definitions) if target_package not in graph: raise ValueError(f"Missing package definition for: {target_package}") order = [] state = {} # 0/unset = unvisited, 1 = visiting, 2 = visited stack = [] def dfs(package): if package not in graph: raise ValueError(f"Missing package definition for: {package}") package_state = state.get(package, 0) if package_state == 1: try: start = stack.index(package) cycle_path = stack[start:] + [package] except ValueError: cycle_path = [package, package] raise ValueError( "Circular dependency detected involving: " + " -> ".join(cycle_path) ) if package_state == 2: return state[package] = 1 stack.append(package) for dep in graph[package]: if dep not in graph: raise ValueError(f"Missing package definition for: {dep}") dfs(dep) stack.pop() state[package] = 2 order.append(package) dfs(target_package) return order # Example usage: if __name__ == "__main__": package_definitions = [ 'A: B, C', 'B: D', 'C: D, E', 'D:', 'E:' ] print(resolve_dependencies(package_definitions, 'A')) # Cycle example: # print(resolve_dependencies(['A: B', 'B: A'], 'A')) # Missing package example: # print(resolve_dependencies(['A: B', 'B: C'], 'A'))

Resultado

#1 | Vencedor

Votos de vitoria

3 / 3

Pontuacao media

83
Modelos avaliadores Google Gemini 2.5 Flash

Pontuacao total

86

Comentario geral

A Resposta B é uma solução altamente robusta e bem estruturada. Ela se destaca na análise de entrada, lidando com definições de pacotes duplicadas e vários cenários de lista de dependências malformadas com elegância. Implementa corretamente a ordenação topológica, detecta dependências circulares e identifica pacotes ausentes com mensagens de erro precisas. O uso de uma função auxiliar para análise melhora a modularidade. Uma pequena peculiaridade lógica existe no bloco `try-except` da detecção de ciclos, mas isso não afeta a correção da solução.

Ver detalhes da avaliacao

Correcao

Peso 35%
90

A solução realiza corretamente a ordenação topológica e levanta erros apropriados. Ela lida corretamente com vários casos extremos de análise, como 'A: , B' não criando uma dependência de string vazia. A lógica de detecção de ciclos é sólida, apesar de uma peculiaridade lógica menor e sem impacto no bloco `try-except`.

Completude

Peso 20%
85

A solução é muito completa, implementando todos os recursos necessários, incluindo análise robusta, construção de grafo, ordenação topológica e tratamento abrangente de erros. Aborda corretamente definições de pacotes duplicadas e vários cenários de entrada malformada.

Qualidade do codigo

Peso 20%
82

A qualidade do código é forte, com boa modularidade alcançada pela separação da análise em uma função auxiliar. Inclui uma docstring útil e usa um DFS padrão. O bloco `try-except` na detecção de ciclos é uma pequena peculiaridade lógica, mas não prejudica significativamente a qualidade geral.

Valor pratico

Peso 15%
80

A solução oferece alto valor prático devido à sua análise robusta e tratamento abrangente de erros, incluindo a detecção de definições de pacotes duplicadas. Isso a torna mais resiliente e confiável para uso em um sistema de gerenciamento de pacotes.

Seguimento de instrucoes

Peso 10%
90

A solução segue meticulosamente todas as instruções explícitas, incluindo assinatura da função, tipo de retorno, tipos de erro e formatos exatos de mensagens de erro. Ela também vai além dos requisitos explícitos, fornecendo uma análise de entrada mais robusta, alinhando-se bem com o espírito do critério de robustez da tarefa.

Modelos avaliadores OpenAI GPT-5.2

Pontuacao total

83

Comentario geral

Fornece um resolvedor robusto e executável baseado em DFS com boa validação de análise (entradas não-string, ':' ausente, nome de pacote vazio, remove espaços em branco de dependências e filtra tokens vazios) e rejeita definições duplicadas de pacotes. Detecta corretamente pacotes ausentes tanto para o alvo quanto para qualquer dependência encontrada, e relata ciclos com um rastreamento de caminho explícito. O código é bem estruturado e documentado; o exemplo de uso incluído é inofensivo, embora um pouco extra para uma resposta de benchmark.

Ver detalhes da avaliacao

Correcao

Peso 35%
85

Produz ordem topológica válida terminando com o alvo, sem duplicatas, tratamento correto de dependências transitivas, auto-dependências e diamantes. A detecção de ciclos e pacotes ausentes é correta e consistente durante o percurso.

Completude

Peso 20%
85

Cobre todos os requisitos especificados e adiciona extras sensatos (detecção de definição duplicada, verificações mais fortes de entrada malformada) sem quebrar a interface.

Qualidade do codigo

Peso 20%
80

Bem estruturado com função auxiliar de análise, docstring, nomenclatura clara de variáveis e verificações defensivas. A construção de ciclos é clara; mantenedor geral.

Valor pratico

Peso 15%
80

Mais amigável para produção devido à validação, detecção de duplicatas e sanitização de tokens de dependência; o exemplo de uso ajuda na verificação rápida.

Seguimento de instrucoes

Peso 10%
80

Implementa a função e as mensagens de erro solicitadas; inclui um bloco principal de exemplo extra (não solicitado), mas não interfere no comportamento da função.

Modelos avaliadores Anthropic Claude Opus 4.6

Pontuacao total

81

Comentario geral

A Resposta B fornece uma implementação correta e mais robusta do resolvedor de dependências. Inclui validação adicional, como deteção de pacotes duplicados, deteção de nomes de pacotes vazios, validação de entrada não string e filtragem de strings de dependência vazias dos resultados divididos. Possui uma docstring abrangente, código bem estruturado com uma função de análise separada e inclui exemplos de uso. O código lida com mais casos extremos, mantendo a legibilidade.

Ver detalhes da avaliacao

Correcao

Peso 35%
85

A Resposta B implementa corretamente a ordenação topológica via DFS, deteta corretamente dependências circulares com relatórios precisos de caminhos de ciclo, deteta pacotes em falta e produz ordens de instalação válidas. O algoritmo principal está correto para todos os casos de teste especificados. A verificação de pacotes em falta é feita tanto antecipadamente quanto durante a travessia DFS, o que é ligeiramente redundante, mas não incorreto.

Completude

Peso 20%
80

A Resposta B lida com todos os requisitos principais mais casos extremos adicionais: definições de pacotes duplicados, nomes de pacotes vazios, validação de entrada não string e filtragem de strings de dependência vazias. Inclui também uma docstring que documenta a interface, argumentos, valor de retorno e exceções.

Qualidade do codigo

Peso 20%
80

A Resposta B tem uma melhor organização de código com uma função auxiliar separada de análise de definições, uma docstring abrangente, nomes de variáveis claros e comentários inline. A separação de preocupações torna o código mais fácil de manter e testar.

Valor pratico

Peso 15%
75

A Resposta B é mais prática devido à sua validação de entrada adicional, melhores mensagens de erro e exemplos de uso no bloco __main__. A deteção de duplicados e a verificação do tipo de entrada tornam-na mais adequada para integração num sistema de gestão de pacotes real.

Seguimento de instrucoes

Peso 10%
80

A Resposta B segue todas as instruções e vai um pouco além, fornecendo uma docstring, exemplos de uso e validação adicional. A assinatura da função corresponde exatamente, as mensagens de erro são descritivas e correspondem ao formato exigido, e a ordenação topológica está corretamente implementada.

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

0 / 3

Pontuacao media

75
Ver esta resposta

Votos de vitoria

3 / 3

Pontuacao media

83
Ver esta resposta

Resultados da avaliacao

Modelos avaliadores Anthropic Claude Opus 4.6

Motivo do vencedor

A Resposta B vence porque lida com mais casos extremos (pacotes duplicados, nomes de pacotes vazios, entradas não string, strings de dependência vazias após a divisão), tem uma melhor organização do código com uma função de análise separada, inclui uma docstring abrangente e fornece exemplos de uso. Ambas as respostas estão corretas para a funcionalidade principal, mas a Resposta B é mais robusta e tem maior qualidade de código. A validação adicional na Resposta B a torna mais adequada para uso no mundo real.

Modelos avaliadores OpenAI GPT-5.2

Motivo do vencedor

A resposta B vence devido a uma robustez e validação de entrada mais fortes, ao mesmo tempo que atende a todos os requisitos funcionais: lida com casos extremos como vírgulas finais/tokens de dependência vazios, detecta definições de pacotes duplicadas e mantém erros claros de ciclo/pacote em falta. A resposta A está em grande parte correta, mas pode lidar mal com listas de dependências malformadas (por exemplo, introduzindo nomes de dependência vazios) e substitui duplicados silenciosamente.

Modelos avaliadores Google Gemini 2.5 Flash

Motivo do vencedor

A resposta B é superior devido à sua análise de entrada significativamente mais robusta e ao tratamento de casos extremos, como definições de pacotes duplicados e strings de dependência malformadas. Embora ambas as respostas implementem corretamente a lógica central de resolução de dependências e o tratamento de erros, a robustez aprimorada da B a torna mais prática e completa para um cenário do mundo real.

X f L