Orivel Orivel
Abrir menu

Implementar um Cache LRU (Least Recently Used)

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

Implemente uma estrutura de dados de cache LRU (Least Recently Used) em Python. Sua implementação deve ser uma classe chamada `LRUCache` que suporte as seguintes operações: 1. `__init__(self, capacity: int)` — Inicializa o cache com uma capacidade inteira positiva. 2. `get(self, key: int) -> int` — Retorna o valor associado à chave se ela existir no cache, caso contrário, retorna -1. O acesso a uma chave conta como um "uso". 3. `put(self, key: int, value: int) -> None` — Insere ou atualiza o par chave-valor. Se o...

Mostrar mais

Implemente uma estrutura de dados de cache LRU (Least Recently Used) em Python. Sua implementação deve ser uma classe chamada `LRUCache` que suporte as seguintes operações: 1. `__init__(self, capacity: int)` — Inicializa o cache com uma capacidade inteira positiva. 2. `get(self, key: int) -> int` — Retorna o valor associado à chave se ela existir no cache, caso contrário, retorna -1. O acesso a uma chave conta como um "uso". 3. `put(self, key: int, value: int) -> None` — Insere ou atualiza o par chave-valor. Se o cache exceder sua capacidade após a inserção, evicte a chave menos recentemente usada. Ambas as operações `get` e `put` devem ser executadas em complexidade de tempo O(1) em média. Forneça a implementação completa da classe. Em seguida, demonstre sua correção mostrando a saída da seguinte sequência de operações: ``` cache = LRUCache(2) cache.put(1, 10) cache.put(2, 20) print(cache.get(1)) # Esperado: 10 cache.put(3, 30) # Evicte a chave 2 print(cache.get(2)) # Esperado: -1 cache.put(4, 40) # Evicte a chave 1 print(cache.get(1)) # Esperado: -1 print(cache.get(3)) # Esperado: 30 print(cache.get(4)) # Esperado: 40 ``` Explique brevemente como sua implementação atinge a complexidade de tempo O(1) para ambas as operações.

Politica de avaliacao

Uma boa resposta deve: (1) Fornecer uma classe Python completa e executável chamada `LRUCache` com métodos `__init__`, `get` e `put` corretos. (2) Utilizar uma combinação apropriada de estruturas de dados (por exemplo, um hash map mais uma lista duplamente encadeada, ou `OrderedDict` do Python) para atingir O(1) de tempo médio para `get` e `put`. (3) Lidar corretamente com a evicção do item menos recentemente usado quando a capacidade é excedida. (4) Produzir a saída correta para a sequência de demonstração: 10, -1...

Mostrar mais

Uma boa resposta deve: (1) Fornecer uma classe Python completa e executável chamada `LRUCache` com métodos `__init__`, `get` e `put` corretos. (2) Utilizar uma combinação apropriada de estruturas de dados (por exemplo, um hash map mais uma lista duplamente encadeada, ou `OrderedDict` do Python) para atingir O(1) de tempo médio para `get` e `put`. (3) Lidar corretamente com a evicção do item menos recentemente usado quando a capacidade é excedida. (4) Produzir a saída correta para a sequência de demonstração: 10, -1, -1, 30, 40. (5) Incluir uma explicação clara e precisa de por que as estruturas de dados escolhidas resultam em complexidade de tempo O(1). Deduzir qualidade para: saída incorreta, falha no tratamento de casos extremos (por exemplo, atualização de uma chave existente), uso de estruturas de dados que não atingem O(1) (por exemplo, varredura de uma lista) ou código incompleto/não executável.

Respostas

Resposta A: OpenAI GPT-5.2

class LRUCache: class _Node: __slots__ = ("key", "val", "prev", "next") def __init__(self, key=0, val=0): self.key = key self.val = val self.prev = None self.next = None def __init__(self, capacity: int): if capacity <= 0: raise ValueError("capacity must be a positive integer") self.capacity = capacity self.map = {} # key -> _Node # Doubly-linked list with sentinels: # head <-> ... <-> tail # Most recently used is right after head. # Least recently used is right before tai...

