Sign in to follow this  
Followers 0
gamerman2360

Lots

1 post in this topic

#1 ·  Posted (edited)

The functions probably need to be renamed. :shrug: Made to handle big numbers. (First went with a single dementional array with names in it... AutoIt wasn't too happy.)

#region Testing
AppendEntree($data, "One", 1)
AppendEntree($data, "Two", 2)
AppendEntree($data, "Three", 3)
AppendEntree($data, "Four", 4)
AppendEntree($data, "Five", 5)
AppendEntree($data, "Six", 6)
AppendEntree($data, "Seven", 7)
AppendEntree($data, "Eight", 8)
AppendEntree($data, "Nine", 9)
AppendEntree($data, "Ten", 10)

$msg = $data[0][0] & " entree" & Plural($data[0][0]) & ", " & $data[0][1] & " ticket" & Plural($data[0][1]) & "."
For $i = 1 To UBound($data) - 1
    If $data[$i][1] == 1 Then
        $plural = ""
    Else
        $plural = "s"
    EndIf
    $msg &= @CRLF & $data[$i][0] & " has purchaced " & $data[$i][1] & " ticket" & Plural($data[$i][1]) & "."
Next
$msg &= @CRLF
For $i = 1 To 3
    $msg &= @CRLF & "Winner #" & $i & " is " & PickTicket($data, 1) & "."
Next
$msg &= @CRLF
For $i = 1 To UBound($data) - 1
    $msg &= @CRLF & $data[$i][0] & " has won " & $data[$i][2] & " time" & Plural($data[$i][2]) & "."
Next

MsgBox(0, "Test", $msg)

Func Plural($value)
    If $value = 1 Then
        $return = ""
    Else
        $return = "s"
    EndIf
    Return $return
EndFunc
#endregion

#cs
$data[0][0]: number of entrees
$data[0][1]: number of total tickets
$data[0][2]: number of total wins
$data[$i][0]: entree name
$data[$i][1]: number of entree tickets
$data[$i][2]: number of entree wins
#ce
Func OnAutoItStart()
    Global $data[1][3] = [[0, 0, 0]]
EndFunc

Func AppendEntree(ByRef $array, $name, $quantity)
    ReDim $array[UBound($array) + 1][3]
    $array[0][0] += 1
    $array[0][1] += $quantity
    $array[$array[0][0]][0] = $name
    $array[$array[0][0]][1] = $quantity
    $array[$array[0][0]][2] = 0; num of wins
EndFunc

Func PickTicket(ByRef $array, $onlyWinOncePerTicket = 0)
    $validTickets = $array[0][1]
    If $onlyWinOncePerTicket Then $validTickets -= $array[0][2]
    $pick = Random(1, $validTickets, 1)
    Local $i; to get after the loop
    For $i = 1 To $array[0][0]
        If $onlyWinOncePerTicket Then $pick += $array[$i][2]
        $pick -= $array[$i][1]
        If $pick <= 0 Then ExitLoop
    Next
    $array[0][2] += 1
    $array[$i][2] += 1
    Return $array[$i][0]
EndFunc

Edited by gamerman2360

Share this post


Link to post
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
Sign in to follow this  
Followers 0