Tracks
/
Go
Go
/
Übungen
/
Zwei Eimer
Zwei Eimer

Zwei Eimer

Schwer

Anleitung

Gegeben sind zwei unterschiedlich große Eimer und die Vorgabe, welcher Eimer zuerst gefüllt werden soll. Bestimme, wie viele Aktionen nötig sind, um eine exakte Anzahl Liter abzumessen, indem du geschickt Flüssigkeit zwischen den Eimern umfüllst.

Es gibt einige Regeln, die deine Lösung befolgen muss:

  • du kannst jeweils nur eine Aktion ausführen.
  • Es gibt nur 3 mögliche Aktionen:
    1. Einen Eimer in den anderen Eimer umfüllen, bis entweder: a) der erste Eimer leer ist b) der zweite Eimer voll ist
    2. Einen Eimer leeren und den anderen unverändert lassen.
    3. Einen Eimer füllen und den anderen unverändert lassen.
  • Nach einer Aktion darfst du nicht in einen Zustand geraten, in dem der Starteimer leer und der andere Eimer voll ist.

dein Programm bekommt als Eingabe:

  • die Größe von Eimer eins
  • die Größe von Eimer zwei
  • die gewünschte Literzahl, die erreicht werden soll
  • welcher Eimer zuerst gefüllt werden soll, entweder Eimer eins oder Eimer zwei

dein Programm soll Folgendes bestimmen:

  • die Gesamtzahl der Aktionen, die nötig sind, um die gewünschte Literzahl zu erreichen, einschließlich des ersten Füllens des Starteimers
  • welcher Eimer am Ende die gewünschte Literzahl enthalten soll, entweder Eimer eins oder Eimer zwei
  • wie viele Liter im anderen Eimer übrig sind

Hinweis: Jedes Mal, wenn du einen oder beide Eimer veränderst, zählt das als eine (1) Aktion.

Beispiel: Eimer eins fasst bis zu 7 Liter, und Eimer zwei fasst bis zu 11 Liter. Sagen wir, in einem bestimmten Schritt enthält Eimer eins 7 Liter und Eimer zwei 8 Liter (7,8). Wenn du Eimer eins leerst und Eimer zwei unverändert lässt, sodass du 0 Liter bzw. 8 Liter hast (0,8), zählt das als eine Aktion. Wenn du stattdessen von Eimer eins in Eimer zwei umgefüllt hättest, bis Eimer zwei voll war, sodass Eimer eins 4 Liter und Eimer zwei 11 Liter enthalten hätten (4,11), würde das ebenfalls nur als eine Aktion zählen.

Ein weiteres Beispiel: Eimer eins fasst 3 Liter, und Eimer zwei fasst bis zu 5 Liter. du sollst mit Eimer eins beginnen. deine erste Aktion ist also, Eimer eins zu füllen. Für deine zweite Aktion entscheidest du dich, Eimer eins zu leeren. Für deine dritte Aktion darfst du Eimer zwei nicht füllen, weil dies gegen die dritte Regel verstößt: Nach einer Aktion darfst du nicht in einen Zustand geraten, in dem der Starteimer leer und der andere Eimer voll ist.

Geschrieben mit <3 bei Fullstack Academy von Lindsay Levine.

Implementierung

Implementiere im Paket twobucket eine Go-Funktion, Solve, mit der folgenden Signatur:

func Solve(sizeBucketOne,
	sizeBucketTwo, goalAmount int, startBucket string,
) (goalBucket string, numSteps, otherBucketLevel int, e error)

Solve gibt vier Werte zurück: den Eimer, in dem das Ziel erreicht wurde ("one" oder "two"), die Anzahl der Züge bzw. Schritte, mit denen die Zielmenge erreicht wird, die Liter, die im anderen Eimer übrig bleiben, und einen Fehlerwert. Gib einen Fehler zurück, wenn ein Parameter ungültig ist oder keine Lösung möglich ist.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Go Exercism

Bereit, mit Zwei Eimer zu starten?

Melde dich bei Exercism an, um Go mit 34 Konzepte165 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.