Kara-Labyrinth

Ziel: Viel Programmieren.

Wir steuern Kara, den Marienkäfer, durch ein Labyrinth. Kara kann vorwärts laufen und drehen — er sieht jedoch nur, ob direkt vor ihm, links oder rechts ein Baum steht.

Befehl Wirkung
kara.move() Einen Schritt vorwärts
kara.turnLeft() Um 90° nach links drehen
kara.turnRight() Um 90° nach rechts drehen
kara.treeFront() True, wenn ein Baum vor Kara steht
kara.treeLeft() True, wenn ein Baum links von Kara steht
kara.treeRight() True, wenn ein Baum rechts von Kara steht
kara.onLeaf() True, wenn Kara auf einem Blatt steht

Führe Kara durch das Labyrinth bis zum Blatt. Schreibe dazu die nötigen Befehle — einen nach dem anderen.

###### #>...# ####.# #L...# ######

Das Labyrinth ist jetzt länger. Statt jeden einzelnen Schritt aufzuschreiben, benutzen wir eine Schleife.

Tipp: Kara soll laufen, bis er das Blatt erreicht:

while not kara.onLeaf():
    if not kara.treeFront():
        kara.move()
    elif ...:
        ...
    else:
        ...

Überlege: Was soll Kara tun, wenn er an eine Wand stösst? Nutze kara.treeFront(), kara.treeLeft() und kara.treeRight(), um zu entscheiden, wann Kara abbiegen muss.

######## #>.....# ######.# ######.# ######.# #....L.# ########

Jetzt das grosse Labyrinth! An jeder Kreuzung muss Kara selbst entscheiden, wohin er geht.

Tipp: Wandfolger-Strategie
Kara hält die Wand immer auf einer Seite (z.B. links).

###v################# #.#.....#.#.........# #.###.#.#.#.###.###.# #.#...#...#.#...#.#.# #.#.###.#####.###.#.# #...#...#.....#.#...# #####.###.###.#.#.### #...#.#.....#.....#.# #.###.#####.#.#####.# #.....#...#.#.......# #.#.#####.#.#######.# #.#.......#.......#.# #.###############.#.# #.#.#...........#...# #.#.#.#.#######.#.#.# #...#.#.....#.#...#.# #.###.#####.#.#.###.# #.#.....#...#...#...# #.#######.###.###.### #.........#.........# #########L###########

Siehst du Situationen in diesem Labyrinth, die beim Wandfolge-Algorithmus Probleme bereiten könnten?

Und hier? Ideen gibts bei Wikipedia.

##################### #.#.....#.#.........# #.###.#.#.#.###.###.# #.#...#...#.#..v#.#.# #.#.###.###.#.###.#.# #...#...#.....#.#...# #####.###.###.#.#.### #...#.#.....#.....#.# #.###.#####.#.#####.# #.....#...#.#.......# #.#.#####.#.#######.# #.#.......#.......#.# #.###############.#.# #.#.#...........#...# #.#.#.#.#######.#.#.# #...#.#.....#.#...#.# #.###.#####.#.#.###.# #.#.....#...#...#...# #.#######.###.###.### #.........#.........# #########L###########

Kara steht diesmal mitten im offenen Feld — nicht an einer Wand. Der Wandfolger-Algorithmus aus Aufgabe 3 funktioniert nur, wenn Kara bereits an einer Wand ist.

Aufgabe: Schreibe ein Programm in drei Phasen:

  1. Phase 1: Kara läuft geradeaus, bis er eine Wand erreicht
  2. Phase 2: Kara dreht sich, damit die Wand auf einer Seite ist
  3. Phase 3: Kara folgt der Wand bis zum Blatt (wie in Aufgabe 3)

############################### #.............................# #.............................# #.............................# #............#####............# #............#...#............# #............#...#............# #............##.##............# #.............................# #.............................# #.............................# #..........####.####..........# #..........#..#.#..#..........# #...####...#..#.#..#...####...# #...#..#...####.####...#..#...# #...#..........>..........#...# #...#..#...####.####...#..#...# #...####...#..#.#..#...####...# #..........#..#.#..#..........# #..........####.####..........# #.............................# #.............................# #.............................# #............##.##............# #............#...#............# #............#...#............# #............#####............# #.............................# #.............................# #.............................# ###############################

Ziel: Den Weg aus dem Labyrinth als kompakte Anweisung codieren. Beispiel: Der String 'L---R-R--' steht für „Links, 3x vorwärts, rechts, 1x vorwärts, rechts, 2x vorwärts“.

Schreibe einen Interpreter für die obige Anweisungssprache für Kara. Ein Interpreter ist eine Funktion, die einen String erhält und den Käfer entsprechend bewegt.

Wie wärs mit einer noch kompakteren Sprache, z.B. 'L3R1R2'? Was, wenn mehr als 9 Schritte gemacht werden sollen?

Ziel: Aus dem Labyrinth finden (also auf das Blatt). Verschiebe Pilze, die im Weg sind…

####### #.....# #.>.#.# #....ML #.....# #.....# #######

############# #>.M....##### ####.######## ####.######## ####M######## ####...M....# ####.###.#### ########.#### ########.#### ########L####

######### #>......# #...M...# ####.#### ####M### ####.#### #.......# #.......# #.L.....# #########

######### #>......# #.......# #..MM...# ###.M#### ####.#### ####.#### #.......# #.......# #.L.....# #########

  • gf_informatik/kara_maze.1781675594.txt.gz
  • Zuletzt geändert: 2026-06-17 05:53
  • von hof