코드 :
BeforeNum = 0
DuppedNum = 0
function duppedrandom(minimum, maximum)
-- print(string.for/mat("=================="))
local temp = Game.RandomInt(minimum, maximum)
-- print(string.for/mat("Initial RandomInt : %d",temp))
if temp == math.abs(BeforeNum) then
-- print(string.for/mat("Dupplication detacted..."))
DuppedNum = DuppedNum + 1
for i=1, DuppedNum do
temp = Game.RandomInt(minimum, maximum)
-- print(string.for/mat("New RandomInt : %d",temp))
if temp ~= BeforeNum then
BeforeNum = temp
DuppedNum = 0
-- print(string.for/mat("New RandomInt is different!"))
-- print(string.for/mat("Final RandomInt : %d",temp))
-- print(string.for/mat("==================
"))
return temp
end
end
-- print(string.for/mat("New RandomInt is same..."))
-- print(string.for/mat("Final RandomInt : %d",temp))
-- print(string.for/mat("==================
"))
return temp
else
BeforeNum = temp
DuppedNum = 0
-- print(string.for/mat("New RandomInt is Chosen."))
-- print(string.for/mat("Final RandomInt : %d",temp))
-- print(string.for/mat("==================
"))
return temp
end
end
설명 :
for/m 이 필터링처리를 당해서 슬래시를 집어넣음. 출력 결과를 볼 때 / 지우고 적용해야함
최소정수, 최대정수를 입력받아서 그 사이에서 랜덤한 정수값을 뽑아냄
만약 중복되는 정수가 나오면 다시 랜덤을 돌림
그래도 중복이 나온다면 신의 뜻인가보다 하고 그대로 중복결과를 내보내게 되어 있음
중복을 완전히 배제해버리면 뭔가 찝찝하길래 중복결과를 줄이는 방향으로만 짠 함수임
중복이 여러번 걸릴수록 랜덤을 다시 돌리는 횟수 역시 증가하므로
Game.RandomInt 특유의 부조리성을 해소할 수 있을 것으로 보임
(+중복을 더욱 촘촘히 걸러내고 싶으면 DuppedNum = DuppedNum + 1 에서 숫자 값을 올려주면 됨.)
사용법 :
사용하려면 duppedrandom(2, 5) 와 같이 쓰면 됨
RandomInt를 사용하기 때문에 입력값은 정수로만 쓰는게 좋음
출력 결과를 보고 싶으면 주석표시(--)를 제거할것