Orivel Orivel
Abrir menu

Implemente 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 que suporte as seguintes operações, cada uma com complexidade de tempo média O(1): 1. `get(key)` — Retorna o valor associado à chave se ela existir no cache; caso contrário, retorna -1. Acessar uma chave marca-a como recentemente usada. 2. `put(key, value)` — Insere ou atualiza o par chave-valor. Se o cache atingiu sua capacidade, remova o item menos recentemente usado antes de inserir o novo. Sua implementação deve ser uma classe cha...

Mostrar mais

Implemente uma estrutura de dados de cache LRU (Least Recently Used) em Python que suporte as seguintes operações, cada uma com complexidade de tempo média O(1): 1. `get(key)` — Retorna o valor associado à chave se ela existir no cache; caso contrário, retorna -1. Acessar uma chave marca-a como recentemente usada. 2. `put(key, value)` — Insere ou atualiza o par chave-valor. Se o cache atingiu sua capacidade, remova o item menos recentemente usado antes de inserir o novo. Sua implementação deve ser uma classe chamada `LRUCache` com a seguinte interface: ``` cache = LRUCache(capacity) cache.put(key, value) result = cache.get(key) ``` Demonstre sua implementação com a seguinte sequência de teste: ``` 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 ``` Requisitos: - NÃO use `functools.lru_cache` ou `collections.OrderedDict`. Implemente a estrutura subjacente você mesmo. - Use a combinação de um mapa de hash (hash map) e uma lista duplamente ligada (doubly linked list). - Inclua comentários claros explicando sua abordagem. - Trate casos extremos como capacidade igual a 0 ou 1. - Forneça o código completo e executável incluindo a sequência de teste acima com sua saída esperada.

Politica de avaliacao

Uma resposta de alta qualidade deve: (1) Fornecer uma implementação completa e executável em Python de um cache LRU usando um mapa de hash e uma lista duplamente ligada — sem depender de OrderedDict ou functools.lru_cache. (2) As operações get e put devem ser O(1) em tempo médio. (3) O código deve produzir corretamente a saída esperada para a sequência de teste fornecida (10, -1, -1, 30, 40). (4) O código deve tratar casos extremos como capacidade 0 ou 1 de forma adequada. (5) A implementação deve incluir comentári...

Mostrar mais

Uma resposta de alta qualidade deve: (1) Fornecer uma implementação completa e executável em Python de um cache LRU usando um mapa de hash e uma lista duplamente ligada — sem depender de OrderedDict ou functools.lru_cache. (2) As operações get e put devem ser O(1) em tempo médio. (3) O código deve produzir corretamente a saída esperada para a sequência de teste fornecida (10, -1, -1, 30, 40). (4) O código deve tratar casos extremos como capacidade 0 ou 1 de forma adequada. (5) A implementação deve incluir comentários significativos explicando a abordagem e decisões principais de projeto. (6) O código deve ser limpo, bem estruturado e seguir convenções razoáveis de Python. Será descontada qualidade se: usar funções/pacotes proibidos, produzir saída incorreta, não tratar casos extremos, faltar comentários ou empregar operações O(n) onde O(1) é exigido.

Respostas

# Implementação de LRU Cache usando um hash map + lista duplamente ligada # - O mapa hash (dict) fornece acesso O(1) de key -> node # - A lista duplamente ligada mantém a ordem de uso: mais recentemente usado na head, menos recentemente usado na tail # - Quando uma chave é acessada ou atualizada, movemos seu nó para a head # - Quando a capacidade é excedida, removemos o nó da tail (LRU) e deletamos sua chave do mapa class _Node: """Nó da lista duplamente ligada para armazenar chave e valor.""" def __init__(self, key=None, value=None): self.key = key self.value = value self.prev =...

Mostrar resposta completa

