シード付きクイズ選択肢シャッフル
選択肢をシード値で並べ替えると、毎回同じ順番になります。パリ、ロンドン、ベルリン、マドリードをシード値7で並べ替えるとベルリン、ロンドン、マドリード、パリになり、正解が最後に移ったことも分かります。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 選択肢
- Paris, London, Berlin, Madrid
- 正解のインデックス
- 0
- シード値
- 7
- 選択肢
- Berlin, London, Madrid, Paris
- 正解のインデックス
- 3
- 元の正解インデックス
- 0
- 選択肢の数
- 4
多肢選択式クイズでは、正解キーを失わずに選択肢の公平な並びが必要です。学習者が常に正解を先頭で見ると得点が不当に上がり、再現不能な乱数で並べ替えると再採点・A/B テスト・単一項目のデバッグができません。このシード付き多肢選択シャッフルは、選択肢・正解のインデックス・整数シードを受け取り、決定的に並べ替えた一覧と新しい正解インデックスを返します。同じ入力の三つ組は常に同じ順序になるため、試験用紙、LMS エクスポート、オフライン向けモバイルパックがビット単位で安定します。
シード付きシャッフルがクイズと評価で重要な理由
教室向け・製品向けクイズは、正解を先頭にする、あるいはカリキュラム順にするなど正規の順序で選択肢を執筆し、その後キーが漏れない提示順を必要とします。描画時の純粋なランダム並べ替えは再現性を壊します。同じ受験を開く二人の採点者が異なる位置を見、スクリーンショットがログと一致せず、サーバー再起動後に紙の印刷物を再生成できません。
学習者 ID のハッシュ、フォーム変種番号、試行カウンタ、固定の教室シードなど安定した整数でシャッフルをシードすれば、制御されたばらつきと、後から再計算できる固定の対応が得られます。事後の文字列照合でキーを再導出する必要はありません。誤ったキーインデックスはシャッフルしないことより悪いからです。
独立した順序が必要ならフォーム変種ごと、または学習者ごとにシードを使い、複数端末で同一冊子が必要なら同じシードを再利用してください。
シード付き選択肢シャッフルが価値を生む場面
学習管理システムはフォーム出力時にシード付きクイズ回答シャッフルを呼び出し、アイテムバンクを書き直さずにセクションごとに異なる選択肢順を得ます。試験公正ツールは座席ごとに錯乱肢の順序を回しつつ監査証跡を残します。シードと元のキーがあれば、監査者は提示順を再計算できます。
検証失敗は残高を消費しません。
活用例
LMS フォームの変種
各フォーム ID をシードにして同一アイテムバンクを複数の試験フォームに書き出し、選択肢順を変えつつ自動採点用に正解インデックスを追跡します。
学習者ごとの提示順
学習者 ID をシードにハッシュして選択肢を並べ替え、問題キーを変えずに各学習者が異なる順序を見るようにします。
よくある質問
選択肢は何個まで送れますか?
2 以上 50 以下です。2 未満は多肢選択集合ではなく、50 超は契約を有界に保つため拒否されます。
ランダムではなくシード値で並べ替えるのはなぜですか?
シード値を使った順番は後から再現できるためです。同じ答案を開いた採点者は同じ位置で選択肢を見られ、印刷した冊子も作り直せ、学生が見た順番を推測せずに確認できます。
学生ごとに違う順番にするにはどうしますか?
学生ごと、または試験の版ごとに別のシード値を使えば、それぞれ独自の順番になります。紙とすべての端末で同じ冊子が必要なときは、同じシード値を使い回してください。
正解がどこに移ったかはどう分かりますか?
並べ替えた一覧と一緒に正解の新しい位置が表示されるので、自動採点はそのまま使えます。例では、最初にあったパリが4つのうち最後の位置に移ります。
A、B、C、Dの記号も付けてくれますか?
いいえ。選択肢の文の順番を入れ替え、正解を追跡するだけです。選択肢の横に記号を表示する場合は、並べ替えたあとでご自身のレイアウトに付けてください。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/edu/multiple-choice-shuffle-seeded \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"choices":["Paris","London","Berlin","Madrid"],"correct_index":0,"seed":42}'const res = await fetch("https://api.kit.forhosting.com/edu/multiple-choice-shuffle-seeded", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"choices": [
"Paris",
"London",
"Berlin",
"Madrid"
],
"correct_index": 0,
"seed": 42
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/edu/multiple-choice-shuffle-seeded",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"choices": [
"Paris",
"London",
"Berlin",
"Madrid"
],
"correct_index": 0,
"seed": 42
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/edu/multiple-choice-shuffle-seeded", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"choices":["Paris","London","Berlin","Madrid"],"correct_index":0,"seed":42}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"choices":["Paris","London","Berlin","Madrid"],"correct_index":0,"seed":42}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/edu/multiple-choice-shuffle-seeded", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"choices": [
"Paris",
"London",
"Berlin",
"Madrid"
],
"correct_index": 0,
"seed": 42
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "edu.multiple_choice_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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
範囲外の正解インデックスは誤った選択肢を静かに指すのではなく invalid_input で失敗します。
シード付きシャッフルがクイズと評価で重要な理由
本エンドポイントは、ご指定のシードで初期化した mulberry32 生成器による Fisher–Yates を実装するため、順列は選択肢数・内容順・シード・元の正解インデックスによって完全に決まります。応答には並べ替え後の選択肢と並んで新しい correct_index が含まれ、これが自動採点器とプレイヤー UI に必要な契約です。元のインデックスが配列範囲外のとき、タスクは範囲を示す invalid_input で失敗します。空や単一選択肢のリストも拒否し、API が多肢選択項目とは何かを誠実に保ちます。
入力契約・応答形・エラー挙動
数値や真偽値の選択肢要素は文字列化し、オブジェクトと null は拒否します。UI に文字ラベルが必要なら A–D を自前で付けてください。本能力は文字列の並べ替えとキー追跡のみを行います。関心のある符号付き 32 ビット範囲にシードを保ってください。PRNG はシードを符号なし 32 ビット状態として使い、応答は提供された整数をそのまま返します。必須フィールド三つを含む JSON 本体を POST してください。choices は少なくとも 2、最大 50 の文字列配列です(別名 options と answers を受理)。correct_index は執筆順でどの項目が正解かを示すゼロ始まりの整数です(別名 answer_index)。seed は PRNG を初期化する有限整数です(別名 shuffle_seed)。correct_index が欠落・非整数・負・配列長以上のとき、ハンドラは範囲外メッセージ付きの invalid_input を投げ、これらの失敗は課金されません。成功時、本体は並べ替え後の配列としての choices、同じ回答文の新しい位置としての correct_index、入力インデックスをそのまま返す original_correct_index、送信した整数を返す seed、配列長に等しい choice_count を返します。例:choices が Paris, London, Berlin, Madrid で correct_index が 0、seed が 42 のとき、常に同じ順序と Paris の同じ新インデックスになります。
シード付き選択肢シャッフルが価値を生む場面
オフライン向けモバイルパックは公開時に順列を事前計算し、seed と correct_index を埋め込み、端末がライブの乱数 API を不要にします。実装は純粋な parse ティア A のため、成功した呼び出しは毎回公開の基本料金 $0.002 のみで、モデルトークンも外向きネットワークもありません。
連携の活用例
オフライン用クイズパック
公開時にシード付きシャッフルを事前計算し、choices と correct_index を配布してモバイルアプリが完全な監査可能性でオフライン採点できるようにします。
技術的な質問
シードで多肢選択の回答をどう並べ替えますか?
choices(文字列配列)、correct_index(ゼロ始まり)、seed(整数)を送ってください。API は並べ替え後の選択肢と、同じ回答の新しい correct_index を返します。
correct_index が範囲外の場合はどうなりますか?
タスクは invalid_input で失敗します。インデックスは 0 ≤ correct_index < choices.length を満たす必要があり、不正なキーは黙って再割当てされません。
シャッフルは決定的ですか?
はい。同じ choices・correct_index・seed は常に同じ順序と新しいインデックスを生成します。Math.random も時計も使いません。
シード付き選択肢シャッフルの料金は?
ブラウザツールは無料です。API リクエストは成功した呼び出しごとに前払い KIT 残高から $0.002 を使い、無効な入力は課金されません。