# Écrire du code pour la fonction cache. C'est un décorateur qui doit
# se souvenir de ce que la fonction décorée a renvoyé, et renvoyer la valeur mémorisée
# lors d'un appel ultérieur avec les mêmes arguments.
#
# On peut supposer que tous les arguments sont hashables.
# Utiliser uniquement la bibliothèque standard de Python.
def cache(func):
raise NotImplementedError
calls = {"count": 0}
@cache
def add(a, b):
calls["count"] += 1
return a + b
assert add(1, 2) == 3
assert calls["count"] == 1
assert add(1, 2) == 3
assert calls["count"] == 1
assert add(2, 3) == 5
assert calls["count"] == 2
print("OK")