Informatik Python-Hamster?
Ich habe diese Aufgabe erhalten, aber leider komme ich alleine nicht weiter. Trotz intensiven Nachdenkens fällt es mir schwer, sie zu lösen. Könnten Sie mir bitte dabei helfen, die Aufgabe zu bewältigen?
Da fehlt doch etwas
Wie legt er denn einen Teil wieder aus?
Wie in der Abbildung (Bild)
2 Antworten
Wenn der Hamster nicht imer oben links startet, dann solltest du ihn zu Anfang dorthin bewegen.
Nun, du lässt den Hamster das Feld ablaufen. Dazu läuft er jeweils vorwärts bis zur Wand, bewegt sich dann in die nächste Zeile um diese abzulaufen.
Auf dem Weg dorthin sammelt er die Körner ein bzw. legt neue hin. Für jedes Feld prüft er, ob auf das jeweilige Feld ein Korn gehört.
Beim durchlaufen der ersten Zeile kann der Hamster die Feldbreite bestimmen. Wenn er die Koordinaten nicht auslesen kann, dann kann er in einer Variable die x- und y-Koordianten während der Bewegung mitzählen. Diese kann er dann vergleichen um herauszufinden, ob auf ein Feld ein Korn gehört oder nicht.
Da müsstest du vorleisten. Ich weiß nicht, wie die Sprache bzw. das API aussieht und ich will dir auch nicht die Aufgabe vorprogrammieren.
// Jede Reihe ablaufen und alle Körner einsammeln
boolean geheZurNaechstenReihe = true;
while (geheZurNaechstenReihe) {
// Körner auf dem Startfeld einsammeln
while (kornDa()) {
nimm();
}
// So lange sammeln, bis die Reihe zu Ende ist
while (vornFrei()) {
vor();
while (kornDa()) {
nimm();
}
}
// Da es kein "rechtsUm" gibt, muss man dreimal linksUm gehen, um nach rechts zu kommen
linksUm(); linksUm(); linksUm();
geheZurNaechstenReihe = vornFrei();
// Falls noch eine Reihe da ist, laufe auf der nächsten Reihe
// bis zum Anfang zurück und wiederhole die Schleife
if(geheZurNaechstenReihe) {
vor();
linksUm(); linksUm(); linksUm();
while (vornFrei()) {
vor();
}
linksUm(); linksUm();
}
}
// Jetzt sind alle Reihen abgearbeitet und die Körner sollen wieder verteilt werden
// Erst einmal laufen wir bis an den Rand nach oben
linksUm(); linksUm();
while (vornFrei()) {
vor();
}
linksUm();
// Dann legen wir in jede Reihe ein Korn mehr als in der Reihe davor
int koernerProReihe = 1;
geheZurNaechstenReihe = true;
while (geheZurNaechstenReihe) {
// Körner für diese Reihe legen
for (int koerner = 0; koerner < koernerProReihe; koerner++) {
gib();
if (vornFrei()) // Bei der letzten Reihe fällt man vom Rand, wenn man zu weit vor geht.
vor();
}
// Zur nächsten Reihe gehen
linksUm();
geheZurNaechstenReihe = vornFrei();
if(geheZurNaechstenReihe) {
vor();
linksUm();
while (vornFrei()) {
vor();
}
linksUm(); linksUm();
}
// Körner pro Reihe um eins erhöhen und Schleife neu starten
koernerProReihe++;
}
Oh, ich seh jetzt grade erst, dass die Aufgabe in Python umgesetzt werden soll. Ich kannte das Hamster-Modell bisher nur in Java, deshalb ist der Code in Java geschrieben. Du kannst es aber sinngemäß nach Python übersetzen.
Können Sie mir bitte beim Verfassen des Programms helfen? Es ist mir immer noch unverständlich.