シード指定でトランプ52枚を再現可能にシャッフル
このシード指定シャッフルは、整数を標準トランプ52枚の厳密な並びへ変換します。同じシードを再度指定すると、常に同じ順序が得られます。そのため、シミュレーション、テスト用データ、授業の演習、再現可能なゲームを確認したり共有したりする場面に適しています。結果はランクとスートの短いコードで表され、全カードが1回ずつ含まれます。ネットワーク、現在時刻、隠れた乱数には依存しません。異なるシードでは通常、異なる順序になりますが、デッキの作成方法とシャッフル手順は常に同じです。
無料で実行
1つの整数から同じ並びを再現できます
<code>seed</code>フィールドに整数を入力してください。最初に、スペード、ハート、ダイヤ、クラブの順で、各スートをエースからキングまで並べた標準52枚のデッキを作成します。次に、シードから生成した疑似乱数列を使い、Fisher-Yates法でカードを入れ替えます。処理に使う値がすべて固定されているため、結果も固定されます。たとえばシード42は、別の日、別の環境、別のテスト実行でもまったく同じ応答になります。この再現性が本機能の中心的な目的です。開発者は52個の値を保存せずにシャッフル済みデッキをfixtureへ組み込めます。授業では全員に同じ問題を配布でき、ゲームでは開始時の配札を復元するためにシードだけを記録できます。応答にも元のシードが含まれるため、保存した結果の由来が明確です。安全に表現できるJSON整数だけを受け付け、小数、数値文字列、未指定値、無限大、JavaScriptで正確に扱えない整数は、丸めたり読み替えたりせずエラーにします。
返されたカード順の読み方
<code>deck</code>配列には、引く順番で52個の重複しない文字列が入ります。各文字列はランクと1文字のスートコードを連結したものです。ランクは<code>A</code>、<code>2</code>から<code>10</code>、<code>J</code>、<code>Q</code>、<code>K</code>です。スートはスペードが<code>S</code>、ハートが<code>H</code>、ダイヤが<code>D</code>、クラブが<code>C</code>です。したがって、<code>AS</code>はスペードのエース、<code>10D</code>はダイヤの10を表します。配列の最初の要素が山札の一番上で、その次が2枚目に引くカードです。本機能は手札を配らず、ジョーカーを追加せず、ポーカー役を判定せず、返却後の順序も変更しません。これらは呼び出し側のアプリケーションで決めてください。たとえば4人へ5枚ずつ配る場合は、選択した配り方に従って先頭20要素を使用します。単純で明示的な結果なので、特定のゲーム規則を押し付けず、完全な並びをコピー、比較、保存、シミュレーターへの入力に利用できます。
決定的シャッフルの適切な用途
決定的なシャッフルは再現性を得るためのもので、秘密を守るためのものではありません。シードとアルゴリズムを知る人はデッキ全体を復元できます。そのため、テスト、デモ、シミュレーション、公開シードを使うパズル、状態の秘匿より再実行を重視するゲームに適しています。賭け、賞品、セキュリティ判断、次のカードを予測できることが有利になる用途には使用しないでください。その場合は暗号学的に安全な乱数源を使用し、その状態を秘密に保つ必要があります。適切な用途ではデバッグが簡単になります。失敗したテストの報告にシードを含め、同じ配札をローカルで再現し、カードごとに動作を比較できます。また、連続するシードで一括実行すれば、大きなfixtureファイルをソース管理へ保存せずに、安定したシナリオ群を用意できます。実装はネットワーク、時計、変更可能なグローバル状態、<code>Math.random</code>、外部データを使いません。固定されたデッキ定義と上限のある51回の交換により、処理時間と結果を容易に監査できます。
活用例
ゲームの不具合を再現する
不具合報告にシードを保存し、配札処理や得点処理の調査時に同じ開始デッキを復元できます。
安定したテストデータを作る
ローカル実行と継続的インテグレーションで変化しない、現実的なシャッフル順を生成できます。
授業用シミュレーションを共有する
全員に同じシードを配布し、確率の演習を同一のデッキから開始できます。
よくある質問
1回の利用料金はいくらですか?
APIは1回$0.002です。同じ決定的シャッフルを、このページのブラウザー内では無料で実行できます。
同じシードなら常に同じデッキになりますか?
はい。デッキの作成、疑似乱数生成器、交換手順が固定されているため、有効なシードは同じ順序を再現します。
どのカードが含まれますか?
スペード、ハート、ダイヤ、クラブの標準52枚が含まれ、ジョーカーは含まれません。
シードが拒否されたのはなぜですか?
JSONで正確に表現できる安全な整数が必要です。小数、文字列、未指定値、大きすぎる整数は無効です。
賭けやセキュリティ用途に使えますか?
いいえ。意図的に再現可能であり、シードとアルゴリズムを知る人には予測できるためです。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/game/card-deck-shuffle-seeded \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"seed":42}'const res = await fetch("https://api.kit.forhosting.com/game/card-deck-shuffle-seeded", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"seed": 42
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/game/card-deck-shuffle-seeded",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"seed": 42
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/game/card-deck-shuffle-seeded", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"seed":42}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"seed":42}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/game/card-deck-shuffle-seeded", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"seed": 42
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "game.card_deck_shuffle_seeded",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |