Code:

;  Usage: $randrange(<lower>,<upper>,[exclude range][,...])
;
alias randrange {
  var %tries = 1, %maxtries = 100, %found = $false, %2 = $2 + 1, %r = $rand($1, %2)
  if (%r == %2) %r = $1
  while (!%found) {
    %found = $true
    if !$3 { break }
    var %i = 1
    while $gettok($3-, %i, 32) != $null { 
      if %r isnum $ifmatch {
        var %found = $false, %i = $numtok($3-, 32), %r = $rand($1, %2)
        if (%r == %2) %r = $1
      }
      inc %i
    }
    inc %tries
    if (%tries == %maxtries) return
  }
  return %r
}

//echo -a * $randrange(1,200, 10-25, 60-75, 110-125, 160-175)

* 97
* 87
* 42
* 33
* 190

EDIT:
  1. Fixed upper bound bug when the lower bound was excluded.
  2. Added MaxTries to prevent infinite loops if all valid values
    end up excluded. Now returns $null if unsuccessful.

Last edited by Hammer; 24/08/03 12:17 PM.

DALnet: #HelpDesk and #m[color:#FF0000]IR[color:#EEEE00]C