Ein Algorithmus ist eine eindeutige Vorgehensweise zur Lösung eines Problems. Du hast bereits einige Algorithmen ausprobiert und sogar selber einige umgesetzt, z.B. zum Verteilen von Blättern, dem Markieren eines Tunnels oder dem Zählen von Blättern.

Zentral dabei ist, dass diese Algorithmen nicht nur in der vorgegebenen Kara-Welt funktionieren, sondern die richtige Lösung auch dann liefern, wenn die Welt anders aussieht - zum Beispiel wenn mehr oder weniger Blätter vorhanden sind. Ein Algorithmus, der für Aufgabe E2 einfach die korrekte Zahl 34 ausgibt, genügt diesem Kriterium kaum.

In diesem Kapitel werden wir unsere Python-Kenntnisse vertiefen und auf algorithmische Probleme anwenden.

Aufgabe F1: Wand folgen

Kara wacht eifersüchtig über ihren Blättervorrat. Schreibe Python-Code, der Kara immerzu um die Bäume herumlaufen lässt.

Hinweis: Das Programm hört von sich aus nie auf, muss also aktiv unterbrochen werden, um es zu stoppen.

TTTTTTTTTTTTTTT T T T TTTTT T T TTLLLTT T T TTLLLLT> T T TLLLTT T T TLLLT T T TLLLT T T TTTLLLTT T T TLLLLLLT T T TLTTTLTT T T TLT TTT T T TTT T T T TTTTTTTTTTTTTTT while True: # endet nie! if not kara.treeRight(): # der rechten Wand folgen kara.turnRight() kara.move() else: # rechts ist ein Baum if not kara.treeFront(): kara.move() else: kara.turnLeft()

TOC

Aufgabe F2: Längster Tunnel

Schreibe Python-Code, um den Länge des längsten Tunnels auszugeben. Ein Tunnel ist definiert als eine gerade Strecke, bei der links und rechts ein Baum steht. Am Ende wird die Länge des längsten Tunnels auf der Konsole ausgegeben. Kara stoppt, wenn Sie auf einen Baum trifft.

Tipps:

  • Merke dir den bislang längsten Tunnel (Rekordhalter) in einer Variable (zu Beginn 0).
  • Merke dir die Länge des aktuellen Tunnels in einer Variable.
    • am Ende jedes Tunnels vergleichst du den aktuellen Tunnel mit dem bisherigen Rekordhalter und setzt ev. diesen eventuell auf den neuen Höchstwert.
    • Vergleiche kannst du mit dem Operator > oder < anstellen, also if laenge > rekord:
    • danach wird die aktuelle Länge auf 0 gesetzt.
TTTTTTTTTTTTTTTTTTTTTT T T T TTTT TTTTTT T T T> T T TTTTTTTT TT TT T T TTTTTTTTTTTTTTTTTTTTTT record = 0 length = 0 while not kara.treeFront(): if kara.treeLeft() and kara.treeRight(): length = length + 1 kara.putLeaf() # optional else: if length > record: record = length print("Neuer Rekord:", record) length = 0 kara.move() print("Rekord:", record) assert "4" in output_lines()[-1]
  • gf_informatik/karatutorial/algorithmen.txt
  • Zuletzt geändert: 2026-09-08 08:03
  • von hof