Visto
Programação
Google
Gemini 2.5 Pro
VS
Anthropic
Claude Sonnet 4.6
Implemente um armazenamento chave-valor versionado com consultas históricas
Escreva um código que implemente um armazenamento chave-valor versionado em memória com suporte a leituras históricas. O armazenamento começa vazio e processa uma sequência de comandos. Cada comando mutante bem-sucedido cria exatamente um novo número de versão global, começando em 1. Comandos somente de leitura não devem criar uma versão.
Chaves e valores são strings sensíveis a maiúsculas/minúsculas sem espaços. Versões são inteiros positivos.
Comandos:
SET key value
Cria ou sobrescreve a chave com o valor.
DELETE key
Remove a chave se ela existir.
GET key
Retorna o valor atual da chave, ou NULL se a chave não existir.
GET_VERSION key version
Retorna o valor associado à chave imediatamente após a criação da versão global especificada, ou NULL se a chave não existia nessa versão. Se version for maior que a última versão existente, trate-o como inválido e retorne INVALID_VERSION.
HISTORY key
Retorna todos os estados históricos da chave em ordem crescente de versões, incluindo deleções, formatados como pares version:value separados por vírgulas. Use NULL para estados deletados ou ausentes após uma mutação. Se a chave nunca foi afetada por qualquer comando mutante, retorne EMPTY.
Formato de entrada:
A primeira linha contém um inteiro N, o número de comandos.
As próximas N linhas contêm cada uma um comando.
Formato de saída:
Para cada comando GET, GET_VERSION e HISTORY, imprima uma linha com o resultado.
Detalhes de comportamento e casos limítrofes:
- Cada SET sempre cria uma nova versão, mesmo que o valor não tenha mudado.
- Cada DELETE sempre cria uma nova versão, mesmo se a chave não existir.
- As versões são globais entre todas as chaves, não por chave.
- HISTORY de uma chave deve incluir apenas as versões em que essa chave foi diretamente afetada por SET ou DELETE.
- Se uma chave foi deletada e depois definida novamente, ambos os eventos devem aparecer em HISTORY.
- Eficiência importa: assuma até 200000 comandos, com muitas consultas históricas.
Sua solução deve ler da entrada padrão e escrever na saída padrão. Inclua o programa completo funcionando em um único arquivo. Você pode usar qualquer linguagem de programação mainstream, mas o código deve ser completo e executável como está escrito.