JWINF-Trainingsaufgabe "Fischen" (Python)?


31.01.2023, 21:59

Ich habe vergessen zu erwähnen: Das Programm ist auf 22 Befehle limitiert!

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

So ist die Aufgabe nicht lösbar. Man muss zumindest wissen, wie groß das Feld ist, sonst kann man nicht rechtzeitig die Richtung wechseln. Aber selbst dann bin ich mir nicht sicher, ob es geht. Vermutlich muss man das Feld (ziemlich oft) durchlaufen und dabei jeden Fisch auf dem Weg auf ein dediziertes Feld legen. Dazu bräuchte man aber einen Rundweg, bei dem der Startpunkt egal ist, oder man müsste die Anzahl der Fische kennen.

Die Grafik suggeriert aber, dass jede Zeile genau einen Fisch und eine Insel enthält. Dann sollte es einfacher gehen: Durchlaufe jede Zeile in eine Richtung und fange diesen einen Fisch, und liefere ihn auf dem Rückweg auf der einzigen Insel in dieser Zeile ab.


Sebastian8325 
Fragesteller
 01.02.2023, 07:23

Danke für deine Hilfe. Da bin ich mir aber leider auch nicht sicher ob das geht, weil ja manchmal zuerst ein Fisch und dann eine Insel kommt und manchmal zuerst die Insel und dann der Fisch. 4 mal kommt zuerst der Fisch, 3 mal zuerst die Insel. Ein Muster dazwischen erkenne ich leider nicht, d.h. so etwas wie 1. nur durchlaufen 2. durchlaufen und zurück 3. nur durchlaufen ist nicht möglich.

Natürlich könnte ich mir for-Schleifen jeden dieser Fälle abdecken, aber ich fürchte diese Lösung wäre nicht elegant und würde das Limit von Befehlen überschreiten.

Ein anderes Muster, z.B. die Bahnen nicht waagerecht sondern vertrikal zu ziehen ist auch nicht möglich, da es nur die Befehle "rechts", "links" und "oben" zur Steuerung gibt, nichts wie "unten".

Trotzdem vielen Dank für deine Hilfe 👍

PS: Das Feld ist so maßstabsgetreu, also die Abstände stimmen so alle

0
Sebastian8325 
Fragesteller
 01.02.2023, 07:33
@Sebastian8325

Das habe ich in meiner Frage in Punkt 2 wohl etwas unglücklich formuliert, also die Inseln und Fische bleiben jetzt so, nur erkenne ich hier hslt kein Muster.

0
ralphdieter  01.02.2023, 11:30
@Sebastian8325
nicht sicher ob das geht,

Du denkst zu kompliziert!

12×: wenn Fisch: fangen; rechts;
12×: links; wenn Insel: ablegen;
oben;

Das ist unabhängig von der Anordnung Fisch/Insel. Es funktioniert immer, wenn

  1. jede Zeile genau einen Fisch und eine Insel hat oder leer ist
  2. der rechte und obere Rand leer sind

Die zweite Bedingung kriegt man weg, wenn man etwas Code dupliziert. Aber die erste ist wohl essenziell, weil der Roboter nicht zählen kann und kein Gedächtnis hat.

0
Sebastian8325 
Fragesteller
 01.02.2023, 13:51
@ralphdieter

Vielen Dank für die Hilfe, das wir die richtige Lösung sein. Ich probiere sie nachher mal aus, aber so wird das Problem mit der Reihenfolge ja gelöst 👍

0

for loop in range(11):
if aufFisch():
fangeFisch()
rechts()
for loop in range(11):
links()
for loop in range(11):
if aufInsel():
legefischab()
rechts()
for loop in range(11): links()

auf jede Zeile erst nach rechts fahren und fische einsammeln falls du auf fische stehst, aber noch nicht ablegen. Danach wieder ganz nach links fahren und jetzt erst anfangen mit fische austeilen indem du nach rechts fährst, danach wieder ganz nach links. Eine Zeile hoch und wiederholen.