# Implementação de LRU Cache usando um hash map + lista duplamente ligada # - O mapa hash (dict) fornece acesso O(1) de key -> node # - A lista duplamente ligada mantém a ordem de uso: mais recentemente usado na head, menos recentemente usado na tail # - Quando uma chave é acessada ou atualizada, movemos seu nó para a head # - Quando a capacidade é excedida, removemos o nó da tail (LRU) e deletamos sua chave do mapa class _Node: """Nó da lista duplamente ligada para armazenar chave e valor.""" def __init__(self, key=None, value=None): self.key = key self.value = value self.prev = None self.next = None class LRUCache: def __init__(self, capacity: int): """Inicializa LRUCache com a capacidade fornecida. Trata capacidades <= 0 tornando o cache efetivamente inutilizável (get retorna -1, put não faz nada). """ self.capacity = max(0, int(capacity)) self.cache = {} # key -> _Node # Nós sentinela para head e tail para evitar checagens de borda self.head = _Node() # O mais recentemente usado vem logo após a head self.tail = _Node() # O menos recentemente usado fica logo antes da tail self.head.next = self.tail self.tail.prev = self.head self.size = 0 # Auxiliar interno: adicionar nó logo após a head (marcar como recentemente usado) def _add_node(self, node: _Node) -> None: node.prev = self.head node.next = self.head.next self.head.next.prev = node self.head.next = node # Auxiliar interno: remover um nó existente da lista ligada def _remove_node(self, node: _Node) -> None: prev = node.prev nxt = node.next if prev: prev.next = nxt if nxt: nxt.prev = prev node.prev = node.next = None # Auxiliar interno: mover um nó existente para a head (mais recentemente usado) def _move_to_head(self, node: _Node) -> None: self._remove_node(node) self._add_node(node) # Auxiliar interno: remover (pop) o nó menos recentemente usado (logo antes da tail) def _pop_tail(self) -> _Node: node = self.tail.prev if node is self.head: return None self._remove_node(node) return node def get(self, key: int) -> int: """Retorna o valor associado à chave se presente; caso contrário -1. O acesso marca a chave como recentemente usada. Tempo médio O(1). """ if self.capacity == 0: return -1 node = self.cache.get(key) if not node: return -1 # Move o nó acessado para a head (recentemente usado) self._move_to_head(node) return node.value def put(self, key: int, value: int) -> None: """Insere ou atualiza a chave com o valor. Evicta (remove) o LRU se a capacidade for excedida. Tempo médio O(1). """ if self.capacity == 0: return node = self.cache.get(key) if node: # Atualiza e marca como recentemente usado node.value = value self._move_to_head(node) else: # Insere novo nó new_node = _Node(key, value) self.cache[key] = new_node self._add_node(new_node) self.size += 1 if self.size > self.capacity: # Evicta o nó menos recentemente usado tail_node = self._pop_tail() if tail_node: del self.cache[tail_node.key] self.size -= 1 # Demonstração da implementação com a sequência de teste fornecida if __name__ == "__main__": cache = LRUCache(2) cache.put(1, 10) cache.put(2, 20) print(cache.get(1)) # Esperado: 10 cache.put(3, 30) # Remove a chave 2 print(cache.get(2)) # Esperado: -1 cache.put(4, 40) # Remove a chave 1 print(cache.get(1)) # Esperado: -1 print(cache.get(3)) # Esperado: 30 print(cache.get(4)) # Esperado: 40

Resultado

#1 | Vencedor

Votos de vitoria

3 / 3

Pontuacao media

95
Modelos avaliadores Anthropic Claude Sonnet 4.6

Pontuacao total

93

Comentario geral

Esta é uma implementação forte e bem estruturada de um cache LRU usando um mapa hash e uma lista duplamente ligada. O código produz corretamente todas as saídas esperadas (10, -1, -1, 30, 40), trata casos-limite como capacidade 0, usa nós sentinela para simplificar as operações na lista e inclui comentários claros ao longo do código. A implementação é limpa, segue as convenções do Python e consegue tempo médio O(1) tanto para get quanto para put. Nota menor: o método get usa 'if not node', o que teoricamente poderia ser problemático se node fosse um valor falsy, mas como nodes são objetos isso é aceitável na prática. O caso-limite capacity=1 é tratado implicitamente e corretamente. No geral, uma resposta de alta qualidade com apenas considerações estilísticas muito menores.

Ver detalhes da avaliacao

Correcao

Peso 35%
95

A implementação produz corretamente todas as cinco saídas esperadas (10, -1, -1, 30, 40). As operações na lista duplamente ligada estão corretas, os nós sentinela previnem bugs em casos-limite e a lógica de expulsão é sólida. Tanto get quanto put têm complexidade média O(1). O caso-limite capacity=0 é tratado. A verificação 'if not node' em get é tecnicamente aceitável, já que nodes são objetos, mas usar 'if node is None' seria mais explícito.

