Moin,
ich brauche einen Befehl, der mir 20 Zufallszahlen zwischen eins und 20 erstellt, dabei darf jede Zahl nur einmal vorkommen.
Es sollen also einfach die Zahlen zwischen 1 und 20 in ihrer Reihenfolge gemischt werden.
Ich hoffe, es kann mir jemand helfen.
Random
-
- [ offen ]
-
FojhtirfX -
6. Mai 2009 um 17:40 -
Geschlossen -
Erledigt
-
-
EDIT: Neu, jetzt getestet:
[autoit]
[/autoit]
#include <Array.au3>
Dim $array[20]
For $i=1 To 20
Do
$tempran=Random(1,20,1)
TrayTip("",$tempran,1)
Until _ArraySearch($array,$tempran) = -1
$array[$i-1]=$tempran
Next
_ArrayDisplay($array) -
Danke vielmals

-
Das Problem ist nur, dass dieser Prozess extrem lange dauert (mit 6GhZ)
-
Bei mir dauerts 419.5 ms...
Es geht bestimmt auch anders, besser, vlt. mit einem Random und ohne "Bruteforce" -
Das Problem ist nur, dass dieser Prozess extrem lange dauert (mit 6GhZ)
dann teste mal das
Spoiler anzeigen
[autoit]Func _RandomOrder($Min,$Max)
[/autoit]
; Prog@ndy
Local $rand
If $Min > $Max Then
$rand = $Min
$Min = $Max
$Max = $rand
EndIf
Local $Array[$Max-$Min+1], $Return[$Max-$Min+1], $maxb=$Max-$Min
For $i = 0 To $maxb
$Array[$i] = $Min+$i
Next
For $i = 0 To $maxb
$rand = Random(0,$maxb-$i,1)
$Return[$i] = $Array[$rand]
$array[$rand] = $array[$maxb-$i]
Next
Return $Return
EndFunc
#include<array.au3>
$array = _RandomOrder(1,20)
_ArrayDisplay($array) -
Arghh, progandy, jetzt hab ich mich extra 5 Mins an dieses Skript gesetzt (<1 ms):
Spoiler anzeigen
[autoit]
[/autoit]
#include <Array.au3>
dim $source[20]=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
dim $dest[20]
$stamp=TimerInit()
For $i=0 To 19
$ran=Random(1,Ubound($source)-1,1)
$dest[$i]=$source[$ran]
_ArrayDelete($source,$ran)
Next
$time=TimerDiff($stamp)
_ArrayDisplay($dest)
MsgBox(0,0,$time)
... und dann postest du sowas früher...
-
Ich hab mich nur ein paar Mins früher als du hingesetzt
Hab mich an den Lotto µIt erinnert und da war das die beste Lösung ... -
Und dann ist deine Funktion auch noch 0,5 ms schneller....

-
Kein Ubound und kein Arraydelete... Dann ist es schneller

Das wird jetzt aber langsam OT ...
-
Ich habe es mal so gemacht
Spoiler anzeigen
[autoit]Dim $Zahl[20] =[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
[/autoit]
For $1 = 0 To 19
$ran1 = Random (0,19)
Do
$ran2 = Random (0,19)
Until $ran2 <> $ran1
$temp1 = $Zahl[$Ran1]
$temp2 = $Zahl[$Ran2]
$Zahl[$ran1] = $temp2
$Zahl[$ran2] = $temp1
Next
$Zahlen = ""
For $1 = 0 To 19
$Zahlen &= $Zahl[$1] & ","
Next
MsgBox (0,"",$Zahlen)Weiß aber nicht wie lange es dauert, wie kann ich das messen?
-
Danke für die ganzen Antworten
-
Mit Arrays komm ich noch nicht so zurecht und ich möchte jetzt jede dieser Zahlen einer Variablen zuweisen, wie kann ich das machen?
[autoit]Dim $Zahl[20] =[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
[/autoit]
For $1 = 0 To 19
$ran1 = Random (0,19)
Do
$ran2 = Random (0,19)
Until $ran2 <> $ran1
$temp1 = $Zahl[$Ran1]
$temp2 = $Zahl[$Ran2]
$Zahl[$ran1] = $temp2
$Zahl[$ran2] = $temp1
Next
$Zahlen = ""
For $1 = 0 To 19
$Zahlen &= $Zahl[$1] & ","
Next -
Ist es doch schon! Ein Array ist auch eine Varialbe!