Touchstone
← Benches

ladder.coding.lru_cache

Codinggauntlet

An owned ladder bench, graded mechanically against a fixed test.

Solved
32/35
runs passed
Models
22
have attempted
Harnesses
5
scaffolds tried

Runs (latest per model × harness — solved sorted first)

ModelHarnessResultTurnstok/sLatencyCtxWhen
gemma-4-26b-a4b-itbarePASS8.7s64k2026-06-23
gemma-4-26b-a4b-itdev_cyclePASS8.7s64k2026-06-23
gemma-4-26b-a4b-itstructured_feedbackPASS164k2026-06-23
gpt-oss-120bbaselinePASS153.04.3s64k2026-06-23
gpt-oss-20bbarePASS164k2026-06-23
gpt-oss-20bdev_cyclePASS164k2026-06-23
gpt-oss-20bstructured_feedbackPASS164k2026-06-23
granite-4.1-8bbaselinePASS122.86.0s128k2026-06-23
llama-3.3-70bbaselinePASS12.81.9m64k2026-06-23
qwen3.5-4bdev_cyclePASS264k2026-06-23
qwen3.5-4bstructured_feedbackPASS264k2026-06-23
qwen3.6-35b-a3bbarePASS1.8m64k2026-06-23
qwen3.6-35b-a3bdev_cyclePASS1.8m64k2026-06-23
qwen3.6-35b-a3bstructured_feedbackPASS164k2026-06-23
devstral-small-2-2512baselinePASS18.545.9s128k2026-06-23
mistral-small-3.1-24b-instruct-2503baselinePASS18.616.4s128k2026-06-23
qwen3.5-122b-a10b-clusterbaselinePASS117.14.7m64k2026-06-29
gpt-oss-20bbaselinePASS178.95.9s64k2026-07-01
qwen3-coder-30bbaselinePASS136.44.1s64k2026-07-01
gemma-4-26b-a4b-itbaselinePASS128.314.0s64k2026-07-01
qwen3.6-35b-a3b-orbaselinePASS1146.454.4s64k2026-07-01
gemini-2.5-flash-litebaselinePASS136.66.2s64k2026-07-01
qwen3.6-35b-bf16baselinePASS134.51.7m64k2026-07-02
granite-4.1-30bbaselinePASS17.426.3s64k2026-07-02
qwen3.6-27bv1.7.1PASS18.11.2m64k2026-07-02
qwen3-next-80bbaselinePASS145.54.4s64k2026-07-02
qwen3.5-4bbaselinePASS144.337.9s64k2026-07-02
phi-4-reasoning-plusbaselinePASS114.32.6m64k2026-07-02
deepseek-r1-distill-qwen-32bbaselinePASS16.43.7m64k2026-07-03
qwen3.6-35b-a3bbaselinePASS155.29.4s64k2026-07-05
qwen3.6-27bbaselinePASS17.71.2m64k2026-07-05
claude-sonnet-4.6baselinePASS155.73.5s195k2026-07-06
qwen3.5-4bbarefail24.3s64k2026-06-23
qwen3.5-2bbaselinefail196.26.8s64k2026-07-02
qwen3.5-0.8bbaselinefail1174.63.1s64k2026-07-02

Transcripts