Mostrar resposta completa

class LRUCache: class _Node: __slots__ = ("key", "val", "prev", "next") def __init__(self, key=0, val=0): self.key = key self.val = val self.prev = None self.next = None def __init__(self, capacity: int): if capacity <= 0: raise ValueError("capacity must be a positive integer") self.capacity = capacity self.map = {} # key -> _Node # Doubly-linked list with sentinels: # head <-> ... <-> tail # Most recently used is right after head. # Least recently used is right before tail. self.head = self._Node() self.tail = self._Node() self.head.next = self.tail self.tail.prev = self.head def _remove(self, node: _Node) -> None: p, n = node.prev, node.next p.next = n n.prev = p def _add_to_front(self, node: _Node) -> None: # Insert right after head (mark as most recently used) first = self.head.next node.prev = self.head node.next = first self.head.next = node first.prev = node def _move_to_front(self, node: _Node) -> None: self._remove(node) self._add_to_front(node) def _evict_lru(self) -> None: # Remove node before tail lru = self.tail.prev if lru is self.head: return self._remove(lru) del self.map[lru.key] def get(self, key: int) -> int: node = self.map.get(key) if node is None: return -1 self._move_to_front(node) return node.val def put(self, key: int, value: int) -> None: node = self.map.get(key) if node is not None: node.val = value self._move_to_front(node) return new_node = self._Node(key, value) self.map[key] = new_node self._add_to_front(new_node) if len(self.map) > self.capacity: self._evict_lru() # Demonstration of correctness cache = LRUCache(2) cache.put(1, 10) cache.put(2, 20) print(cache.get(1)) # Expected: 10 cache.put(3, 30) # Evicts key 2 print(cache.get(2)) # Expected: -1 cache.put(4, 40) # Evicts key 1 print(cache.get(1)) # Expected: -1 print(cache.get(3)) # Expected: 30 print(cache.get(4)) # Expected: 40 # Output: # 10 # -1 # -1 # 30 # 40 # Brief O(1) explanation: # - A dictionary (hash map) maps keys to nodes, giving O(1) average lookup for get/put. # - A doubly linked list maintains recency order; moving a node to the front, # inserting a new node, and removing the LRU node are all O(1) pointer updates. # Combining these gives O(1) average time for both get and put.

Resultado

#1 | Vencedor

Votos de vitoria

2 / 3

Pontuacao media

98
Modelos avaliadores Anthropic Claude Haiku 4.5

Pontuacao total

98

Comentario geral

Excelente implementação de um cache LRU que atende plenamente a todos os requisitos. A solução utiliza uma combinação bem projetada de um hash map e lista duplamente ligada com nós sentinela para alcançar complexidade de tempo O(1) para operações de get e put. O código é limpo, bem estruturado e lida corretamente com todos os casos extremos, incluindo a atualização de chaves existentes e a devida remoção. A demonstração produz a saída esperada exata (10, -1, -1, 30, 40), e a explicação da complexidade O(1) é precisa e clara. O uso de __slots__ na classe Node demonstra atenção à eficiência de memória. Observações menores: o ValueError para capacidade não positiva é um bom toque defensivo, mas não foi explicitamente exigido; a explicação poderia ter sido um pouco mais detalhada sobre por que as consultas ao dicionário são em média O(1). No geral, esta é uma implementação de qualidade de produção.

Ver detalhes da avaliacao

Correcao

Peso 35%
98

A implementação está correta e produz a sequência de saída esperada exata (10, -1, -1, 30, 40). Todas as operações principais funcionam corretamente: get retorna os valores corretos e marca os itens como usados recentemente, put insere corretamente novos itens e atualiza os existentes, e a remoção remove corretamente o item menos usado recentemente quando a capacidade é excedida. A lista duplamente ligada com sentinelas mantém corretamente a ordem de recência. Casos extremos, como a atualização de uma chave existente, são tratados corretamente. A única dedução menor é que o ValueError para capacidade não positiva, embora seja uma boa prática, não foi explicitamente exigido pela tarefa.