Completude

Peso 20%
95

Todos os componentes exigidos estão presentes: a classe _Node, a classe LRUCache com get e put, helpers internos para manipulação da lista, nós sentinela, tratamento de casos-limite para capacidade 0 e 1, a sequência completa de teste com comentários de saída esperada e um guard main. Nada significativo está faltando.

Qualidade do codigo

Peso 20%
90

O código é limpo, bem organizado e segue as convenções do Python. Os comentários explicam a abordagem geral e cada método. Nós sentinela são uma boa escolha de design. Métodos auxiliares têm nomes claros e único propósito. Anotações de tipo são usadas. Observação pequena: 'if not node' é ligeiramente menos explícito do que 'if node is None', e as verificações de null em _remove_node para prev/nxt são desnecessárias dado que os nós sentinela sempre existem, mas são questões muito menores.

Valor pratico

Peso 15%
90

A implementação é diretamente utilizável em cenários reais. Trata capacidade 0 de forma graciosa, usa uma interface limpa e o design com nós sentinela torna-a robusta. O código é autocontido e executável. Poderia ser estendido facilmente (por exemplo, segurança por threads, TTL). A demonstração mostra claramente o comportamento esperado.

Seguimento de instrucoes

Peso 10%
95

Todas as instruções foram seguidas: não foi usado OrderedDict nem functools.lru_cache, foi implementado mapa hash + lista duplamente ligada, a classe chama-se LRUCache com a interface correta, a sequência de testes está incluída com comentários de saída esperada, casos-limite foram tratados e os comentários explicam a abordagem. O código está completo e executável.

Modelos avaliadores OpenAI GPT-5.2

Pontuacao total

93

Comentario geral

Fornece uma implementação correta e executável de LRUCache usando um dict mais uma lista duplamente ligada com nós sentinela, alcançando complexidade média O(1) para get/put e produzindo as saídas esperadas para o teste fornecido. Inclui comentários claros e trata a capacidade 0 de forma graciosa. Pequenos problemas: _pop_tail está anotado para retornar _Node mas pode retornar None; algumas verificações defensivas em _remove_node são desnecessárias dado o uso de sentinelas, porém não são prejudiciais.

Ver detalhes da avaliacao

Correcao

Peso 35%
95

Comportamento LRU correto: get move os nós para a posição MRU, put atualiza/move chaves existentes e remove o LRU quando ocorre overflow. A sequência de teste fornecida produzirá 10, -1, -1, 30, 40 como esperado. Capacidade 0 é tratada com get=-1 e put sem efeito.

Completude

Peso 20%
95

Inclui a implementação completa da classe, auxiliares internos e a sequência de teste exata solicitada. Os comentários explicam a abordagem e as operações principais. Casos de borda para capacidade 0 são tratados explicitamente; capacidade 1 funciona naturalmente via lógica de evicção.

Qualidade do codigo

Peso 20%
85

O código é limpo, legível e bem estruturado, com nós sentinela para simplificar as operações na lista. Pequenas observações de qualidade: a anotação de retorno de _pop_tail não corresponde ao possível retorno None, e algumas verificações em _remove_node são redundantes com o invariante dos sentinelas.

Valor pratico

Peso 15%
90

Uma implementação de referência prática: operações O(1), evita bibliotecas proibidas e é fácil de adaptar. O código de demonstração é executável tal como está.

Seguimento de instrucoes

Peso 10%
100

Segue todas as instruções: sem OrderedDict/functools, usa hashmap + lista duplamente ligada, inclui comentários explicativos, trata casos de borda (notadamente capacidade 0) e fornece código completo e executável com o teste especificado.

Modelos avaliadores Google Gemini 2.5 Pro

Pontuacao total

98

Comentario geral

Esta é uma resposta excepcional que fornece uma implementação de cache LRU com qualidade de livro didático. O código está correto, eficiente e excepcionalmente bem estruturado, usando a técnica sofisticada de nós sentinela para simplificar a lógica da lista duplamente ligada. Ele adere perfeitamente a todas as restrições, inclui comentários excelentes, trata os casos de borda com elegância e fornece o caso de teste executável exigido. Serve como uma resposta modelo para esta tarefa.

Ver detalhes da avaliacao

Correcao

Peso 35%
100

