Caché generalizado con prioridad y tiempo de vida
C#
Hard
generics
Tarea «Caché generalizado con prioridad y tiempo de vida»
Implemente una clase genérica Cache<TKey, TValue>, que almacena elementos con un tiempo de vida (TimeToLive) y una prioridad (int) determinados. Al agregar un elemento, si el caché supera el tamaño máximo, se elimina el elemento con la prioridad más baja, y en caso de igual prioridad, el más antiguo. Al expirar el TimeToLive, el elemento se considera caducado y no se devuelve al solicitarlo. Métodos: Add(TKey key, TValue value, int priority) — agrega o actualiza un elemento; TryGet(TKey key, out TValue value) — devuelve true si la clave existe y no ha caducado, de lo contrario false; RemoveExpired() — elimina todos los elementos caducados. Implemente la seguridad para subprocesos mediante bloqueos.
Formato de entrada
Primera línea: tamaño máximo del caché (int) y tiempo de vida en segundos (int). Segunda línea: cantidad de comandos N (int). Luego N líneas, cada comando: 'add clave valor prioridad' o 'get clave' o 'remove_expired'.
Formato de salida
Para cada comando 'get', muestre el valor si la clave se encuentra y no ha caducado, de lo contrario 'null'. Para 'remove_expired', muestre la cantidad de elementos eliminados. Para 'add', no muestre nada.
Ejemplos
Ejemplo 1
ENTRADA
3 5
8
add a 10 1
add b 20 2
get a
add c 30 3
add d 40 1
get b
get d
remove_expired
SALIDA
10
null
40
1
Ejemplo 2
ENTRADA
2 10
6
add x 100 5
add y 200 5
get x
add z 300 5
get y
get z
SALIDA
100
null
300
main.cs