Completude

Peso 20%
100

A resposta está totalmente completa. Fornece a classe LRUCache inteira com todos os métodos necessários (__init__, get, put), inclui uma demonstração completa e funcional com a sequência de teste exata especificada, produz todas as saídas esperadas e conclui com uma explicação clara da complexidade de tempo O(1). A implementação inclui métodos auxiliares (_remove, _add_to_front, _move_to_front, _evict_lru) que são bem organizados e necessários para a solução. Nada está faltando ou incompleto.

Qualidade do codigo

Peso 20%
95

O código é de alta qualidade, com excelente estrutura e legibilidade. O uso de uma classe aninhada _Node com __slots__ demonstra consciência da eficiência de memória. Os nomes dos métodos são descritivos e seguem as convenções do Python. A implementação da lista duplamente ligada com nós sentinela é elegante e evita casos extremos de verificação de nulos. Comentários explicam claramente o layout da estrutura de dados e o propósito de cada método. O código está bem organizado, com separação lógica de responsabilidades. Menor: o comentário explicativo no final poderia ser um pouco mais detalhado sobre a complexidade do caso médio do hash map, mas este é um ponto muito menor.

Valor pratico

Peso 15%
95

Esta implementação tem alto valor prático como solução de referência. Demonstra as melhores práticas para implementar caches LRU: usando estruturas de dados apropriadas (hash map + lista duplamente ligada), uso adequado de nós sentinela para eliminar casos extremos e separação limpa de métodos auxiliares. O código está pronto para produção e poderia ser usado diretamente em aplicações reais. A verificação defensiva de ValueError adiciona robustez. A implementação serviria como um excelente exemplo educacional para entender como combinar estruturas de dados para atingir requisitos específicos de complexidade de tempo.

Seguimento de instrucoes

Peso 10%
100

A resposta segue todas as instruções precisamente. Fornece uma classe completa chamada exatamente 'LRUCache' com os três métodos exigidos tendo assinaturas corretas. Tanto get quanto put atingem complexidade de tempo média O(1) usando estruturas de dados apropriadas. A sequência de demonstração é executada exatamente como especificado, com saída correta. A explicação da complexidade O(1) é incluída e precisa. Todos os requisitos da política de avaliação são atendidos: saída correta, tratamento adequado de casos extremos (atualização de chaves existentes), uso de estruturas de dados O(1) e código completo executável.

Modelos avaliadores Google Gemini 2.5 Flash

Pontuacao total

100

Comentario geral

A implementação LRUCache fornecida é excepcionalmente bem estruturada, correta e altamente eficiente. Ela utiliza corretamente uma combinação de um hash map e uma lista duplamente ligada personalizada com nós sentinela para atingir a complexidade de tempo O(1) média necessária tanto para as operações `get` quanto `put`. O código demonstra excelente atenção aos detalhes, incluindo o uso de `__slots__` para a classe `_Node` e tratamento robusto de várias operações de cache, como atualização de chaves existentes e remoção do item menos recentemente usado. A saída da demonstração está perfeitamente correta, e a explicação da complexidade de tempo é clara e precisa.

Ver detalhes da avaliacao

Correcao

Peso 35%
100

A implementação está totalmente correta. Toda a lógica do cache LRU, incluindo recuperação de chave, atualizações, inserções e remoção do item menos recentemente usado, funciona como esperado. A sequência de demonstração fornecida produz a saída correta exata.

Completude

Peso 20%
100

A resposta fornece uma classe `LRUCache` completa com todos os métodos necessários (`__init__`, `get`, `put`), uma demonstração clara de seu uso e uma explicação concisa de sua complexidade de tempo. Nada do que foi solicitado estava faltando.

Qualidade do codigo

Peso 20%
100

A qualidade do código é excelente. É bem organizado com métodos auxiliares para operações de lista ligada, usa nós sentinela para manipulação de lista mais limpa e inclui `__slots__` para eficiência de memória na classe `_Node`. Os nomes das variáveis são descritivos e a estrutura geral é altamente legível e mantenedora.

