광산 배치 방식
Mines는 5x5 보드입니다. 1개에서 24개까지 숨겨진 광산의 개수를 선택하고 타일을 하나씩 엽니다. 안전한 타일마다 배수가 올라가고, 광산을 열면 배수가 0으로 리셋되며 안전한 타일을 연 후 언제든 캐시아웃할 수 있습니다. 이 게임은 전략을 유도하지만 — 모서리, 가장자리, '안전해 보이는' 타일 — 광산 배치 방식 때문에 전략은 존재하지 않습니다.
ENGINE-VERIFIEDOriginalMinesService.kt: start() takes a mineCount of 1 to 24 and calls createMineListPf(), a partial Fisher–Yates shuffle on the array 1…25 driven by the round’s SeedPairRandom: for i = 0 … mineCount − 1 it draws nextIntBelow(25 − i) — one HMAC-SHA256 of “clientSeed-nonce-i” each, first 13 hex digits over 2⁵², times (25 − i), floored — takes the tile at that position as mine i, and swaps it to the end of the unpicked range. betGameTicket() increments the round counter, refuses a tile already opened, zeroes the ticket if the tile is in the mine list, and otherwise sets the multiplier to ∏(25 − i) ÷ ∏(25 − mineCount − i) over i < round, floored to two decimals, times (1 − house edge), floored to two decimals again. When every safe tile is open the ticket closes itself. The client mirror is mines/minesApi.ts, which repeats both floors in BigInt.
부분 Fisher–Yates 셔플은 모든 m개 타일 집합을 동등하게 만들고, 광산은 첫 클릭 전에 고정됩니다. 따라서 어느 타일을 열든 그것이 광산일 확률은 m ÷ (닫힌 타일 수)입니다. 모서리가 더 안전하지 않으며, 방금 연 타일 옆의 타일이 더 위험하지 않습니다. 보드는 당신이 본 것을 기억하지 않습니다. 게임이 읽는 유일한 숫자는 지금까지 연 안전한 타일의 개수입니다.
배수는 공정한 확률을 두 번 내림한 것
m개 광산으로 k번 픽 생존할 확률은 25 − m개 안전 타일에서 k개를 선택하는 방법의 수를 25개 중에서 k개를 선택하는 방법의 수로 나눈 것: C(25 − m, k) ÷ C(25, k). 엔진의 곱 ∏(25 − i) ÷ ∏(25 − m − i)는 정확히 역수 — 공정한 배수 — 이고, 그 다음 두 가지를 합니다. 공정한 숫자를 소수점 두 자리로 내림한 후 0.99를 곱하고 다시 내립니다.
0.99는 1% 하우스 엣지입니다. 내림이 표를 흥미롭게 만드는데, 왜냐하면 소수점 두 자리로의 내림은 ×227.70에서는 거의 무가치하지만 ×1.04에서는 상당히 중요하기 때문입니다. 각 광산 개수의 첫 픽이 얼마를 지급하고 얼마를 반환하는지는 다음과 같습니다.
| MINES | 공정한 배수 | 지급액 | 타일이 안전할 확률 | 반환액 | 엣지 |
|---|---|---|---|---|---|
| 1 | ×1.0417 | ×1.02 | 96% | 97.92% | 2.08% |
| 2 | ×1.0870 | ×1.06 | 92% | 97.52% | 2.48% |
| 3 | ×1.1364 | ×1.11 | 88% | 97.68% | 2.32% |
| 5 | ×1.2500 | ×1.23 | 80% | 98.40% | 1.60% |
| 10 | ×1.6667 | ×1.64 | 60% | 98.40% | 1.60% |
| 15 | ×2.5000 | ×2.47 | 40% | 98.80% | 1.20% |
| 20 | ×5.0000 | ×4.95 | 20% | 99.00% | 1.00% |
| 24 | ×25.0000 | ×24.75 | 4% | 99.00% | 1.00% |
Pays = floor₂(floor₂(fair) × 0.99), 엔진이 계산하는 방식; return = pays × chance. 두 개의 지뢰가 있으면 fair ×1.0870이 ×1.08이 되고, 그 다음 ×1.0692, 그 다음 ×1.06: floor들이 8.7센트 마진에서 2.5센트를 빼앗아갑니다.
따라서 한 번의 pick의 가격은 1%가 아닙니다. 1%에 두 개의 floor가 버리는 것을 더한 것이고, 보드 하단의 작은 배수에서는 추가로 1포인트 이상입니다. 1%는 fair 배수가 충분히 커서 1센트가 더 이상 중요하지 않을 때만 도달됩니다 — 첫 번째 pick에서 20개의 지뢰, 또는 타일을 몇 개 진행한 후의 모든 지뢰 수.
복리가 되지 않는 사다리
Mines에서 놀라운 부분은 계속 진행할 때 일어나는 일입니다. RPS 같은 스트릭 게임에서는 매번의 추가 승리가 동일한 1.5% 엣지에서 전체 실행 잔액의 새로운 베팅이므로, 10승은 14%의 비용이 듭니다. Mines는 그렇게 작동하지 않습니다. 각 단계는 전체 런의 공정한 배수에서 1%를 뺀 것으로 처음부터 가격이 책정되므로, 모든 캐시아웃 지점에서의 return은 약 99% — 3번째 타일에서 멈추든 20번째 타일에서 멈추든 동일합니다.
| 안전한 타일 (k) | PAYS | 여기에 도달할 확률 | 여기서 캐시아웃하는 경우의 RETURN |
|---|---|---|---|
| 1 | ×1.11 | 88.00% | 97.68% |
| 2 | ×1.27 | 77.00% | 97.79% |
| 3 | ×1.47 | 66.96% | 98.43% |
| 5 | ×1.98 | 49.57% | 98.14% |
| 10 | ×4.99 | 19.78% | 98.72% |
| 15 | ×18.96 | 5.22% | 98.92% |
| 20 | ×227.70 | 0.43% (1 in 230) | 99.00% |
| 22 (the board) | ×2,277.00 | 0.043% (1 in 2,300) | 99.00% |
Chance = C(22, k) ÷ C(25, k). 승수가 커지고 플로어가 상대적으로 축소됨에 따라 수익률은 99%를 향해 올라가며, 첫 번째 층 아래로 내려가지 않고 99% 이상으로 올라가지 않습니다.
다른 방식으로 읽으면: 타일별 확률은 공정합니다. 안전한 타일 10개에서 지뢰 3개로 11개로 이동하는 것은 12 ÷ 15 = 80% 확률의 베팅이며, 6.24 ÷ 4.99 = ×1.2505를 지급하는데 이는 공정한 것보다 약간 더 좋습니다. 해당 층에서 바닥이 당신의 방향으로 떨어졌습니다. 하우스는 이미 사다리 맨 아래에서 1%를 취했으며 위로 올라가면서 다시 취하지 않습니다. 이것이 깊은 층을 RPS에서와 같은 의미에서 좋은 베팅으로 만들지는 않습니다. 1 대 230의 확률은 여전히 1 대 230의 확률입니다. 하지만 '조기 현금화'가 여기서의 규칙이 아니라는 의미입니다. 런의 가격은 맨 아래를 제외한 어디서나 멈춰도 동일하며, 맨 아래에서는 더 나쁩니다.
전체 테이블
보드에는 300개의 설정이 있습니다(24개의 지뢰 개수, 각각 안전한 타일만큼의 픽). 엔진은 모두 동일한 방식으로 가격을 책정합니다. 그 중 300개 중 171개는 소수점 첫째 자리까지 99.0%를 반환하고 66개는 정확히 99.00%를 반환합니다. 32개는 98.5% 이하를 반환하며, 모두 ×2.17 이하의 승수에 있습니다. ×2.20 이상을 지급하는 것은 98.5% 이하를 반환하지 않습니다. 최악의 두 경우는 2개 픽에서 1개 지뢰와 1개 픽에서 2개 지뢰이며, 둘 다 92% 확률로 ×1.06입니다: 97.52%.
| 지뢰 | 안전한 타일 | 지급 | 확률 |
|---|---|---|---|
| 1 | 24 | ×24.75 | 1 in 25 |
| 3 | 22 | ×2,277.00 | 1 in 2,300 |
| 5 | 20 | ×52,598.70 | 1 in 53,130 |
| 10 | 15 | ×3,236,072.40 | 1 in 3,268,760 |
각각 정확히 99.00%를 반환합니다. 사이트의 라운드당 최대 이익이 추가로 적용되므로, 큰 배수는 그 한도 아래로 유지할 만큼 충분히 작은 베팅에서만 전액 지급됩니다.
선택한 광산 개수는 광산 게임의 형태를 바꾸지만 가격을 바꾸지는 않습니다. 1개 광산은 시작 시 타일당 4% 사망률로 천천히 오르는 것이고, 24개 광산은 4%에서의 단일 ×24.75 동전 던지기입니다. 둘 다 하우스의 1% 플러스 플로어가 소요되며, 플로어는 타일당 가장 많이 지급하는 설정에서 가장 작습니다.
라운드 확인
- 라운드 후 시드 쌍을 회전하여 서버 시드를 공개하고, 그 SHA-256이 게임 전에 표시된 지문과 일치하는지 확인하세요.
- 타일 1…25를 한 줄로 작성하세요. i = 0에서 광산 개수보다 1 작은 값까지, 서버 시드로 키된 HMAC-SHA256을 "clientSeed-nonce-i"에 대해 계산하고, 처음 13개의 16진 자리를 숫자로 읽고, 2⁵²로 나누고, (25 − i)를 곱한 후 내림하세요. 해당 위치의 타일은 광산 i + 1입니다. 이를 위치 25 − i의 타일과 교환하고(1부터 카운트) 계속하세요.
- 광산 목록을 게임이 공개한 타일과 비교하고, 지급된 배수를 개방한 k개 안전 타일에 대해 C(25, k) ÷ C(25 − m, k)로 소수점 둘째 자리까지 내린 후 0.99를 곱하고 다시 내린 값과 비교하세요.
재생은 광산이 클릭하기 전 위치에 있었음을 보여줍니다. 그것이 보여줄 수 없는 것은 다른 타일보다 더 안전한 타일입니다. 왜냐하면 그런 타일은 없었기 때문입니다. 게임의 전체 가격은 두 개의 플로어와 0.99에 있으며, 클릭한 위치에는 아무것도 없습니다.
자주 묻는 질문
Mines에서 하우스 에지는 무엇입니까?
테이블 상단에서 1%이고 하단에서 최대 2.5%입니다. 모든 배수는 공정한 배당률을 소수점 둘째 자리까지 내린 후 0.99를 곱하고 다시 내린 값입니다. 플로어는 큰 배수에서는 거의 비용이 들지 않지만 작은 배수에서는 1포인트 이상입니다. 최악의 설정인 1개 광산에서 2회 픽(또는 2개 광산에서 1회)은 97.52%를 반환합니다.
계속 타일을 선택하면 하우스 에지가 증가합니까?
아니요. 각 단계는 전체 실행의 공정한 배당률에서 1%를 뺀 값으로 책정되므로, 현금화 위치에 관계없이 반환은 약 99%입니다. 더 깊이 진행할수록 약간 상승하는데, 이는 플로어가 더 큰 배수에서 덜 중요하기 때문입니다. 이는 각 추가 승리가 에지를 복합적으로 늘리는 RPS와 같은 스트릭 게임과는 다릅니다.
Mines에서 가장 안전한 타일은 어떤 것인가요?
없습니다. 광산은 첫 번째 클릭 전에 라운드의 시드 쌍에서 균등 셔플로 배치되므로 닫힌 모든 타일은 같은 확률로 광산을 숨기고 있습니다: 광산 ÷ 여전히 닫힌 타일. 모서리, 가장자리, 패턴은 아무것도 바꾸지 않습니다.
게임판을 클리어할 확률은 얼마인가요?
모든 안전한 타일이 열려있을 때 C(25 − m, k) ÷ C(25, k): 광산 1개일 때 1/25, 3개일 때 1/2,300 (×2,277), 5개일 때 1/53,130 (×52,598.70), 10개일 때 1/3,268,760. 각각은 정확히 99%의 공정한 가치를 지불하며, 라운드당 최대 이익을 초과하지 않습니다.
광산을 몇 개 선택해야 하나요?
광산 개수는 라운드의 형태를 바꾸지만 가격은 바꾸지 않습니다: 광산이 많을수록 더 적고 큰 단계가 있습니다. 배수가 작은 설정 — 광산이 적고 선택이 적음 — 2자리 내림으로 인한 손실이 가장 큽니다; ×2.20 이상을 지급하는 모든 단계는 98.5% 이상의 수익률을 반환합니다.
출처 및 참고자료
- Betkyo 엔진 소스, 하우스 서비스: OriginalMinesService.kt — start() (mineCount 1–24), createMineListPf() (부분 Fisher–Yates: 커서 i에서 i = nextIntBelow(25 − i)를 그리고 선택되지 않은 범위의 끝으로 스왑), betGameTicket() (배수 = ∏(25 − i) ÷ ∏(25 − mines − i) 2dp로 내림, × (1 − 하우스 엣지), 2dp로 내림; 광산에서 0; 완전 클리어 시 자동 종료); 클라이언트 미러 mines/minesApi.ts minesMultiplier()
- 이 글을 위해 작성한 정확한 계산: 엔진의 2개 내림 기능이 있는 모든 300개(광산 개수, 선택 개수) 설정을 정확한 유리수 연산으로; C(25 − m, k) ÷ C(25, k) 도달 확률; 현금화 지점별 수익률 및 엣지; 표 전체의 수익률 분포 (300개 중 171개가 99.0%로 반올림, 66개 정확히 99.00%, 32개 98.5% 미만, 최소 97.52%)