앱 소개
시크릿 산타·마니또 추첨기 — 자기 이름이 뽑히지 않게 나누는 방법
마니또·시크릿 산타 추첨에서 아무도 자기 자신을 뽑지 않고, 커플이나 가족끼리 걸리지 않게 선물 상대를 배정하는 방식을 정리했다.
쪽지 뽑기로 마니또를 정하다 자기 이름이 나와 다시 뽑는 번거로움을 없앤다.
자기 자신과 제외 쌍을 피하는 배정이 나올 때까지 다시 섞고, 결과는 한 사람씩만 열어 보게 해야 비밀이 유지된다.
참가자 이름과 서로 걸리면 안 되는 쌍을 넣고 추첨한 뒤 한 사람씩 자기 결과만 확인한다.
쪽지 뽑기에서 자기 이름이 나오는 문제
이름을 쪽지에 적어 섞고 한 장씩 뽑으면 누군가는 자기 이름을 뽑는다. 다시 뽑게 하면 뒤에 뽑는 사람의 선택지가 줄고, 마지막 사람에게 자기 이름만 남는 일도 생긴다. 그러면 처음부터 다시 해야 한다.
필요한 것은 모든 사람이 정확히 한 명에게 주고 정확히 한 명에게서 받되, 아무도 자기 자신을 받지 않는 배정이다. 이 도구는 이 조건을 한 번에 검사한다. 참가자 명단을 무작위로 섞어 받는 사람 목록을 만들고, 누군가 자기 자신을 받게 되면 그 배정을 버리고 다시 섞는다. 조건을 모두 만족하는 배정이 나올 때 결과로 내놓는다. 사람을 한 명씩 뽑는 게 아니라 전체 배정을 통째로 검사하기 때문에 마지막 사람이 막히는 일이 없다.
입력하는 법
참가자 이름은 한 줄에 한 명씩, 또는 쉼표로 구분해 넣는다. 2명부터 100명까지 받는다. 같은 이름이 두 번 들어가면 누가 누구인지 구별할 수 없으므로 추첨하지 않는다. 동명이인이 있다면 “민수A”, “민수B”처럼 이름을 다르게 적어야 한다.
제외 조건은 서로 걸리면 안 되는 두 사람을 “철수-영희”처럼 한 줄에 한 쌍씩 적는다. 커플이나 형제자매처럼 이미 선물을 주고받는 사이를 넣는 칸이다. 제외 조건은 방향을 가리지 않는다. “철수-영희”라고 적으면 철수가 영희를 받는 경우와 영희가 철수를 받는 경우가 모두 막힌다. 참가자 목록에 없는 이름을 적거나 같은 사람을 양쪽에 적으면 추첨하지 않는다. 이름과 이름 사이는 하이픈이나 쉼표로 나누므로, 이름 자체에 하이픈이 들어 있으면 제외 조건에 쓸 수 없다.
결과 확인하는 법
추첨이 끝나도 결과가 한꺼번에 뜨지 않는다. 확인할 사람을 고르고 “결과 보기”를 눌러야 그 사람이 준비할 선물 상대 한 명만 나온다. 본 다음에는 “가리고 다음 사람에게 넘기기”로 다시 가린다. 휴대폰 한 대를 돌려 가며 확인해도 다른 사람의 결과가 먼저 보이지 않게 한 구조다.
전체 명단은 “주최자용 · 전체 결과 한 번에 보기”를 펼쳐야만 나온다. 인쇄하거나 기록해 둘 때만 펼치는 칸이다.
섞는 방식
추첨 버튼을 누를 때마다 브라우저의 crypto.getRandomValues로 32비트 난수 하나를 뽑아 시작값으로 삼는다. 그 시작값으로 명단을 섞고, 조건에 맞지 않으면 시작값을 바꿔 최대 500번까지 다시 섞는다. 이름은 서버로 보내지 않고 기기 안에서만 계산한다.
쓰면 안 되는 곳
배정은 “모두가 한 번씩 주고받는다”만 보장한다. 모든 사람이 하나의 고리로 이어진다는 보장은 없다. 철수가 영희에게, 영희가 철수에게 서로 주고받는 짝이 나올 수 있고, 모임이 작은 고리 몇 개로 나뉠 수도 있다. 선물을 한 줄로 이어 전달하는 진행 방식이라면 결과를 그대로 쓰기 전에 확인해야 한다.
제외 조건을 인원에 비해 많이 넣으면 가능한 배정이 아예 없을 수 있다. 두 명뿐인데 두 사람을 서로 제외하면 가능한 배정이 없다. 500번을 섞어도 조건에 맞는 배정을 못 찾으면 제외 쌍을 줄이라는 안내가 나온다.
추첨 기록이나 증빙이 남지 않는다. 결과는 화면에만 있고 새로 추첨하거나 초기화하면 사라진다. 상금이 걸린 추첨처럼 공정성을 증명해야 하는 자리에는 맞지 않는다.