我最近一直在玩Letterpress。
游戏的目的几乎是通过从板上的字母中拼出单词来获得尽可能多的蓝色瓷砖。当你玩你的单词时,组成单词的字母会变成蓝色,除非字母被红色瓷砖包围。
一个普通的凸版板看起来像这样:
我意识到棋盘上的字母必须按照某种规则生成,否则用一些棋盘玩游戏真的很难。我只能想到必须有多个元音的规则。我想知道是否还有其他规则。
此外,我想知道这是否类似于生成Boggle骰子。
我最近一直在玩Letterpress。
游戏的目的几乎是通过从板上的字母中拼出单词来获得尽可能多的蓝色瓷砖。当你玩你的单词时,组成单词的字母会变成蓝色,除非字母被红色瓷砖包围。
一个普通的凸版板看起来像这样:
我意识到棋盘上的字母必须按照某种规则生成,否则用一些棋盘玩游戏真的很难。我只能想到必须有多个元音的规则。我想知道是否还有其他规则。
此外,我想知道这是否类似于生成Boggle骰子。
我决定根据 user166390 的建议编写一个解决方案。您看到的频率是英语的,取自维基百科。运行该程序几次,只是观察结果,它们对我来说看起来很可玩。我一般至少能找到几个四个或五个字母的单词,而且我什至不太擅长游戏!无论如何,这是代码:
#!/usr/bin/env python
from random import random
from bisect import bisect_left
letters = [c for c in "abcdefghijklmnopqrstuvwxyz"]
frequencies = [8.167, 1.492, 2.782, 4.253, 12.702, 2.228, 2.015, 6.094, 6.966,
0.153, 0.772, 4.025, 2.406, 6.749, 7.507, 1.929, 0.095, 5.987,
6.327, 9.056, 2.758, 0.978, 2.360, 0.150, 1.974, 0.074]
cumulative_frequencies = [sum(frequencies[0:i+1]) for i in xrange(len(frequencies))]
for i in xrange(5):
line = ""
for j in xrange(5):
line += letters[bisect_left(cumulative_frequencies, random() * cumulative_frequencies[-1])] + " "
print line
这个想法是,对于要生成的每个字母,使用轮盘赌算法以与给定频率成比例的概率随机选择它。
我听说开发者 Loren Brichter 谈到了它,我有点记不清在哪里了。我想是在 Guy Ritchie 的 Debug 播客上,但我不确定。我记得几件事。
他保证至少有一定数量的元音。
辅音与元音分开生成。这意味着单独的字母分布。
他自己分析了游戏背后的字典,得出了字母分布。
如果选择 Q,则保证 I,因此 Q 总是可能出现单词。
我经常玩。我从来没有因为任何原因结束游戏,但所有字母都被使用了。我不知道是否可以保证每个字母总是可以使用一个单词,但即使没有强制执行,它似乎也确实是真的。