모듈:랜덤/샌드박스

Module
-- 이 모듈에는 난수를 사용하는 여러 함수가 포함되어 있습니다.  현지의 cfg = {}  -------------------------------------------------------------------------------------- -- 설정 --------------------------------------------------------------------------------------  -- Wiki의 트래픽 속도가 2분마다 1회 미만인 경우 이 설정을 true로 설정합니다. --이것에 의해, 새로운 편집이 행해질 때까지, 같은 「랜덤」번호가 연속해서 몇번이나 생성되는 것을 막을 수 있습니다. --Wiki로 이동합니다.이 설정은 동일한= 매개 변수가 설정된 경우에만 적용됩니다. cfg.저트래픽 = 거짓의  -- cfg.lowTraffic이 true로 설정되고 동일한= 매개 변수가 설정되면 이 값이 랜덤 시드의 새로 고침 속도로 사용됩니다. --시드가 변경될 때까지의 초수입니다.이걸 바로 잡는 건 어렵죠너무 높게 설정하면 같은 수가 됩니다. --는 연속해서 여러 번 반환됩니다.너무 낮게 설정하면 같은 페이지에 다른 난수가 표시될 수 있습니다. -- 특히 처리하는 데 몇 초가 걸리는 페이지의 경우. cfg.시드 리프레쉬 레이트 = 60  -------------------------------------------------------------------------------------- -- 설정 종료 --------------------------------------------------------------------------------------  현지의 p = {} -- 다른 Lua 모듈에서 사용할 수 있는 기능. 현지의 l = {} -- 다른 Lua 모듈에서는 사용할 수 없지만 테이블 키를 사용하여 액세스해야 하는 기능의 경우.  현지의 네, 아니요 = 요구하다('모듈:네, 아니요.) 현지의 make List(make list) = 요구하다('모듈:리스트').make List(make list)  -------------------------------------------------------------------------------------- -- 도우미 기능 --------------------------------------------------------------------------------------  현지의 기능. raise Error(상승 오류)(메시지)  -- 이것은 Wikitext 오류를 생성하는 데 도움이 됩니다.출력에 포함시키는 방법은 호출 함수의 책임입니다.  돌아가다 .스트링.포맷('<b class="error">[모듈:랜덤]] 오류: %s.</b>', 메시지) 끝.  -------------------------------------------------------------------------------------- -- 난수 함수 --------------------------------------------------------------------------------------  현지의 기능. Get Big Random(l, u)  -- l과 u 사이의 임의의 정수를 가져옵니다.또한 LAND_MAX에 한정되지 않습니다.  현지의 r = 0  현지의 n = 2^math.matrix(30) -- 2의 임의의 거듭제곱.  현지의 제한. = math.matrix(53 / (math.log(n) / math.log(2)))  위해서 i = 1, 제한. 하다   r = r + math.matrix(0, n - 1) / (n^i)  끝.  돌아가다 math.floor(r * (u - l + 1)) + l 끝.  기능. l.번호(args)  -- 난수를 가져옵니다.  첫번째 = 톤수(args[1])  둘째 = 톤수(args[2])  -- math.random의 스테이트먼트가 명시적으로 nero 값을 인수로 받아들이지 않는 경우에 사용합니다.  한다면 첫번째 그리고나서   한다면 둘째 그리고나서    한다면 첫번째 > 둘째 그리고나서 -- 두 번째 숫자는 첫 번째 숫자보다 작을 수 없습니다.그렇지 않으면 오류가 발생합니다.     첫번째, 둘째 = 둘째, 첫번째    끝.    돌아가다 Get Big Random(첫번째, 둘째)   또 다른    돌아가다 Get Big Random(1, 첫번째)   끝.  또 다른   돌아가다 math.matrix()  끝. 끝.  -------------------------------------------------------------------------------------- -- 날짜 함수 --------------------------------------------------------------------------------------  기능. l.날짜.(args)  -- 이 함수는 임의의 날짜를 가져오고 타임스탬프를 위치 인수로 사용합니다.  -- 인수를 지정하지 않으면 해당 연도의 랜덤 날짜를 출력합니다.  -- 2개의 인수를 지정하면 타임스탬프 사이에 임의의 날짜가 출력됩니다.  -- 1개의 인수를 지정했을 경우, 날짜는 Unix Epoch(1970년 1월 1일)와 타임스탬프 사이의 랜덤 날짜입니다.  -- 출력은 #time parser 함수와 같은 방법으로 동작하는 "format" 인수를 사용하여 포맷할 수 있습니다.  -- 기본 형식은 표준 Wikipedia 타임스탬프입니다.  현지의 언어 = .언어.get Content Language(get Content Language)()   현지의 기능. 날짜 가져오기(포맷, ts)   현지의 성공., 날짜. = pcall(언어.포맷 날짜, 언어, 포맷, ts)   한다면 성공. 그리고나서    돌아가다 날짜.   끝.  끝.   현지의 기능. getUnixTimestamp(ts)   현지의 유니크 = 날짜 가져오기('U', ts)   한다면 유니크 그리고나서    돌아가다 톤수(유니크)   끝.  끝.   현지의 t1 = args[1]  현지의 t2 = args[2]    -- 시작 타임스탬프와 종료 타임스탬프를 찾습니다.  현지의 startTimestamp, endTimestamp  한다면 것은 아니다. t1 그리고나서   -- 금년도 첫 번째와 마지막 두 번째를 찾습니다.   현지의 당년도 = 톤수(날짜 가져오기('Y'))   현지의 current Year Start Unix(현황 = 톤수(getUnixTimestamp(1월 1일 .. 스트링(당년도)))   현지의 current YearEndUnix = 톤수(getUnixTimestamp(1월 1일 .. 스트링(당년도 + 1))) - 1   startTimestamp = '@' .. 스트링(current Year Start Unix(현황) -- @ 는, Unix 의 타임스탬프를 lang:formatDate 로 나타내기 위해서 사용됩니다.   endTimestamp = '@' .. 스트링(current YearEndUnix)  그렇지 않으면 것은 아니다. t2 그리고나서   startTimestamp = '@0' -- Unix 시대, 1970년 1월 1일   endTimestamp = t1  또 다른   startTimestamp = t1   endTimestamp = t2  끝.   -- Unix 타임스탬프를 취득하여 잘못된 입력(또는 불행히도 몇 개 있는 기본 PHP 라이브러리의 버그)에 대한 오류를 반환합니다.  현지의 startTimestamp유닉스 = getUnixTimestamp(startTimestamp)  현지의 endTimestamp유닉스 = getUnixTimestamp(endTimestamp)  한다면 것은 아니다. startTimestamp유닉스 그리고나서   돌아가다 raise Error(상승 오류)('"' .. 스트링(startTimestamp) .. ''가 올바른 타임스탬프로 인식되지 않았습니다.')  그렇지 않으면 것은 아니다. endTimestamp유닉스 그리고나서   돌아가다 raise Error(상승 오류)('"' .. 스트링(endTimestamp) .. ''가 올바른 타임스탬프로 인식되지 않았습니다.')  그렇지 않으면 startTimestamp유닉스 > endTimestamp유닉스 그리고나서   돌아가다 raise Error(상승 오류)('시작일은 종료일(시작일: ')'보다 늦으면 안 됩니다. .. startTimestamp .. ' , 종료일 : ' .. endTimestamp .. '")')  끝.   -- 2 개의 Unix 타임스탬프 사이에 임의의 번호를 취득해, 지정된 형식을 사용해 반환합니다.  현지의 랜덤 타임 스탬프 = Get Big Random(startTimestamp유닉스, endTimestamp유닉스)  현지의 날짜 형식 = args.포맷 또는 'H:i, d F Y(T)'  현지의 결과 = 날짜 가져오기(날짜 형식, '@' .. 스트링(랜덤 타임 스탬프))  한다면 결과 그리고나서   돌아가다 결과  또 다른   돌아가다 raise Error(상승 오류)('"' .. 날짜 형식 .. ''는 올바른 날짜 형식이 아닙니다.')  끝. 끝.  -------------------------------------------------------------------------------------- -- 함수 목록 표시 --------------------------------------------------------------------------------------  현지의 기능. 무작위화하다어레이(t, 제한.)  -- 배열을 랜덤화합니다.엔트리를 교환할 때마다 목록을 거꾸로 반복함으로써 동작합니다.  -- 랜덤 엔트리가 있는 「i」.http://forums.wowace.com/showthread.php?p=279756에서 신환 제공  -- limit 파라미터가 설정되어 있는 경우 랜덤화 후 배열이 그만큼 단축됩니다.  -- 최소값은 0, 최대값은 배열 길이입니다.  현지의  = #t  위해서 i = , 2, -1 하다   현지의 r = math.matrix(i)   t[i], t[r] = t[r], t[i]  끝.  한다면 제한. 그리고. 제한. < >  그리고나서   현지의 리트 = {}   위해서 i, v  아이페어(t) 하다    한다면 i > 제한. 그리고나서     브레이크.    끝.    리트[i] = v   끝.   돌아가다 리트  또 다른   돌아가다 t  끝. 끝.  현지의 기능. 공백 제거(t)  -- ipair에서 사용할 수 있도록 배열에서 빈 항목을 제거합니다.  현지의 리트 = {}  위해서 k, v  쌍들(t) 하다   한다면 유형(k) == '숫자' 그리고나서    table.insert(리트, k)   끝.  끝.  table.displaces(리트)  위해서 i, v  아이페어(리트) 하다   리트[i] = t[v]  끝.  돌아가다 리트 끝.  현지의 기능. 구분자를 만들다(세프)  한다면 세프 == '공간' 그리고나서   --스페이스를 구분자로 사용하기 쉬운 방법을 포함합니다.   돌아가다 ' '  그렇지 않으면 세프 == 'newline' 그리고나서   --신규 회선에 대해서는, 동감입니다.   돌아가다 '\n'  그렇지 않으면 유형(세프) == '문자열 그리고나서   -- 세퍼레이터가 인식되는 MediaWiki 세퍼레이터인 경우 사용합니다.그렇지 않으면 sep 값이 문자열인 경우 사용합니다.   현지의 세퍼레이터 = {, '파이프, '실패', 'tpt-module'}   위해서 _, 음파  아이페어(세퍼레이터) 하다    한다면 세프 == 음파 그리고나서     돌아가다 .메세지.신규( 세프 .. '-display' ):평지()    끝.   끝.   돌아가다 세프  끝. 끝.  현지의 기능. make Random List(랜덤 리스트)(args)  현지의 목록. = 공백 제거(args)  목록. = 무작위화하다어레이(목록., 톤수(args.제한.))  돌아가다 목록. 끝.  기능. l.아이템(args)  -- 번호 목록에서 임의의 항목을 반환합니다.  현지의 목록. = 공백 제거(args)  현지의  = #목록.  한다면  >= 1 그리고나서   돌아가다 목록.[math.matrix()]  끝. 끝.  기능. l.목록.(args)  --목록을 랜덤화하고 결과를 구분 기호와 연결합니다.  현지의 목록. = make Random List(랜덤 리스트)(args)  현지의 세프 = 구분자를 만들다(args.세프 또는 args.분리기)  돌아가다 table.concat(목록., 세프) 끝.  기능. l.text_list(args)  -- 목록을 랜덤화하고 결과를 텍스트 형식으로 연결합니다.구분자 및 결합 인수를 사용할 수 있습니다.  현지의 목록. = make Random List(랜덤 리스트)(args)  현지의 세프 = 구분자를 만들다(args.세프 또는 args.분리기)  현지의 요술 = 구분자를 만들다(args.요술 또는 args.접속사)  돌아가다 .본문.list To(목록., 세프, 요술) 끝.  기능. l.배열(args)  -- 랜덤화된 Lua 배열을 반환합니다.다른 Lua 모듈에서 사용합니다.  돌아가다 무작위화하다어레이(args.t, args.제한.) 끝.  -------------------------------------------------------------------------------------- -- HTML 목록 함수 --------------------------------------------------------------------------------------  기능. l.html_list(args, list Type)  -- 목록을 랜덤화하고 HTML 목록으로 변환합니다.[[모듈 사용:리스트] ] ]  list Type = list Type 또는 '소거'  현지의 listArgs = make Random List(랜덤 리스트)(args) -- [Module]에 대한 인수:리스트] ] ]  위해서 k, v  쌍들(args) 하다   한다면 유형(k) == '문자열 그리고나서    listArgs[k] = v   끝.  끝.  돌아가다 make List(make list)(list Type, listArgs) 끝.  -------------------------------------------------------------------------------------- -- 메인 기능.다른 Lua 모듈에서 호출됩니다. --------------------------------------------------------------------------------------  기능. p.주된(기능명, args, list Type)  -- 난수 생성기의 시드를 설정하고 제어를 다른 함수에 넘깁니다.  현지의 저도. = 네, 아니요(args.저도.)  한다면 것은 아니다. 저도. 그리고나서   -- 같은 페이지에서 모듈을 호출할 때마다 다른 번호를 생성합니다.   -- 이는 os.clock(Lua 스크립트가 실행된 시간(초))의 변동성에 기인합니다.   math.contracteseed(산술시드(.위치.통계.편집 + .위치.통계.페이지 + os.time() + math.floor(os.clock() * 1000000000))  그렇지 않으면 것은 아니다. cfg.저트래픽 그리고나서   -- 시드를 시간 기반 없이 가능한 한 랜덤으로 만듭니다.즉, 동일한 난수가   -- 같은 페이지의 같은 입력에 대해 생성됩니다.일부 Wikicode 템플릿에 필요한 동작입니다.   -- 부정한 의사 패킷 번호의 생성을 전제로 합니다.   현지의 통계 = .위치.통계   현지의 보기 = 통계.보기 또는 0 -- 항상 사용할 수 있는 것은 아니기 때문에 백업이 필요합니다.   현지의 씨를 뿌리다 = 보기 + 통계.페이지 + 통계.기사들 + 통계.파일 + 통계.편집 + 통계.사용자 + 통계.액티브 유저 + 통계.관리자 -- os.time() 또는 os.clock()을 사용하지 않고 가능한 랜덤으로 만듭니다.   math.contracteseed(산술시드(씨를 뿌리다)  또 다른   --n초마다 랜덤 시드 변경을 합니다.n은 cfg.seedRefreshRate로 설정됩니다.   -- 이것은 새로운 편집이 자주 이루어지지 않을 수 있는 트래픽이 적은 Wiki에 유용합니다.   math.contracteseed(산술시드(math.floor(os.time() / cfg.시드 리프레쉬 레이트))  끝.  주장하다(유형(args) == '테이블', 'p.main에 대한 두 번째 인수는 표여야 합니다.')  돌아가다 l[기능명](args, list Type) 끝.   -------------------------------------------------------------------------------------- -- #invoke에서 인수를 처리합니다. --------------------------------------------------------------------------------------  현지의 기능. make Wrapper(메이크랩퍼)(기능명, list Type)  -- 이 함수는 #invoke에서 인수를 처리하기 위한 래퍼를 제공합니다.  --listType은 p.html_list에만 사용되며 나머지 시간에는 0이 됩니다.  돌아가다 기능. ()   -- #invoke를 통해 호출된 경우 호출 템플릿에 전달된Args 또는 #invoke에 전달된Args가 있는 경우 사용합니다.   -- 그렇지 않으면 arg가 디버깅콘솔 또는 다른 Lua 모듈에서 직접 전달되고 있다고 가정합니다.   현지의 origargs   한다면  == .get Current Frame(전류 프레임)() 그리고나서    origargs = :부모 취득().args    위해서 k, v  쌍들(.args) 하다     origargs = .args     브레이크.    끝.   또 다른    origargs =    끝.   -- 공백을 잘라내고 빈 인수를 제거합니다.   현지의 args = {}   위해서 k, v  쌍들(origargs) 하다    한다면 유형(v) == '문자열 그리고나서     v = .본문.다듬다(v)    끝.    한다면 v ~= '' 그리고나서     args[k] = v    끝.   끝.   돌아가다 p.주된(기능명, args, list Type)  끝. 끝.  -- HTML 목록 함수의 프로세스 인수. 현지의 htmlListFuncs = {  bulleted_리스트           = '소거',  unbulleted_list(삭제되지 않음)         = '삭제되지 않음',  수평_목록         = '평범',  오더드_리스트            = '주문',  수평_순서_목록 = '주문필' } 위해서 기능명, list Type  쌍들(htmlListFuncs) 하다  p[기능명] = make Wrapper(메이크랩퍼)('syslog_list', list Type) 끝.  -- 다른 함수의 인수를 처리합니다. 현지의 기타 펑크 = {'숫자', '날짜', '항목', 리스트, 'text_list'} 위해서 _, 기능명  아이페어(기타 펑크) 하다  p[기능명] = make Wrapper(메이크랩퍼)(기능명) 끝.  돌아가다 p