A implementação está perfeitamente correta. A lógica tanto para as operações `get` quanto `put` mantém corretamente a ordem de menos recentemente usado e respeita a restrição de capacidade. A sequência de teste fornecida produz a saída exatamente esperada. A complexidade média de tempo O(1) para ambas as operações é alcançada com sucesso pela combinação de um mapa hash e uma lista duplamente ligada. Casos de borda, como capacidade zero, são tratados corretamente.

Completude

Peso 20%
100

A submissão está totalmente completa. Inclui a classe `LRUCache`, a classe auxiliar privada `_Node`, e o bloco de demonstração completo e executável (`if __name__ == "__main__":`) conforme solicitado. Todos os componentes exigidos pelo enunciado foram entregues.

Qualidade do codigo

Peso 20%
95

A qualidade do código é excepcional. O uso de métodos auxiliares privados para manipulação de nós (`_add_node`, `_remove_node`, etc.) torna os métodos principais `get` e `put` limpos e legíveis. A implementação de nós sentinela head e tail é um padrão sofisticado e eficiente que elimina a necessidade de verificações de casos limites na lógica de manipulação da lista. Os comentários são claros, concisos e explicam tanto o quê quanto o porquê da implementação. É uma solução de nível profissional.

Valor pratico

Peso 15%
90

A resposta tem alto valor prático e educacional. É uma implementação clássica, feita do zero, de um algoritmo de cache fundamental amplamente usado em design de sistemas. Este código serve como uma excelente referência para quem precisa entender ou implementar um cache LRU e é uma solução canônica para um problema muito comum em entrevistas de engenharia de software.

Seguimento de instrucoes

Peso 10%
100

A resposta segue meticulosamente cada instrução do enunciado. Implementa corretamente a classe `LRUCache` usando um mapa hash e uma lista duplamente ligada personalizada, evitando explicitamente os proibidos `collections.OrderedDict` e `functools.lru_cache`. O código é executável, comentado e inclui o caso de teste especificado.

class Node: """Nó de lista duplamente ligada para armazenar pares chave-valor e manter a ordem.""" def __init__(self, key, value): self.key = key self.value = value self.prev = None self.next = None class LRUCache: """Implementa um cache Least Recently Used (LRU) usando um mapa hash e uma lista duplamente ligada.""" def __init__(self, capacity: int): """Inicializa o LRUCache com uma capacidade dada.""" self.capacity = capacity self.cache = {} # Mapa hash: key -> Node self.head = Node(0, 0) # Nó cabeça fictício self.tail = N...

Mostrar resposta completa

class Node: """Nó de lista duplamente ligada para armazenar pares chave-valor e manter a ordem.""" def __init__(self, key, value): self.key = key self.value = value self.prev = None self.next = None class LRUCache: """Implementa um cache Least Recently Used (LRU) usando um mapa hash e uma lista duplamente ligada.""" def __init__(self, capacity: int): """Inicializa o LRUCache com uma capacidade dada.""" self.capacity = capacity self.cache = {} # Mapa hash: key -> Node self.head = Node(0, 0) # Nó cabeça fictício self.tail = Node(0, 0) # Nó cauda fictício self.head.next = self.tail self.tail.prev = self.head def _remove_node(self, node): """Remove um nó da lista duplamente ligada.""" prev_node = node.prev next_node = node.next prev_node.next = next_node next_node.prev = prev_node def _add_to_head(self, node): """Adiciona um nó na cabeça da lista duplamente ligada (mais recentemente usado).""" node.prev = self.head node.next = self.head.next self.head.next.prev = node self.head.next = node def get(self, key: int) -> int: """Recupera o valor para uma chave, marcando-a como recentemente usada. Retorna -1 se a chave não for encontrada.""" if key in self.cache: node = self.cache[key] # Move o nó acessado para a cabeça (mais recentemente usado) self._remove_node(node) self._add_to_head(node) return node.value return -1 def put(self, key: int, value: int) -> None: """Insere ou atualiza um par chave-valor. Remove o item LRU se a capacidade for atingida.""" if self.capacity == 0: return if key in self.cache: # Atualiza chave existente node = self.cache[key] node.value = value # Move para a cabeça pois foi recentemente usado self._remove_node(node) self._add_to_head(node) else: # Insere nova chave if len(self.cache) >= self.capacity: # Remove o item menos recentemente usado (nó antes da cauda) lru_node = self.tail.prev self._remove_node(lru_node) del self.cache[lru_node.key] new_node = Node(key, value) self.cache[key] = new_node self._add_to_head(new_node) # Demonstra a implementação com a sequência de teste: cache = LRUCache(2) print("Inserindo (1, 10)") cache.put(1, 10) print("Inserindo (2, 20)") cache.put(2, 20) print("Obtendo chave 1:") print(cache.get(1)) # Esperado: 10 print("Inserindo (3, 30)") cache.put(3, 30) # Remove a chave 2 print("Obtendo chave 2:") print(cache.get(2)) # Esperado: -1 print("Inserindo (4, 40)") cache.put(4, 40) # Remove a chave 1 print("Obtendo chave 1:") print(cache.get(1)) # Esperado: -1 print("Obtendo chave 3:") print(cache.get(3)) # Esperado: 30 print("Obtendo chave 4:") print(cache.get(4)) # Esperado: 40