Valor pratico

Peso 15%
100

Esta implementação é altamente prática e pronta para produção. Ela demonstra um profundo entendimento das estruturas de dados necessárias para um cache LRU, fornecendo uma solução robusta e eficiente. A implementação explícita da lista duplamente ligada personalizada oferece controle total e insights sobre o mecanismo subjacente, tornando-a valiosa em cenários onde `collections.OrderedDict` pode não ser adequado ou onde um entendimento mais profundo é necessário.

Seguimento de instrucoes

Peso 10%
100

Todas as instruções foram seguidas precisamente. A classe é nomeada `LRUCache`, os métodos conformam-se às assinaturas especificadas, a complexidade de tempo O(1) média é alcançada e explicada, a validação de capacidade está presente e a sequência de demonstração, juntamente com sua saída, corresponde exatamente aos requisitos.

Modelos avaliadores OpenAI GPT-5 mini

Pontuacao total

97

Comentario geral

Cache LRU bem implementada: comportamento correto, operações eficientes O(1) usando um hash map + lista duplamente ligada, e a demonstração fornecida produz a saída esperada. O código é claro e executável, com pequenas melhorias de estilo/anotação possíveis (por exemplo, mais anotações de tipo ou docstrings), mas nada que afete a correção ou o desempenho.

Ver detalhes da avaliacao

Correcao

Peso 35%
100

A implementação está correta: get e put comportam-se como especificado, as atualizações movem itens para MRU, a evicção remove o LRU quando a capacidade é excedida e a demonstração imprime a sequência esperada (10, -1, -1, 30, 40). Casos extremos como a atualização de uma chave existente e capacidade zero/negativa (ValueError) são tratados.

Completude

Peso 20%
100

A solução inclui uma classe LRUCache completa e executável com __init__, get e put, uma demonstração da sequência de operações exigida e uma explicação concisa da complexidade O(1). Todos os comportamentos exigidos do prompt estão presentes.

Qualidade do codigo

Peso 20%
90

Código limpo e bem estruturado: classe interna Node com __slots__, nós sentinela head/tail e métodos auxiliares claros para operações de lista. Pequenas melhorias de estilo poderiam incluir anotações de tipo adicionais (por exemplo, para self.map) e docstrings/comentários para métodos públicos, mas estes não afetam a correção.

Valor pratico

Peso 15%
90

A implementação é eficiente e prática para uso real: operações médias O(1), design de nó de baixa sobrecarga e semântica clara. Para uso em produção, poder-se-ia adicionar considerações de thread-safety ou tipagem/documentação mais rica, mas a funcionalidade principal é sólida.

Seguimento de instrucoes

Peso 10%
100

Todas as instruções foram seguidas: classe denominada LRUCache fornecida, métodos exigidos implementados com assinaturas corretas, demonstração incluída e a explicação da complexidade O(1) está correta.

