Resposta A: Anthropic Claude Opus 4.6
class InMemoryDB: def __init__(self): self._main_store = {} self._transaction_stack = [] def get(self, key): # Search from the most recent transaction backwards for txn in reversed(self._transaction_stack): if key in txn: return txn[key] return self._main_store.get(key, None) def set(self, key, value): if self._transaction_stack: self._transaction_stack[-1][key] = value else: self._main_store[key] = value def begin(self): self._transaction_stack.append({}) def commit(self):...
Mostrar resposta completa ▼
class InMemoryDB: def __init__(self): self._main_store = {} self._transaction_stack = [] def get(self, key): # Search from the most recent transaction backwards for txn in reversed(self._transaction_stack): if key in txn: return txn[key] return self._main_store.get(key, None) def set(self, key, value): if self._transaction_stack: self._transaction_stack[-1][key] = value else: self._main_store[key] = value def begin(self): self._transaction_stack.append({}) def commit(self): if not self._transaction_stack: raise Exception("No active transaction to commit") changes = self._transaction_stack.pop() if self._transaction_stack: # Merge into parent transaction self._transaction_stack[-1].update(changes) else: # Merge into main store self._main_store.update(changes) def rollback(self): if not self._transaction_stack: raise Exception("No active transaction to rollback") self._transaction_stack.pop() # Example usage if __name__ == "__main__": db = InMemoryDB() # No transaction print(db.get("a")) # Expected: None db.set("a", 10) print(db.get("a")) # Expected: 10 # Transaction db.begin() db.set("a", 20) print(db.get("a")) # Expected: 20 # Nested transaction db.begin() db.set("a", 30) print(db.get("a")) # Expected: 30 # Rollback nested db.rollback() print(db.get("a")) # Expected: 20 # Commit outer db.commit() print(db.get("a")) # Expected: 20 # Error cases try: db.commit() # No transaction active except Exception as e: print(f"Error: {e}")
Resultado
Votos de vitoria
0 / 3
Pontuacao media
Pontuacao total
Comentario geral
A Resposta A é uma implementação correta e bem estruturada da classe InMemoryDB. Utiliza uma abordagem baseada em pilha com nomes de variáveis claros (_main_store, _transaction_stack). A lógica para get, set, begin, commit e rollback está toda correta e lida com transações aninhadas adequadamente. Levanta uma Exceção genérica para casos de erro, o que é funcional, mas menos preciso semanticamente do que usar RuntimeError ou ValueError. O exemplo de uso está incluído e corresponde à saída esperada. No geral, uma solução sólida com pequenas deficiências estilísticas.
Ver detalhes da avaliacao ▼
Correcao
Peso 35%A Resposta A implementa corretamente todos os métodos. O método get procura na pilha de transações em ordem inversa antes de recorrer ao armazenamento principal. O método set escreve na transação atual ou no armazenamento principal, conforme apropriado. O commit mescla as alterações para cima corretamente. O rollback descarta a transação atual. Todos os cenários de transações aninhadas são tratados corretamente.
Completude
Peso 20%A Resposta A implementa todos os cinco métodos necessários (get, set, begin, commit, rollback) e inclui o exemplo de uso completo do prompt da tarefa. Os casos de erro são tratados. Nenhuma funcionalidade em falta.
Qualidade do codigo
Peso 20%A Resposta A usa nomes de variáveis claros e uma estrutura lógica. No entanto, levanta uma Exceção genérica para casos de erro em vez de um tipo de exceção mais específico como RuntimeError ou ValueError, o que é um problema menor de qualidade de código. O código está, de resto, limpo e legível.
Valor pratico
Peso 15%A Resposta A é praticamente útil como uma implementação de referência. O exemplo de uso demonstra todos os cenários chave. A Exceção genérica é uma preocupação prática menor, pois os chamadores podem querer capturar tipos de exceção específicos.
Seguimento de instrucoes
Peso 10%A Resposta A segue todas as instruções: implementa a classe necessária e todos os cinco métodos, lida com transações aninhadas, levanta erros para commit/rollback sem transações ativas e inclui o exemplo de uso do prompt.
Pontuacao total
Comentario geral
Implementa a API exigida com uma pilha de transações clara e comportamento correto de begin/commit/rollback aninhado para semântica simples de set/get. A lógica de resolução de chaves da transação mais recente para o armazenamento principal é sólida. Pequenos problemas são principalmente em torno de robustez e polimento: levanta um tipo genérico de Exception e não há orientação explícita ou tratamento para semântica de exclusão (não exigido) ou para distinguir um None explicitamente definido de ausente (não exigido, mas às vezes relevante).
Ver detalhes da avaliacao ▼
Correcao
Peso 35%Suporta corretamente begin/commit/rollback aninhados através de uma pilha de dicionários; get pesquisa do interior para o exterior; commit mescla no pai ou no armazenamento principal; rollback descarta as alterações atuais. Nenhum erro funcional para as operações especificadas.
Completude
Peso 20%Implementa todos os métodos exigidos e inclui uso de exemplo demonstrando transações aninhadas e caso de erro. Não aborda comportamentos opcionais como exclusões (não solicitado).
Qualidade do codigo
Peso 20%Legível e direto, com nomes de membros claros; uma pequena desvantagem é o uso genérico de Exception e uma pequena verbosidade extra (valor padrão None explícito em get).
Valor pratico
Peso 15%Prático para uso básico de KV transacional; carece de extras como tipos de exceção personalizados, marcadores de exclusão ou introspecção de transação, mas isso está além do escopo da solicitação.
Seguimento de instrucoes
Peso 10%Segue a interface e o comportamento solicitados, incluindo transações aninhadas e levantamento de um erro ao fazer commit/rollback sem uma transação ativa.
Pontuacao total
Comentario geral
A Resposta A fornece uma implementação totalmente correta e funcional do banco de dados em memória. A lógica para lidar com transações aninhadas é sólida e o código é limpo e legível, com nomes de variáveis particularmente descritivos como `_transaction_stack`. Sua principal fraqueza é o uso da `Exception` genérica para tratamento de erros, o que geralmente é desencorajado em favor de tipos de exceção mais específicos.
Ver detalhes da avaliacao ▼
Correcao
Peso 35%A implementação está totalmente correta. A lógica para `get`, `set`, `commit` e `rollback` lida corretamente com transações aninhadas, pesquisando na pilha de transações na ordem correta e mesclando/descartando alterações apropriadamente.
Completude
Peso 20%A resposta está completa, implementando todos os cinco métodos exigidos: `get`, `set`, `begin`, `commit` e `rollback`.
Qualidade do codigo
Peso 20%O código é limpo e legível. Os nomes das variáveis, especialmente `_transaction_stack`, são muito descritivos. O único pequeno inconveniente é o uso da classe genérica `Exception` para tratamento de erros.
Valor pratico
Peso 15%A solução fornece uma implementação boa e clara de um padrão comum de estrutura de dados. É um exemplo educacional valioso, embora falte recursos como controle de concorrência para uso em produção.
Seguimento de instrucoes
Peso 10%A resposta segue perfeitamente todas as instruções. Implementa a classe e os métodos especificados, lida com a lógica conforme descrito e inclui o bloco de exemplo de uso.