본문으로 건너뛰기
AZ Tools

트럼프 카드 드로어

잘 섞인 52장 덱(조커 선택)에서 N장 뽑기. 덱 추적 — 같은 카드 두 번 안 나옴.

덱 남음: 52

뽑기 버튼을 눌러 카드를 딜링.

셔플은 crypto.getRandomValues + Fisher-Yates. 뽑힌 카드는 리셋·재셔플 전까지 덱에서 빠짐.

사용법

  1. 뽑을 카드 수·조커 포함 여부 설정.
  2. "뽑기"는 현재 덱에서 그 수만큼; "재셔플 후 뽑기"는 새 덱 먼저 셔플.
  3. "리셋"은 카드 뽑지 않고 새 덱만 셔플.

자세한 설명

펼치기

새 카드 한 벌(조커는 선택)을 만들어 섞고 위에서부터 나눠 줍니다. 뽑힌 카드는 뽑힌 상태로 남고 남은 장수 카운터가 줄어들기 때문에, 중복 없이 바닥까지 계속 돌릴 수 있습니다. 이 점이 카드 한 벌과 무작위 카드 생성기를 가르는 차이이고, 카드 게임이나 확률 수업, 그리고 카드가 빠져나갈수록 확률이 달라져야 하는 모든 뽑기에 쓸 수 있게 해 주는 조건입니다.

셔플은 배열 끝에서부터 내려오면서 각 위치를 자기 이하의 무작위 인덱스와 맞바꾸는 피셔-예이츠 방식입니다. 알고리즘의 전부가 바로 이 세부에 있습니다. 매 단계마다 배열 전체에서 고르는 판본은 겉보기에 똑같고 속도도 같지만, 측정 가능한 만큼 치우친 분포를 만듭니다. 편향된 셔플도 섞인 것처럼 보이기 때문에 실제 제품 코드에서 몇 년씩 살아남곤 하는 고전적인 버그입니다.

난수는 Math.random이 아니라 crypto.getRandomValues에서 가져오는데, 이유는 산수입니다. 한 벌의 배열 순서는 52!가지, 대략 8 × 10^67로 68자리 숫자입니다. 128비트 상태로 초기화된 생성기가 도달할 수 있는 경우의 수는 많아야 2^128, 약 3 × 10^38뿐입니다. 아무리 오래 섞어도 가능한 덱의 99.999…% 이상에는 결코 닿지 못한다는 뜻입니다. 매 교환마다 운영체제에서 새 엔트로피를 받아 오면 그 천장이 사라집니다. 남는 결함은 32비트 값을 52갈래 선택으로 접을 때 생기는 나머지 편향뿐인데, 일부 위치를 8천만분의 1 정도 더 자주 고르게 만듭니다. 실재하지만, 평생 카드를 돌려도 감지할 수 없는 크기입니다.

이 도구가 할 수 없는 일은 화면을 볼 수 있는 사람이 있는 게임에서 공정한 셔플을 보장하는 것입니다. 덱은 탭 안에 살아 있으므로 그 페이지를 열어 둔 사람은 전체 순서를 메모리에 가지고 있습니다. 서로 믿는 사람들끼리 편하게 쓰라고 만든 것이지 카드룸용이 아닙니다. 그리고 다시 섞기는 정말로 새 덱입니다. 버린 카드가 나간 순서 그대로 돌아오지 않으므로 컷의 대용이 되지 않습니다.

자주 묻는 질문

셔플이 진짜 랜덤?

각 스왑이 crypto.getRandomValues 사용 — 현대 브라우저의 CSPRNG. Fisher-Yates 패스가 모든 위치 한 번씩 → 모든 덱 순열 동일 확률.

슈트 안 카드 순서?

A, 2, 3, …, 10, J, Q, K — 에이스는 1(낮음)로 취급. 포커 랭킹의 에이스-하이 로직 필요하면, A와 K가 양 끝에 있다고 기억.

뽑은 카드에 같은 숫자와 연속된 숫자가 섞여 나온다. 섞기가 고장 난 건가?

아니다. 공정한 섞기는 원래 그렇게 보인다. 균일한 무작위는 직관이 기대하는 것보다 훨씬 자주 뭉침을 만든다. 52장 덱에서 같은 랭크 두 장이 가까이 나오거나 세 장이 이어지는 것은 평범한 일이다. 오히려 그런 일이 전혀 없는 섞기가 수상하다. 사람이 손으로 지어내는 순서는 알아볼 수 있을 만큼 지나치게 고르기 때문이다.

페이지를 새로 고치면 덱이 초기화되나?

그렇다. 페이지가 열릴 때마다 새 덱을 만들어 섞고, 뽑은 카드 기록은 열려 있는 페이지 안에만 존재한다. 딜 도중에 새로 고치면 새 덱이 시작되므로 이미 뽑았던 카드가 다시 나올 수 있다. 그게 중요한 상황이라면 딜을 끝내고 나서 새로 고쳐라.

관련 도구