🪜 あみだくじ
「あみだくじを描画」をクリックすると、ツールは各プレイヤーに対して1本の垂直線を配置し、Math.random()を使用して固定された12行に水平な横棒をランダムに配置します。各横棒は常に隣接する2本の線を交換するだけで、同じ行に配置された2つの横棒が重ならないようにコードで明示的に制限されています。この仕組みにより、数学的にすべてのプレイヤーがそれぞれ1つの結果にマッチすることを保証しています。誰も重複することはありません。その後、名前をタップすると、キャンバスに同じあみだくじが再描画され、そのプレイヤーの経路が強調表示されるため、ステップバイステップで決定の流れを追跡できます。
あみだくじゲームは、JavaScriptのMath.random()を使用して横棒を配置し、HTML Canvas APIを使用して各プレイヤーの経路を描画・アニメーション化することで、ブラウザ内にランダムなあみだくじを生成します。
はじめからプライベート. このツールはすべてブラウザ内で動作します — 入力した内容はアップロードも保存もされず、オフラインでも使えます。
概要
この公平性の主張はマーケティングではありません。横棒の配置方法から直接導かれるものです。12行のそれぞれは、隣接する2本の線のペアをすべて通ってMath.random() < 0.45の確率で横棒を配置しますが、左隣の位置に横棒が既に配置されている場合はその位置をスキップします("!(i > 0 && row[i-1])")。この単純なチェックにより、どの行にも重複した交換が含まれることはありません。したがって、各行は独立した非重複交換の集合、つまり列の置換になります。12行を積み重ねることで、12つの置換を順次合成することになり、置換の合成は常に置換になります。そのため、2人のプレイヤーが同じ結果になることは、ランダムな出力がどうであれ、構造的に不可能です。
この保証は、結果がすべての可能なペアリングにどれだけ均等に広がるかについてはカバーしていません。このあみだくじは、プレイヤーの数に関係なく常に12行を使用します。このソースコードでは、プレイヤーの数に応じてスケーリングされるものではなく、固定された定数として扱われています。このツールが調整されている3〜10人のプレイヤーの範囲では、独立した45%の確率で12行の交換が十分に多く、シャッフル感を出せます。しかし、30人や50人などの名前を入力すると、12行では可能なペアリングのすべてに均等な確率で到達するには交換が足りず、プレイヤーが最初の列に近い位置に留まる可能性が高くなります。大規模なグループで公平なランダムなマッチングが必要な場合は、12行に限界のあるあみだくじよりも、均等なランダムな割当を行うツールの方が数学的に適切です。
Math.random()についても、明確に説明しておく必要があります。これはブラウザの組み込み擬似乱数生成器であり、洗い物を決めるなど、日常的な用途には十分ですが、通常はページの外側から参加者によって影響を与えることはできません。ただし、これは暗号的に安全ではありません。内部状態は、十分な出力を観測したり、エンジンのアルゴリズムを知っている場合、理論的には予測可能です。そのため、現金を伴う抽選や認可された宝くじ、法的なステークが関与するような場面では、crypto.getRandomValues()や監査済み・認証済みのRNGを使用します。このツールはそれらのいずれも使用しておらず、洗い物の割当やコーヒーを買う人を決めるなど、実際の賞金が関与しない用途には必要ありません。
操作面では、「あみだくじを描画」をクリックすると、すべての横棒の配置ルーチンが再実行されるため、各クリックは独立した描画で、前回の結果を覚えていません。一方、「すべて表示」は、1人ずつ名前をタップして表示するのではなく、同じあみだくじ上にすべてのプレイヤーと結果のペアリングを一度に表示します。このバージョンには、保存、エクスポート、共有のボタンは組み込まれていません。あみだくじはキャンバス要素上に描かれたピクセルだけが存在し、ページを再読み込みするとキャンバスと2つのテキストボックスがリセットされ、サンプル名と賞品に戻ります。結果の記録が必要な場合は、ページから離れてしまう前に、ブラウザまたはデバイスのネイティブスクリーンショットツールを使用する必要があります。ツールの他の機能は、広告通りに完全にクライアントサイドで動作し、ページが読み込まれた後はネットワークリクエストを一切行いません。したがって、入力した内容はアップロードされることはありません。インターネット接続がなくても動作します。
使い方
- プレイヤーの名前を「プレイヤー」ボックスに1行ずつ入力してください。サンプル名(アミー、ベン、カーラ、ダン)はフォーマットの例として表示されており、完全に置き換えることができます。
- 「結果」ボックスにそれぞれの結果を1行ずつ入力してください。プレイヤーのリストと結果のリストの行数が一致しない場合、ツールはあみだくじを描画できず、エラーを表示します。
- 「あみだくじを描画」をクリックすると、Math.random()の新しい呼び出しを実行し、キャンバス上に新しい横棒のセットを表示します。各クリックは独立した描画です。
- あみだくじの上にあるプレイヤーの名前チップをタップまたはクリックして、そのプレイヤーの経路をアクセントカラーで上から下までアニメーション表示し、下にマッチした結果を表示します。
- 代わりに「すべて表示」をクリックすると、1人ずつではなく、すべてのプレイヤーと結果のペアリングを一度に同じあみだくじ上に表示します。
よくある質問
- このあみだくじは本当にランダムで予測不能な乱数生成器を使用していますか?
- このツールはブラウザの組み込みMath.random()を使用しており、暗号的に安全なcrypto.getRandomValues()ではありません。これは、洗い物の割当やコーヒーを買う人を決めるなど、現金を伴わない用途には完全に問題ありません。ただし、Math.random()の内部状態は、十分な過去の出力を観測したり、エンジンのアルゴリズムを知っている場合、理論的には予測可能です。現金を伴う抽選や法的な価値を持つ賞品、または参加者が抽選を逆解析しようとするインセンティブがあるような状況では、このツールやMath.random()を基にしたあみだくじを使用しないでください。
- 結果のマッピングは本当に1対1ですか?2人のプレイヤーが同じ賞品になることはありますか?
- 1対1は構造的に保証されており、運に依存していません。各横棒は常に隣接する2本の線を交換するだけで、コードは同じ行に重複した横棒を配置することを明示的に拒否しています。これにより、あみだくじの各行は独立した非重複のシャッフルになり、12行のシャッフルを積み重ねることで、2つの開始線が同じ終点に到達することはありません。これは、ランダムな出力がどうであれ、数学的な全単射(bijection)になります。
- プレイヤーをたくさん追加した後でも、このあみだくじは公平ですか?
- これはこのツールの正直な限界です。このあみだくじは常に固定された12行を使用し、プレイヤーの数に関係ありません。このツールが設計されている3〜10人のプレイヤーの範囲では、12行の交換は十分に多く、公平なシャッフル感を出せます。しかし、30人や50人などの名前を入力すると、12行では可能なペアリングのすべてに均等な確率で到達するには交換が足りず、プレイヤーは真正な均等なシャッフルよりも、開始位置に近い位置に留まる傾向があります。大規模なグループでは、12行に限界のあるあみだくじよりも、均等なランダム割当を行うツールの方が適切です。
- 完成したあみだくじを保存または共有できますか?
- ツール自体を通じてはできません。このバージョンには、保存、ダウンロード、共有のボタンは組み込まれていません。あみだくじはページが開いている間、キャンバス要素上に描かれたピクセルだけが存在します。結果の証拠が必要な場合は(典型的な「スクリーンショットで議論を解決する」ケース)、ページを再読み込みする前に、ブラウザまたはデバイスのネイティブスクリーンショット機能を使用してください。ページを再読み込みすると、キャンバスと両方のテキストボックスがリセットされ、サンプルデータに戻ります。
- このツールは何かをアップロードしますか?インターネット接続なしでも動作しますか?
- アップロードはありません。インターネット接続なしでも動作します。横棒の配置、キャンバスの描画、経路のトレースはすべて、ブラウザのJavaScriptエンジン内でゼロのネットワークリクエストを伴って実行されます。したがって、ページが読み込まれた後、インターネット接続がなくてもツールは動作し続けます。入力した名前や結果は、あなたのデバイスから決して外に出ません。