3
猜单词(又名Lingo)
这项挑战的目标是编写一个能够以尽可能少的尝试次数猜出一个单词的程序。它基于Lingo电视节目(http://en.wikipedia.org/wiki/Lingo_(US_game_show))的概念。 规则 给定单词长度作为其命令行上的第一个参数传递,播放器程序通过在其标准输出上写一个猜测,然后跟一个字符来进行五次猜测该词的尝试\n。 进行猜测之后,程序会在其标准输入上接收一个字符串,并在其后跟随一个\n字符。 该字符串与要猜测的单词具有相同的长度,并且由以下字符序列组成: X:表示要猜测的单词中不存在给定字母 ?:表示给定字母出现在要猜测的单词中,但在另一个位置 O:表示此位置的字母已正确猜到 例如,如果要猜测的单词是dents,并且程序发送该单词dozes,它将接收到,OXX?O因为d和s是正确的,e放错了位置o并且z不存在。 请注意,如果在猜测尝试中出现的字母次数比在猜测单词中出现的次数多,它将不会被标记为?和O在猜测单词中出现字母的次数以及次数要多。例如,如果要猜测的单词是cozies且程序发送tosses,则它将接收,XOXXOO因为只有一个s要定位。 单词是从英语单词列表中选择的。如果程序发送的单词不是正确长度的有效单词,则该尝试将被视为自动失败,并且仅X返回。 播放器程序应假定wordlist.txt当前工作目录中存在一个名为且每行包含一个单词的文件,并且可以根据需要读取。 猜测只能由字母小写字母([a-z])组成。 该程序不允许其他网络或文件操作。 当O返回仅包含字符串的字符串时,或者在程序尝试5次且无法猜出单词后,游戏结束。 计分 游戏得分由以下公式给出: score = 100 * (6 - number_of_attempts) 因此,如果在第一次尝试中正确猜出了该单词,则会得到500分。最后一次尝试可获得100分。 猜不出这个单词会得到零分。 坑 将通过尝试让播放器程序猜测每个单词长度(包括4和13个字符)在内的100个随机单词来评估播放器程序。 随机单词选择将事先完成,因此所有条目都必须猜测相同的单词。 获胜的程序和被接受的答案将是得分最高的程序。 程序将使用https://github.com/noirotm/lingo上的代码在Ubuntu虚拟机中运行。只要提供了编译和/或运行它们的合理说明,就可以接受任何语言的实现。 我在git储存库中提供了一些使用ruby的测试实现,可以从中获得启发。 该问题将定期用已发布答案的排名更新,以便挑战者可以改善他们的条目。 官方最终评估将于7月1日进行。 更新资料 现在,条目可以假定存在wordlistN.txt文件,以加快读取N的当前单词长度(包括4和13)的单词列表的速度。 例如,有一个wordlist4.txt文件包含所有四个字母词,并wordlist10.txt包含所有十个字母词,依此类推。 第一轮结果 在2014年7月1日,已提交了三个条目,结果如下: 4 5 6 7 8 9 10 11 12 13 Total …