모듈:Random: 두 판 사이의 차이
둘러보기로 이동
검색으로 이동
imported>Hsl0 잔글 (Hsl0님이 모듈:DynamicFunctions 문서를 넘겨주기를 만들지 않고 모듈:Random 문서로 이동했습니다: DynamicFunctions와 관련없는 다른 랜덤 함수를 추가하기 위해서) |
imported>Hsl0 편집 요약 없음 |
||
1번째 줄: | 1번째 줄: | ||
local p = {} | local p = {} | ||
function p. | function p.random(m, n, o) | ||
local seed = tonumber( | local seed, key | ||
if type(m) == "table" then | |||
seed = tonumber(m.seed) | |||
key = tonumber(m.key) | |||
m = nil | |||
n = nil | |||
elseif type(n) == "table" then | |||
seed = tonumber(n.seed) | |||
key = tonumber(n.key) | |||
m = tonumber(m) | |||
n = nil | |||
elseif type(o) == "table" then | |||
seed = tonumber(o.seed) | |||
key = tonumber(o.key) | |||
m = tonumber(m) | |||
n = tonumber(n) | |||
else | |||
m = tonumber(m) | |||
n = tonumber(n) | |||
end | |||
if (seed or 0) == 0 then | if (seed or 0) == 0 then | ||
13번째 줄: | 32번째 줄: | ||
math.randomseed(seed) | math.randomseed(seed) | ||
if | if n ~= nil then | ||
return math.random( | return math.random(m, n) | ||
elseif | elseif m ~= nil then | ||
return math.random( | return math.random(m) | ||
else | else | ||
return math.random() | return math.random() | ||
end | end | ||
end | |||
function p.rand(frame) | |||
return p.random(frame.args[1], frame.args[2], frame.args) | |||
end | end | ||
return p | return p |
2022년 6월 23일 (목) 19:28 판
난수를 다루는 lua함수를 모아둔 모듈입니다.
리버티위키를 비롯한 미디어위키 사이트는 구문분석기 캐싱이 허용되어 있기에 별도의 설정을 거치지 않으면 아무리 새로고침을 해도 같은값이 나오게끔 되어있습니다.
해당 모듈을 래핑하는 틀을 만들거나 {{#invoke:random}}
를 사용하는 문서에 {{캐싱방지}}를 추가해주세요.
rand
- 이 부분의 본문은 틀:rand입니다.
choose
- 이 부분의 본문은 틀:choose입니다.
lotto
{{#invoke:random|lotto|a|b}}일 때, 1부터 b까지의 자연수 중 a개를 중복 없이 추출합니다.
사용법
파라미터별 설명
{{#invoke:random|lotto|추출할 표본수|전체갯수|추출할 보너스 갯수|표본 구분자|보너스 구분자|정렬 여부}}
파라미터 기본값
{{#invoke:random|lotto|6|45|1|, | + |true}}
예시
기본 예시
code_blocks 코드
{{#invoke:random|lotto}}
code
description 결과
스크립트 오류: 함수 "lotto"가 존재하지 않습니다.
보너스를 추출하지 않는 예시
code_blocks 코드
{{#invoke:random|lotto|||0}}
code
description 결과
스크립트 오류: 함수 "lotto"가 존재하지 않습니다.
0부터 10까지 숫자를 랜덤나열한 예시
code_blocks 코드
{{#invoke:random|lotto|10|10|0|-||false}}
code
description 결과
스크립트 오류: 함수 "lotto"가 존재하지 않습니다.
sample
가중치를 설정할 수 없고 문자열로 구분 가능한 choose입니다.
사용법
파라미터별 설명
{{#invoke:random|sample|텍스트|구분할 문자열}}
파라미터 기본값
{{#invoke:random|sample||,}}
예시
기본 예시
code_blocks 코드
{{#invoke:random|sample|1,2,3,4,5}}
code
description 결과
스크립트 오류: 함수 "sample"가 존재하지 않습니다.
구분자를 변경하는 예시
code_blocks 코드
{{#invoke:random|sample|1-2-3-4-5|-}}
code
description 결과
스크립트 오류: 함수 "sample"가 존재하지 않습니다.
특정 분류의 랜덤 게임을 출력하는 예시
code_blocks 코드
{{#invoke:random|sample|{{#dpl:|category=함정 피하기 게임|namespace|format=,%PAGE%//}}|//}}
code
description 결과
스크립트 오류: 함수 "sample"가 존재하지 않습니다.
위 설명은 모듈:Random/설명문서의 내용을 가져와 보여주고 있습니다. (편집 | 역사) 이 모듈에 대한 수정 연습과 시험은 연습장 (만들기 | 미러)과 시험장 (만들기)에서 할 수 있습니다. 분류는 /설명문서에 넣어주세요. 이 모듈에 딸린 문서. |
local p = {}
function p.random(m, n, o)
local seed, key
if type(m) == "table" then
seed = tonumber(m.seed)
key = tonumber(m.key)
m = nil
n = nil
elseif type(n) == "table" then
seed = tonumber(n.seed)
key = tonumber(n.key)
m = tonumber(m)
n = nil
elseif type(o) == "table" then
seed = tonumber(o.seed)
key = tonumber(o.key)
m = tonumber(m)
n = tonumber(n)
else
m = tonumber(m)
n = tonumber(n)
end
if (seed or 0) == 0 then
seed = os.time() * ((key or 0) == 0 and os.clock() or key)
elseif (key or 0) ~= 0 then
seed = seed * key
end
math.randomseed(seed)
if n ~= nil then
return math.random(m, n)
elseif m ~= nil then
return math.random(m)
else
return math.random()
end
end
function p.rand(frame)
return p.random(frame.args[1], frame.args[2], frame.args)
end
return p