Les cruches

Soient deux cruches de capacités respectives 5 et 7 litres. Ces cruches ne sont pas graduées. Vous avez accès à un robinet qui vous permet de remplir à tout moment l’une ou l’autre des cruches:

remplir(0)
remplir(1)

De même, vous disposez d’une évacuation d’eau permettant de vider l’une ou l’autre des cruches:

vider(0)
vider(1)

Enfin, vous pouvez transvaser le contenu de la première cruche dans la seconde, et réciproquement:

verser(0)
verser(1)

Et c’est tout.

from ipywidgets_game_jugs.__global__.fr import *
CRUCHES(5, 7)

Écrire un programme de sorte que l’une ou l’autre des cruches contienne 4 litres à la fin. Noter que, dans cette feuille, le programme doit être écrit en Python, mais ici cela ne change pas grand chose.

vider(0)
vider(1)
### BEGIN SOLUTION
remplir(1)
verser(1)
vider(0)
verser(1)
remplir(1)
verser(1)
### END SOLUTION
assert valides()[4]

Compléter le programme pour que tous les volumes entre 1 et 7 soient atteints:

### BEGIN SOLUTION
vider(0)
vider(1)
remplir(1)
verser(1)
vider(0)
verser(1)
remplir(1)
verser(1)
vider(0)
verser(1)
remplir(1)
verser(1)
vider(0)
verser(1)
vider(0)
verser(1)
remplir(1)
verser(1)
### END SOLUTION
assert all(valides())

Pour aller plus loin:

Dans une nouvelle feuille de travail:

  • essayez avec des cruches de tailles différentes

  • est-il toujours possible d’obtenir n’importe quel volume?

  • écrire un algorithme qui, étant donné deux cruches de capacités quelconques, détermine et obtienne tous les volumes possibles.