Jump to content

unique random function


Go to solution Solved by abberration,

Recommended Posts

Posted

i need to get random id from a list each time unique id

for example

list contain 1 2 3 4

if the first time function set id=1 than the second one function can set 2,3,4(all except 1)

can someone give me some idea?

Posted

Use Random() to create an index of the list number and then process. So I will demonstrate with an array.

#include <MsgBoxConstants.au3>

Local $aList = [100, 200, 300, 99]
Local $iIndex = Random(0, UBound($aList) - 1, 1)
MsgBox($MB_SYSTEMMODAL, '', $aList[$iIndex])

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Posted

You can also randomly sort the list and then loop through it

#include <Array.au3>

Local $aArray[10] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
_ArrayDisplay($aArray, "1D - Original")

_ArrayShuffle($aArray)
_ArrayDisplay($aArray, "1D - Shuffled")
Posted
i get the idea but still can not apply to my script
 
my script have to open all program only once
 
Run('"program1"')
Run('"program2"')
Run('"program3"')
Run('"program4"')
Run('"program5"')
 
example:
script start
 
//step 1
run a program 
sleep
 
//step 2
run the second program random(except one selected early) 
Posted

create a two dimensional array. first dimension is the number of programs you need, second dimension contains the program name and a boolean variable you set if the program has been run. do the random function again if it selects an index with the boolean variable already set.

  • Solution
Posted (edited)

Here's a way to create a random sequence of items:

#include <array.au3>

Dim $array[5] = ["excel.exe", "word.exe", "notepad.exe", "calc.exe", "vlc.exe"]

$randomString = ""

For $i = 1 To UBound($array) Step 1
    $rand = Random(0, UBound($array) - 1, 1)
    $randomString = $array[$rand] & "|" & $randomString
    _ArrayDelete($array, $rand)
Next

$randomString = StringTrimRight($randomString, 1)
;~ MsgBox(0, "", $randomString)

$randomArray = StringSplit($randomString, "|", 2)
_ArrayDisplay($randomArray)

To put it to use:

#include <array.au3>

Dim $array[5] = ["excel.exe", "word.exe", "notepad.exe", "calc.exe", "vlc.exe"]

For $i = 1 To UBound($array) Step 1
    $rand = Random(0, UBound($array) - 1, 1)
    Run($array[$rand])
    _ArrayDelete($array, $rand)
Next
Edited by abberration
Posted

 

Here's a way to create a random sequence of items:

#include <array.au3>

Dim $array[5] = ["excel.exe", "word.exe", "notepad.exe", "calc.exe", "vlc.exe"]

$randomString = ""

For $i = 1 To UBound($array) Step 1
    $rand = Random(0, UBound($array) - 1, 1)
    $randomString = $array[$rand] & "|" & $randomString
    _ArrayDelete($array, $rand)
Next

$randomString = StringTrimRight($randomString, 1)
;~ MsgBox(0, "", $randomString)

$randomArray = StringSplit($randomString, "|", 2)
_ArrayDisplay($randomArray)

To put it to use:

#include <array.au3>

Dim $array[5] = ["excel.exe", "word.exe", "notepad.exe", "calc.exe", "vlc.exe"]

For $i = 1 To UBound($array) Step 1
    $rand = Random(0, UBound($array) - 1, 1)
    Run($array[$rand])
    _ArrayDelete($array, $rand)
Next

Its perfect,thanks for help

Posted

allcapone1912,

Replace Dim with Local or Global. Dim has its uses, this is not one of them.

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Posted

allcapone1912,

Replace Dim with Local or Global. Dim has its uses, this is not one of them.

Local dont work for my system
 
;Script
Local $array[4]
$array[0] = $Random1 ;step1
$array[1] = $Random2 ;step2
$array[2] = $Random3 ;step3
$array[3] = $Random4 ;step4
 
For $i = 1 To UBound($array)
    $rand = Random(0, UBound($array) - 1, 1)
 
NEXT
run()
 
first 3 step make OK(unique) but the last one(fourth one) get an array used early in first 3 step
 
if i replace Local with Dim everything work perfect

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...