gemma-4-26b-a4b-it · bare · PASS
```python
from collections import OrderedDict

class LRUCache:
    """
    An implementation of an LRU (Least Recently Used) Cache.
    Uses collections.OrderedDict to maintain O(1) time complexity for 
    both get and put operations by leveraging its doubly linked list 
    and hash map internal structure.
    """

    def __init__(self, capacity: int):
        """
        Initialize the LRUCache with a positive integer capacity.
        """
        if capacity <= 0:
            raise ValueError("Capacity must be a positive integer.")
        self.capacity = capacity
        self.cache = OrderedDict()

    def get(self, key: int) -> int:
        """
        Return the value of the key if it exists, otherwise return -1.
        Accessing a key moves it to the end (most recent position).
        """
        if key not in self.cache:
            return -1
        
        # Move the accessed key to the end to mark it as most recently used
        self.cache.move_to_end(key)
        return self.cache[key]

    def put(self, key: int, value: int) -> None:
        """
        Insert or update the value for the given key.
        If the capacity is exceeded, evict the least recently used entry.
        """
        if key in self.cache:
            # Update existing key and move to end
            self.cache.move_to_end(key)
        
        self.cache[key] = value

        if len(self.cache) > self.capacity:
            # popitem(last=False) removes the first item (the least recently used)
            self.cache.popitem(last=False)

```
gemma-4-26b-a4b-it · dev_cycle · PASS
```python
from collections import OrderedDict

class LRUCache:
    """
    An implementation of an LRU (Least Recently Used) Cache.
    Uses collections.OrderedDict to maintain O(1) time complexity for 
    both get and put operations by leveraging its doubly linked list 
    and hash map internal structure.
    """

    def __init__(self, capacity: int):
        """
        Initialize the LRUCache with a positive integer capacity.
        """
        if capacity <= 0:
            raise ValueError("Capacity must be a positive integer.")
        self.capacity = capacity
        self.cache = OrderedDict()

    def get(self, key: int) -> int:
        """
        Return the value of the key if it exists, otherwise return -1.
        Accessing a key moves it to the end (most recent position).
        """
        if key not in self.cache:
            return -1
        
        # Move the accessed key to the end to mark it as most recently used
        self.cache.move_to_end(key)
        return self.cache[key]

    def put(self, key: int, value: int) -> None:
        """
        Insert or update the value for the given key.
        If the capacity is exceeded, evict the least recently used entry.
        """
        if key in self.cache:
            # Update existing key and move to end
            self.cache.move_to_end(key)
        
        self.cache[key] = value

        if len(self.cache) > self.capacity:
            # popitem(last=False) removes the first item (the least recently used)
            self.cache.popitem(last=False)

```
gpt-oss-120b · baseline · PASS
```python
from collections import OrderedDict

class LRUCache:
    def __init__(self, capacity: int):
        if capacity <= 0:
            raise ValueError("capacity must be positive")
        self.capacity = capacity
        self.cache = OrderedDict()

    def get(self, key: int) -> int:
        if key not in self.cache:
            return -1
        # Move to end to mark as recently used
        self.cache.move_to_end(key)
        return self.cache[key]

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            # Update existing entry and move to recent
            self.cache.move_to_end(key)
        self.cache[key] = value
        if len(self.cache) > self.capacity:
            # popitem(last=False) pops the least-recently-used item
            self.cache.popitem(last=False)
```
granite-4.1-8b · baseline · PASS
```python
from collections import OrderedDict

class LRUCache:
    def __init__(self, capacity: int):
        self.capacity = capacity
        self.cache = OrderedDict()

    def get(self, key: int) -> int:
        if key not in self.cache:
            return -1
        else:
            self.cache.move_to_end(key)
            return self.cache[key]

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            self.cache.move_to_end(key)
        self.cache[key] = value
        if len(self.cache) > self.capacity:
            self.cache.popitem(last=False)
```
llama-3.3-70b · baseline · PASS
```python
from collections import OrderedDict

class LRUCache:
    def __init__(self, capacity: int):
        self.capacity = capacity
        self.cache = OrderedDict()

    def get(self, key: int) -> int:
        if key in self.cache:
            value = self.cache.pop(key)
            self.cache[key] = value  # Move to end to mark as recently used
            return value
        else:
            return -1

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            self.cache.pop(key)
        elif len(self.cache) >= self.capacity:
            self.cache.popitem(last=False)  # Remove the first (least recently used) item
        self.cache[key] = value

# Example usage:
if __name__ == "__main__":
    cache = LRUCache(2)  # Capacity of 2
    cache.put(1, 1)
    cache.put(2, 2)
    print(cache.get(1))     # Returns 1
    cache.put(3, 3)         # Evicts key 2
    print(cache.get(2))     # Returns -1 (not found)
    cache.put(4, 4)         # Evicts key 1
    print(cache.get(1))     # Returns -1 (not found)
    print(cache.get(3))     # Returns 3
    print(cache.get(4))     # Returns 4
```
qwen3.6-35b-a3b · bare · PASS


```python
class Node:
    def __init__(self, key=0, value=0):
        self.key = key
        self.value = value
        self.prev = None
        self.next = None

class LRUCache:
    def __init__(self, capacity: int):
        self.capacity = capacity
        self.cache = {}
        
        # Dummy head and tail nodes to simplify list operations
        self.head = Node()
        self.tail = Node()
        self.head.next = self.tail
        self.tail.prev = self.head

    def _add_to_head(self, node):
        """Add node immediately after the dummy head."""
        node.prev = self.head
        node.next = self.head.next
        self.head.next.prev = node
        self.head.next = node

    def _remove_node(self, node):
        """Remove a node from the doubly linked list."""
        node.prev.next = node.next
        node.next.prev = node.prev

    def _move_to_head(self, node):
        """Move an existing node to the head (mark as recently used)."""
        self._remove_node(node)
        self._add_to_head(node)

    def _pop_tail(self):
        """Remove and return the node just before the dummy tail (least recently used)."""
        node = self.tail.prev
        self._remove_node(node)
        return node

    def get(self, key: int) -> int:
        if key not in self.cache:
            return -1
        
        node = self.cache[key]
        self._move_to_head(node)
        return node.value

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            node = self.cache[key]
            node.value = value
            self._move_to_head(node)
        else:
            new_node = Node(key, value)
            self.cache[key] = new_node
            self._add_to_head(new_node)
            
            if len(self.cache) > self.capacity:
                # Evict the least recently used item
                lru_node = self._pop_tail()
                del self.cache[lru_node.key]
```
qwen3.6-35b-a3b · dev_cycle · PASS


