랜덤 뽑기로 할 수 있는 일
랜덤 뽑기는 입력한 목록에서 항목을 하나 또는 여러 개 무작위로 고르는 도구이며, 모든 항목이 뽑힐 확률은 같습니다. 이벤트 당첨자 추첨, 발표 순서 정하기, 점심 메뉴 고르기, 순번 정하기, 문제 은행에서 문제 고르기처럼 제비뽑기가 필요한 곳에 쓸 수 있습니다. 목록 전체를 무작위 순서로 섞을 수도 있습니다.
한글 이름이나 메뉴도 그대로 쓸 수 있습니다. 목록은 기기 밖으로 나가지 않습니다. 뽑기는 브라우저 안에서 이루어지며, 페이지를 닫으면 아무것도 남지 않습니다.
사용 방법
- 항목 입력 (한 줄에 하나씩) 칸에 항목을 입력하거나 붙여넣습니다.
Red, Green, Blue처럼 쉼표로 나눈 한 줄도 됩니다. - 뽑을 개수를 정합니다. 당첨자가 한 명이면 1로 둡니다.
- 같은 항목이 두 번 뽑히면 안 된다면 중복 없이를 켜 둡니다. 끄면 공을 뽑았다가 다시 넣는 것처럼 복원 추출이 됩니다.
- 결과 구분 기호를 고릅니다. 기본값은 줄바꿈입니다.
- 무작위로 뽑기를 누릅니다. 목록 전체를 무작위 순서로 바꾸려면 목록 섞기를 누릅니다.
하나만 뽑으면 결과 아래에 큰 글씨로 표시되고, 여러 개는 목록으로 나옵니다. 복사를 누르면 결과가 복사됩니다. 최근 열 번의 결과는 뽑은 시각과 함께 최근 결과에 남아서, 누가 이전 추첨 결과를 보여 달라고 할 때 편리합니다. 지우기를 누르면 비워지며, 이 목록은 페이지를 떠날 때까지만 유지됩니다.
빈 줄과 각 항목 앞뒤의 공백은 무시되므로 스프레드시트의 열을 그대로 복사해 붙여넣어도 됩니다.
예시
이 페이지를 실행하는 코드로 실제로 뽑은 결과입니다. 실행할 때마다 결과가 달라집니다.
| 목록 | 설정 | 한 번 실행한 결과 |
|---|---|---|
| 피자, 초밥, 떡볶이, 김치찌개, 햄버거, 샐러드 (기본 예시) | 1개 뽑기 | 초밥 |
| 같은 목록 | 3개 뽑기, 중복 없이 | 햄버거, 초밥, 김치찌개 |
| Ana, Ben, Chloe, Dev | 2개 뽑기, 중복 없이 | Ben, Chloe |
| 피자, 초밥, 떡볶이, 김치찌개, 햄버거, 샐러드 | 목록 섞기 | 초밥, 김치찌개, 햄버거, 떡볶이, 피자, 샐러드 |
| Heads, Tails | 5개 뽑기, 중복 없이 끔 | Heads, Tails, Tails, Tails, Tails |
| Yes, No | 1개 뽑기 | Yes |
| 짜장면, 짬뽕, 김치찌개, 비빔밥, 떡볶이 | 1개 뽑기 | 떡볶이 |
| 민준, 서연, 지호, 하은 | 2개 뽑기, 중복 없이 | 서연, 민준 |
동전 던지기 줄은 무작위가 실제로 어떻게 보이는지 잘 보여 줍니다. 뒷면이 네 번 연속으로 나오면 의심스럽게 느껴지지만, 공정한 무작위 추첨에서도 이런 짧은 연속은 흔합니다.
작동 원리
한 줄이 목록의 항목 하나가 됩니다. 항목 하나를 뽑을 때 도구는 0부터 목록의 마지막 위치까지 정수 하나를 무작위로 고르고, 그 위치의 항목을 돌려줍니다.
이 난수는 브라우저에 내장된 보안 난수원인 crypto.getRandomValues에서 나옵니다. 원시 난수 비트를 어느 항목에도 치우치지 않는 위치로 바꾸기 위해 거부 샘플링(rejection sampling)을 씁니다. 단순한 나머지 계산을 쓰면 목록 길이가 난수 범위로 딱 나누어떨어지지 않을 때 일부 위치의 확률이 조금 높아집니다. 거부 샘플링은 그런 치우침을 만드는 몇 안 되는 값을 버리고 다시 뽑기 때문에 모든 항목의 확률이 정확히 같습니다.
중복 없이를 켜면 목록의 복사본을 피셔-예이츠(Fisher-Yates) 방식으로 섞고 앞에서부터 항목을 가져옵니다. 모자에서 이름표를 다시 넣지 않고 꺼내는 것과 같습니다. 목록 섞기는 섞은 목록 전체를 돌려줍니다.
활용 아이디어
- 이벤트 추첨. 응모자 이름을 붙여넣고 당첨자 한 명을 뽑은 뒤, 예비 당첨자 두 명을 더 뽑습니다.
- 교실. 다음에 대답할 학생을 고르거나 반 명단을 섞어 발표 순서를 정합니다.
- 팀 나누기. 목록을 섞은 다음 앞쪽 절반과 뒤쪽 절반으로 나눕니다.
- 결정하기. 고민 중인 선택지를 붙여넣고 도구에 맡겨 보세요. 결과를 보고 아쉬운 마음이 든다면 사실 원하던 답이 무엇인지 알게 됩니다.
- 공부. 공부할 주제나 암기 카드 목록을 붙여넣고 복습할 세 개를 뽑습니다.
팁과 한계
- 중복 항목은 두 번 계산됩니다. 줄 하나가 항목 하나이므로 반복된 이름은 확률이 높아집니다. 원하지 않는다면 목록을 먼저 정리하세요.
- 항목 안에 쉼표가 있을 때. 항목에 쉼표가 들어 있다면 한 줄에 하나씩 넣으세요. 쉼표로 나누는 방식은 목록 전체가 한 줄일 때만 적용됩니다.
- 목록보다 많이 뽑을 때. 중복 없이를 켠 상태에서 항목 6개 중 10개를 요청하면 6개가 모두 무작위 순서로 나오고, 상태 줄에 6개만 뽑을 수 있었다는 안내가 표시됩니다.
- 기록을 남기세요. 공개 이벤트라면 결과를 복사하고 최근 결과의 시각을 적어 두거나, 버튼을 누르는 화면을 녹화해 두세요.
- 한 번에 최대 1,000개까지 뽑을 수 있습니다.
다른 방법으로 무작위로 고르기
Excel 또는 Google 스프레드시트. 이름이 A2:A20에 있다면 =INDEX(A2:A20, RANDBETWEEN(1, ROWS(A2:A20)))로 이름 하나를 뽑습니다. 최신 Excel에서는 =SORTBY(A2:A20, RANDARRAY(ROWS(A2:A20)))로 목록을 섞을 수 있습니다.
Python. random.choice(names)는 하나를, random.sample(names, 3)은 중복 없이 세 개를 뽑고, random.shuffle(names)는 목록 자체를 섞습니다. 예측할 수 없어야 하는 추첨이라면 secrets.choice(names)를 쓰세요.
명령줄. Linux에서는 shuf -n 1 names.txt로 파일에서 무작위 줄 하나를 출력합니다.
관련 도구
항목 대신 숫자를 뽑으려면 랜덤 숫자 생성기를 쓰세요. 단어 게임을 시작할 알파벳이 필요하다면 랜덤 알파벳 생성기를, 게임이나 일정에 쓸 달을 정하려면 랜덤 월 생성기를 사용해 보세요.