Fehlerhafter Algorithmus - bleibt in der Endlosschleife hängen

  • Hi Leute,
    schon mit dem Titel war ich mir nicht sicher.. Gerne werden Vorschläge angenommen, den zu verbessern.

    Ich spiele ein Spiel, in dem es einen idle Part gibt. Man hat Arbeiter und teilt sie in Minen ein. Man hat insgesamt 6. Ich möchte sie möglichst effizient verteilen und mir die beste Aufteilung anhand der Anzahl meiner Arbeiter anzeigen lassen.

    Nun habe ich eine Liste, mit möglichen Verteilungen von Arbeitern. Da wollte ich mir erst einmal alle möglichen Verteilungen in ein Array schreiben und später nach Effizienz sortieren.

    Ich scheitere gerade daran, mir überhaupt die möglichen Verteilungen anzeigen zu lassen. In der ersten Spalte der csv Datei steht die Anzahl der benutzten Arbeiter.
    Mein Gedanke war, ich gehe die Liste von unten durch. Sowie ich einen Eintrag erreiche, der >= die Anzahl meiner Arbeiter ist, gehe ich die Liste von diesem Punkt an immer wieder durch und ziehe die Anzahl von meinen zur Verfügung stehenden Arbeitern ab, bis ein Rest < 4 entsteht.

    Was ich dann aber geschrieben habe, kommt nicht aus der Endlosschleife heraus, sowie ich einen Rest > 4 habe.

    Ich bin sicher ihr könnt mir da schnell helfen. Über Einschätzungen, ob man das besser ganz anders angeht, würde ich mich auch freuen.

    EDIT: Die angehängte csv hat die Endung zip, damit sie angehängt werden konnte. Einfach entfernen.

  • For $i = UBound($aDB) - 1 To 0 Step -1

    To 0... das kann nicht richtig sein... To 1 wäre wohl richtig... so ganz verstehe ich aber eh nicht den Aufbau deiner Liste.

    Man hat insgesamt 6.

    Minen? - Dann schreibe das doch auch dabei... ==>> Man hat insgesamt 6 Minen.

    Ich möchte sie möglichst effizient verteilen ...

    Die Arbeiter? - Dann schreibe das doch auch dabei... ==>> Ich möchte die Arbeiter möglichst effizient verteilen ...

    Einmal editiert, zuletzt von Bitnugger (12. Dezember 2020 um 15:25)

  • Hi Bitnugger

    Okay, die zwei Sätze hätte ich klarer schreiben können. Ja, es gibt sechs Minen und ich möchte meine Arbeiter möglichst effizient aufteilen, damit möglichst viele Rohstoffe produziert werden. Vielen Dank für den Hinweis.

    Ich gehe bis 0, weil ich nach dem Einlesen das erste Element gelöscht habe und die Überschriften nicht mehr im Array sind - ist natürlich unnötig. EDIT: Ja, gerade gesehen dass da ja zwei Überschriften Spalten sind. Also ist 0 wirklich Quatsch.

    Zur Liste. Sie zeigt auch noch die Aufteilung innerhalb einer Mine und was da produziert wird.

    Das möchte ich dann später auch anzeigen und die effizienteste Variante anhand der Spalte mit der Produktion pro Tag pro Arbeiter ermitteln.
    Aber eigentlich ist für meinen ersten Schritt nur die erste Spalte wichtig denke ich. Da stehen die benötigten Arbeiter drin.
    Bei dem Spiel ist es so, dass ich nach und nach immer mal ein paar Arbeiter bekomme und die dann einsortieren muss. Dabei möchte ich wenn möglich in jeder Mine immer eine Aufteilung haben, die ich auch in der Liste finden kann.

    Grüße autoiter

    2 Mal editiert, zuletzt von autoiter (12. Dezember 2020 um 16:08)

  • Ich gehe bis 0, weil ich nach dem Einlesen das erste Element gelöscht habe und die Überschriften nicht mehr im Array sind - ist natürlich unnötig.

    Die erste Zeile im Array ist dann...

    #;I;II;III;IV;I;II;III;IV;I;II;III;IV;Total IV/Day/Worker;Neg Workers

    ...If $aDB[$ii][0] <= $iWorkersTemp Then ...wobei $aDB[$ii][0] dann ja zumindest einmal '#' wäre, wenn $ii = 0 ist?!

    So funktioniert es jedenfalls ohne Endlosschleife:

  • Oh Mann. Ich hatte mir das Array dann auch nochmal angeschaut und gesehen, das du recht hattest. Wenn ich die ersten beiden Zeilen lösche oder nur bis 2 runter gehe, funktioniert das Skript bei mir auch :rolleyes:

    Danke dir Bitnugger.

    Grüße autoiter

  • autoiter 12. Dezember 2020 um 16:10

    Hat das Label [ offen ] entfernt.