```python
class Node:
    def __init__(self, key=0, value=0):
        self.key = key
        self.value = value
        self.prev = None
        self.next = None

class LRUCache:
    def __init__(self, capacity: int):
        self.capacity = capacity
        self.cache = {}
        
        # Dummy head and tail nodes to simplify list operations
        self.head = Node()
        self.tail = Node()
        self.head.next = self.tail
        self.tail.prev = self.head

    def _add_to_head(self, node):
        """Add node immediately after the dummy head."""
        node.prev = self.head
        node.next = self.head.next
        self.head.next.prev = node
        self.head.next = node

    def _remove_node(self, node):
        """Remove a node from the doubly linked list."""
        node.prev.next = node.next
        node.next.prev = node.prev

    def _move_to_head(self, node):
        """Move an existing node to the head (mark as recently used)."""
        self._remove_node(node)
        self._add_to_head(node)

    def _pop_tail(self):
        """Remove and return the node just before the dummy tail (least recently used)."""
        node = self.tail.prev
        self._remove_node(node)
        return node

    def get(self, key: int) -> int:
        if key not in self.cache:
            return -1
        
        node = self.cache[key]
        self._move_to_head(node)
        return node.value

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            node = self.cache[key]
            node.value = value
            self._move_to_head(node)
        else:
            new_node = Node(key, value)
            self.cache[key] = new_node
            self._add_to_head(new_node)
            
            if len(self.cache) > self.capacity:
                # Evict the least recently used item
                lru_node = self._pop_tail()
                del self.cache[lru_node.key]
```
devstral-small-2-2512 · baseline · PASS
```python
class LRUCache:
    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):
        if capacity <= 0:
            raise ValueError("Capacity must be positive")
        self.capacity = capacity
        self.cache = {}
        self.head = self.Node()  # dummy head
        self.tail = self.Node()  # dummy tail
        self.head.next = self.tail
        self.tail.prev = self.head

    def _remove_node(self, node: Node):
        prev_node = node.prev
        next_node = node.next
        prev_node.next = next_node
        next_node.prev = prev_node

    def _add_to_head(self, node: Node):
        node.prev = self.head
        node.next = self.head.next
        self.head.next.prev = node
        self.head.next = node

    def get(self, key: int) -> int:
        if key not in self.cache:
            return -1
        node = self.cache[key]
        self._remove_node(node)
        self._add_to_head(node)
        return node.value

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            node = self.cache[key]
            node.value = value
            self._remove_node(node)
            self._add_to_head(node)
        else:
            new_node = self.Node(key, value)
            self.cache[key] = new_node
            self._add_to_head(new_node)
            if len(self.cache) > self.capacity:
                lru_node = self.tail.prev
                self._remove_node(lru_node)
                del self.cache[lru_node.key]
```
mistral-small-3.1-24b-instruct-2503 · baseline · PASS
```python
from collections import OrderedDict

class LRUCache:
    def __init__(self, capacity: int):
        self.cache = OrderedDict()
        self.capacity = capacity

    def get(self, key: int) -> int:
        if key not in self.cache:
            return -1
        else:
            self.cache.move_to_end(key)
            return self.cache[key]

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            self.cache.move_to_end(key)
        self.cache[key] = value
        if len(self.cache) > self.capacity:
            self.cache.popitem(last=False)

```
qwen3.5-122b-a10b-cluster · baseline · PASS
```python
class LRUCache:
    class Node:
        def __init__(self, key, value):
            self.key = key
            self.value = value
            self.prev = None
            self.next = None

    def __init__(self, capacity: int):
        self.capacity = capacity
        self.cache = {}
        self.size = 0
        # Dummy head and tail nodes to simplify edge cases
        self.head = self.Node(0, 0)
        self.tail = self.Node(0, 0)
        self.head.next = self.tail
        self.tail.prev = self.head

    def _add_to_head(self, node):
        node.prev = self.head
        node.next = self.head.next
        self.head.next.prev = node
        self.head.next = node

    def _remove_node(self, node):
        prev = node.prev
        next = node.next
        prev.next = next
        next.prev = prev

    def _move_to_head(self, node):
        self._remove_node(node)
        self._add_to_head(node)

    def _pop_tail(self):
        res = self.tail.prev
        self._remove_node(res)
        return res

    def get(self, key):
        node = self.cache.get(key)
        if not node:
            return -1
        self._move_to_head(node)
        return node.value

    def put(self, key, value):
        node = self.cache.get(key)
        if node:
            node.value = value
            self._move_to_head(node)
        else:
            new_node = self.Node(key, value)
            self.cache[key] = new_node
            self._add_to_head(new_node)
            self.size += 1
            if self.size > self.capacity:
                tail = self._pop_tail()
                del self.cache[tail.key]
                self.size -= 1
```
gpt-oss-20b · baseline · PASS
```python
from collections import OrderedDict

class LRUCache:
    def __init__(self, capacity: int):
        if capacity <= 0:
            raise ValueError("Capacity must be a positive integer")
        self.capacity = capacity
        self.cache = OrderedDict()

    def get(self, key: int) -> int:
        if key not in self.cache:
            return -1
        value = self.cache.pop(key)
        self.cache[key] = value  # reinsert to mark as most recent
        return value

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            self.cache.pop(key)
        elif len(self.cache) >= self.capacity:
            self.cache.popitem(last=False)  # remove least recently used
        self.cache[key] = value
```
qwen3-coder-30b · baseline · PASS
```python
from collections import OrderedDict

class LRUCache:
    def __init__(self, capacity):
        self.capacity = capacity
        self.cache = OrderedDict()
    
    def get(self, key):
        if key not in self.cache:
            return -1
        # Move to end to mark as recently used
        self.cache.move_to_end(key)
        return self.cache[key]
    
    def put(self, key, value):
        if key in self.cache:
            # Update existing key
            self.cache.move_to_end(key)
        elif len(self.cache) >= self.capacity:
            # Remove least recently used (first item)
            self.cache.popitem(last=False)
        
        self.cache[key] = value
```
gemma-4-26b-a4b-it · baseline · PASS
```python
from collections import OrderedDict

class LRUCache:
    """
    An implementation of an LRU (Least Recently Used) Cache.
    Uses collections.OrderedDict to maintain O(1) time complexity for 
    both get and put operations by leveraging its doubly linked list 
    and hash map internal structure.
    """

    def __init__(self, capacity: int):
        """
        Initialize the LRUCache with a positive integer capacity.
        """
        if capacity <= 0:
            raise ValueError("Capacity must be a positive integer.")
        self.capacity = capacity
        self.cache = OrderedDict()

    def get(self, key: int) -> int:
        """
        Return the value of the key if it exists, otherwise return -1.
        Accessing a key moves it to the end (most recent position).
        """
        if key not in self.cache:
            return -1
        
        # Move the accessed key to the end to mark it as most recently used
        self.cache.move_to_end(key)
        return self.cache[key]

    def put(self, key: int, value: int) -> None:
        """
        Insert or update the value for the given key.
        If the capacity is exceeded, evict the least recently used entry.
        """
        if key in self.cache:
            # Update existing key and move to end
            self.cache.move_to_end(key)
        
        self.cache[key] = value

        if len(self.cache) > self.capacity:
            # popitem(last=False) removes the first item (the least recently used)
            self.cache.popitem(last=False)

```
qwen3.6-35b-a3b-or · baseline · PASS
```python
class Node:
    def __init__(self, key=0, value=0):
        self.key = key
        self.value = value
        self.prev = None
        self.next = None

class LRUCache:
    def __init__(self, capacity):
        self.capacity = capacity
        self.cache = {}
        
        # Initialize dummy head and tail nodes
        self.head = Node()
        self.tail = Node()
        self.head.next = self.tail
        self.tail.prev = self.head

    def _add_to_head(self, node):
        node.prev = self.head
        node.next = self.head.next
        self.head.next.prev = node
        self.head.next = node

    def _remove_node(self, node):
        node.prev.next = node.next
        node.next.prev = node.prev

    def _move_to_head(self, node):
        self._remove_node(node)
        self._add_to_head(node)

    def _pop_tail(self):
        res = self.tail.prev
        self._remove_node(res)
        return res

    def get(self, key):
        if key in self.cache:
            node = self.cache[key]
            self._move_to_head(node)
            return node.value
        return -1

    def put(self, key, value):
        if key in self.cache:
            node = self.cache[key]
            node.value = value
            self._move_to_head(node)
        else:
            new_node = Node(key, value)
            self.cache[key] = new_node
            self._add_to_head(new_node)
            
            if len(self.cache) > self.capacity:
                tail_node = self._pop_tail()
                del self.cache[tail_node.key]
```
gemini-2.5-flash-lite · baseline · PASS
```python
class LRUCache:

    def __init__(self, capacity: int):
        self.capacity = capacity
        self.cache = {}
        self.order = []

    def get(self, key: int) -> int:
        if key not in self.cache:
            return -1
        else:
            self.order.remove(key)
            self.order.append(key)
            return self.cache[key]

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            self.cache[key] = value
            self.order.remove(key)
            self.order.append(key)
        else:
            if len(self.cache) >= self.capacity:
                lru_key = self.order.pop(0)
                del self.cache[lru_key]
            self.cache[key] = value
            self.order.append(key)

```
qwen3.6-35b-bf16 · baseline · PASS


