Spaces:
Sleeping
Sleeping
| import numpy as np | |
| class CacheSimulator: | |
| def __init__(self, capacity: int): | |
| self.capacity = capacity | |
| # -1 represents an empty cache slot | |
| self.cache = np.full(capacity, -1, dtype=np.int32) | |
| self.last_access_time = np.zeros(capacity, dtype=np.int32) | |
| self.current_time = 0 | |
| def request_item(self, item_id: int) -> bool: | |
| """Returns True if hit, False if miss. Does not evict.""" | |
| self.current_time += 1 | |
| hit_indices = np.where(self.cache == item_id)[0] | |
| if len(hit_indices) > 0: | |
| idx = hit_indices[0] | |
| self.last_access_time[idx] = self.current_time | |
| return True | |
| return False | |
| def evict_and_insert(self, slot_index: int, item_id: int): | |
| """Places the new item in the specified cache slot.""" | |
| if 0 <= slot_index < self.capacity: | |
| self.cache[slot_index] = item_id | |
| self.last_access_time[slot_index] = self.current_time |