```python import collections class LRUCache: """ Uma implementação de um cache Least Recently Used (LRU). Este cache usa um dicionário para consultas de chave O(1) e uma lista duplamente ligada para manter a ordem de uso. O dicionário mapeia chaves para nós na lista ligada. """ # Classe interna para representar um nó na lista duplamente ligada class _Node: def __init__(self, key=0, value=0): self.key = key self.value = value self.prev = None self.next = None def __init__(self, capacity: int): """ Inicia...

Mostrar resposta completa

```python import collections class LRUCache: """ Uma implementação de um cache Least Recently Used (LRU). Este cache usa um dicionário para consultas de chave O(1) e uma lista duplamente ligada para manter a ordem de uso. O dicionário mapeia chaves para nós na lista ligada. """ # Classe interna para representar um nó na lista duplamente ligada class _Node: def __init__(self, key=0, value=0): self.key = key self.value = value self.prev = None self.next = None def __init__(self, capacity: int): """ Inicializa o cache com uma capacidade inteira positiva. """ if capacity <= 0: raise ValueError("A capacidade deve ser um inteiro positivo.") self.capacity = capacity self.cache = {} # Nós sentinela para cabeça e cauda para simplificar operações de lista self.head = self._Node() self.tail = self._Node() self.head.next = self.tail self.tail.prev = self.head def _remove_node(self, node: _Node): """Remove um nó da lista ligada.""" prev_node = node.prev next_node = node.next prev_node.next = next_node next_node.prev = prev_node def _add_to_front(self, node: _Node): """Adiciona um nó à frente da lista ligada (mais recente).""" node.prev = self.head node.next = self.head.next self.head.next.prev = node self.head.next = node def _move_to_front(self, node: _Node): """Move um nó existente para a frente da lista.""" self._remove_node(node) self._add_to_front(node) def get(self, key: int) -> int: """ Retorna o valor associado à chave se ela existir, caso contrário -1. Acessar uma chave a marca como a mais recentemente usada. """ if key in self.cache: node = self.cache[key] # Move o nó acessado para a frente para marcá-lo como recentemente usado self._move_to_front(node) return node.value return -1 def put(self, key: int, value: int) -> None: """ Insere ou atualiza um par chave-valor. Se a capacidade for excedida, expulse a chave menos recentemente usada. """ if key in self.cache: # Chave existe, atualiza seu valor e move-a para a frente node = self.cache[key] node.value = value self._move_to_front(node) else: # Chave é nova, cria um novo nó new_node = self._Node(key, value) self.cache[key] = new_node self._add_to_front(new_node) # Se o cache exceder a capacidade, expulse o item menos recentemente usado if len(self.cache) > self.capacity: # O item LRU é o que está logo antes do nó sentinela da cauda lru_node = self.tail.prev self._remove_node(lru_node) del self.cache[lru_node.key] # --- Demonstração --- print("Demonstrando a funcionalidade do LRUCache:") cache = LRUCache(2) cache.put(1, 10) cache.put(2, 20) print(f"get(1): {cache.get(1)}") # Esperado: 10 cache.put(3, 30) # Expulsa a chave 2 print(f"get(2): {cache.get(2)}") # Esperado: -1 cache.put(4, 40) # Expulsa a chave 1 print(f"get(1): {cache.get(1)}") # Esperado: -1 print(f"get(3): {cache.get(3)}") # Esperado: 30 print(f"get(4): {cache.get(4)}") # Esperado: 40 # --- Saída Esperada da Demonstração --- # Demonstrando a funcionalidade do LRUCache: # get(1): 10 # get(2): -1 # get(1): -1 # get(3): 30 # get(4): 40 # --- Explicação da Complexidade de Tempo O(1) --- # A complexidade de tempo média O(1) para `get` e `put` é alcançada combinando duas estruturas de dados: # 1. **Um Mapa de Hash (Dicionário):** O `dict` do Python fornece complexidade de tempo média O(1) para inserções, exclusões e consultas. Nesta implementação, o dicionário `self.cache` armazena chaves e as mapeia diretamente para seus nós correspondentes na lista duplamente ligada. Isso nos permite localizar instantaneamente qualquer nó no cache por sua chave. # 2. **Uma Lista Duplamente Ligada:** Esta estrutura de dados mantém a ordem de uso. Adicionar um novo nó à frente (mais recentemente usado) ou remover o último nó (menos recentemente usado) são operações O(1) porque elas apenas exigem a atualização de alguns ponteiros. Quando um item é acessado ou atualizado, seu nó correspondente (encontrado em O(1) através do mapa de hash) pode ser movido para a frente da lista em O(1) simplesmente religando seus vizinhos. # Ao usar ambas as estruturas juntas, todas as partes das operações `get` e `put`—consultar uma chave, atualizar um valor, mover um nó e remover o nó LRU—podem ser executadas em tempo médio constante. ```

Resultado

#2

Votos de vitoria

1 / 3

Pontuacao media

97
Modelos avaliadores Anthropic Claude Haiku 4.5

Pontuacao total

98

Comentario geral

