23
写大约Moby Dick
这是一个1.2Mb ASCII文本文件,其中包含Herman Melville的Moby-Dick的文本;或者,鲸鱼。您的任务是编写一个程序或函数(或类等,请参见下文),每次给该文件一个字符,并且在每个步骤中都必须猜测下一个字符。 这是代码挑战。您的分数将是 2*L + E 这里L是您以字节为单位提交的大小,并且E是猜测错误的字符数。最低分获胜。 进一步的细节 您提交的内容将是一个程序或函数(等),将被多次调用或调用或发送数据。(1215235倍要准确。)在被要求的Ñ 第一次将给出Ñ 个的字符whale.txt或whale2.txt与它必须输出其猜测为(N + 1)个字符。E分数的组成部分将是它猜错的字符总数。 大多数提交将需要在两次调用之间存储一些状态,以便它们可以跟踪它们被调用了多少次以及以前的输入是什么。您可以通过使用static或全局变量写入外部文件,提交类而不是函数,使用状态monad或其他适用于您的语言的方法来做到这一点。您的提交必须包含在首次调用之前初始化其状态所需的任何代码。 您的程序应确定性地运行,以便在输入相同的情况下始终做出相同的猜测(因此始终获得相同的分数)。 您的答案不仅必须包括您提交的内容,还必须包括您用于计算E分数部分的代码。无需使用与提交内容相同的语言编写,也不会计入其字节数。鼓励您使其可读。 关于您的提交和此计分程序之间的接口,只要您的程序在接收下一个输入字节之前始终给出一个字节的输出,就可以了。(因此,例如,您不能仅将包含所有输入的字符串传递给它,而将包含所有输出的字符串传递回去。) 在提交条目之前,您必须实际运行测试程序并计算/验证分数。如果您提交的内容运行得太慢而无法验证其分数,则即使您知道其分数原则上也没有资格参加比赛。 L分数的组成部分将根据打高尔夫球挑战赛的常规规则进行计算。如果您提交的文件包含多个文件,请在这种情况下注意评分和目录结构的规则。您的代码使用的所有数据都必须包含在您的L分数中。 您可以导入现有库,但不能加载任何其他外部文件,并且您的代码可能无法访问whale.txt或whale2.txt以上述以外的任何方式归档文件。您可能不会加载任何预先训练的神经网络或其他统计数据源。(使用神经网络很好,但是您必须在提交的数据中包含权重数据,并将其计入字节数。)如果由于某种原因,您的语言或库包含提供Moby Dick的部分或全部文本的功能,您可能无法使用该功能。除此之外,您可以使用自己喜欢的任何其他内置或库功能,包括与文本处理,预测或压缩有关的功能,只要它们是您的语言或其标准库的一部分即可。对于更特殊的,包含统计数据源的常规例程,您必须自己实现它们并将它们包括在字节数中。 某些提交可能包含其本身由代码生成的组件。如果是这种情况,请在您的答案中包括用于生成它们的代码,并说明其工作原理。(只要不需要此代码即可运行您的提交,它就不会包含在您的字节数中。) 由于历史原因,该文件有两个版本,您可以在答案中使用其中两个版本。在whale2.txt(上面链接的)文本中没有换行,因此换行符仅出现在段落末尾。在原始whale.txt文本中,文本被包装为74个字符的宽度,因此您必须预测每行的结尾以及文本。这使挑战变得更加挑剔,因此whale2.txt建议新的答案。两个文件的大小相同,均为1215236字节。 总而言之,所有答案都应包括以下内容: 您的提交本身。(代码以及它使用的所有数据文件-如果它们很大,可以作为链接。) 有关代码工作方式的说明。请说明I / O方法以及它如何预测下一个字符。您对算法的解释很重要,好的解释将为我带来很多帮助。 您用来评估分数的代码。(如果与以前的答案相同,则可以链接到它。) 您用于生成提交内容的任何代码,以及对该代码的说明。这包括用于优化参数,生成数据文件等的代码。(这不计入字节数,但应包含在答案中。) 排行榜 显示代码段 var QUESTION_ID=152856,OVERRIDE_USER=21034;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var …