```python
from collections import OrderedDict

class LRUCache:
    def __init__(self, capacity):
        self.capacity = capacity
        self.cache = OrderedDict()

    def get(self, key):
        if key in self.cache:
            self.cache.move_to_end(key)
            return self.cache[key]
        return -1

    def put(self, key, value):
        if key in self.cache:
            self.cache.move_to_end(key)
        elif len(self.cache) >= self.capacity:
            self.cache.popitem(last=False)
        self.cache[key] = value
```
granite-4.1-30b · baseline · PASS
```python
from collections import OrderedDict

class LRUCache:
    def __init__(self, capacity: int):
        if capacity <= 0:
            raise ValueError("Capacity must be a positive integer")
        self.capacity = capacity
        self.cache = OrderedDict()

    def get(self, key: int) -> int:
        if key not in self.cache:
            return -1
        # Move the accessed key to the end to mark it as recently used
        self.cache.move_to_end(key)
        return self.cache[key]

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            # Update the value and move it to the end (most recent)
            self.cache.move_to_end(key)
        self.cache[key] = value
        if len(self.cache) > self.capacity:
            # Pop the first item (least recently used)
            self.cache.popitem(last=False)
```
qwen3.6-27b · v1.7.1 · PASS


```python
class Node:
    def __init__(self, key=0, value=0):
        self.key = key
        self.value = value
        self.prev = None
        self.next = None


class DoublyLinkedList:
    def __init__(self):
        # Sentinel nodes to simplify edge cases
        self.head = Node()
        self.tail = Node()
        self.head.next = self.tail
        self.tail.prev = self.head

    def add_to_front(self, node):
        """Add a node right after the head (most recently used position)."""
        node.prev = self.head
        node.next = self.head.next
        self.head.next.prev = node
        self.head.next = node

    def remove_node(self, node):
        """Remove an existing node from the list."""
        prev_node = node.prev
        next_node = node.next
        prev_node.next = next_node
        next_node.prev = prev_node

    def remove_last(self):
        """Remove and return the node just before the tail (least recently used)."""
        if self.head.next == self.tail:
            return None
        lru_node = self.tail.prev
        self.remove_node(lru_node)
        return lru_node


class LRUCache:
    def __init__(self, capacity: int):
        self.capacity = capacity
        self.cache_map = {}  # key -> Node
        self.dll = DoublyLinkedList()

    def get(self, key: int) -> int:
        if key not in self.cache_map:
            return -1
        
        node = self.cache_map[key]
        # Move accessed node to front (most recently used)
        self.dll.remove_node(node)
        self.dll.add_to_front(node)
        
        return node.value

    def put(self, key: int, value: int) -> None:
        if key in self.cache_map:
            # Update existing key
            node = self.cache_map[key]
            node.value = value
            # Move to front (most recently used)
            self.dll.remove_node(node)
            self.dll.add_to_front(node)
        else:
            # Insert new key
            if len(self.cache_map) >= self.capacity:
                # Evict least recently used
                lru_node = self.dll.remove_last()
                if lru_node:
                    del self.cache_map[lru_node.key]
            
            # Add new node
            new_node = Node(key, value)
            self.cache_map[key] = new_node
            self.dll.add_to_front(new_node)
```
qwen3-next-80b · baseline · PASS
```python
class LRUCache:
    def __init__(self, capacity):
        self.capacity = capacity
        self.cache = {}
        self.order = []

    def get(self, key):
        if key not in self.cache:
            return -1
        # Move the accessed key to the end (most recently used)
        self.order.remove(key)
        self.order.append(key)
        return self.cache[key]

    def put(self, key, value):
        if key in self.cache:
            # Update existing key and move to end
            self.cache[key] = value
            self.order.remove(key)
            self.order.append(key)
        else:
            # Add new key-value pair
            if len(self.cache) >= self.capacity:
                # Evict least recently used (first in order list)
                lru_key = self.order.pop(0)
                del self.cache[lru_key]
            self.cache[key] = value
            self.order.append(key)
```
qwen3.5-4b · baseline · PASS


