i have function generate integer random number between 2 given values. function in app called 2 times however, want avoid generates 2 same numbers or 2 number next each other. how fix function below achieve that?
example result:
1, 1 = wrong 1, 2 = wrong 8, 7 = wrong 8, 12 = correct 1, 3 = correct 3, 0 = correct function:
func randomnumber(minx:uint32, maxx:uint32) -> int { let result = (arc4random() % (maxx - minx + 1)) + minx return int(result) } edit: how can duplicate??? not asking shuffle array want generate single int 2 given numbers
you said "i want avoid ... 2 numbers next each other" don't understand how 8 ,7 wrong 8, 9 correct.
anyhow, answer answer based on example. send previous value , loop until satisfactory asnwer:
func randomnumber(minx:uint32, maxx:uint32, previousnumber: int? = nil) -> int { var result: int repeat { result = int((arc4random() % (maxx - minx + 1)) + minx) } while previousnumber == result || previousnumber == result + 1 return result } let r1 = randomnumber(1, maxx: 3) let r2 = randomnumber(1, maxx: 3, previousnumber: r1) this lead infinite loop when there's no number can satisfy conditions, example:
randonnumber(1, maxx: 2, previousnumber: 2) you should add guard statement working out possibility mathematically , create counter repeat loop ends after, 100 iterations.
Comments
Post a Comment