Informatik Python-Hamster?

NackterGerd  09.04.2024, 23:59

Da fehlt doch etwas

Wie legt er denn einen Teil wieder aus?

Muztabawaziri 
Fragesteller
 10.04.2024, 00:02

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.

Muztabawaziri 
Fragesteller
 10.04.2024, 11:00

Können Sie mir bitte beim Verfassen des Programms helfen? Es ist mir immer noch unverständlich.

0
Destranix  10.04.2024, 11:02
@Muztabawaziri

Da müsstest du vorleisten. Ich weiß nicht, wie die Sprache bzw. das API aussieht und ich will dir auch nicht die Aufgabe vorprogrammieren.

0
// 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++;
}
daCypher  10.04.2024, 14:19

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.

0