Genere un número único dentro del rango (0 - X), manteniendo un historial para evitar duplicados

Me encontré con el desafío donde necesito una función que devuelve un número aleatorio dentro de un rango dado de0 - X. No solo eso, sino que requiero que el número devuelto seaúnico; no duplicar números que ya se han devuelto en llamadas anteriores a la función.

Opcionalmente, cuando se hace esto (por ejemplo, el rango se ha "agotado"), simplemente devuelva un número aleatorio dentro del rango.

¿Cómo podría uno hacer esto?

Respuestas a la pregunta(4)

Su respuesta a la pregunta