<p>好吧,我已经读了很多,要点如下:</p>
<p>游戏可以理解为7阶的<a href="http://mathworld.wolfram.com/ProjectivePlane.html" rel="nofollow">finite projective plane</a>的物理表达式;57张牌和57个符号,每对牌共享一个符号,每对符号共享一张牌。由于不明原因,制造商决定任意丢弃两张卡片。在</p>
<p>(更一般地说,你可以*生成一个任意阶的有限射影平面N==p**N,其中p是一个质数,N是一个正整数;结果将有N**2+N+1个卡片,并且相同数量的符号,并且N+1个符号将出现在每张卡片上。)*<em>这是一个强烈的猜想,但只有在N<;=11时才得到明确的证明。</em></p>
<p>你要生成的是一个57*57的关联矩阵-哪些符号出现在哪些卡片上-它遵循以下规则:</p>
<ol>
<li>每行正好包含8个1</li>
<li>每列正好包含8个1</li>
<li>每对行正好有11个共同点</li>
<li>每对列正好有11个共同点。在</li>
</ol>
<p><strong>编辑:</strong></p>
<p>我写了一个算法,我计算了大概需要150天才能得到所需的结果——这比看上去要复杂得多;-)</p>
<p>然后我做了更多的搜索,发现<a href="http://www.sagemath.org/" rel="nofollow">SAGE math package</a>正好可以满足您的需要(而且速度更快):</p>
<pre><code>import sage
sol = sage.combinat.designs.block_design.projective_plane(7)
for row in sol.incidence_matrix().rows():
print(row)
</code></pre>
<p>产生一个解决方案需要半秒钟:</p>
^{pr2}$
<p>然后将其转换为您想要的纸牌游戏是非常直接的:</p>
<pre><code>symbols = sorted(
[
"pelikan", "palma", "rukavnik", "morskyKon", "mraznicka", "kormidlo",
"lehatko", "drink", "vedro", "Aloha", "koral", "nanuk", "opalovaciKrem",
"Splash!", "plutva", "morskaPanna", "meduza", "krab", "stopa", "Wipeout",
"pistol", "zralociaPlutva", "plachetnica", "raketa", "slnko", "sandala",
"melon", "harpuna", "stolicka", "zachranneKoleso", "lietajuciTanier", "ryba",
"hrad", "kalamar", "fotoaparat", "osuska", "naramok", "sarkan", "kotva",
"fakla", "kamene", "snehoveGule", "motyka", "kosatka", "plavky",
"odtlacokMusle", "klobuk", "ponorka", "morskyJez", "more", "musla",
"slnecnik", "potapacskeOkuliare", "slnecneOkuliare", "majak", "vlna", "lopta"
],
key = str.lower
)
cards = [
[symbol for symbol, use_it in zip(symbols, row) if use_it]
for row in sorted(sol.incidence_matrix().rows())
]
</code></pre>
<p>产生</p>
<pre><code>[
['Aloha', 'drink', 'fakla', 'fotoaparat', 'harpuna', 'hrad', 'kalamar', 'kamene'],
['Aloha', 'klobuk', 'koral', 'kormidlo', 'kosatka', 'kotva', 'krab', 'lehatko'],
['Aloha', 'lietajuciTanier', 'lopta', 'majak', 'meduza', 'melon', 'more', 'morskaPanna'],
['Aloha', 'morskyJez', 'morskyKon', 'motyka', 'mraznicka', 'musla', 'nanuk', 'naramok'],
['Aloha', 'odtlacokMusle', 'opalovaciKrem', 'osuska', 'palma', 'pelikan', 'pistol', 'plachetnica'],
['Aloha', 'plavky', 'plutva', 'ponorka', 'potapacskeOkuliare', 'raketa', 'rukavnik', 'ryba'],
['Aloha', 'sandala', 'sarkan', 'slnecneOkuliare', 'slnecnik', 'slnko', 'snehoveGule', 'Splash!'],
['Aloha', 'stolicka', 'stopa', 'vedro', 'vlna', 'Wipeout', 'zachranneKoleso', 'zralociaPlutva'],
['drink', 'klobuk', 'lietajuciTanier', 'morskyJez', 'odtlacokMusle', 'plavky', 'sandala', 'stolicka'],
['drink', 'koral', 'majak', 'mraznicka', 'pelikan', 'rukavnik', 'Splash!', 'zralociaPlutva'],
['drink', 'kormidlo', 'melon', 'naramok', 'opalovaciKrem', 'potapacskeOkuliare', 'snehoveGule', 'zachranneKoleso'],
['drink', 'kosatka', 'morskaPanna', 'motyka', 'pistol', 'plutva', 'slnko', 'vedro'],
['drink', 'kotva', 'lopta', 'nanuk', 'osuska', 'ryba', 'slnecnik', 'stopa'],
['drink', 'krab', 'meduza', 'morskyKon', 'plachetnica', 'raketa', 'slnecneOkuliare', 'Wipeout'],
['drink', 'lehatko', 'more', 'musla', 'palma', 'ponorka', 'sarkan', 'vlna'],
['fakla', 'klobuk', 'morskaPanna', 'nanuk', 'pelikan', 'potapacskeOkuliare', 'slnecneOkuliare', 'vlna'],
['fakla', 'koral', 'lopta', 'morskyKon', 'opalovaciKrem', 'plutva', 'sarkan', 'stolicka'],
['fakla', 'kormidlo', 'meduza', 'musla', 'pistol', 'ryba', 'sandala', 'zralociaPlutva'],
['fakla', 'kosatka', 'more', 'morskyJez', 'osuska', 'raketa', 'Splash!', 'zachranneKoleso'],
['fakla', 'kotva', 'lietajuciTanier', 'mraznicka', 'plachetnica', 'ponorka', 'snehoveGule', 'vedro'],
['fakla', 'krab', 'majak', 'naramok', 'palma', 'plavky', 'slnko', 'stopa'],
['fakla', 'lehatko', 'melon', 'motyka', 'odtlacokMusle', 'rukavnik', 'slnecnik', 'Wipeout'],
['fotoaparat', 'klobuk', 'more', 'mraznicka', 'opalovaciKrem', 'ryba', 'slnko', 'Wipeout'],
['fotoaparat', 'koral', 'lietajuciTanier', 'naramok', 'pistol', 'raketa', 'slnecnik', 'vlna'],
['fotoaparat', 'kormidlo', 'majak', 'motyka', 'osuska', 'ponorka', 'slnecneOkuliare', 'stolicka'],
['fotoaparat', 'kosatka', 'melon', 'nanuk', 'plachetnica', 'plavky', 'sarkan', 'zralociaPlutva'],
['fotoaparat', 'kotva', 'morskaPanna', 'morskyKon', 'palma', 'rukavnik', 'sandala', 'zachranneKoleso'],
['fotoaparat', 'krab', 'lopta', 'musla', 'odtlacokMusle', 'potapacskeOkuliare', 'Splash!', 'vedro'],
['fotoaparat', 'lehatko', 'meduza', 'morskyJez', 'pelikan', 'plutva', 'snehoveGule', 'stopa'],
['harpuna', 'klobuk', 'melon', 'morskyKon', 'pistol', 'ponorka', 'Splash!', 'stopa'],
['harpuna', 'koral', 'morskaPanna', 'musla', 'osuska', 'plavky', 'snehoveGule', 'Wipeout'],
['harpuna', 'kormidlo', 'lopta', 'morskyJez', 'plachetnica', 'rukavnik', 'slnko', 'vlna'],
['harpuna', 'kosatka', 'meduza', 'mraznicka', 'palma', 'potapacskeOkuliare', 'slnecnik', 'stolicka'],
['harpuna', 'kotva', 'more', 'naramok', 'odtlacokMusle', 'plutva', 'slnecneOkuliare', 'zralociaPlutva'],
['harpuna', 'krab', 'lietajuciTanier', 'motyka', 'pelikan', 'ryba', 'sarkan', 'zachranneKoleso'],
['harpuna', 'lehatko', 'majak', 'nanuk', 'opalovaciKrem', 'raketa', 'sandala', 'vedro'],
['hrad', 'klobuk', 'meduza', 'naramok', 'osuska', 'rukavnik', 'sarkan', 'vedro'],
['hrad', 'koral', 'more', 'motyka', 'plachetnica', 'potapacskeOkuliare', 'sandala', 'stopa'],
['hrad', 'kormidlo', 'lietajuciTanier', 'nanuk', 'palma', 'plutva', 'Splash!', 'Wipeout'],
['hrad', 'kosatka', 'majak', 'morskyKon', 'odtlacokMusle', 'ryba', 'snehoveGule', 'vlna'],
['hrad', 'kotva', 'melon', 'musla', 'pelikan', 'raketa', 'slnko', 'stolicka'],
['hrad', 'krab', 'morskaPanna', 'morskyJez', 'opalovaciKrem', 'ponorka', 'slnecnik', 'zralociaPlutva'],
['hrad', 'lehatko', 'lopta', 'mraznicka', 'pistol', 'plavky', 'slnecneOkuliare', 'zachranneKoleso'],
['kalamar', 'klobuk', 'majak', 'musla', 'plachetnica', 'plutva', 'slnecnik', 'zachranneKoleso'],
['kalamar', 'koral', 'melon', 'morskyJez', 'palma', 'ryba', 'slnecneOkuliare', 'vedro'],
['kalamar', 'kormidlo', 'morskaPanna', 'mraznicka', 'odtlacokMusle', 'raketa', 'sarkan', 'stopa'],
['kalamar', 'kosatka', 'lopta', 'naramok', 'pelikan', 'ponorka', 'sandala', 'Wipeout'],
['kalamar', 'kotva', 'meduza', 'motyka', 'opalovaciKrem', 'plavky', 'Splash!', 'vlna'],
['kalamar', 'krab', 'more', 'nanuk', 'pistol', 'rukavnik', 'snehoveGule', 'stolicka'],
['kalamar', 'lehatko', 'lietajuciTanier', 'morskyKon', 'osuska', 'potapacskeOkuliare', 'slnko', 'zralociaPlutva'],
['kamene', 'klobuk', 'lopta', 'motyka', 'palma', 'raketa', 'snehoveGule', 'zralociaPlutva'],
['kamene', 'koral', 'meduza', 'nanuk', 'odtlacokMusle', 'ponorka', 'slnko', 'zachranneKoleso'],
['kamene', 'kormidlo', 'more', 'morskyKon', 'pelikan', 'plavky', 'slnecnik', 'vedro'],
['kamene', 'kosatka', 'lietajuciTanier', 'musla', 'opalovaciKrem', 'rukavnik', 'slnecneOkuliare', 'stopa'],
['kamene', 'kotva', 'majak', 'morskyJez', 'pistol', 'potapacskeOkuliare', 'sarkan', 'Wipeout'],
['kamene', 'krab', 'melon', 'mraznicka', 'osuska', 'plutva', 'sandala', 'vlna'],
['kamene', 'lehatko', 'morskaPanna', 'naramok', 'plachetnica', 'ryba', 'Splash!', 'stolicka']
]
</code></pre>