前回のワイルドフィールズおじかキャンプで昴くんが持ってきたDobble(ドブル)というカードゲーム、1枚のカードに8種類の絵が描いてあり、全部で55枚、どの2枚のカードを選んでも共通する絵が1つだけ、という特徴を持っています。
基本的な遊び方は、2枚のカードを表向きにして相手より早く共通絵を見つけるというもの。
どの2枚のカードを選んでも共通する絵が1つだけ、ということは、万が一カードを失くしても相変わらず遊べる堅牢性(表現?)を持っています。
この性質を持ったカードの組を考えたとき、最初に思ったのは、フルコネクテッドなネットワークトポロジーなら行ける、でした。
しかし、この方法だと55枚のカードにはそれぞれ54種類の絵が描かれてしまいます(共通する絵がひとつだけなのは保証されてはいます)。
次第に全体のカード枚数を決めてから共通絵がひとつだけになるように対角線を引くという方法は無理だと思うようになったので、1枚のカードに描かれる絵の数に着目して、そのときの最大全体カード数を求めること考え始めました。
1枚のカードに2種類の絵が描かれる場合。
A,B,Cと言う絵があるとして、(B,C)、(A,C)、(A,B)の3枚が限界です。2種類の絵があるカード(C,D)を新たに加えようとしても、カード(A,B)と共通絵がひとつもなくなってしまうので加えることができません。
D列の数字は、絵があることを1、無いことを0とした2進数を10進数に置き換えたものでプログラム上での表現です。
1枚あたり2つ絵の場合、カード全体上限数は3枚で、これはフルコネクトのネットワークと同じ結果ですが、1枚あたり3つ絵になると事情が異なってきます。
1枚のカードに3種類の絵が描かれる場合。
多角形の対角線で理解したときは4枚が上限ですが、同じ絵が3回使われるので最早対角線での理解は不可能です。7枚が上限となります。この表のとおりに、好きな写真7枚を選んで1カードに3種類ずつ7枚印刷してオリジナルドブルを作ることもできます。
このように、1枚のカードにn種類の絵が描かれる(n kpc = kinds per card)の全体上限数Sは、S=n^2 - n + 1 (ただし n > 1)であらわされるようです。
4 kpc のとき、13枚。絵の種類も13種。
5 kpc のとき、21枚。絵の種類も21種。
実際の組み合わせを求めるためにプログラムを書きましたが、6 kpc 以上の場合、うまく組み合わせを見つけることができませんでした(5 kpc までは見つけられた)。他の人のブログを検索して、組み合わせの導出方法を書かれている方がいたので手動で解いてみました。予想はしていましたが群論系の数学がバックについていました。
6 kpc のとき、6^2-6+1=31枚。絵の種類も31種。
31ビットで表すことができる31個の数が、この組み合わせならどの2つのAND(論理積)を取っても1ビット共通になる。
具体例:電卓で14行目286263428と25行目84050192のANDを取ると16777216=2^24
8 kpc の場合は、8^2 - 8 + 1 = 57枚、絵の種類も57種になりますが、ドブルは何等かの理由で55枚57種です。
上手に絵の組み合わせを考えればあと2枚追加できるようになっていて、実際にその2枚を求めた方のブログも読みました。
全部は図示しませんが、この写真内の6枚中どの2枚を選んでも共通の絵が1つだけあります。
不思議で面白いカード、ドブルでした。