사용 방법
- 참가자 이름을 한 줄에 하나씩(또는 쉼표로) 입력합니다.
- 당첨자 뽑기는 정한 인원만큼 중복 없이 뽑고, 팀 나누기는 인원이 고르게 나뉘도록 섞고, 순서 정하기는 전원의 순서를 무작위로 정합니다.
- 돌림판은 이름을 칸으로 나눠 판을 돌립니다. 여럿이 화면을 보고 있을 때 결과가 나오는 과정을 함께 볼 수 있습니다.
- 결과는 복사해 단체 대화방에 바로 붙여넣을 수 있습니다.
정말 무작위인가
네. 브라우저의 암호학적 난수(crypto.getRandomValues)를 쓰고, 섞을 때는 피셔-예이츠 방법으로 섞습니다. 흔히 쓰는 sort(() => Math.random() - 0.5)는 고르게 섞이지 않아 앞에 있던 사람이 앞에 남기 쉽습니다. 뽑기에서는 그 치우침이 그대로 불공평이 됩니다.
나머지 연산으로 범위를 자를 때 생기는 치우침도 없앴습니다. 예를 들어 0~255 중 하나를 뽑아 10으로 나눈 나머지를 쓰면 0~5가 6~9보다 자주 나옵니다. 이 도구는 그런 값이 나오면 버리고 다시 뽑습니다.
뽑기·팀 나누기·순서 정하기는 무엇이 다른가
| 방식 | 쓰는 곳 | 결과 |
|---|---|---|
| 당첨자 뽑기 | 경품, 발표자 지정 | 정한 인원만 중복 없이 |
| 팀 나누기 | 조별 과제, 운동 경기 | 인원이 고르게 나뉨 |
| 순서 정하기 | 발표 차례, 청소 당번 | 전원에게 번호가 하나씩 |
| 돌림판 | 여럿이 모여 보는 자리 | 한 사람. 돌아가는 것을 함께 본다 |
한 사람이 한 결과를 맡아야 한다면(마니또, 당번표) 사다리 타기 탭이 더 알맞습니다. 결과가 겹치지 않는다는 것을 눈으로 보여 줄 수 있기 때문입니다.
돌림판은 왜 먼저 뽑고 나서 돌리나
돌림판을 만드는 흔한 방법은 판을 아무렇게나 돌리고 멈춘 자리를 당첨으로 삼는 것입니다. 그럴듯해 보이지만, 그러면 화면 크기·프레임 수· 애니메이션이 끊기는 것 같은 것들이 결과에 끼어듭니다. 느린 기기에서 특정 칸이 더 자주 나올 수도 있습니다.
그래서 이 돌림판은 먼저 암호학적 난수로 당첨자를 고르고, 그 자리에 멈추도록 회전을 맞춥니다. 보시기에는 똑같지만 공정함은 전혀 다릅니다. 멈춘 뒤에도 바늘 아래 칸과 고른 사람이 같은지 한 번 더 맞춰 봅니다.
공정하게 보이려면
- 명단을 먼저 공개하고 나서 뽑습니다. 뽑은 뒤에 명단을 보여 주면 믿기 어렵습니다.
- 한 번만 뽑습니다. 마음에 안 든다고 다시 뽑으면 무작위가 아니게 됩니다.
- 화면을 공유한 채 뽑습니다. 이 도구는 인터넷으로 아무것도 보내지 않아 그 자리에서 결과가 정해집니다.
사다리 타기 사용 방법
- 참가자 이름과 결과를 같은 개수로 한 줄에 하나씩 입력합니다.
- 사다리 만들기를 누르면 결과가 가려진 사다리가 만들어집니다.
- 위쪽 이름을 누르면 그 사람의 길이 그려지며 결과가 공개됩니다.
- 전체 결과를 누르면 모든 길이 한꺼번에 열립니다.
사다리 타기에 넣는 칸의 규칙
- 한 줄에 하나가 기본이고, 쉼표도 나눔표로 봅니다. "홍길동, 김철수"를 한 줄에 쓰면 두 사람입니다. 앞뒤 빈칸은 지우고 빈 줄은 건너뜁니다.
- 그래서 결과에 쉼표를 넣으면 둘로 나뉩니다. "1등,2등"은 1등 · 2등 두 개입니다.
- 같은 이름이 둘이어도 막지 않습니다. 요약에서 헷갈리지 않게 이름 뒤에 번호를 붙여 두세요.
- 같은 결과는 여러 번 적어도 됩니다. 처음 예시도 "꽝"이 둘입니다.
- 쪽을 열었을 때는 사다리가 없습니다. 사다리 만들기를 눌러야 그립니다.
| 넣은 것 | 뜨는 문구 |
|---|---|
| 참가자 1명 또는 13명 이상 | 참가자는 2~12명이어야 합니다. |
| 참가자 4명 · 결과 3개 | 참가자(4)와 결과(3)의 개수가 같아야 합니다. |
문구가 뜨면 그려 둔 사다리와 요약을 지우고 전체 결과 단추를 잠급니다. 앞선 결과가 새 결과처럼 남지 않게 한 것입니다.
사다리에서 이름을 누르면 보이는 것
- 그 사람의 길이 색 선으로 그려지고, 길이 닿은 아래 "?"가 같은 색의 결과 글로 바뀝니다. 선 색은 자리마다 다른 12가지입니다.
- 판 아래 요약에 이름 → 결과 한 줄이 연 차례대로 쌓입니다.
- 7명부터는 위 이름표와 아래 결과를 두 줄로 엇갈려 놓습니다. 사람이 많아도 글자가 작아지지 않게 한 것입니다.
- 칸에 다 들어가지 않는 긴 이름과 결과는 "…"로 줄여 보여 줍니다. 요약 줄에는 줄이지 않은 글이 그대로 나옵니다.
- 키보드로는 Tab으로 이름표에 간 뒤 Enter나 스페이스로 엽니다.
사다리타기는 정말 공평한가
겹치지 않는다는 점에서는 언제나 공평합니다. 가로줄을 하나 건널 때마다 두 사람의 자리가 맞바뀔 뿐이고, 두 사람이 같은 자리로 가는 일은 없습니다. 그래서 가로줄을 몇 개 긋든 결과는 언제나 한 사람에 하나씩 짝지어집니다.
수학에서는 이것을 치환(permutation)이라고 부릅니다. 가로줄 하나가 이웃한 둘을 바꾸는 가장 작은 치환이고, 사다리 전체는 그것을 여러 번 겹친 것입니다. 같은 결과에 두 사람이 몰리거나 빈 결과가 남을 수 없는 이유가 여기 있습니다.
다만 가로줄만으로는 확률까지 고르지는 않습니다. 가로줄 수에 끝이 있어 처음 자리에서 멀리 가기 어렵기 때문입니다. 이 도구가 가로줄을 놓는 규칙대로 셈하면, 12명 사다리의 맨 왼쪽에서 내려갈 때 바로 아래 자리에 닿을 확률이 약 16%, 맨 오른쪽 끝자리는 약 2%입니다(고르다면 어느 자리든 8.3%).
그래서 이 도구는 사다리를 만들 때 아래 결과의 자리를 한 번 섞습니다. 결과 칸에 적은 차례와 사다리 아래 자리가 서로 상관없어지므로, 어느 이름에서 내려가든 각 결과에 닿을 확률이 같습니다. 4명이면 결과마다 25%, 12명이면 8.3%입니다. 같은 결과를 여러 번 적었으면 그만큼 더합니다 — 처음 예시는 넷 가운데 "꽝"이 둘이라 누구든 꽝이 나올 확률이 50%입니다.
먼저 고르면 유리할까
아닙니다. 이름을 적은 차례가 곧 위쪽 자리인데, 아래 결과의 자리를 섞어 놓기 때문에 어느 자리든 각 결과가 나올 확률이 똑같습니다. 결과 칸을 본 사람도 어느 자리 아래에 무엇이 있는지 알 수 없습니다.
다만 이름과 결과를 다 적은 뒤 사람들이 보는 앞에서 사다리를 한 번만 만들기로 정해 두세요. 사다리 만들기는 몇 번이든 다시 누를 수 있어서, 결과를 보고 다시 만들었다는 의심이 남을 수 있습니다.
이 도구는 결과를 가린 채 사다리를 먼저 만들고, 이름을 눌러야 길이 드러납니다. 가로줄과 결과 자리는 브라우저의 암호학적 난수로 정하기 때문에 다음에 무엇이 나올지 미리 알 수 없습니다.
가로줄은 몇 개가 적당한가
가로줄이 적으면 자리를 거의 안 바꾼 사람이 생겨 눈으로도 결과가 읽힙니다. 이 도구는 가로줄을 놓는 칸 수(높이)를 사람 수 × 3, 다만 8칸보다 적지 않게 정합니다.
| 참가자 | 2명 | 3명 | 4명 | 6명 | 8명 | 10명 | 12명 |
|---|---|---|---|---|---|---|---|
| 높이(칸) | 8 | 9 | 12 | 18 | 24 | 30 | 36 |
칸마다 이웃한 두 세로줄 사이에 가로줄을 놓을지를 반반으로 정하되, 바로 왼쪽에 가로줄이 있으면 놓지 않습니다. 그래서 가로줄 수는 사다리마다 다르고, 평균으로는 6명일 때 약 32개, 12명일 때 약 136개입니다. 가로줄이 하나도 없는 사이가 생기면 하나를 더 놓습니다.
길 따라가기 예
세 사람, 높이 3칸인 작은 사다리를 손으로 따라가 봅니다(이 도구에서 3명이면 9칸입니다).
- 첫째 칸 — 1번 줄과 2번 줄 사이에 가로줄
- 둘째 칸 — 2번 줄과 3번 줄 사이에 가로줄
- 셋째 칸 — 가로줄 없음
위에서부터 한 칸씩 내려가며, 가로줄을 만나면 건너갑니다.
- 1번 줄에서 내려가면 첫째 칸에서 2번 줄로, 둘째 칸에서 3번 줄로 건너갑니다(1 → 2 → 3 → 3). 아래 3번 자리에 닿습니다.
- 2번 줄은 첫째 칸에서 1번 줄로 건너가 그대로 내려갑니다(2 → 1 → 1 → 1). 아래 1번 자리입니다.
- 3번 줄은 둘째 칸에서 2번 줄로 건너갑니다(3 → 3 → 2 → 2). 아래 2번 자리입니다.
세 사람이 세 자리에 하나씩 닿습니다. 그 자리에 어떤 결과가 놓였는지는 사다리를 만들 때 섞어 둔 대로입니다.
사다리 타기는 이럴 때 씁니다
- 청소 당번·발표 순서 — 결과가 겹치지 않아야 할 때
- 선물 교환(마니또) — 한 사람이 한 사람씩 맡을 때
- 점심 내기 — "꽝"을 하나만 두면 한 명만 걸립니다
단순히 몇 명을 뽑기만 하면 될 때는 제비뽑기 탭이 더 빠르고, 번호만 필요하면 난수 생성기를 쓰세요.
명단 추첨 사용 방법
- 명단 — 엑셀 · CSV · 글 파일을 고르거나 붙여 넣습니다. 제목 줄과 빈 줄은 알아서 빼고, 무엇을 뺐는지 한 줄로 알려 줍니다. 이름과 연락처가 함께 있으면 "이름 + 연락처 끝 4자리"로 같은 이름을 가를 수 있습니다.
- 옵션 — 등수별 인원(최대 10등)과 예비 당첨자, 같은 사람이 여러 줄일 때 한 번만 셀지 응모한 만큼 셀지, 결과에 이름을 가릴지를 고릅니다.
- 추첨 — 바로 추첨은 누른 뒤 3초 안에 나오는 공개 난수로 뽑습니다. 예고 추첨은 시각을 정해 예고 카드와 링크를 먼저 만듭니다.
- 결과 — 당첨자와 함께 추첨 증명(추첨 시각 · 명단 지문 · 공개 난수 · 결과 지문 · QR)이 나옵니다. 증명서 이미지를 저장하거나 검증 링크를 참가자에게 알리세요.
누구나 같은 결과를 다시 계산할 수 있는 까닭
브라우저 안에서 만든 난수로만 뽑으면 그 난수를 주최자가 만들었다는 의심을 풀 수 없습니다. 이 도구는 주최자가 고를 수 없는 바깥의 공개 난수(drand)와 명단의 지문으로 결과를 정합니다. 계산은 정해져 있어서, 같은 명단과 같은 회차면 누구 기기에서 계산해도 같은 당첨자가 같은 차례로 나옵니다.
- 명단 정리: 글자를 같은 꼴(NFC)로 맞추고, 앞뒤 빈칸을 떼고, 가운데 빈칸은 하나로 줄입니다. 연락처는 숫자만 남깁니다. 그다음 유니코드 차례로 늘어놓습니다 — 파일의 줄 차례나 줄바꿈 방식(윈도 · 맥)은 결과를 바꾸지 않습니다.
- 명단 지문: 정리한 명단 전체의 SHA-256. 이름이 한 글자만 달라도 완전히 다른 값이 됩니다.
- 씨앗: 명단 지문 · 옵션(대상 열 · 같은 사람 처리 · 등수별 인원 · 예비) · 공개 난수의 회차와 값을 이어 SHA-256으로 만듭니다.
- 뽑기: 씨앗에서 이어지는 SHA-256 값을 수로 바꿔 남은 명단에서 한 명씩 고릅니다. 나머지 연산 때문에 앞쪽 사람이 조금 더 잘 뽑히는 치우침은 그 범위를 넘는 수를 버리는 방식으로 없앱니다. 고른 사람의 줄은 모두 지워 한 사람이 두 번 당첨되지 않습니다.
- 결과 지문: 씨앗과 당첨 차례 전체의 SHA-256. 검증할 때 이 값이 같으면 결과가 그대로라는 뜻입니다.
결과 화면의 "계산을 따라 해 보기"에 그 추첨에 넣은 값이 차례로 적혀 있어, 다른 프로그램으로도 똑같이 계산해 볼 수 있습니다.
바로 추첨과 예고 추첨
| 방식 | 증명이 보여 주는 것 | 알맞은 때 |
|---|---|---|
| 바로 추첨 | 결과가 나중에 바뀌지 않았고, 난수를 주최자가 고르지 않았다 | 그 자리에서 함께 보며 뽑을 때 |
| 예고 추첨 | 위에 더해, 여러 번 돌려 마음에 드는 결과를 고르지 않았다 | 온라인 이벤트처럼 참가자가 추첨을 지켜볼 수 없을 때 |
명단 추첨에서 알아 둘 것
- 검증하려면 검증하는 사람에게도 같은 명단이 있어야 합니다. 명단을 받지 못한 참가자는 공개된 명단 지문 · 결과 지문이 바뀌지 않았는지만 볼 수 있습니다.
- 추첨 증명은 법적 효력이 있는 공증이 아닙니다. 경품 추첨에 필요한 고지 · 절차는 주최자가 따로 확인해야 합니다.
- 공개 난수를 받지 못하면(인터넷이 끊김 등) 추첨하지 않습니다 — 기기 안 난수로 몰래 바꿔 뽑지 않습니다.
- 명단은 5만 줄, 뽑는 사람은 예비를 합쳐 1,000명까지입니다.