Resultado

#2

Votos de vitoria

0 / 3

Pontuacao media

91
Modelos avaliadores Anthropic Claude Sonnet 4.6

Pontuacao total

92

Comentario geral

A implementação é excelente no geral. Ela usa corretamente um hash map combinado com uma lista duplamente ligada com nós sentinela head e tail, alcançando O(1) tanto para get quanto para put. A sequência de testes produz a saída esperada correta (10, -1, -1, 30, 40). Casos-limite como capacidade 0 são tratados. O código é limpo, bem comentado e segue boas convenções de Python. As únicas pequenas fraquezas são que capacidade 1 não é demonstrada explicitamente (embora funcione corretamente por projeto), e os comentários, embora presentes e úteis, poderiam ser ligeiramente mais detalhados sobre a racionalidade do design geral. No geral, esta é uma implementação de alta qualidade, completa e correta.

Ver detalhes da avaliacao

Correcao

Peso 35%
95

Todas as operações são O(1). A sequência de testes produz exatamente a saída esperada: 10, -1, -1, 30, 40. A lógica de expulsão LRU está correta — após get(1) mover a chave 1 para mais recentemente usada, put(3,30) expulsa corretamente a chave 2, e put(4,40) expulsa corretamente a chave 1. O caso-limite de capacidade 0 é tratado. Nenhum built-in proibido é utilizado.

Completude

Peso 20%
90

A implementação inclui a classe Node, a classe LRUCache com todos os métodos exigidos, métodos auxiliares para manipulação da lista, tratamento do caso de capacidade 0 e a sequência completa de testes com instruções print descritivas. O caso-limite de capacidade 1 não é testado explicitamente, mas funciona corretamente por projeto. Todos os componentes exigidos estão presentes.

Qualidade do codigo

Peso 20%
90

O código é limpo, bem estruturado e usa nomes significativos. Docstrings estão presentes em todas as classes e métodos. Métodos auxiliares _remove_node e _add_to_head estão propriamente abstraídos. Hints de tipo estão incluídos. Nós sentinela simplificam elegantemente as condições de contorno. Observação menor: poderia ser adicionada uma breve comentário de alto nível explicando a estratégia geral de design no início.

Valor pratico

Peso 15%
85

A implementação é de qualidade para produção e diretamente utilizável. Trata o caso-limite de capacidade 0 de forma elegante. A saída da demonstração é clara com rótulos descritivos. Poderia ser melhorada com demonstrações adicionais de casos-limite (capacidade 1, puts duplicados) para aumentar o valor educacional prático.

Seguimento de instrucoes

Peso 10%
95

Todas as instruções foram seguidas: não foi usado OrderedDict nem functools.lru_cache, hash map + lista duplamente ligada implementados do zero, comentários explicando a abordagem foram incluídos, casos-limite tratados, código executável completo com a sequência exata de testes fornecida. A saída corresponde exatamente aos valores esperados.

Modelos avaliadores OpenAI GPT-5.2

Pontuacao total

85

Comentario geral

Implementa corretamente um cache LRU usando um hashmap mais uma lista duplamente ligada com sentinelas (head/tail), alcançando complexidade média O(1) para get/put e evicção adequada. Trata capacity=0 e casos de borda típicos (incluindo capacity=1) corretamente. A principal fraqueza é a saída de demonstração: inclui linhas adicionais explicativas de impressão, portanto não corresponde exatamente à sequência de saída esperada, embora os valores retornados estejam corretos. Fora isso, o código é limpo e bem comentado.

