🛝툴리오
소개 문의

🪜 사다리 타기

『사다리 만들기』를 클릭하면 플레이어당 수직선 하나를 배치한 후, Math.random()을 사용하여 고정된 12개 행에 걸쳐 수평 가로줄을 무작위로 만듭니다. 모든 가로줄은 서로 이웃한 두 선만 교체하며 같은 행에서 두 가로줄이 서로 닿는 것을 허용하지 않으므로, 가로줄이 어디에 놓이든 전체 사다리는 모든 플레이어를 정확히 하나의 결과에 1:1 매칭함이 수학적으로 보장됩니다. 이후 이름을 탭하면 캔버스가 동일한 사다리를 다시 그리면서 해당 플레이어의 경로를 밝게 표시하므로, 단순한 결과 통보 대신 결정 과정을 단계별로 직접 확인할 수 있습니다.

Ladder Game은 JavaScript의 Math.random()을 사용하여 가로줄을 배치하고 HTML Canvas API를 사용하여 각 플레이어가 고유한 결과로 내려가는 경로를 그리고 애니메이션으로 보여주는 무작위 amidakuji(사다리타기) 추첨 사다리를 브라우저에서 생성합니다.

이름을 누르면 경로가 그려져요.

설계부터 프라이빗. 이 도구는 전부 브라우저 안에서 실행돼요 — 입력한 내용은 업로드되거나 저장되지 않으며, 오프라인에서도 작동합니다.

소개

이 공정성 주장은 마케팅이 아닙니다. 이는 가로줄이 배치되는 방식에서 직접적으로 도출된 것입니다. 12개 행은 각각의 이웃한 선 쌍에 대해 Math.random() < 0.45를 사용하여 가로줄을 배치하며, 왼쪽 위치에 방금 가로줄이 놓였다면 해당 위치는 건너뜁니다("!(i > 0 && row[i-1])"). 이 단 하나의 가드 조건 덕분에 어떤 행도 겹치는 교환을 포함할 수 없으므로, 각 행은 그 자체로 겹치지 않는 교환의 깔끔한 집합(열의 순열)이 됩니다. 이러한 12개 행을 위로 쌓는 것은 12개 순열을 연속으로 합성하는 것과 같으며, 순열의 합성 결과는 항상 그 자체로 순열입니다. 따라서 두 플레이어가 동일한 결과에 도달하는 것은 무작위 난수 결과와 상관없이 구조적으로 불가능합니다.

이 보장이 다루지 않는 것은 결과가 모든 가능한 매칭 쌍에 얼마나 '균등하게' 분배되는가입니다. 이 사다리는 입력한 플레이어 수와 관계없이 항상 동일한 12개 행을 사용하며, 이는 플레이어 수에 따라 변하지 않는 고정 상수로 구현되어 있습니다. 이 도구가 맞추어져 있는 3~10명 범위에서는 독립적인 45% 확률로 생성된 12개 행의 교차점이 충분하여 진짜 무작위 섞기처럼 느껴집니다. 하지만 30명이나 50명의 이름을 입력하면 12개 행의 교차점만으로는 그 수많은 매칭 쌍에 균등하게 결과를 분산시킬 만큼의 교차점을 만들지 못하며, 플레이어가 완전 균일 섞기보다 시작 위치 근처에 도달할 가능성이 커집니다. 대규모 인원에는 12개 행으로 제한된 사다리보다 일반 무작위 배정 도구가 더 적합합니다.

Math.random()의 특성에 대해서도 솔직하게 짚고 넘어갈 필요가 있습니다. 이는 브라우저 내장 의사난수 생성기로, 속도가 빠르고 설거지 당번을 정하는 정도에는 충분하며 페이지 외부에서 참가자가 지배할 수 없습니다. 그러나 암호학적으로 안전하지는 않습니다. 누군가 충분한 출력을 관찰하거나 엔진 알고리즘을 안다면 원칙적으로 내부 상태를 예측할 수 있습니다. 이것이 실제 현금이 걸린 추첨, 정식 복권, 법적 이해관계가 걸린 이벤트에서 crypto.getRandomValues()나 검증된 RNG를 사용하는 이유입니다. 이 도구는 그러한 방식을 사용하지 않으며, 집안일 분담이나 커피 내기용으로는 그럴 필요도 없습니다. 다만 실제 상금이 걸린 게임에는 사용하지 마세요.

상호작용 측면에서: "사다리 만들기"는 전체 가로줄 배치 루틴을 새로 실행하므로 클릭할 때마다 이전과 무관한 독립적 추첨이 이뤄집니다. "전체 공개"는 이름별로 하나씩 확인하는 과정을 건너뛰고 모든 플레이어-결과 매칭을 동일한 사다리에 한 번에 표시합니다. 이 버전에는 내장된 저장, 내보내기, 공유 버튼이 없습니다. 사다리는 캔버스 요소에 그려진 픽셀로만 존재하므로, 페이지를 새로고침하면 캔버스와 두 텍스트 상자 모두 샘플 이름과 결과 목록으로 초기화됩니다. 결과 기록을 남기고 싶다면 페이지를 벗어나기 전에 브라우저나 기기의 자체 스크린샷 기능을 사용하는 것이 유일한 방법입니다. 그 외의 기능은 안내된 바와 같습니다. 페이지가 로드된 후에는 네트워크 요청 없이 완전히 클라이언트 측에서 동작하므로 입력한 내용이 절대 업로드되지 않으며 오프라인에서도 작동합니다.

