Neural Mastery
← Practice
Time-To-Live (TTL) Cache Simulatorhard

Time-To-Live (TTL) Cache Simulator

hard Python for AI 20–25 min

NumPy allowed · plain Python earns 10 bonus points

Simulate time-based cache expiration enforcing millisecond/second TTL validation semantics.

Related Skills

Task

Implement simulate_ttl_cache(operations, default_ttl): simulate a TTL cache. A key expires when query timestamp t >= set_time + ttl. If ttl is not provided in a set operation, use default_ttl. Return the results of all get operations (returning None for missing or expired entries).

Function Signature

simulate_ttl_cache(operations: list[dict], default_ttl: int) -> list[any]

Examples

Example 1: Default TTL Expiration
Input: operations = [{'op': 'set', 'key': 'a', 'val': 10, 'time': 0}, {'op': 'get', 'key': 'a', 'time': 3}, {'op': 'get', 'key': 'a', 'time': 5}] default_ttl = 5
Output: [10, None]
Example 2: Custom TTL Override
Input: operations = [{'op': 'set', 'key': 'b', 'val': 20, 'time': 0, 'ttl': 2}, {'op': 'get', 'key': 'b', 'time': 1}, {'op': 'get', 'key': 'b', 'time': 3}] default_ttl = 10
Output: [20, None]
Example 3: Key Overwrite Renews Expiry
Input: operations = [{'op': 'set', 'key': 'k', 'val': 'v1', 'time': 0, 'ttl': 5}, {'op': 'set', 'key': 'k', 'val': 'v2', 'time': 4, 'ttl': 5}, {'op': 'get', 'key': 'k', 'time': 6}] default_ttl = 5
Output: ['v2']

Constraints

  • Libraries are allowed; a plain-Python solution earns 10 bonus points.
  • Queries at exact expiration timestamp (t == expiry) are expired (returns None).
  • Lazy eviction: delete expired entries upon detection during get.
Python3Saved ✓
def simulate_ttl_cache(operations: list[dict], default_ttl: int) -> list[any]:
"""Simulate a Key-Value cache with Time-To-Live expiration.
Ops: {'op': 'set', 'key': k, 'val': v, 'time': t, 'ttl': opt_ttl},
{'op': 'get', 'key': k, 'time': t}.
Return list of results for 'get' operations (None if expired or missing)."""
# Your implementation here
pass

Case 1: Default TTL Expiration
Input: operations = [{'op': 'set', 'key': 'a', 'val': 10, 'time': 0}, {'op': 'get', 'key': 'a', 'time': 3}, {'op': 'get', 'key': 'a', 'time': 5}] default_ttl = 5
Expected: [10, None]
Case 2: Custom TTL Override
Input: operations = [{'op': 'set', 'key': 'b', 'val': 20, 'time': 0, 'ttl': 2}, {'op': 'get', 'key': 'b', 'time': 1}, {'op': 'get', 'key': 'b', 'time': 3}] default_ttl = 10
Expected: [20, None]
Case 3: Key Overwrite Renews Expiry
Input: operations = [{'op': 'set', 'key': 'k', 'val': 'v1', 'time': 0, 'ttl': 5}, {'op': 'set', 'key': 'k', 'val': 'v2', 'time': 4, 'ttl': 5}, {'op': 'get', 'key': 'k', 'time': 6}] default_ttl = 5
Expected: ['v2']