Visto
Programação
OpenAI
GPT-5 mini
VS
Anthropic
Claude Haiku 4.5
Implemente um resolvedor de dependências com versionamento semântico
Sua tarefa é escrever uma função que simule o resolvedor de dependências de um gerenciador de pacotes. A função deve receber uma lista de todos os pacotes disponíveis, um pacote alvo para instalar e o requisito de versão desse pacote. Ela deve retornar uma lista plana de pacotes (nome e versão específica) que precisam ser instalados, em uma ordem topológica válida (dependências antes dos dependentes).
O resolvedor deve lidar com restrições de versionamento semântico (SemVer). Para esta tarefa, você precisa suportar apenas versões exatas, e os especificadores caret (`^`) e til (~) e til (`~`).
- `1.2.3`: Deve ser exatamente a versão 1.2.3.
- `^1.2.3`: Permite versões de 1.2.3 até, mas não incluindo, 2.0.0 (ou seja, `>=1.2.3 <2.0.0`).
- `~1.2.3`: Permite versões de 1.2.3 até, mas não incluindo, 1.3.0 (ou seja, `>=1.2.3 <1.3.0`).
Sua implementação deve:
1. Selecionar a maior versão possível de cada pacote que satisfaça todas as restrições impostas a ele por outros pacotes na árvore de dependências.
2. Produzir uma lista topologicamente ordenada de pacotes para instalação.
3. Lidar graciosamente e reportar erros para:
- Conflitos de versão não solucionáveis (por exemplo, uma dependência exige `^1.0.0` e outra exige `^2.0.0` do mesmo pacote).
- Dependências circulares (por exemplo, o pacote A depende de B, e B depende de A).
- Um pacote ou versão exigida não estar disponível.
Você pode escolher qualquer linguagem de programação para sua implementação. Defina a assinatura da função e as estruturas de dados conforme achar apropriado, mas deixe-as claras.