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