Hab mal den Geschwindigkeitsvergleich für diesen Contest gemacht:
Spoiler anzeigen
#include <GUIConstants.au3>
#Include <GuiListView.au3>
#include <array.au3>
#region Variablen definieren
Global $ZeitErgebnisse = ObjCreate("System.Collections.ArrayList")
If @error Then
MsgBox(0, "", "Fehler bei der Objekt-Erstellung")
Exit
EndIf
Global $TimerDiffTime
Global $Name, $Zeitsumme, $Zeitquadratsumme, $ZeitPunkt, $Zeit, $TempArray[3], $N, $X
Global $GUI, $ListView, $Button, $eins, $e, $RahmenZeit
#endregion
;------------------------------------------------------------------------------------------
;Anzahl der Messdurchläufe angeben - je höher N umso genauer wird die gemessene Zeitangabe:
Global $N = 3000
;------------------------------------------------------------------------------------------
#region Zeitaufwand der Methode bestimmen
$Name = "Oscar"
$Zeitquadratsumme = 0
$Zeitsumme = 0
SplashTextOn("Test der Methode:", @CRLF & $Name, 250, 60)
For $XXX = 1 To $N
$ZeitPunkt = TimerInit()
;---------Code-----------
Global $z, $t = ' 01020304050607080910111213141516171819202122232425262728293031323334353637383940414243444546474849'
For $i = 0 To 6
$r = Random(1, 49 - $i, 1) * 2
$z &= StringMid($t, $r, 2) & StringLeft(' | ', 2 + ($i = 5) * 4)
$t = StringMid($t, 1, $r - 1) & StringMid($t, $r + 2)
Next
;------------------------
$Zeit = TimerDiff($ZeitPunkt)
$Zeitsumme += $Zeit
$Zeitquadratsumme += $Zeit ^ 2
Next
$TempArray[0] = $Name
$TempArray[1] = $Zeitsumme / $N
$TempArray[2] = Sqrt((($N * $Zeitquadratsumme) - ($Zeitsumme ^ 2)) / ($N * ($N - 1)))
$ZeitErgebnisse.add ($TempArray)
SplashOff()
#endregion
#region Zeitaufwand der Methode bestimmen
$Name = "GTASpider"
$Zeitquadratsumme = 0
$Zeitsumme = 0
SplashTextOn("Test der Methode:", @CRLF & $Name, 250, 60)
For $XXX = 1 To $N
$ZeitPunkt = TimerInit()
;---------Code-----------
Local $a[49], $sR, $sT, $rnd
For $i = 1 To 49
$a[$i - 1] = $i
Next
Do
$i += Assign("rnd", Random(0, 48))
$sR &= $a[$rnd] & ","
$a[$rnd] = ''
Until $i > 55
While $sT = ''
$sT = $a[Random(0, 48) ]
WEnd
$z = StringTrimRight($sR, 1) & "|" & $sT
;------------------------
$Zeit = TimerDiff($ZeitPunkt)
$Zeitsumme += $Zeit
$Zeitquadratsumme += $Zeit ^ 2
Next
$TempArray[0] = $Name
$TempArray[1] = $Zeitsumme / $N
$TempArray[2] = Sqrt((($N * $Zeitquadratsumme) - ($Zeitsumme ^ 2)) / ($N * ($N - 1)))
$ZeitErgebnisse.add ($TempArray)
SplashOff()
#endregion
#region Zeitaufwand der Methode bestimmen
$Name = "BugFix 1"
$Zeitquadratsumme = 0
$Zeitsumme = 0
SplashTextOn("Test der Methode:", @CRLF & $Name, 250, 60)
For $XXX = 1 To $N
$ZeitPunkt = TimerInit()
;---------Code-----------
Global $a[7] = [0, 0, 0, 0, 0, 0, 0]
Do
$X = Random(1, 49, 1)
For $i = 0 To UBound($a) - 1
If $a[$i] > 0 And $a[$i] = $X Then ExitLoop
If $a[$i] = 0 Then
$a[$i] = $X
ExitLoop
EndIf
Next
Until $a[UBound($a) - 1] <> 0
$z = $a[0] & ' ' & $a[1] & ' ' & $a[2] & ' ' & $a[3] & ' ' & $a[4] & ' ' & $a[5] & ' Z: ' & $a[6]
;------------------------
$Zeit = TimerDiff($ZeitPunkt)
$Zeitsumme += $Zeit
$Zeitquadratsumme += $Zeit ^ 2
Next
$TempArray[0] = $Name
$TempArray[1] = $Zeitsumme / $N
$TempArray[2] = Sqrt((($N * $Zeitquadratsumme) - ($Zeitsumme ^ 2)) / ($N * ($N - 1)))
$ZeitErgebnisse.add ($TempArray)
SplashOff()
#endregion
#region Zeitaufwand der Methode bestimmen
$Name = "Xenobiologist"
$Zeitquadratsumme = 0
$Zeitsumme = 0
SplashTextOn("Test der Methode:", @CRLF & $Name, 250, 60)
For $XXX = 1 To $N
$ZeitPunkt = TimerInit()
;---------Code-----------
Global $z = ' ', $B = ''
Do
$B = Random(1, 49, 1)
If Not StringRegExp($z, '(?<= )' & $B & '(?= )') Then $z &= $B & ' '
Until StringInStr($z, ' ', 0,
$z = 'Lottoziehung ' & @TAB & ':' & StringTrimRight($z, 3) & @CRLF & 'Zusatzzahl ' & @TAB & ': ' & StringRight($z, 3) & @CRLF & 'Superzahl' & @TAB & @TAB & ': ' & Random(1, 9, 1) & @CRLF
;------------------------
$Zeit = TimerDiff($ZeitPunkt)
$Zeitsumme += $Zeit
$Zeitquadratsumme += $Zeit ^ 2
Next
$TempArray[0] = $Name
$TempArray[1] = $Zeitsumme / $N
$TempArray[2] = Sqrt((($N * $Zeitquadratsumme) - ($Zeitsumme ^ 2)) / ($N * ($N - 1)))
$ZeitErgebnisse.add ($TempArray)
SplashOff()
#endregion
#region Zeitaufwand der Methode bestimmen
$Name = "BugFix 2"
$Zeitquadratsumme = 0
$Zeitsumme = 0
SplashTextOn("Test der Methode:", @CRLF & $Name, 250, 60)
For $XXX = 1 To $N
$ZeitPunkt = TimerInit()
;---------Code-----------
Global $str = '', $B = 0, $sum = 0, $a[49] = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 2147483648, 4294967296, 8589934592, 17179869184, 34359738368, 68719476736, 137438953472, 274877906944, 549755813888, 1099511627776, 2199023255552, 4398046511104, 8796093022208, 17592186044416, 35184372088832, 70368744177664, 140737488355328, 281474976710656]
Do
$r = Random(0, 48, 1)
If Not BitAND($sum, $a[$r]) Then
$sum = BitOR($sum, $a[$r])
If $B < 6 Then $str &= $r + 1 & ' '
If $B = 6 Then $str &= ' Z: ' & $r + 1
$B += 1
EndIf
Until $B = 7
;------------------------
$Zeit = TimerDiff($ZeitPunkt)
$Zeitsumme += $Zeit
$Zeitquadratsumme += $Zeit ^ 2
Next
$TempArray[0] = $Name
$TempArray[1] = $Zeitsumme / $N
$TempArray[2] = Sqrt((($N * $Zeitquadratsumme) - ($Zeitsumme ^ 2)) / ($N * ($N - 1)))
$ZeitErgebnisse.add ($TempArray)
SplashOff()
#endregion
#region Zeitaufwand der Methode bestimmen
$Name = "PhilRip"
$Zeitquadratsumme = 0
$Zeitsumme = 0
SplashTextOn("Test der Methode:", @CRLF & $Name, 250, 60)
For $XXX = 1 To $N
$ZeitPunkt = TimerInit()
;---------Code-----------
Dim $lotto[7]
For $i = 0 To 5
$ran = Random(1, 49, 1)
If _ArraySearch($lotto, $ran) = 1 Then
$i -= 1
Else
$lotto[$i] = $ran
EndIf
Next
$lotto[6] = Random(1, 9, 1)
;------------------------
$Zeit = TimerDiff($ZeitPunkt)
$Zeitsumme += $Zeit
$Zeitquadratsumme += $Zeit ^ 2
Next
$TempArray[0] = $Name
$TempArray[1] = $Zeitsumme / $N
$TempArray[2] = Sqrt((($N * $Zeitquadratsumme) - ($Zeitsumme ^ 2)) / ($N * ($N - 1)))
$ZeitErgebnisse.add ($TempArray)
SplashOff()
#endregion
#region Auswerten und Vergleichen
_ArrayListSort2Dim($ZeitErgebnisse, 1, 0)
$eins = $ZeitErgebnisse.Item (0)
[/autoit] [autoit][/autoit] [autoit]$GUI = GUICreate("Ergebnisse", 633, 307, 193, 115)
$ListView = GUICtrlCreateListView("Name|Zeit [ms]|Verhältnis|Standardabweichung [ms]|rel. Abweichung", 0, 0, 632, 265)
$Button = GUICtrlCreateButton("O.K.", 240, 272, 121, 33, 0)
_GUICtrlListView_SetColumnWidth ($ListView, 0, 203)
_GUICtrlListView_SetColumnWidth ($ListView, 1, 100)
_GUICtrlListView_SetColumnWidth ($ListView, 2, 75)
_GUICtrlListView_SetColumnWidth ($ListView, 3, 150)
_GUICtrlListView_SetColumnWidth ($ListView, 4, 100)
For $e In $ZeitErgebnisse
GUICtrlCreateListViewItem($e[0] & '|' & Round($e[1], 3) & '|' & Round($e[1] / $eins[1], 1) & '|' & Round($e[2], 4) & '|' & Int(100 * $e[2] / $e[1]) & '%', $ListView)
Next
GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $Button
Exit
EndSwitch
WEnd
#endregion
;Sortiert eine ArrayList mit enthaltenem Array nach einem Index dieses Arrays im Selection-Sort-Algorithmus
;Author: [email='AspirinJunkie@german-nlite.de'][/email]
Func _ArrayListSort2Dim(ByRef $ArrayList, $DimIndex, $Descending = 0)
Local $minIndex[2], $SortValue
If Not IsObj($ArrayList) Then Return SetError(1, 1, 0)
If $ArrayList.count = 0 Then Return SetError(2, 2, 0)
$SortValue = $ArrayList.Item (0)
If UBound($SortValue) <= $DimIndex Then Return SetError(3, 3, 0)
If $ArrayList.count < 2 Then Return SetError(4, 4, 0)
For $i = 0 To $ArrayList.count - 1
$SortValue = $ArrayList.Item ($i)
$SortValue = $SortValue[$DimIndex]
$minIndex[0] = $i
$minIndex[1] = $SortValue
For $e = $i + 1 To $ArrayList.count - 1
$SortValue = $ArrayList.Item ($e)
$SortValue = $SortValue[$DimIndex]
If $SortValue < $minIndex[1] Then
$minIndex[0] = $e
$minIndex[1] = $SortValue
EndIf
Next
If Not ($minIndex[0] = $i) Then
$ArrayList.Insert ($i, $ArrayList.Item ($minIndex[0]))
$ArrayList.Insert ($minIndex[0] + 1, $ArrayList.Item ($i + 1))
$ArrayList.RemoveAt ($minIndex[0] + 2)
$ArrayList.RemoveAt ($i + 1)
EndIf
Next
If $Descending Then $ArrayList.Reverse
Return 1
EndFunc
McPoldy´s Skript brachte einen Fehler und progandy´s Skript blieb bei mir hängen weswegen ich die beiden rausgelassen habe.