Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Nächste Überarbeitung | Vorherige Überarbeitung | ||
| gf_informatik:karatutorial:algorithmen [2026-09-06 20:33] – angelegt hof | gf_informatik:karatutorial:algorithmen [2026-09-08 08:03] (aktuell) – [Aufgabe F2: Längster Tunnel] hof | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ## Kara Algorithmen | ## Kara Algorithmen | ||
| - | - (already covered): | + | 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 [[verzweigungen# |
| - | * leaf counting | + | |
| - | * tunnel detection | + | |
| - | - wall following | + | |
| - | - longest tunnel finding | + | |
| - | - leaf ratio & comparisons (more / less) | + | |
| - | - distance between two leaves | + | |
| - | - filling a rectangle with leaves | + | |
| - | - Boustrophedon field sweep | + | |
| - | - alternating pattern sowing | + | |
| + | Zentral dabei ist, dass diese Algorithmen nicht nur in der vorgegebenen Kara-Welt funktionieren, | ||
| + | |||
| + | 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, | ||
| + | |||
| + | **Hinweis**: | ||
| + | |||
| + | < | ||
| + | < | ||
| + | TTTTTTTTTTTTTTT | ||
| + | T T | ||
| + | T TTTTT T | ||
| + | T | ||
| + | T | ||
| + | T TLLLTT | ||
| + | T TLLLT T | ||
| + | T TLLLT T | ||
| + | T TTTLLLTT | ||
| + | T TLLLLLLT | ||
| + | T TLTTTLTT | ||
| + | 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| | ||
| + | * (already covered): | ||
| + | * leaf counting | ||
| + | * tunnel detection | ||
| + | * wall following | ||
| + | * longest tunnel finding | ||
| + | * leaf ratio & comparisons (more / less) | ||
| + | * distance between two leaves | ||
| + | * filling a rectangle with leaves | ||
| + | * Boustrophedon field sweep | ||
| + | * alternating pattern sowing | ||
| + | ++++ | ||
| + | #### Aufgabe F2: Längster Tunnel | ||
| + | |||
| + | Schreibe Python-Code, | ||
| + | |||
| + | **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. | ||
| + | |||
| + | < | ||
| + | < | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | < | ||
| + | record = 0 | ||
| + | length = 0 | ||
| + | while not kara.treeFront(): | ||
| + | if kara.treeLeft() and kara.treeRight(): | ||
| + | length = length + 1 | ||
| + | kara.putLeaf() | ||
| + | else: | ||
| + | if length > record: | ||
| + | record = length | ||
| + | print(" | ||
| + | length = 0 | ||
| + | kara.move() | ||
| + | print(" | ||
| + | </ | ||
| + | < | ||
| + | assert " | ||
| + | </ | ||
| + | </ | ||