```python
class LRUCache:
    def __init__(self, capacity):
        self.capacity = capacity
        self.cache = {}  # key -> value mapping
        self.order = []  # list to track order of usage (most recent at end)
    
    def get(self, key):
        if key not in self.cache:
            return -1
        # Move key to end (most recently used)
        self.order.remove(key)
        self.order.append(key)
        return self.cache[key]
    
    def put(self, key, value):
        if key in self.cache:
            # Update existing key
            self.order.remove(key)
            self.order.append(key)
            self.cache[key] = value
        else:
            # Add new key
            self.order.append(key)
            self.cache[key] = value
            
            # If exceeds capacity, evict least recently used (first in order list)
            if len(self.cache) > self.capacity:
                lru_key = self.order.pop(0)
                del self.cache[lru_key]
```
phi-4-reasoning-plus · baseline · PASS
We are asked: "Implement a class `LRUCache` with:
- __init__(self, capacity) - positive int capacity
- get(self, key) - return the value, or -1 if the key is absent
- put(self, key, value) - insert/update

When inserting would exceed capacity, evict the LEAST-recently-used entry. Both `get` and `put` on a key count as using it (refresh its recency). Importable as `from solution import LRUCache`."

We need to produce a single self-contained Python solution in one code block with no explanation before or after.

I'll produce a python file that defines the class. We can use collections.OrderedDict, but note that Python 3.7+ dict preserves insertion order, but we want LRU ordering. But it's easier to implement using OrderedDict from collections module. Alternatively, we can implement our own doubly linked list with dictionary mapping keys to nodes.

I'll produce a solution using OrderedDict because it's simpler and built-in. However, note that the problem says "importable as `from solution import LRUCache`", so I need to define a file named solution.py? But instructions say: "Output a single self-contained Python solution as one ```python code block" with no explanation before or after.

I'll produce a python code block containing the class definition. We can use collections.OrderedDict. The typical approach is:

```
from collections import OrderedDict

class LRUCache:
    def __init__(self, capacity: int):
         self.capacity = capacity
         self.cache = OrderedDict()

    def get(self, key: int) -> int:
         if key not in self.cache:
             return -1
         value = self.cache.pop(key)
         self.cache[key] = value  # reinsert to mark as recently used.
         return value

    def put(self, key: int, value: int) -> None:
         if key in self.cache:
              self.cache.pop(key)
         elif len(self.cache) >= self.capacity:
              self.cache.popitem(last=False)   # pop least recently used
         self.cache[key] = value
```

That is the simplest solution.

