Eine kleine Verschnellerung konnte ich rausholen.
(Bei mir dauerte es vorher ca. 240-250 und jetzt 190-200...)
Switch Befehle sind in der regel schneller als If Abfragen.
$bla += 1 ist schneller als $bla = $bla + 1 (ebenso mit Minus)
In der Schleife jedesmal $iDiff und $iToDo zu deklarieren mit Local dauert länger als es vorher zu deklarieren.
Das Array voll mir 100ern schreiben kann man auch vor dem Funktionscall machen.
While $bla > 0 ist langsamer als While $bla (weil wenn bla = 0 bricht die Sache auch so ab)
gleiches gilt für If $bla <> '' then ist langsamer als If $bla then
Spoiler anzeigen
#include <Array.au3>
Opt("TrayIconDebug", 1)
#Region Variablen
Global $SC_ARR_PLACES[65][5]
$SC_ARR_PLACES[0][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[0][1] = 5; 1. Nachbar von Feld 0
$SC_ARR_PLACES[0][2] = 20; 2. Nachbar von Feld 0
$SC_ARR_PLACES[0][3] = 10; 3. Nachbar von Feld 0
$SC_ARR_PLACES[0][4] = 15; 4. Nachbar von Feld 0
$SC_ARR_PLACES[1][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[1][1] = 51; 1. Nachbar von Feld 1
$SC_ARR_PLACES[1][2] = 64; 2. Nachbar von Feld 1
$SC_ARR_PLACES[1][3] = 52; 3. Nachbar von Feld 1
$SC_ARR_PLACES[1][4] = 9; 4. Nachbar von Feld 1
$SC_ARR_PLACES[2][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[2][1] = 34; 1. Nachbar von Feld 2
$SC_ARR_PLACES[2][2] = 33; 2. Nachbar von Feld 2
$SC_ARR_PLACES[2][3] = 62; 3. Nachbar von Feld 2
$SC_ARR_PLACES[2][4] = 14; 4. Nachbar von Feld 2
$SC_ARR_PLACES[3][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[3][1] = 19; 1. Nachbar von Feld 3
$SC_ARR_PLACES[3][2] = 42; 2. Nachbar von Feld 3
$SC_ARR_PLACES[3][3] = 43; 3. Nachbar von Feld 3
$SC_ARR_PLACES[3][4] = 63; 4. Nachbar von Feld 3
$SC_ARR_PLACES[4][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[4][1] = 25; 1. Nachbar von Feld 4
$SC_ARR_PLACES[4][2] = 24; 2. Nachbar von Feld 4
$SC_ARR_PLACES[4][3] = 61; 3. Nachbar von Feld 4
$SC_ARR_PLACES[4][4] = 60; 4. Nachbar von Feld 4
$SC_ARR_PLACES[5][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[5][1] = 0; 1. Nachbar von Feld 5
$SC_ARR_PLACES[5][2] = 6; 2. Nachbar von Feld 5
$SC_ARR_PLACES[6][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[6][1] = 5; 1. Nachbar von Feld 6
$SC_ARR_PLACES[6][2] = 7; 2. Nachbar von Feld 6
$SC_ARR_PLACES[7][0] = "SAVE"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[7][1] = 6; 1. Nachbar von Feld 7
$SC_ARR_PLACES[7][2] = 8; 2. Nachbar von Feld 7
$SC_ARR_PLACES[8][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[8][1] = 7; 1. Nachbar von Feld 8
$SC_ARR_PLACES[8][2] = 9; 2. Nachbar von Feld 8
$SC_ARR_PLACES[9][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[9][1] = 1; 1. Nachbar von Feld 9
$SC_ARR_PLACES[9][2] = 8; 2. Nachbar von Feld 9
$SC_ARR_PLACES[10][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[10][1] = 0; 1. Nachbar von Feld 10
$SC_ARR_PLACES[10][2] = 11; 2. Nachbar von Feld 10
$SC_ARR_PLACES[11][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[11][1] = 10; 1. Nachbar von Feld 11
$SC_ARR_PLACES[11][2] = 12; 2. Nachbar von Feld 11
$SC_ARR_PLACES[12][0] = "SAVE"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[12][1] = 11; 1. Nachbar von Feld 12
$SC_ARR_PLACES[12][2] = 13; 2. Nachbar von Feld 12
$SC_ARR_PLACES[13][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[13][1] = 12; 1. Nachbar von Feld 13
$SC_ARR_PLACES[13][2] = 14; 2. Nachbar von Feld 13
$SC_ARR_PLACES[14][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[14][1] = 2; 1. Nachbar von Feld 14
$SC_ARR_PLACES[14][2] = 13; 2. Nachbar von Feld 14
$SC_ARR_PLACES[15][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[15][1] = 0; 1. Nachbar von Feld 15
$SC_ARR_PLACES[15][2] = 16; 2. Nachbar von Feld 15
$SC_ARR_PLACES[16][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[16][1] = 17; 1. Nachbar von Feld 16
$SC_ARR_PLACES[16][2] = 15; 2. Nachbar von Feld 16
$SC_ARR_PLACES[17][0] = "SAVE"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[17][1] = 16; 1. Nachbar von Feld 17
$SC_ARR_PLACES[17][2] = 18; 2. Nachbar von Feld 17
$SC_ARR_PLACES[18][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[18][1] = 17; 1. Nachbar von Feld 18
$SC_ARR_PLACES[18][2] = 19; 2. Nachbar von Feld 18
$SC_ARR_PLACES[19][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[19][1] = 18; 1. Nachbar von Feld 19
$SC_ARR_PLACES[19][2] = 3; 2. Nachbar von Feld 19
$SC_ARR_PLACES[20][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[20][1] = 0; 1. Nachbar von Feld 20
$SC_ARR_PLACES[20][2] = 21; 2. Nachbar von Feld 20
$SC_ARR_PLACES[21][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[21][1] = 20; 1. Nachbar von Feld 21
$SC_ARR_PLACES[21][2] = 22; 2. Nachbar von Feld 21
$SC_ARR_PLACES[22][0] = "SAVE"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[22][1] = 21; 1. Nachbar von Feld 22
$SC_ARR_PLACES[22][2] = 23; 2. Nachbar von Feld 22
$SC_ARR_PLACES[23][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[23][1] = 22; 1. Nachbar von Feld 23
$SC_ARR_PLACES[23][2] = 24; 2. Nachbar von Feld 23
$SC_ARR_PLACES[24][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[24][1] = 4; 1. Nachbar von Feld 24
$SC_ARR_PLACES[24][2] = 23; 2. Nachbar von Feld 24
$SC_ARR_PLACES[25][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[25][1] = 4; 1. Nachbar von Feld 25
$SC_ARR_PLACES[25][2] = 26; 2. Nachbar von Feld 25
$SC_ARR_PLACES[26][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[26][1] = 25; 1. Nachbar von Feld 26
$SC_ARR_PLACES[26][2] = 27; 2. Nachbar von Feld 26
$SC_ARR_PLACES[27][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[27][1] = 26; 1. Nachbar von Feld 27
$SC_ARR_PLACES[27][2] = 28; 2. Nachbar von Feld 27
$SC_ARR_PLACES[28][0] = "SAVE"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[28][1] = 27; 1. Nachbar von Feld 28
$SC_ARR_PLACES[28][2] = 29; 2. Nachbar von Feld 28
$SC_ARR_PLACES[29][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[29][1] = 28; 1. Nachbar von Feld 29
$SC_ARR_PLACES[29][2] = 30; 2. Nachbar von Feld 29
$SC_ARR_PLACES[30][0] = "SAVE"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[30][1] = 29; 1. Nachbar von Feld 30
$SC_ARR_PLACES[30][2] = 31; 2. Nachbar von Feld 30
$SC_ARR_PLACES[31][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[31][1] = 32; 1. Nachbar von Feld 31
$SC_ARR_PLACES[31][2] = 30; 2. Nachbar von Feld 31
$SC_ARR_PLACES[32][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[32][1] = 33; 1. Nachbar von Feld 32
$SC_ARR_PLACES[32][2] = 31; 2. Nachbar von Feld 32
$SC_ARR_PLACES[33][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[33][1] = 32; 1. Nachbar von Feld 33
$SC_ARR_PLACES[33][2] = 2; 2. Nachbar von Feld 33
$SC_ARR_PLACES[34][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[34][1] = 35; 1. Nachbar von Feld 34
$SC_ARR_PLACES[34][2] = 2; 2. Nachbar von Feld 34
$SC_ARR_PLACES[35][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[35][1] = 34; 1. Nachbar von Feld 35
$SC_ARR_PLACES[35][2] = 36; 2. Nachbar von Feld 35
$SC_ARR_PLACES[36][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[36][1] = 35; 1. Nachbar von Feld 36
$SC_ARR_PLACES[36][2] = 37; 2. Nachbar von Feld 36
$SC_ARR_PLACES[37][0] = "SAVE"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[37][1] = 38; 1. Nachbar von Feld 37
$SC_ARR_PLACES[37][2] = 36; 2. Nachbar von Feld 37
$SC_ARR_PLACES[38][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[38][1] = 39; 1. Nachbar von Feld 38
$SC_ARR_PLACES[38][2] = 37; 2. Nachbar von Feld 38
$SC_ARR_PLACES[39][0] = "SAVE"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[39][1] = 38; 1. Nachbar von Feld 39
$SC_ARR_PLACES[39][2] = 40; 2. Nachbar von Feld 39
$SC_ARR_PLACES[40][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[40][1] = 39; 1. Nachbar von Feld 40
$SC_ARR_PLACES[40][2] = 41; 2. Nachbar von Feld 40
$SC_ARR_PLACES[41][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[41][1] = 42; 1. Nachbar von Feld 41
$SC_ARR_PLACES[41][2] = 40; 2. Nachbar von Feld 41
$SC_ARR_PLACES[42][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[42][1] = 3; 1. Nachbar von Feld 42
$SC_ARR_PLACES[42][2] = 41; 2. Nachbar von Feld 42
$SC_ARR_PLACES[43][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[43][1] = 3; 1. Nachbar von Feld 43
$SC_ARR_PLACES[43][2] = 44; 2. Nachbar von Feld 43
$SC_ARR_PLACES[44][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[44][1] = 43; 1. Nachbar von Feld 44
$SC_ARR_PLACES[44][2] = 45; 2. Nachbar von Feld 44
$SC_ARR_PLACES[45][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[45][1] = 46; 1. Nachbar von Feld 45
$SC_ARR_PLACES[45][2] = 44; 2. Nachbar von Feld 45
$SC_ARR_PLACES[46][0] = "SAVE"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[46][1] = 47; 1. Nachbar von Feld 46
$SC_ARR_PLACES[46][2] = 45; 2. Nachbar von Feld 46
$SC_ARR_PLACES[47][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[47][1] = 48; 1. Nachbar von Feld 47
$SC_ARR_PLACES[47][2] = 46; 2. Nachbar von Feld 47
$SC_ARR_PLACES[48][0] = "SAVE"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[48][1] = 49; 1. Nachbar von Feld 48
$SC_ARR_PLACES[48][2] = 47; 2. Nachbar von Feld 48
$SC_ARR_PLACES[49][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[49][1] = 50; 1. Nachbar von Feld 49
$SC_ARR_PLACES[49][2] = 48; 2. Nachbar von Feld 49
$SC_ARR_PLACES[50][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[50][1] = 51; 1. Nachbar von Feld 50
$SC_ARR_PLACES[50][2] = 49; 2. Nachbar von Feld 50
$SC_ARR_PLACES[51][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[51][1] = 50; 1. Nachbar von Feld 51
$SC_ARR_PLACES[51][2] = 1; 2. Nachbar von Feld 51
$SC_ARR_PLACES[52][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[52][1] = 1; 1. Nachbar von Feld 52
$SC_ARR_PLACES[52][2] = 53; 2. Nachbar von Feld 52
$SC_ARR_PLACES[53][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[53][1] = 54; 1. Nachbar von Feld 53
$SC_ARR_PLACES[53][2] = 52; 2. Nachbar von Feld 53
$SC_ARR_PLACES[54][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[54][1] = 55; 1. Nachbar von Feld 54
$SC_ARR_PLACES[54][2] = 53; 2. Nachbar von Feld 54
$SC_ARR_PLACES[55][0] = "SAVE"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[55][1] = 54; 1. Nachbar von Feld 55
$SC_ARR_PLACES[55][2] = 56; 2. Nachbar von Feld 55
$SC_ARR_PLACES[56][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[56][1] = 55; 1. Nachbar von Feld 56
$SC_ARR_PLACES[56][2] = 57; 2. Nachbar von Feld 56
$SC_ARR_PLACES[57][0] = "SAVE"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[57][1] = 58; 1. Nachbar von Feld 57
$SC_ARR_PLACES[57][2] = 56; 2. Nachbar von Feld 57
$SC_ARR_PLACES[58][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[58][1] = 59; 1. Nachbar von Feld 58
$SC_ARR_PLACES[58][2] = 57; 2. Nachbar von Feld 58
$SC_ARR_PLACES[59][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[59][1] = 58; 1. Nachbar von Feld 59
$SC_ARR_PLACES[59][2] = 60; 2. Nachbar von Feld 59
$SC_ARR_PLACES[60][0] = "GRASS"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[60][1] = 4; 1. Nachbar von Feld 60
$SC_ARR_PLACES[60][2] = 59; 2. Nachbar von Feld 60
$SC_ARR_PLACES[61][0] = "HOME2"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[61][1] = 4; 1. Nachbar von Feld 61
$SC_ARR_PLACES[62][0] = "HOME1"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[62][1] = 2; 1. Nachbar von Feld 62
$SC_ARR_PLACES[63][0] = "HOME2"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[63][1] = 3; 1. Nachbar von Feld 63
$SC_ARR_PLACES[64][0] = "HOME1"; Dieser Wert ist irrelevant
$SC_ARR_PLACES[64][1] = 1; 1. Nachbar von Feld 64
Global $SC_ARR_DIFFERENCEBETWPLACES[65][65]
#EndRegion Variablen
For $i = 0 To 64
For $j = 0 To 64
;Hier wird das Array erstmal voll mit 100ern geschrieben
$SC_ARR_DIFFERENCEBETWPLACES[$i][$j] = 100
Next
Next
$hTi = TimerInit()
_SC_DifferenceBetweenPlaces()
ConsoleWrite(TimerDiff($hTi) & "ms" & @CRLF)
_ArrayDisplay($SC_ARR_DIFFERENCEBETWPLACES)
Func _SC_DifferenceBetweenPlaces()
Local $i, $j, $k, $iDiff = 0, $iToDo = 64
For $i = 0 To 64
;Diff = die Entferung der Felder
$iDiff = 0
;ToDo = Die felder, die noch übrig sind
$iToDo = 64
;Setzte das Array bei [i][i] auf 0, da dort die Entfernung ja 0 beträgt
$SC_ARR_DIFFERENCEBETWPLACES[$i][$i] = 0
;Solange etwas zu tun ist
While $iToDo
For $j = 0 To 64
;Am anfang ist iDiff = 0 und SC_ARR_DIFFERENCEBETWPLACES[i][i] auch 0, dann gehts halt weiter
Switch $SC_ARR_DIFFERENCEBETWPLACES[$i][$j]
Case $iDiff
For $k = 1 To 4
;SC_ARR_PLACES[$j][$k] geben bis zu 4 Nachbarsfelder aus (z.B. von Feld 0 ist es 5, 10, 15 und 20)
If String($SC_ARR_PLACES[$j][$k]) Then
;Wenn = 100, also noch nicht behandelt, setze die Differenz der beiden Felder auf iDiff
Switch $SC_ARR_DIFFERENCEBETWPLACES[$i][$SC_ARR_PLACES[$j][$k]]
Case 100
$SC_ARR_DIFFERENCEBETWPLACES[$i][$SC_ARR_PLACES[$j][$k]] = $iDiff + 1
$iToDo -= 1
EndSwitch
EndIf
Next
EndSwitch
;~ EndIf
Next
;Differenze += 1
$iDiff += 1
WEnd
Next
EndFunc ;==>_SC_DifferenceBetweenPlaces
ist wahrscheinlich noch nicht das ultimatum, aber immerhin etwas...
lg