Jump to content

How to Output a Random Sequence of Numbers?


Recommended Posts

I am trying to input three numbers (1,2,3 for example) into a form in a random order. Currently I am manually sending this information as follows:

Send("1")
Send("3")
Send("2")

Very simple but not random at all. I would like to be able to send these in a random order each time.

Link to comment
Share on other sites

props to tom and yashield

#include <array.au3>

Dim $numbers[3] = [1, 2, 3]

_ArrayRandom($numbers)

For $x = 0 To UBound($numbers) - 1
    ConsoleWrite($numbers[$x] & @CRLF)
Next

; #FUNCTION# ====================================================================================================================
; Name...........: _ArrayRandom
; Description ...: Randomize the row order of (part of) a 1D or 2D array.
; Syntax.........: _ArrayRandom(ByRef $avArray, $iStart = 0, $iEnd = 0)
; Parameters ....: $avArray  - Array to randomize
;               $iStart  - [optional] Index of array to start at
;               $iEnd   - [optional] Index of array to stop at
; Return values .: Success - 1
;               Failure - 0, sets @error:
;               |1 - $avArray is not an array
;               |2 - $iStart is greater than $iEnd
; Author ........: Tom Vernooij
; Modified.......:
; Remarks .......: Based on Yashied's method
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================

Func _ArrayRandom(ByRef $avArray, $iStart = 0, $iEnd = 0)
    If Not IsArray($avArray) Then Return SetError(1, 0, 0)

    Local $iRow, $iCol, $rRow, $Temp, $numCols = UBound($avArray, 2), $Ubound = UBound($avArray) - 1

    ; Bounds checking
    If $iEnd < 1 Or $iEnd > $Ubound Then $iEnd = $Ubound
    If $iStart < 0 Then $iStart = 0
    If $iStart > $iEnd Then Return SetError(2, 0, 0)

    ; for 2 dimentional arrays:
    If $numCols Then
        For $iRow = $iStart To $iEnd ;for each row...
            $rRow = Random($iStart, $iEnd, 1) ;...select a random row
            For $iCol = 0 To $numCols - 1 ;swich the values for each cell in the rows
                $Temp = $avArray[$iRow][$iCol]
                $avArray[$iRow][$iCol] = $avArray[$rRow][$iCol]
                $avArray[$rRow][$iCol] = $Temp
            Next
        Next

        ; for 1 dimentional arrays:
    Else
        For $iRow = $iStart To $iEnd ;for each cell...
            $rRow = Random($iStart, $iEnd, 1) ;...select a random cell
            $Temp = $avArray[$iRow] ;switch the values in the cells
            $avArray[$iRow] = $avArray[$rRow]
            $avArray[$rRow] = $Temp
        Next
    EndIf

    Return 1
EndFunc   ;==>_ArrayRandom
Edited by gcue
Link to comment
Share on other sites

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
 Share

  • Recently Browsing   0 members

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