I'll produce a code block with triple backticks and "python" language marker. I must not include any explanation before or after, so I'll just output the code block.

I'll produce a code block that includes the class definition and then if __name__ == '__main__': maybe some tests? But instructions say "self-contained solution", but it's ambiguous whether we need to include test cases. The problem says "Implement a class LRUCache" with methods get, put etc. It doesn't require main function or tests.

I can produce the code block that defines the class and then if __name__ == '__main__': maybe some sample usage? But instructions say "importable as from solution import LRUCache", so I'll not include a main test harness because it's supposed to be imported. But I might include a simple demonstration in a comment.

I can produce code block with the class definition and then if __name__ == '__main__': maybe some tests? The instructions say "self-contained Python solution" but also "importable as from solution import LRUCache". So it's ambiguous whether to include main test harness. I'll produce a file that defines the class, and optionally add a main block with sample usage commented out.

I can produce code block:

```
from collections import OrderedDict

class LRUCache:
    def __init__(self, capacity: int):
        if capacity <= 0:
            raise ValueError("Capacity must be positive")
        self.capacity = capacity
        self.cache = OrderedDict()

    def get(self, key) -> int:
        if key not in self.cache:
            return -1
        # Move the key to end to show that it was recently used.
        value = self.cache.pop(key)
        self.cache[key] = value
        return value

    def put(self, key, value):
        if key in self.cache:
            # Remove old
            self.cache.pop(key)
        elif len(self.cache) >= self.capacity:
            # Pop least recently used item.
            self.cache.popitem(last=False)
        self.cache[key] = value
```

I'll produce that code block. I must not include any explanation before or after.

I'll produce a single python code block with the class definition and maybe some tests if needed? But instructions say "self-contained solution", so it's better to include main test harness if possible, but then it might conflict with importable as from solution import LRUCache. I can include a main block that is guarded by if __name__ == '__main__': which runs sample usage.

I'll produce code block:

```
from collections import OrderedDict

class LRUCache:
    def __init__(self, capacity: int):
        if capacity <= 0:
            raise ValueError("Capacity must be positive")
        self.capacity = capacity
        self.cache = OrderedDict()

    def get(self, key) -> int:
        if key not in self.cache:
            return -1
        # Move the key to end to mark it as recently used.
        value = self.cache.pop(key)
        self.cache[key] = value
        return value

    def put(self, key, value):
        if key in self.cache:
            self.cache.pop(key)
        elif len(self.cache) >= self.capacity:
            self.cache.popitem(last=False)
        self.cache[key] = value

if __name__ == '__main__':
    # Example usage:
    cache = LRUCache(2)
    cache.put(1, 1)
    cache.put(2, 2)
    print(cache.get(1))       # returns 1
    cache.put(3, 3)           # evicts key 2
    print(cache.get(2))       # returns -1 (not found)
    cache.put(4, 4)           # evicts key 1
    print(cache.get(1))       # returns -1 (not found)
    print(cache.get(3))       # returns 3
    print(cache.get(4))       # returns 4
```

I'll produce that code block. But instructions say "self-contained solution" and "importable as from solution import LRUCache". So I must not include any explanation before or after, but it's allowed to have a main block if __name__ == '__main__' because then the file can be imported.

But instructions said: "Output a single sel
deepseek-r1-distill-qwen-32b · baseline · PASS


To solve this problem, we need to implement an LRUCache (Least Recently Used Cache) class that efficiently manages a cache with a specified capacity. The cache should support getting and putting key-value pairs while evicting the least recently used entry when the capacity is exceeded.

### Approach
The approach involves using an `OrderedDict` from Python's `collections` module, which maintains the insertion order of elements. This allows us to efficiently track the most and least recently used entries. Here’s a detailed breakdown:

1. **Initialization**: The cache is initialized with a given positive integer capacity. An `OrderedDict` is used to store the key-value pairs.

2. **Get Operation**: When retrieving a value using a key, if the key exists, it is moved to the end of the dictionary to mark it as recently used. If the key does not exist, -1 is returned.

3. **Put Operation**: When inserting or updating a key-value pair, if the key already exists, its value is updated and the entry is moved to the end. If the key does not exist, it is added to the end of the dictionary. After adding, if the cache exceeds its capacity, the least recently used entry (the first item in the dictionary) is removed.

### Solution Code
```python
from collections import OrderedDict

class LRUCache:
    def __init__(self, capacity):
        self.cache = OrderedDict()
        self.capacity = capacity

    def get(self, key):
        if key not in self.cache:
            return -1
        # Move the accessed key to the end to mark it as recently used
        self.cache.move_to_end(key)
        return self.cache[key]

    def put(self, key, value):
        if key in self.cache:
            # Update the value and move the key to the end
            self.cache[key] = value
            self.cache.move_to_end(key)
        else:
            # Add new entry at the end
            self.cache[key] = value
            # Check if we need to evict the least recently used item
            if len(self.cache) > self.capacity:
                self.cache.popitem(last=False)  # Remove from the beginning (least recently used)
```