Esta é uma excelente implementação de um cache LRU que atende plenamente a todos os requisitos. O código utiliza uma combinação bem projetada de um hash map e uma lista duplamente ligada com nós sentinelas para alcançar complexidade de tempo O(1) tanto para as operações get quanto put. A implementação lida corretamente com todos os casos extremos, incluindo a atualização de chaves existentes e a remoção do item menos recentemente usado. A demonstração produz a saída esperada exata (10, -1, -1, 30, 40), e a explicação da complexidade de tempo é clara e precisa. O código é limpo, bem documentado e pronto para produção.

Ver detalhes da avaliacao

Correcao

Peso 35%
98

A implementação é funcionalmente correta e produz a sequência de saída esperada exata. Todas as operações (get, put, eviction) funcionam conforme especificado. Casos extremos são devidamente tratados: a atualização de chaves existentes as move para a frente, novas chaves são adicionadas corretamente e a remoção LRU remove o nó correto. A única observação menor é que o ValueError para capacidade não positiva, embora seja uma boa prática, não foi explicitamente exigido pela especificação da tarefa.

Completude

Peso 20%
100

A resposta está totalmente completa. Ela fornece toda a classe LRUCache com todos os métodos necessários (__init__, get, put), inclui uma demonstração completa e funcional com a sequência exata de testes, produz todas as saídas esperadas e fornece uma explicação detalhada da complexidade de tempo O(1). Os métodos auxiliares (_remove_node, _add_to_front, _move_to_front) são bem implementados e necessários para a solução.

Qualidade do codigo

Peso 20%
95

O código é bem estruturado e altamente legível. Inclui docstrings claras para a classe e todos os métodos, usa nomes de variáveis significativos e emprega nós sentinelas elegantemente para simplificar as condições de contorno. A classe interna _Node é definida apropriadamente. O código segue as convenções do Python e é de fácil manutenção. Menor: a importação não utilizada de `collections` poderia ser removida, embora isso seja insignificante.

Valor pratico

Peso 15%
98

Esta implementação é imediatamente prática e pronta para produção. A abordagem de lista duplamente ligada com nós sentinelas é um padrão padrão e comprovado para caches LRU. O código lida corretamente com cenários do mundo real (atualização de chaves existentes, gerenciamento de capacidade). A explicação demonstra um profundo entendimento de por que esse design funciona, tornando-o valioso para aprendizado e referência de implementação.

Seguimento de instrucoes

Peso 10%
100

A resposta segue precisamente todas as instruções. Ela fornece uma classe Python completa e executável chamada LRUCache com assinaturas de método corretas. Usa estruturas de dados apropriadas (hash map + lista duplamente ligada) alcançando complexidade O(1). Lida corretamente com a remoção, produz a sequência de saída esperada exata (10, -1, -1, 30, 40) e inclui uma explicação clara e precisa da conquista da complexidade de tempo O(1).

Modelos avaliadores Google Gemini 2.5 Flash

Pontuacao total

98

Comentario geral

A implementação do LRUCache fornecida é excelente. Implementa corretamente a lógica LRU usando um dicionário para consultas O(1) e uma lista duplamente ligada personalizada para gerenciamento de ordem O(1). O código é bem estruturado, inclui bons docstrings e lida robustamente com casos extremos como validação de capacidade e atualização de chaves existentes. A demonstração corresponde perfeitamente à saída esperada, e a explicação da complexidade de tempo O(1) é clara e precisa. A única melhoria menor poderia ser a remoção da importação não utilizada 'collections', mas isso não prejudica a alta qualidade geral.

Ver detalhes da avaliacao

Correcao

Peso 35%
98

A implementação do LRUCache é funcionalmente correta. Ela lida com precisão com as operações `get` e `put`, incluindo a atualização de chaves existentes, a remoção do item menos recentemente usado quando a capacidade é excedida e o retorno de -1 para chaves inexistentes. O uso de um dicionário e uma lista duplamente ligada personalizada atinge corretamente a complexidade de tempo média O(1) para ambas as operações. A saída da demonstração corresponde perfeitamente à saída esperada.

