Resposta A: Anthropic Claude Sonnet 4.6
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
Votos de vitoria
0 / 3
Pontuacao media
Pontuacao total
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%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%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%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%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%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.
Pontuacao total
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%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%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%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%Ú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%Implementa a função solicitada e levanta ValueError com mensagens descritivas, incluindo um caminho de ciclo; retorna o formato correto.
Pontuacao total
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%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%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%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%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%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.