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.
#include <File.au3>
#include <Array.au3>
Global $g_iWorkers = 50
_PossibleSetting()
Func _PossibleSetting()
Local $aDB
_FileReadToArray("Workers.CSV", $aDB, 0, ";")
_ArrayDelete($aDB, 0)
;~ Exit _ArrayDisplay($aDB)
Local $aResults[10000], $iResultCount = 0, $sResultString = "", _
$iHit = 0, $iWorkersTemp = $g_iWorkers
For $i = UBound($aDB) - 1 To 0 Step -1
If $aDB[$i][0] <= $g_iWorkers Then
$iHit = $i
While $iWorkersTemp > 3
For $ii = $iHit To 0 Step -1
ConsoleWrite("$iHit= " & $iHit & @LF)
If $aDB[$ii][0] <= $iWorkersTemp Then
$iHit = $ii
$iWorkersTemp -= $aDB[$ii][0]
$sResultString &= $ii & ","
ConsoleWrite("$iWorkersTemp= " & $iWorkersTemp & @LF)
ConsoleWrite(" $aDB[$ii][0]= " & $aDB[$ii][0] & @LF)
ConsoleWrite("$iWorkersTemp - $aDB[$ii][0]= " & $iWorkersTemp & " - " & $aDB[$ii][0] & @LF)
ConsoleWrite("$iHit= " & $iHit & @LF)
ConsoleWrite("$sResultString= " & $sResultString & @LF)
ExitLoop
EndIf
Next
WEnd
$sResultString &= "Rest " & $iWorkersTemp
$aResults[$iResultCount] = $sResultString
$sResultString = ""
$iResultCount += 1
$iWorkersTemp = $g_iWorkers
EndIf
Next
ReDim $aResults[$iResultCount + 1]
_ArrayDisplay($aResults)
;~ _ArrayDisplay($aDB)
EndFunc ;==>_PossibleSetting
Alles anzeigen
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.