インディアンポーカーとは?
あなたはインディアンポーカーというゲームを知っていますか?インディアンポーカーでは、ディーラーが各プレイヤーに1枚ずつカードを裏向きに配ります。プレイヤーはそのカードを自分で確認することなく、額に見えるように掲げます。その時に、自分のカードの数が他の人のカードよりも大きいかどうかの駆け引きをする大変面白いゲームです。今回は、そんなインディアンポーカーに因んだ論理パズルをご紹介します。
実は額にカードを掲げる以外はほとんどインディアンポーカーと関係ないのは秘密です。
問題
ここに100人の参加者がいる。参加者はそれぞれ1枚ずつカードを配られ、参加者はそのカードを自分で確認することなく、額に見えるように掲げる。このとき、各参加者は自分のカードに書かれている内容を見ることはできないが、他の全ての参加者のカードを確認することが出来る。
それぞれカードには1~100までの整数が完全にランダムに書かれている。すべてのカードが100である可能性もあるし、すべてのカードにバラバラの数が書かれている可能性もある。
参加者は他の参加者のカードを確認したのち、全員同時に自分のカードの数を宣言する。そのうち、少なくとも1人が自分のカードの数を当てることが出来たなら、参加者全員の勝利となり、誰一人として自分のカードの数を当てることが出来なかったら、参加者全員の敗北となる。
参加者たちはゲームを始める前に事前に相談して戦略を決めることが出来る。ただし、ゲームが開始して他の参加者のカードを確認し自分のカードの数を宣言するまでの間は、一切話すことはできない。
このとき、参加者たちはどのような戦略をとることで確実に勝利することが出来るだろうか?
以上です。今回は自由記述なので解答欄はありません!自分の中でこれだ!と思う回答を考えてから、下の解答・解説から答え合わせをしてみてください。
ヒント
モジュロ演算を使用するとスマートに解けます。モジュロ演算というのは、高校数学の数Aで習うmodというやつです。ある数を100で割った余りに着目しましょう。
解答・解説を見る
事前の相談で、各参加者に1~100までの番号を振る。各参加者は、他の99人のカードの数を全て足した数と自分が宣言する数の和を100で割った余りが、自分に振られた番号になるように自分の数を宣言する。こうすることでどのような状況でも必ず一人だけ自分のカードの数を当てることが出来る。
少しわかりづらいので補足をします。例えば、自分に振られた番号が24だったとします。そして、自分以外の99人のカードの数の合計が500だったとすると、あなたが宣言するべき数xは、500+x ≡ 24 (mod 100) として表すことが出来ます。これを合同方程式と言います。これを解くと、x=24 となるので、あなたが宣言するべき数は24となります。これを100人全員がすればいいのです。
これだけ聞いても多くの人は良くわからないと思います。なので、この方法が成立する理由を解説します。この問題の肝は、100枚すべてのカードの数の和を100で割った余りは、必ず1~100のいずれかになるということです。つまり仮にその余りをNとすると、Nの番号を割り振られた人が自分の番号を当てることが出来るわけです。
なお、厳密性についての細かい話なので読み流していただいても構いませんが、本来ならば合同方程式の解は無数に存在します。それこそ、500+x ≡ 24 (mod 100) の解であれば x = 24 + 100k (kは任意の整数) として表すのが普通です、ですが、xの変域が1から100をとるという制限があると、必ずxの値は一意に定まります。そのため、各参加者の宣言するべき数が1つに確定します。なお、ここまで読んでいただいたあなたならきっとわかると思いますが、任意の自然数nについて、n人の参加者と、1~nまでの数をとるカードを用いて同様のゲームをしても同様の手順で解くことが出来ます。
コメント