Robot Karol ganzen Boden ausfüllen?
Hallo,
ich will in Robot Karol den ganzen Boden ausfüllen,unabängig von der Größe der Welt.
D.h:Karol soll den ganzen Boden ausfüllen,egal wie groß die Welt ist und dann wieder auf die Startposition zurückkehren.
Ich hab es bisher nicht geschafft,vielleicht könnt ihr mir helfen oder eine Anweisung schreiben?
Vielen Dank
2 Antworten
Überlege Dir den Algorithmus zunächst im Kopf. Die eine Möglichkeit wäre eine Spirale von außen nach innen. Dabei wäre allerdings die Zählung in der KAROL-Sprache schwierig, wie weit der Roboter laufen soll.
Die Alternative sind Schlangenlinien. Robot Karol läuft solange vorwärts und legt einen Stein, bis er an die Wand trifft. Dann dreht er sich um und macht dasselbe nochmal - solange, bis rechts neben ihm auch eine Wand ist. Voraussetzung dabei ist natürlich, dass Karol links unten in der Welt anfängt.
Ein kurzer Pseudocode:
- solange keine Wand vor ihm ist, Stein setzen und einen Schritt machen
- wenn er auf eine Wand trifft, dann einen Schritt nach rechts machen und umdrehen
- das wiederholen, bis rechts neben ihm eine Wand ist
Unter Umständen musst Du Karol anfangs noch nach links unten laufen lassen (falls der Startpunkt beliebig ist). Sofern er dann allerdings wieder zum Startpunkt zurückkehren soll, musst Du am Ende noch eine entsprechende Sequenz hinzufügen (eine Marke am Startpunkt bietet sich da an).
LG
Ich habe schon sowas in der Art,aber immer knallt er am Schluss gegen die Wand.
Kannst du mir eine Anweisung schreiben?
Wenn die Welt einfach nur rechteckig ist, einfach im Zickzack drüberlaufen und am Ende wieder an den Anfang zurück. Der Roboter muss sich natürlich merken, wo er gerade ist.
Oder du fasst die Welt als Labyrinth mit sehr vielen "Kreisen" auf und verwendest einen der Labyrinthalgorithmen -- wobei du den Ausgang ignorierst --, um jedes Feld mindestens einmal zu besuchen. (Labyrinthalgorithmen erfordern mindestens 3 verschiedene Zustände jedes Weges -- 0, 1 oder 2 "Markierungen"; wie man die abbildet, ist ein Problem für sich.) Am Ende wieder zurückfahren.
Zu Labyrintalgorithmen siehen https://de.wikipedia.org/wiki/L%C3%B6sungsalgorithmen_f%C3%BCr_Irrg%C3%A4rten
Am vielversprechendsten dürfte dies sein: https://de.wikipedia.org/wiki/L%C3%B6sungsalgorithmen_f%C3%BCr_Irrg%C3%A4rten#Auff%C3%BCllen_von_Sackgassen
Am leichtesten umzusetzen dies: https://de.wikipedia.org/wiki/L%C3%B6sungsalgorithmen_f%C3%BCr_Irrg%C3%A4rten#Zuf%C3%A4llige_Wegwahl
Auf
https://www.mebis.bayern.de/infoportal/faecher/mint/inf/robot-karol/
wird auf ein Beispiel mit dem Namen "auslegen" verwiesen (auslegen.kdp). Da dürfte der komplette Quellcode drin sein.
Aber ich finde es schwieriger, einen Code zu verstehen, wenn ich ihn nur lese, kopiere und einfüge, als wenn ich ihn wenigstens abtippe und mir dabei überlege, was eigentlich hier passiert.
Ich wollte es aber mit Befehlen wie:wenn IstWand dann wenn istosten etc. machen.Die Welt ist immer viereckig.
das mit den Links die du geschrieben hast versteh ich nicht
Ein Labyrinth-Algorithmus, der am Ende alle Felder aller Gänge mit derselben Markierung versehen hat, sollte sich vergleichsweise leicht so modifizieren lassen, dass die Endmarkierung eine einfache Schicht aus Kacheln ist.
Einen Hinweis auf eine Lösung habe ich hier gefunden: https://www.mebis.bayern.de/infoportal/faecher/mint/inf/robot-karol/
Könntest du mir eine Anwesiung schreiben?