사다리타기
이름과 결과를 적으면 사다리를 만들어 누가 무엇에 걸렸는지 보여줍니다
한 줄에 한 명씩, 또는 쉼표로 구분해 적으세요.
참가자 수와 개수가 같아야 합니다.
참가자와 결과를 적으면 사다리가 만들어집니다.
사다리타기는 왜 공평한가
사다리의 가로줄은 두 세로줄을 맞바꾸는 일만 합니다. 맞바꾸기를 몇 번 반복해도 출발점과 도착점은 항상 일대일로 대응합니다. 그래서 어떤 모양의 사다리든 두 사람이 같은 결과에 걸리는 일이 없고, 아무도 결과 없이 남지 않습니다.
이것은 규칙에서 자동으로 따라 나오는 성질이라 따로 검사할 필요가 없어 보이지만, 구현이 틀리면 깨질 수 있습니다. 그래서 참가자 수와 가로줄 배치를 무작위로 바꿔가며 도착점이 겹치지 않는지 확인하는 검사를 넣어 두었습니다.
난수에 신경 쓴 부분
가로줄 위치는 브라우저의 암호학적 난수 생성기로 정합니다. 웹에서 흔히 쓰는Math.random()은 구현체마다 품질이 다르고, 경우에 따라 다음 값을 예측할 수 있는 수열이 나옵니다.
한 가지 더 있습니다. 난수를 항목 수로 나눈 나머지를 그대로 쓰면 앞쪽 값이 미세하게 더 자주 나옵니다. 나누어떨어지지 않는 만큼 앞쪽 구간이 한 번 더 포함되기 때문입니다. 이 도구는 그 구간에 걸린 난수를 버리고 다시 뽑아 편향을 없앴습니다. 커피 내기에는 과한 이야기지만, 결과에 이해관계가 걸리는 도구라면 맞춰 두는 게 맞다고 봤습니다.
이렇게 쓰면 편합니다
- 여럿이 모여 있을 때 — 이름을 하나씩 눌러 그 사람 결과만 확인하세요. 한꺼번에 보면 재미가 없습니다.
- 당첨 하나, 나머지 꽝 — 결과 칸에 "당첨"을 한 줄, "꽝"을 인원수에서 하나 뺀 만큼 적으세요. 참가자와 결과 개수는 같아야 합니다.
- 순서를 정할 때 — 결과 칸에 1, 2, 3… 을 적으면 발표 순서나 당번 순서를 정할 수 있습니다.
이 도구에 대해
사다리와 결과는 이 브라우저 화면에만 있습니다. 참가자 이름을 포함해 아무것도 서버로 전송되거나 저장되지 않으며, 페이지를 새로고침하면 사라집니다. 결과를 남겨야 한다면 화면을 캡처해 두세요. 참가자는 최대 20명까지 받습니다. 그보다 많으면 세로줄이 너무 촘촘해져서 화면에서 읽을 수가 없습니다.
자주 묻는 질문
- Q결과가 정말 무작위인가요?
가로줄을 놓는 위치를 브라우저의 암호학적 난수 생성기로 정합니다. 흔히 쓰는 `Math.random()`은 구현체마다 품질이 다르고 예측 가능한 수열이 나올 수 있어서 쓰지 않았습니다.
또 하나 신경 쓴 부분은 편향입니다. 난수를 항목 수로 나눈 나머지를 그대로 쓰면 앞쪽 값이 미세하게 더 자주 나옵니다. 이 도구는 편향이 생기는 구간을 버리고 다시 뽑는 방식으로 이를 없앴습니다. 커피 내기 정도에는 과한 이야기지만, 결과에 이해관계가 걸린 도구라면 이 정도는 맞춰 두는 게 맞다고 봤습니다.
- Q두 사람이 같은 결과에 걸릴 수도 있나요?
없습니다. 사다리는 어떤 모양이든 출발점과 도착점이 일대일로 대응합니다. 가로줄은 두 세로줄을 맞바꾸는 역할만 하므로, 몇 개를 어디에 놓든 결과는 항상 순열이 됩니다.
이건 사다리타기의 수학적 성질이고, 이 도구도 그 성질이 지켜지는지 자동으로 검사합니다. 참가자 수와 가로줄 배치를 무작위로 100번 바꿔가며 도착점이 겹치지 않는지 확인하는 테스트가 들어 있습니다.
- Q참가자와 결과 개수가 달라도 되나요?
같아야 합니다. 사다리는 출발점 하나가 도착점 하나로 가는 구조라, 개수가 맞지 않으면 누군가는 결과를 못 받거나 남는 결과가 생깁니다.
"당첨 하나, 나머지는 꽝"처럼 쓰려면 꽝을 인원수에 맞춰 여러 줄 적으시면 됩니다. 개수가 안 맞으면 실행 전에 몇 개씩인지 알려드리니 맞춰서 고치세요.
- Q결과를 하나씩 확인할 수 있나요?
있습니다. 사다리를 만든 뒤 이름을 누르면 그 사람의 결과만 보입니다. 여럿이 모여서 한 명씩 확인하는 상황을 위한 것입니다.
한꺼번에 다 보려면 "전체 결과 보기"를 누르세요. 다시 만들기를 누르면 가로줄이 새로 배치되고 결과도 완전히 새로 정해집니다.
- Q결과가 저장되나요?
저장되지 않습니다. 사다리와 결과는 이 브라우저 화면에만 있고 서버로 전송되지 않습니다. 페이지를 새로고침하면 사라집니다.
참가자 이름도 마찬가지입니다. 어디에도 기록되지 않으므로, 결과를 남겨야 한다면 화면을 캡처해 두세요.