### Explanation
- **Initialization**: The constructor initializes an `OrderedDict` and sets the cache capacity.
- **Get Method**: Checks if the key exists. If it does, the key is moved to the end of the dictionary to update its recency, and the value is returned. If not found, -1 is returned.
- **Put Method**: Updates or adds a key-value pair. After adding, if the cache exceeds capacity, the least recently used entry (the first item) is removed.

This approach ensures that both get and put operations are efficient, with average time complexity of O(1), making it suitable for scenarios where frequent cache operations are expected.
qwen3.6-35b-a3b · baseline · PASS


```python
class Node:
    def __init__(self, key=0, value=0):
        self.key = key
        self.value = value
        self.prev = None
        self.next = None


class LRUCache:

    def __init__(self, capacity: int):
        self.capacity = capacity
        self.cache = {}  # key -> Node
        
        # Dummy head and tail nodes
        self.head = Node()  # Most recently used end
        self.tail = Node()  # Least recently used end
        self.head.next = self.tail
        self.tail.prev = self.head

    def _add_to_head(self, node: Node):
        """Add a node right after the head (most recent position)."""
        node.prev = self.head
        node.next = self.head.next
        self.head.next.prev = node
        self.head.next = node

    def _remove_node(self, node: Node):
        """Remove a node from its current position."""
        prev_node = node.prev
        next_node = node.next
        prev_node.next = next_node
        next_node.prev = prev_node

    def _move_to_head(self, node: Node):
        """Move an existing node to the head (most recent)."""
        self._remove_node(node)
        self._add_to_head(node)

    def _pop_tail(self) -> Node:
        """Remove and return the node just before the tail (least recent)."""
        node = self.tail.prev
        self._remove_node(node)
        return node

    def get(self, key: int) -> int:
        if key not in self.cache:
            return -1
        node = self.cache[key]
        self._move_to_head(node)
        return node.value

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            node = self.cache[key]
            node.value = value
            self._move_to_head(node)
        else:
            if len(self.cache) >= self.capacity:
                # Evict the least recently used item (just before tail)
                lru_node = self._pop_tail()
                del self.cache[lru_node.key]
            
            new_node = Node(key, value)
            self.cache[key] = new_node
            self._add_to_head(new_node)
```
qwen3.6-27b · baseline · PASS


```python
class Node:
    def __init__(self, key=0, value=0):
        self.key = key
        self.value = value
        self.prev = None
        self.next = None


class DoublyLinkedList:
    def __init__(self):
        # Sentinel nodes to simplify edge cases
        self.head = Node()
        self.tail = Node()
        self.head.next = self.tail
        self.tail.prev = self.head

    def add_to_front(self, node):
        """Add a node right after the head (most recently used position)."""
        node.prev = self.head
        node.next = self.head.next
        self.head.next.prev = node
        self.head.next = node

    def remove_node(self, node):
        """Remove an existing node from the list."""
        prev_node = node.prev
        next_node = node.next
        prev_node.next = next_node
        next_node.prev = prev_node

    def remove_last(self):
        """Remove and return the node just before the tail (least recently used)."""
        if self.head.next == self.tail:
            return None
        lru_node = self.tail.prev
        self.remove_node(lru_node)
        return lru_node


class LRUCache:
    def __init__(self, capacity: int):
        self.capacity = capacity
        self.cache_map = {}  # key -> Node
        self.dll = DoublyLinkedList()

    def get(self, key: int) -> int:
        if key not in self.cache_map:
            return -1
        
        node = self.cache_map[key]
        # Move accessed node to front (most recently used)
        self.dll.remove_node(node)
        self.dll.add_to_front(node)
        
        return node.value

    def put(self, key: int, value: int) -> None:
        if key in self.cache_map:
            # Update existing key
            node = self.cache_map[key]
            node.value = value
            # Move to front (most recently used)
            self.dll.remove_node(node)
            self.dll.add_to_front(node)
        else:
            # Insert new key
            if len(self.cache_map) >= self.capacity:
                # Evict least recently used
                lru_node = self.dll.remove_last()
                if lru_node:
                    del self.cache_map[lru_node.key]
            
            # Add new node
            new_node = Node(key, value)
            self.cache_map[key] = new_node
            self.dll.add_to_front(new_node)
```
claude-sonnet-4.6 · baseline · PASS
```python
from collections import OrderedDict

class LRUCache:
    def __init__(self, capacity: int):
        self.capacity = capacity
        self.cache = OrderedDict()

    def get(self, key: int) -> int:
        if key not in self.cache:
            return -1
        self.cache.move_to_end(key)
        return self.cache[key]

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            self.cache.move_to_end(key)
            self.cache[key] = value
        else:
            if len(self.cache) >= self.capacity:
                self.cache.popitem(last=False)
            self.cache[key] = value
```
qwen3.5-4b · bare · fail


