Étant donné deux seaux de tailles différentes et le seau à remplir en premier, détermine combien d'actions sont nécessaires pour mesurer un nombre exact de litres en transférant stratégiquement du liquide d'un seau à l'autre.
Voici quelques règles que ta solution doit respecter :
Ton programme prend en entrée :
Ton programme doit déterminer :
Remarque : toute modification apportée à l'un des seaux ou aux deux compte comme une (1) action.
Exemple : Le seau un peut contenir jusqu'à 7 litres, et le seau deux jusqu'à 11 litres. Imaginons qu'à une étape donnée, le seau un contienne 7 litres et le seau deux 8 litres (7,8). Si tu vides le seau un sans modifier le seau deux, ce qui te laisse respectivement 0 litre et 8 litres (0,8), cela compte comme une seule action. En revanche, si tu avais versé le contenu du seau un dans le seau deux jusqu'à ce que le seau deux soit plein, ce qui donne 4 litres dans le seau un et 11 litres dans le seau deux (4,11), cela ne compterait là aussi que comme une seule action.
Autre exemple : Le seau un peut contenir 3 litres, et le seau deux jusqu'à 5 litres. On te dit que tu dois commencer par le seau un. Ta première action consiste donc à remplir le seau un. Pour ta deuxième action, tu choisis de vider le seau un. Pour ta troisième action, tu ne peux pas remplir le seau deux, car cela enfreint la troisième règle : après une action, tu ne peux pas te retrouver dans un état où le seau de départ est vide et l'autre seau est plein.
Écrit avec <3 à la Fullstack Academy par Lindsay Levine.
Dans le paquet twobucket, implémente une func Go, Solve, avec la signature suivante :
func Solve(sizeBucketOne,
sizeBucketTwo, goalAmount int, startBucket string,
) (goalBucket string, numSteps, otherBucketLevel int, e error)
Solve renvoie quatre valeurs : le seau cible (« one » ou « two »), le nombre de coups/étapes pour atteindre la quantité visée, les litres restants dans l'autre seau et une valeur d'erreur. Renvoie une erreur si un paramètre est invalide ou si aucune solution n'est possible.
Inscris-toi sur Exercism pour apprendre et maîtriser Go avec 34 concepts165 exercices, et un vrai mentorat humain, le tout gratuitement.