Completude

Peso 20%
100

A resposta está totalmente completa. Ela fornece a implementação inteira da classe `LRUCache`, incluindo os métodos `__init__`, `get` e `put`. Uma demonstração abrangente de sua funcionalidade com a sequência especificada de operações é incluída, juntamente com uma explicação clara e precisa da complexidade de tempo O(1).

Qualidade do codigo

Peso 20%
95

A qualidade do código é muito alta. A classe `LRUCache` é bem estruturada com uma classe interna `_Node` e métodos auxiliares para operações de lista ligada (`_remove_node`, `_add_to_front`, `_move_to_front`), que aprimoram a legibilidade e a manutenibilidade. Docstrings estão presentes para a classe e os métodos principais. O uso de nós sentinela de cabeça e cauda para a lista duplamente ligada simplifica a manipulação da lista e melhora a robustez. A validação de capacidade está incluída. O único ponto muito menor é uma importação não utilizada (`collections`).

Valor pratico

Peso 15%
97

O cache LRU implementado é altamente prático e eficiente. Ele usa a combinação padrão e mais performática de um hash map e uma lista duplamente ligada, garantindo operações O(1). O design é robusto e seria adequado para cenários de cache do mundo real onde o desempenho é crítico. Ele lida corretamente com vários cenários operacionais, tornando-o confiável.

Seguimento de instrucoes

Peso 10%
100

Todas as instruções no prompt foram seguidas meticulosamente. A classe é nomeada `LRUCache`, e os métodos `__init__`, `get` e `put` têm as assinaturas e comportamentos corretos. A capacidade é tratada como um inteiro positivo, a complexidade O(1) é alcançada e explicada, a lógica de remoção está correta, e a sequência de demonstração e sua saída são exatamente como especificado.

Modelos avaliadores OpenAI GPT-5 mini

Pontuacao total

96

Comentario geral

Uma implementação LRUCache correta e bem estruturada usando um hash map mais uma lista duplamente ligada. A classe implementa get e put em tempo médio O(1), inclui uma demonstração que produz os resultados esperados e explica a complexidade claramente. Pequenos problemas: uma importação não utilizada (collections) e pequenas observações de estilo, mas estas não afetam a correção ou o desempenho.

Ver detalhes da avaliacao

Correcao

Peso 35%
100

A implementação está funcionalmente correta: get e put comportam-se como especificado, a remoção elimina o item menos recentemente usado, a atualização de uma chave existente funciona e a demonstração produz as saídas esperadas (10, -1, -1, 30, 40). Casos de ponta como o controlo de capacidade são tratados.

Completude

Peso 20%
95

Fornece uma classe LRUCache completa e executável com __init__, get e put, métodos auxiliares, uma demonstração da sequência requerida e uma explicação da complexidade. Pequenas deduções apenas por incluir uma importação desnecessária e não mostrar as linhas de saída brutas exatamente como no prompt (rótulos são adicionados), mas a funcionalidade está completa.

Qualidade do codigo

Peso 20%
90

O código é limpo, legível e bem documentado com métodos auxiliares e nós sentinela para simplificar as operações da lista. Pequenos problemas: uma importação 'collections' desnecessária e escolhas menores de estilo de type-hinting para a classe interna; caso contrário, boa estrutura e nomenclatura.

Valor pratico

Peso 15%
90

A implementação é prática e eficiente para uso real: operações médias O(1), gestão de memória clara e API simples. O ValueError em capacidade não positiva é sensato. Nenhum problema de desempenho no design principal.

Seguimento de instrucoes

Peso 10%
100

Segue as instruções precisamente: classe denominada LRUCache, assinaturas de método corretas, complexidade média O(1) alcançada com dicionário + lista duplamente ligada, comportamento de remoção correto, demonstração incluída e uma explicação concisa de por que as operações são O(1).

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

2 / 3

Pontuacao media

98
Ver esta resposta

Votos de vitoria

1 / 3

Pontuacao media

97
Ver esta resposta

Resultados da avaliacao

X f L