Ver detalhes da avaliacao

Correcao

Peso 35%
92

O comportamento central do LRU está correto: get move os nós para a posição MRU, put atualiza/move nós existentes, e a evicção remove tail.prev (LRU). O hashmap aponta para os nós, e as operações na lista são O(1). Capacity=0 é tratada por um retorno antecipado. Não há bugs lógicos óbvios.

Completude

Peso 20%
86

Fornece código completo e executável com Node, LRUCache, métodos auxiliares e uma sequência de demonstração. Casos de borda são tratados pelo menos para capacity=0 (e capacity=1 funciona implicitamente). No entanto, a demonstração não apresenta a saída exatamente na forma mínima esperada devido a impressões extras.

Qualidade do codigo

Peso 20%
84

Bem estruturado com clara separação de responsabilidades e docstrings/comentários úteis. Usa sentinelas dummy head/tail de forma apropriada. Pequenas melhorias poderiam incluir anotações de tipo para métodos auxiliares e garantir que métodos auxiliares sejam marcados como internos de forma consistente, mas no geral é sólido.

Valor pratico

Peso 15%
78

Implementação prática e padrão de LRU que pode ser reutilizada. A verbosidade extra da demonstração pode ser inconveniente para verificações automatizadas, mas a própria estrutura de dados é útil e eficiente.

Seguimento de instrucoes

Peso 10%
70

Segue as restrições principais: não usa OrderedDict nem functools.lru_cache; usa hashmap + lista duplamente ligada; inclui comentários; inclui sequência de testes. A principal divergência é que a saída impressa não corresponde exatamente às linhas de saída esperadas (adiciona texto descritivo), o que pode violar o requisito de 'expected output'.

Modelos avaliadores Google Gemini 2.5 Pro

Pontuacao total

98

Comentario geral

A resposta fornece uma implementação excelente e de qualidade didática de um LRU Cache. Ela utiliza corretamente um hash map e uma lista duplamente ligada para alcançar complexidade de tempo O(1) tanto para as operações `get` quanto `put`. O código é limpo, bem comentado, utiliza boas práticas como métodos auxiliares e nós fictícios (dummy nodes), e trata corretamente os casos de borda. Todas as instruções do enunciado foram seguidas meticulosamente, resultando em uma solução completa e correta.

Ver detalhes da avaliacao

Correcao

Peso 35%
100

A implementação está perfeitamente correta. Ela utiliza com sucesso um hash map para buscas em O(1) e uma lista duplamente ligada para atualizações de ordenação em O(1). A lógica de `get`, `put` e de remoção (eviction) é sólida. O código passa pela sequência de testes fornecida e trata corretamente o caso limite capacity=0.

Completude

Peso 20%
100

A submissão está totalmente completa e executável. Inclui a classe requerida `LRUCache`, uma classe auxiliar `Node`, todos os métodos necessários e o código de demonstração completo com a sequência de testes solicitada no enunciado.

Qualidade do codigo

Peso 20%
95

A qualidade do código é excepcionalmente alta. Está bem estruturado, usando classes separadas e métodos auxiliares privados (`_remove_node`, `_add_to_head`) para maior clareza. O uso de nós fictícios (dummy head e tail) é uma técnica clássica e robusta que simplifica a lógica de manipulação da lista. O código inclui docstrings claras, anotações de tipo (type hints) e segue as convenções do Python.

Valor pratico

Peso 15%
90

A solução tem alto valor prático, pois fornece uma implementação canônica e eficiente de uma estrutura de dados fundamental e amplamente usada. Este código não é apenas um exercício teórico; é uma solução direta e robusta que poderia ser usada em aplicações do mundo real.

Seguimento de instrucoes

Peso 10%
100

A resposta adere perfeitamente a todas as instruções. Implementa o cache LRU do zero usando um hash map e uma lista duplamente ligada, sem recorrer a bibliotecas proibidas como `collections.OrderedDict`. Inclui comentários, trata casos de borda e fornece o código executável completo com a sequência de testes.

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

3 / 3

Pontuacao media

95
Ver esta resposta

Votos de vitoria

0 / 3

Pontuacao media

91
Ver esta resposta

Resultados da avaliacao

X f L