공평뽑기 소개
공평뽑기는 무작위로 뽑는 일을 돕는 무료 도구 모음이에요. 돌림판, 사다리타기, 제비뽑기, 팀 나누기, 랜덤 숫자, 동전, 주사위가 있어요. 앱과 웹 도구를 만드는 루멘랩(Lumen Lab)이 만들었어요. 가입이 없고, 넣은 명단은 브라우저 밖으로 나가지 않아요.
뽑는 방식
단추를 누를 때마다 브라우저에 crypto.getRandomValues()로 무작위 32바이트를 달라고 해요. MDN은 이 기능이 암호학적으로 강한 난수를 준다고 설명해요(MDN: Crypto.getRandomValues()). Math.random()은 쓰지 않아요. MDN은 이 함수가 암호학적으로 안전한 난수를 주지 않는다고 적고 있어요(MDN: Math.random()).
이 32바이트가 씨앗이에요. 씨앗으로 xoshiro256**라는 난수기를 시작하고, 뽑는 데 필요한 숫자는 전부 여기서 나와요. 이 난수기는 정해진 대로만 움직여서, 씨앗과 명단과 설정이 같으면 결과도 늘 같아요. 결과 링크가 되는 이유가 이것이에요. 링크에 씨앗, 명단, 설정이 들어 있어서 누가 열어도 자기 기기에서 같은 결과가 다시 만들어져요.
정수는 치우침 없이 뽑아요. n개 중 하나를 고를 때 n에 필요한 만큼의 비트만 뽑고, n 이상이 나오면 버리고 다시 뽑아요. 나눈 나머지를 쓰는 방식은 일부 항목이 아주 조금 더 잘 나오게 되는데, 그 방식을 쓰지 않아요.
순서 정하기, 팀 나누기, 여러 명 뽑기는 피셔–예이츠(Fisher–Yates) 섞기를 써요. 리처드 더스텐펠드가 1964년에 발표한 꼴이고, 도널드 커누스의 『The Art of Computer Programming』 2권에 알고리즘 P로 실려 있어요. 가능한 모든 순서가 같은 확률이에요.
만들지 않는 것
어떤 도구에도 특정 이름이 나오게 하는 기능은 없어요. 숨겨진 것도 없어요. 돌림판은 결과를 먼저 정하고 그 칸으로 돌아가기 때문에 화면에 보이는 것이 곧 뽑힌 것이에요. 사다리타기는 사다리만으로는 가까운 자리가 유리해서 아래 칸을 먼저 섞어요. 숫자는 사다리타기 가이드에 있어요.
검증하는 법
뽑는 코드는 화면과 따로 있고 자동 테스트가 400개 넘게 붙어 있어요. 난수기를 파이썬으로 따로 계산한 기준값과 대조하고, 씨앗을 고정해 10만 번씩 뽑은 뒤 카이제곱 검정으로 고르게 나오는지 보고, 만든 사다리가 전부 일대일 대응인지, 결과 링크가 같은 결과를 다시 만드는지 확인해요. 코드를 일부러 망가뜨린 판에서 테스트가 실패하는지도 확인했어요.
알아 둘 한계
결과 링크는 뽑은 뒤에 결과를 바꾸지 않았다는 것을 보여 줘요. 하지만 링크를 보내기 전에 몇 번 뽑았는지는 알 수 없어요. 그게 중요하다면 한 번만 뽑는다고 미리 정하거나 모두가 보는 화면에서 뽑으세요. 이 사이트는 교실, 모임, 놀이에 쓰려고 만든 것이고, 정해진 절차와 감사가 필요한 추첨에는 맞지 않아요.
저장하는 것
명단, 최근 결과, 소리 설정은 이 브라우저에만 저장해요. 정확한 항목과 광고가 쿠키를 쓰는 방식은 개인정보 처리방침에 있어요.
글꼴과 문의
글꼴은 길형진 님의 Pretendard(SIL 오픈 폰트 라이선스)를 써요. 문의와 틀린 곳 제보: woxocoso@gmail.com