Design and implement a data structure for a cache, which has the following functions: get(key) Return the value associated with the specified key if it exists in the cache, else return -1 . put(key, value, weight) Associate value with key in the cache, such that value might be later retrieved by get(key) . Cache has a fixed capacity, and when such capacity is reached, key with the least score must be invalidated until the number of key s falls within cache capacity. The score is calculated as follows: weight ∕ [ln(current_time - last_accessed_time + 1) + 1] Implementation of the cache should be optimized on the time complexity of get(key) .
type Cache interface { Get(key string) (string, error) Put(key string, value string, weight int) error }