4
区別できない3つのサイコロ
3つのサイコロ(1〜6の整数値)をソートされた順に(区別できないように)与え、それらを同一の分布を持つ2つの公平なサイコロの合計に変換します。 3対1の答えは、6を法としてそれらすべてを合計することです。最終結果は、完全にフラットな分布であり、6つの数値のそれぞれが等しくなる可能性があります(単一のダイのように)。 6を法としてすべてを合計することにより、3対1でこれを行うのは簡単です。最終結果は完全にフラットな分布になり、6つの数字のそれぞれが(単一のダイのように)等しくなります。あなたの課題は、3対2で同じことをすることです。 standupmathのThe Three Indistinguishable Dice Puzzleに触発されました。フォローアップの「ソリューション」ビデオも投稿されましたが、何らかの形で「優雅さ」について議論するのは少し主観的です。文字のカウントはそうではありません。:D 説明書 3つのソートされた整数/桁1〜6 を受け入れ、単一の整数2〜12を出力または返すプログラムまたは関数を作成します。 222222 333333333333 444444444444444444 555555555555555555555555 666666666666666666666666666666 777777777777777777777777777777777777 888888888888888888888888888888 999999999999999999999999 AAAAAAAAAAAAAAAAAA BBBBBBBBBBBB CCCCCC (16進数を使用して単一の文字を保持しました。10進数の出力は問題ありません) サイコロは見分けがつかないので、サイコロに固有の順序はありません。したがって、ソートされた入力です。単純に「3番目を落とす」ことはできません。それは曖昧だからです。 詳細 スコアはプログラムのバイト単位の長さです プログラムは、なんらかの方法で呼び出される関数、またはstdinから読み取る実行可能なスクリプト、または任意の便利なものにすることができます。 別のソースからエントロピーを取得することによる「リローリング」なし 例(およびテスト) あらゆる種類の確率的テストを行うのではなく、3つのサイコロすべての216(6³)ケースをリッピングして、関数が必要な回数だけ各値を返すと断言するのは簡単です。同一のパラメーターで呼び出されます(例えば、ケース1, 2, 3と3, 2, 1、...は区別できないと推定され、(任意に)に変換されます1, 2, 3)。 回答の例(非常にブルートフォースで非効率的)とテストスイートをPythonで以下に示します。テストビットがあなたの選択した言語に移植するのに十分明確であることを願っていますが、stdin / stdoutを行うことは少し異なります。テストコードはテスト用であり、スコアは付けられません(ただし、言語またはI / Oメソッドの他のユーザーに提供する場合は便利です)。 # 6x6 lists of numbers with digits sorted LUT …