```python
class LRUCache:
    def __init__(self, capacity):
        self.capacity = capacity
        self.cache = {}  # key -> value mapping
        self.head = Node(None)
        self.tail = Node(None)
        self.head.next = self.tail
        self.tail.prev = self.head
        
    class Node:
        def __init__(self, key=None, value=None):
            self.key = key
            self.value = value
            self.prev = None
            self.next = None
            
    def _move_to_end(self, node):
        """Move a node to the end (most recently used)"""
        if node == self.tail:
            return
        node.prev.next = node.next
        if node.next:
            node.next.prev = node.prev
        node.next = self.tail
        node.prev = self.tail.prev
        self.tail.prev = node
        node.next.prev = node
        
    def _remove(self, node):
        """Remove a node from the list"""
        node.prev.next = node.next
        if node.next:
            node.next.prev = node.prev
            
    def get(self, key):
        if key not in self.cache:
            return -1
        node = self.cache[key]
        self._move_to_end(node)
        return node.value
        
    def put(self, key, value):
        if key in self.cache:
            node = self.cache[key]
            node.value = value
            self._move_to_end(node)
        else:
            node = Node(key, value)
            self.cache[key] = node
            self._add_to_end(node)
            
            if len(self.cache) > self.capacity:
                lru_node = self.head.next
                self._remove(lru_node)
                del self.cache[lru_node.key]
                
    def _add_to_end(self, node):
        """Add a node to the end (most recently used)"""
        node.prev = self.tail.prev
        node.next = self.tail
        self.tail.prev.next = node
        self.tail.prev = node
```
qwen3.5-2b · baseline · fail
```python
class LRUCache:
    def __init__(self, capacity: int):
        self.capacity = capacity
        # Map from key to value and a doubly-linked list node for LRU order
        self.cache = {}
        self.head = None  # Head of the doubly linked list (most recently used)
        self.tail = None  # Tail of the doubly linked list

    def _add_to_head(self, key: int):
        """Add a new entry to the head of the LRU list."""
        node = {'key': key, 'value': None}
        if not self.head:
            self.head = self.tail = node
        else:
            # Remove from current tail position (if exists)
            prev_tail = self.tail
            if prev_tail and prev_tail['key'] == key:
                prev_tail = None
            # Insert at head
            node['next'] = self.head
            self.head['prev'] = node
            self.head = node
        self.cache[key] = node

    def _remove_from_list(self, key: int):
        """Remove a node from the doubly linked list."""
        if key in self.cache:
            node = self.cache[key]
            prev_tail = node['prev']
            next_node = node['next']
            if prev_tail:
                prev_tail['next'] = next_node
            else:
                # This is the head, remove it entirely
                self.head = next_node
            if next_node:
                next_node['prev'] = prev_tail
            del self.cache[key]

    def get(self, key: int) -> int:
        """Return value of key or -1 if absent."""
        if key not in self.cache:
            return -1
        node = self.cache[key]
        # Move to head (mark as most recently used)
        self._add_to_head(key)
        return node['value']

    def put(self, key: int, value: int):
        """Insert or update key-value pair. Evict LRU if capacity exceeded."""
        if key in self.cache:
            # Update existing entry
            self.cache[key]['value'] = value
            self._add_to_head(key)  # Refresh recency
        else:
            # Check capacity and evict if needed
            if len(self.cache) >= self.capacity:
                lru_key = self.head['key']
                del self.cache[lru_key]
                self._remove_from_list(lru_key)
            
            # Insert new entry at head
            node = {'key': key, 'value': value}
            if not self.head:
                self.head = self.tail = node
            else:
                prev_tail = self.tail
                if prev_tail and prev_tail['key'] == key:
                    prev_tail = None
                node['next'] = self.head
                self.head['prev'] = node
                self.head = node
            self.cache[key] = node
```
qwen3.5-0.8b · baseline · fail
```python
class LRUCache:
    """A cache that keeps at most 'capacity' entries, with the least-recently-used entry evicted."""

    def __init__(self, capacity: int):
        self.capacity = capacity
        self.cache: dict[str, tuple[int, str]] = {}  # key -> (value, recency)
        self.recent_keys: set[str] = set()  # keys that have been recently accessed

    def _get_key(self, key: str) -> int | None:
        """Get the index of a key in the cache. Returns -1 if not found."""
        return self.cache.get(key)

    def _evict_least_recently_used(self):
        """Remove the least-recently-used entry from the cache and its associated keys."""
        # Find the last element (most recently used)
        last_key = max(self.recent_keys, key=len) if self.recent_keys else None
        if not last_key:
            return

        # Remove this key and all its entries
        del self.cache[last_key]
        for k in self.recent_keys:
            self.recent_keys.discard(k)

    def _update_relevance(self, key: str):
        """Update the recency of a key."""
        if key not in self.cache:
            return
        value, _ = self.cache[key]
        # Update recency by incrementing it (or keeping as is for simplicity)
        self.recent_keys.add(key)

    def get(self, key: str) -> int | None:
        """Return the value of a key, or -1 if not found."""
        idx = self._get_key(key)
        if idx is not None and idx in self.cache:
            return self.cache[idx][0]
        return None

    def put(self, key: str, value: int):
        """Insert/update a key-value pair. If capacity exceeded, evict least-recently-used."""
        # Check if we can insert this key
        idx = self._get_key(key)
        if idx is not None and idx in self.cache:
            return  # Already exists

        # Insert the new entry
        self.cache[key] = (value, len(self.recent_keys))
        self._update_relevance(key)

        # Check capacity
        if len(self.cache) > self.capacity:
            self._evict_least_recently_used()
```