사용 방법

  1. 플레이어의 이름을 Players 상자에 입력하세요. 한 줄에 하나의 이름을 입력합니다. 샘플 이름(Amy, Ben, Cara, Dan)은 형식을 보여주기 위한 것이며, 완전히 교체할 수 있습니다.
  2. Outcomes 상자에 매칭할 결과를 한 줄에 하나씩 입력하세요. 두 목록의 줄 수가 일치하지 않으면 도구는 사다리를 그리지 않고 오류를 표시합니다.
  3. "사다리 만들기"를 클릭하여 Math.random()을 새로 실행하고 캔버스에 새로운 가로줄들을 표시하세요. 매 클릭은 독립적인 추첨입니다.
  4. 사다리 위에 있는 플레이어 이름 칩을 탭하거나 클릭하면 해당 플레이어의 이동 경로가 위에서 아래로 강조 색상으로 애니메이션되며 아래쪽에 매칭된 결과가 나타납니다.
  5. 하나씩 확인하는 과정을 건너뛰고 모든 플레이어와 결과의 매칭을 동일한 사다리에 한 번에 표시하고 싶다면 대신 "전체 공개"를 클릭하세요.

자주 묻는 질문

이 사다리는 진짜 무작위이고 예측 불가능한 난수 생성기를 사용합니까?
암호학적으로 안전한 crypto.getRandomValues()가 아닌 브라우저 내장 Math.random()을 사용합니다. 집안일을 나누거나 커피 내기를 하는 정도에는 완전히 충분하지만, Math.random()의 내부 상태는 원칙적으로 이전 출력을 충분히 관찰하면 예측이 가능합니다. 실제 현금이나 법적 상금이 걸린 추첨, 또는 참가자가 추첨을 역공학할 동기가 있는 상황에서는 이 도구나 Math.random() 기반 사다리를 사용하지 마세요.
결과 매핑은 정말 1:1인가요, 아니면 두 플레이어가 같은 상품을 받을 수 있나요?
1:1 매칭은 운이 아니라 구조적으로 보장됩니다. 각 가로줄은 서로 이웃한 두 선만 연결하며, 코드는 동일한 행에 두 가로줄이 겹쳐 배치되는 것을 명시적으로 방지합니다. 이로 인해 사다리의 각 행은 겹치지 않는 작은 무작위 섞기가 되며, 이러한 섞기 12개를 쌓으면 두 시작선이 결코 같은 도착선으로 향할 수 없습니다. 무작위 난수 결과와 관계없이 매칭은 수학적 일대일 대응(전단사 함수)을 이룹니다.
플레이어 수가 많아져도 사다리는 여전히 공정합니까?
솔직한 한계점은 다음과 같습니다. 사다리는 플레이어 수와 관계없이 항상 고정된 12개 행만 사용합니다. 이 도구가 대상으로 하는 3~10명 범위에서는 교차점이 충분하여 공정한 섞기처럼 느껴집니다. 하지만 30명이나 50명의 이름을 입력하면 12개 행으로는 그 수많은 매칭 쌍에 균등하게 결과를 분산시킬 만큼의 교차점을 만들지 못하며, 플레이어가 완전 균일 섞기보다 시작 위치 근처에 도달할 가능성이 커집니다. 대규모 인원에는 12개 행으로 제한된 사다리보다 일반 무작위 배정 도구가 더 적합합니다.
완성된 사다리를 저장하거나 공유할 수 있나요?
도구 자체에서는 지원하지 않습니다. 이 버전에는 내장된 저장, 다운로드, 공유 버튼이 없으며 사다리는 페이지가 열려 있는 동안 캔버스 요소에 그려진 픽셀로만 존재합니다. 결과 증거가 필요하다면(흔히 쓰이는 "논쟁 해결용 스크린샷") 페이지를 새로고침하기 전에 브라우저나 기기의 스크린샷 기능을 사용하세요. 새로고침하면 캔버스와 두 텍스트 상자 모두 샘플 데이터로 초기화됩니다.
이 도구는 어떤 것을 업로드하고, 인터넷 없이 작동하나요?
데이터 업로드는 전혀 없으며 오프라인 사용이 가능합니다. 가로줄 배치, 캔버스 그리기, 경로 추적 모두 네트워크 요청 없이 브라우저의 JavaScript 엔진 내에서만 실행되므로, 페이지 로드 후에는 인터넷 연결이 끊겨도 작동하며 입력한 이름과 결과는 사용자 기기를 절대 벗어나지 않습니다.