Questions tagged «code-challenge»

代码挑战赛是一种创造性的竞赛,可以用客观的获胜标准来解决编程难题,而其他得分标记(例如,代码高尔夫)则无法涵盖这些目标。

6
在Conway的《人生游戏》中制作俄罗斯方块的工作游戏
这是一个理论上的问题-在任何情况下都无法给出简单的答案,即使是琐碎的问题也无法解决。 在Conway的《生命游戏》中,存在诸如metapixel之类的结构,这些结构使“生命游戏”也可以模拟任何其他“生命游戏”规则系统。另外,众所周知,生命游戏是图灵完成的。 您的任务是使用Conway的生活游戏规则构建一个细胞自动机,该规则将允许您玩俄罗斯方块游戏。 您的程序将通过手动更改特定世代的自动机状态来表示中断(例如,向左或向右移动,放下,旋转或随机生成新的片段以放置到网格上),计数来接收输入特定数量的世代作为等待时间,并将结果显示在自动机上的某个位置。显示的结果必须明显类似于真实的俄罗斯方块网格。 您的程序将按以下顺序进行评分(较低的标准充当较高标准的决胜局): 边界框大小-面积最小且完全包含给定解的矩形框将获胜。 对输入的更改较小-需要手动调整的最少单元格(对于自动机中最坏的情况)会获胜。 最快的执行速度-最少的一代可以在模拟中获胜。 初始活细胞计数-较小的计数获胜。 先发布-早先发布。

1
在Conway的《人生游戏》中构建数字时钟
您的任务是构建一个代表数字时钟的生活游戏模拟,该模拟满足以下属性: 时钟显示在十进制小时和分钟(例如12:00,3:59,7:24)与对于每个1440分钟一天中的不同的状态-要么小时会从0到23或者从1到12与PM指示器。 该模式是周期性的,状态在没有任何外部交互的情况下循环。 分钟数会定期更新-从一分钟的更改到下一次更改需要相同的世代数。 匿名旁观者可以一眼看出该显示器应该是数字钟。特别是,这需要: 这些数字是可见的并且可以清楚地区分。您必须能够一目了然地确定显示的时间。 数字将更新到位。每个新数字都与前一个数字出现在相同的位置,并且数字的边界框几乎没有移动。(特别是,一个数字在不同的地方不会包含10个不同的数字,每次数字变化时,数字都会被发现。) 这些数字彼此相邻出现,它们之间没有过多的空格。 您的程序将按以下顺序得分(较低的标准充当较高标准的决胜局): 边界框大小-完全包含给定解的最小面积的矩形框将获胜。 执行速度最快-前进一分钟的最少几代人获胜。 初始活细胞计数-较小的计数获胜。 先发布-早先发布。

17
建立一个编译炸弹
介绍 您可能熟悉zip炸弹,XML炸弹等。简单来说,它们是(相对)小文件,当用纯软件解释时,它们会产生巨大的输出。这里的挑战是以同样的方式滥用编译器。 挑战 编写一些占用512个字节或更少字节的源代码,并将其编译成一个占用最大可能空间的文件。最大的输出文件胜出! 规则 好的,因此有一些重要的说明,定义和限制。 编译的输出必须是ELF文件,Windows Portable可执行文件(.exe)或JVM或.Net的CLR的虚拟字节码(如果需要,其他类型的虚拟字节码也可能没问题)。更新:Python的.pyc / .pyo输出也算在内。 如果不能将您的选择语言直接编译为这些格式之一,则也可以先进行编译再进行编译(更新:只要您从未使用同一语言多次,就可以多次进行编译)。 您的源代码可以包含多个文件,甚至可以包含资源文件,但是所有这些文件的总大小不能超过512个字节。 除了源文件和选择语言的标准库之外,您不能使用任何其他输入。如果支持静态链接标准库,则可以。具体来说,没有第三方库或OS库。 必须可以使用一个或多个命令来调用您的编译。如果在编译时需要特定的标志,则这些标志将计入您的字节数限制(例如,如果您的编译行是gcc bomb.c -o bomb -O3 -lm,则将计算-O3 -lm部分(7字节))(请注意,不计入初始前导空间)。 仅当预处理器是您语言的标准编译选项时,才允许使用预处理器。 环境取决于您,但是为了使此可验证性感兴趣,请坚持使用最新的(即可用的)编译器版本和操作系统(并明确指定要使用的版本)。 它必须编译时没有错误(警告是可以的),并且崩溃会使编译器不起作用。 您的程序实际执行的操作无关紧要,尽管它不可​​能是恶意的。它甚至不必启动。 例子1 C程序 main(){return 1;} Apple LLVM version 7.0.2 (clang-700.1.81)在OS X 10.11(64位)上编译: clang bomb.c -o bomb -pg 产生一个9228字节的文件。源的总大小为17 + 3(对于-pg)= 20字节,这很容易在大小限制内。 例子2 Brainfuck程序: ++++++[->++++++++++++<]>.----[--<+++>]<-.+++++++..+++.[--->+<]>-----.-- -[-<+++>]<.---[--->++++<]>-.+++.------.--------.-[---<+>]<.[--->+<]>-. 用awib转换为c: ./awib ...

8
上升还是下降?
给定山羊的图像,您的程序应该最好尝试识别山羊是否倒置。 例子 这些是输入可能是什么的示例。不是实际的投入 输入: 输出: Downgoat 规格 您的程序最多应为30,000个字节 输入将包含完整的山羊 图片将始终包含山羊 如果山羊倒立,输出Downgoat,否则Upgoat 输入将是您可以将图像作为输入(文件名,图像的base64等)。 要点文件名仅供参考,不要依赖于包含“ Upgoat”或“ Downgoat”的图像名称或其他元数据。 请不要硬编码。这很无聊,我无法完全执行它,但是我可以很好地询问。 测试用例 要点与图像。开头的图像downgoat具有Downgoat输出和图像开始与upgoat有Upgoat输出。 第二批测试用例 确保在所有测试用例上测试图像。这些图像是jpgs。图像大小确实有所不同,但没有说太多。 注意:在接受答案之前,可以添加一些测试用例,以避免使用硬编码的答案并检查程序的总体性能。 正确获得我的头像的奖励积分:P 计分 分数是可以通过以下方式计算的百分比: (number_correct / total) * 100

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 ...

30
我需要一个程序,用户输入一个双精度数组,并且程序输出该数组排序
注意:自从我第一次在此处发布问题以来,对该问题进行了严格的编辑。规则已移至此处,在发布任何答案之前请仔细阅读它们以了解其目的。这是在代码查询类别中创建的第一个问题。 想象一下,在Stack Overflow上一个懒惰的用户问这个问题: 我需要一个程序,用户输入一个双精度数组,该程序输出已排序的数组。您能给我密码吗? 您如何创建一段代码来欺骗该用户?创建一段代码,这些代码对于没有经验的程序员似乎很有用,但实际上却毫无用处。 获胜者是最upvoted答案,但如果答案是不知何故没有资格(资格要求,检查标签Wiki描述代码曳)。如果在接受之后在投票数上击败了先前获得最高投票的答案,则新的最佳答案会被接受,而前一个答案将不被接受。如果是平局,我会在平局中任意选择获胜者,或者再等等。 没有代码的答案不符合条件。他们可能很有趣并且获得了一些投票,但是他们不会被接受。 规则可在标签说明中找到。 注意:这是一个代码询问问题。请不要认真对待问题和/或答案。更多信息在这里。

30
以1kB的代码客观地绘制星夜
注意:安德斯·卡塞格(Anders Kaseorg)已被接受,以吸引人们注意他的出色答案,但挑战还没有结束!对于在不使用内置压缩的情况下获得最高分的任何人,该产品仍然提供400点奖励。 下图是386x320梵高《星夜》的png表示形式。 您的目标是以不超过1024字节的代码尽可能地重现此图像。出于此挑战的目的,图像的接近度通过RGB像素值的平方差来衡量,如下所述。 这是代码挑战。使用下面的验证脚本计算分数。最低分获胜。 您的代码必须遵守以下限制: 它必须是一个完整的程序 它必须以我的计算机上运行的以下验证脚本可以读取的格式输出图像。该脚本使用Python的PIL库,该库可以加载各种文件格式,包括png,jpg和bmp。 它必须是完全独立的,不输入任何文件,也不加载任何文件(允许导入的库除外) 如果您的语言或图书馆包含一个输出Starry Night的功能,则不允许您使用该功能。 它应该确定地运行,每次都产生相同的输出。 输出图像的尺寸必须为 386x320 为避免疑问:有效答案必须使用按照常规PPCG规则的编程语言。它必须是一个输出图像的程序,而不仅仅是图像文件。 某些提交本身可能是由代码生成的。如果是这种情况,请在您的答案中包括用于生成提交内容的代码,并说明其工作方式。以上限制仅适用于您提交的1kB图像生成程序;它们不适用于生成它的任何代码。 计分 要计算分数,请获取输出图像和上面的原始图像,并将RGB像素值转换为介于0到1之间的浮点数。像素的分数为 (orig_r-img_r)^2 +(orig_g-img_g)^2 + (orig_b-img_b)^2,即两个图像之间RGB空间中的平方距离。图像的分数是其像素分数的总和。 以下是执行此计算的Python脚本-如果有任何不一致或含糊之处,则最终分数是由在我的计算机上运行的该脚本计算出的分数。 请注意,分数是根据输出图像计算得出的,因此,如果使用有损格式会影响分数。 分数越低越好。原始“星夜”图像的分数为0。在天平上不太可能发生的平局中,票数最多的答案将决定获胜者。 奖金目标 因为答案是使用内置压缩的解决方案所主导,所以我为使用其他技术的答案授予了一系列赏金。下一个将获得400点奖励奖励,如果不使用内置压缩的答案在整体上排名。 先前获得的奖金奖励如下: nneonneo的答案获得了100分的赏金,因为它是当时得分最高,未使用内置压缩的答案。当时它的得分为4852.87分。值得一提的是2012rcampion,他勇敢地尝试使用基于Voronoi tesselation的方法击败nneonneo ,得分为5076分,而Sleafar的答案一直领先,直到接近尾声,他的得分为5052分,使用类似的方法Nneonneo。 Strawdog的入场奖励200点赏金。这是因为它是一种基于优化的策略,该策略在非内置压缩答案中处于领先地位,并持续了一周。它采用了令人印象深刻的巧妙方法,获得了4749.88分。 评分/验证脚本 以下Python脚本应与上图放置在相同的文件夹中(应命名ORIGINAL.png),并使用形式的命令运行python validate.py myImage.png。 from PIL import Image import sys orig = Image.open("ORIGINAL.png") img = Image.open(sys.argv[1]) if img.size ...

30
不使用数字,就可以获得最高的薪水。但是不要夸张!
当我申请某些职位广告中没有说明薪水的工作时,我想到一个特别邪恶的面试官,这将使候选人有可能通过“打高尔夫球”来决定自己的薪水! 因此,它就像这样: 在不使用数字的情况下,编写代码以输出您希望提供的年薪。 但是,能够编写简洁的代码是该公司的基石。因此,他们实施了非常严格的资历阶梯 编写b字节长的代码的雇主最多可赚取($ 1'000'000)· b -0.75。 我们正在查看(这些是整数部分,仅出于显示原因): 1 byte → $1'000'000 15 bytes → $131'199 2 bytes → $594'603 20 bytes → $105'737 3 bytes → $438'691 30 bytes → $78'011 4 bytes → $353'553 40 bytes → $62'871 10 bytes → $177'827 50 bytes → $53'182 挑战 ...

30
一个比其短(以字符为单位)的程序可以打印的最小正10基整数是多少?
我认为上述问题很明确,但以防万一: 编写一个完整的程序(不仅仅是一个函数),该程序将打印一个以10为基数的正整数,并可以选择后跟一个换行符。 合格程序将是输出比程序源代码长(以字节为单位)的程序,以字节为单位(假定程序源代码为ASCII或UTF-8编码)。 即,代码必须短于所得数字中的位数。 在任何情况下都不允许前导零。计算前导零使问题变得微不足道;忽略前导零将使这个问题变得不必要。 获胜的程序将是合格程序,该程序将打印出幅度最小的整数。 排行榜摘要 显示代码段 var QUESTION_ID = 67921; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function ...

30
你能数多少?
挑战: 您的任务是编写尽可能多的程序/函数/代码片段,其中每个输出/打印/返回一个整数。第一个程序必须输出integer 1,第二个程序2以此类推。 您不能在程序之间重复使用任何字符。因此,如果第一个程序是:x==x,则您可能不能再使用这些字符x,而不能=在其他任何程序中使用这些字符。注意:允许在一个程序中多次使用同一字符。 得分: 获胜者将是得分最高的作品。如果出现平局,则获胜者将是使用总数最少的字节的提交。 规则: 所有整数只能使用一种语言 片段是允许的! 为了公平起见,所有字符必须使用您选择的语言使用单个字节编码。 输出必须为十进制。您可能无法以科学计数法或其他替代格式输出它。只要小数点后面显示的所有数字均为,就可以输出浮点数0。因此,4.000被接受。只要未在输出中显示,就可以接受由于FPA导致的不正确之处。 ans =,开头和结尾的空格以及换行符等。 您可以忽略STDERR,只要将正确的输出返回到STDOUT 您可以选择将整数输出到STDERR,但前提是STDOUT为空。 禁止使用与符号无关的语言(例如Lenguage) 字母区分大小写a != A。 程序必须是独立的 空格不能重复使用 您必须在输出中使用ASCII数字 鼓励解释!

16
在常规网格之外的任何东西上实施生活游戏
康威的《人生游戏》(几乎)总是在规则的正方形网格上播放,但不一定如此。 编写一个程序,该程序在不是欧式正方形,三角形或六边形的规则平铺的欧几里德平面的二维平铺上实现Conway的《生命游戏》中的标准单元格相邻规则。 具体来说,您选择的平铺... 必须包含至少2个(但数量有限)形状不同的原生动物。 不同的形状可以彼此缩放或旋转。 他们必须能够平铺整个平面而不会留下孔。 它们必须是具有有限周长的简单多边形。(它们可能不是那么简单。) 必须与正方形,三角形和六边形网格同构不同。 不允许将任何细化为规则正方形,三角形或六边形网格的平铺。(您仍然可以在其他拼贴中使用正方形/三角形/六边形。) 任何两个原生动物之间的边界可能包含多个边和顶点,但必须连续。 您的平铺可能是周期性的,也可能是非周期性的,但是当扩展到覆盖整个平面时,每个prototile必须无限次出现。(因此,无需对切片的某些部分进行“硬编码”以帮助实现下面的额外要点。) 您的每个人工繁殖体都代表一个与其他细胞相邻的“生命游戏”细胞: 共享任何边或任何顶点的像元都被视为相邻像元。 共享多个边或顶点的像元仍仅在彼此相邻的邻居处计数一次。 细胞不能与自己相邻。 拼贴灵感链接: http://en.wikipedia.org/wiki/Tiling_by_regular_polygons http://en.wikipedia.org/wiki/List_of_uniform_tilings http://en.wikipedia.org/wiki/Aperiodic_tiling http://en.wikipedia.org/wiki/Penrose_tiling 输出量 您的程序应该输出其中包含正在玩的生命游戏的拼贴形式的图形表示,您当然应该以image / gif / jsfiddle格式发布。 请绘制瓷砖边缘线,对死细胞使用浅色,对活细胞使用深色。 计分 您的投稿分数是增票数减去减票数,以及在平铺中发现常见的“人生游戏”模式的加分: 寻找静物 -从一代到下一代都不会改变的模式。(+2) 查找周期2到29的振荡器。(每找到5个周期,每个周期+3,或者最多+15点) 查找周期为30或更长时间的振荡器。(+7) 找到一艘太空飞船 -它可以任意离开其起始位置而不会留下任何碎片。(它不一定是移动的振荡器。)(+10) 找到另一个以明显不同的方式移动的太空船(而不是第一个太空船的镜像版本),例如,请参见glider和LWSS。(+10) 寻找无限增长的模式。您不必证明增长是无限的,只需向我们显示足够的证据证明这种增长实际上是肯定的。(+25) 找到枪 -可以永久产生飞船的东西(这也算作无限增长)。(+50) 无限的生长模式必须以有限数量的活细胞开始,其他模式必须始终包含有限数量的活细胞(例如,太空船不应随时间而任意增大)。 由于非定期平铺的性质,似乎其中许多模式无法实现。因此,任何可验证的非定期平铺都会自动获得+40分。在非定期平铺中某个位置起作用的模式不必在其他位置起作用。 每个奖金只能应用一次。自然,我们需要查看输出以验证它们。最高分获胜。 笔记 每个答案只能将奖金应用于一个特定的拼贴。(尽管可以包括相关的拼贴图。) 人生游戏规则如下: 任何少于2个或超过3个活邻居的活细胞都将死亡。 任何具有3个活着邻居的死细胞都可以存活。 其他单元格不变。 不管边界条件如何,都可以使用加分点的模式,但否则,您可以选择所需的任何边界条件。 默认情况下,背景应为所有无效磁贴。 ...

30
可打印的最大数量
您的目标是编写一个打印数字的程序。数字越大,您将获得的积分越多。不过要小心!在评分功能中,代码长度既受限制,又受权重。您的打印数量将除以用于解决方案的字节数的立方。 因此,假设您打印10000000并且代码为100字节长。您的最终成绩将是10000000 / 100^3 = 10。 为了使这一挑战更加困难,还有其他规则要遵循。 您不能在代码中使用数字(0123456789); 您可以使用数学/物理/等。常量,但只有当他们都小于10(例如,你可以使用丕〜= 3.14,但你不能使用阿伏伽德罗常数 = 6e23) 允许递归,但是生成的数字必须是有限的(因此不接受无限数作为解决方案。您的程序需要正确地终止(假设无限制的时间和内存,并生成请求的输出)); 您不能使用运算*(乘),/(除),^(幂)或任何其他方式来表示它们(例如2 div 2,不允许); 如果需要,您的程序可以输出多个数字。只有最高的一个才算得分; 但是,您可以串联字符串:这意味着任何相邻数字序列都将被视为一个数字; 您的代码将按原样运行。这意味着最终用户不能编辑任何代码行,也不能输入数字或其他任何内容。 最大代码长度为100个字节。 排行榜 史蒂芬H.,Pyth ≈˚F φ(1,0,0)7(256 26)/ 1000000 [1] 简单地美丽的艺术,红宝石 ≈˚F φ 121(ω)(126) [1] 彼得·泰勒,GolfScript ≈˚F ε 0 +ω+ 1(17)/ 1000 [1] 水库,GolfScript ≈˚F ε 0(F ε 0(F ε 0(F ε 0(F ...

24
实验鼠竞赛:遗传算法练习
这是每两周挑战#3。主题:遗传算法 这个挑战有点实验。我们想看看我们可以用遗传算法做些什么。并非所有内容都是最佳的,但我们尽了最大努力使其变得可访问。如果能够解决问题,谁会知道我们将来会看到什么。也许是希尔的遗传之王? 规格很长!我们已尝试将规范分为基础知识-开始使用框架并提交答案所需的最低知识-和Gory Details-完整规范,以及有关控制器的所有详细信息,可以自己写。 如果您有任何疑问,请随时加入我们的聊天室! 您是行为心理学的研究者。今天是星期五晚上,您和您的同事决定找点乐子,并用您的实验用老鼠参加小老鼠赛跑。实际上,在我们对它们过于迷恋之前,我们称它们为标本。 您已经为标本设置了一个小小的赛道,并且为了使其更加有趣,您在赛道上放置了一些墙壁,陷阱和传送器。现在,您的标本仍然是老鼠……他们不知道什么是陷阱或传送器。他们所看到的只是一些颜色不同的东西。他们也没有任何记忆力-他们所能做的就是根据当前环境做出决定。我猜自然选择会从那些不知道如何避免陷阱的标本中挑选出来(这场比赛将需要一段时间...)。让游戏开始!† †84,465个样本在进行挑战时受到了伤害。 基础 这是一款单人游戏(您和您的同事不想混合人口,因此每个人都建立自己的赛车场)。赛道是一个矩形网格,高15格,宽50格。您从左边缘(其中x = 0)上随机(不一定不同)的15个样本开始。您的标本应尝试达到x≥49和0≤y≤14的任何单元的目标(标本可能会超出右侧的轨道)。每次发生这种情况,您都会得到一点。您也以1点开始游戏。您应该尝试在10,000转后最大化积分。 多个标本可能占据同一个细胞,并且不会相互作用。 在每个转弯处,每个标本都看到一个5x5的周围网格(自身位于中心)。该网格的每个单元包含一个颜色-1来15。-1表示超出范围的单元格。如果标本超出范围,则标本会死亡。至于其他颜色,它们代表空的单元,陷阱,墙壁和传送器。但是您的标本不知道哪种颜色代表什么,您也不知道。但是有一些限制: 8种颜色代表空单元格。 4种颜色代表一个传送器。传送器会将标本发送到其9x9邻域内的某个单元中。对于所有相同颜色的传送器,此偏移量将相同。 2种颜色代表墙壁。进入墙壁等同于静止不动。 2种颜色代表陷阱。甲陷阱表明一个的9个单元在其近邻的是致死的(不一定是陷阱细胞本身)。对于所有相同颜色的陷阱,此偏移量将相同。 现在,关于自然选择……每个标本都有一个基因组,即一个具有100位的数字。通过杂交两个现有的标本,然后稍微突变基因组,可以创建新的标本。标本越成功,复制的机会就越大。 因此,这是您的任务:您将编写一个函数,该函数接收标本所见颜色的5x5网格及其基因组作为输入。您的函数将返回样本的移动(Δx,Δy),其中Δx和Δy分别为之一{-1, 0, 1}。您不得在函数调用之间保留任何数据。这包括使用您自己的随机数生成器。您的函数将提供带种子的RNG,您可以随意使用它。 您提交的分数将是50条随机轨道上的点数的几何平均值。我们发现该分数存在一定差异。因此,这些分数将是初步的。一旦挑战消失,将宣布截止日期。在截止日期结束时,将随机选择100个委员会,所有提交的意见将在这100个委员会中重新评分。请随意在您的答案中加上预估的分数,但我们会为每份提交的作品评分,以确保没有人作弊。 我们提供了几种语言的控制器程序。目前,您可以使用Python(2或3),Ruby,C ++,C#或Java编写提交内容。控制器生成棋盘,运行游戏并为遗传算法提供框架。您所要做的就是提供移动功能。 等一下,那么我该如何处理基因组呢? 挑战在于弄清楚! 由于标本没有记忆,因此您在给定回合中所拥有的只是5x5的颜色网格,对您没有任何意义。因此,您必须使用基因组来达到目标​​。通常的想法是,您使用基因组的一部分来存储有关颜色或网格布局的信息,而您的机器人则根据存储在基因组中的其他信息来做出决定。 现在,您当然不能实际在此处手动存储任何内容。因此,在那里存储的实际信息最初将是完全随机的。但是遗传算法将很快选择那些基因组包含正确信息的标本,同时杀死那些信息错误的标本。您的目标是找到从基因组位和视野到移动的映射,这使您可以快速找到目标的路径,并且始终如一地发展为制胜法宝。 这应该是足够的信息,可以帮助您入门。如果需要,可以跳过下一部分,并从底部的控制器列表中选择您要选择的控制器(还包含有关如何使用该特定控制器的信息)。 继续阅读... 血腥细节 该规范已完成。所有控制器都必须执行这些规则。 除非另有说明,否则所有随机性均使用均匀分布。 轨道生成: 轨道是一个矩形网格,X = 53单元宽,Y = 15单元高。与细胞X≥49是目标细胞(其中,X是从零开始)。 每个单元格只有一种颜色,并且可能是致命的,也可能不是致命的 -除非由以下一种单元格类型指定,否则这些单元格不是致命的。 有16种不同的单元格颜色,从标记0为15,其含义将因游戏而异。另外,-1表示超出范围的细胞-这些是致命的。 选择8种随机颜色。这些将是空单元格(无效)。 再选择4种随机颜色。这些是传送器。对于其中两种颜色,请在9x9邻域中选择一个非零偏移量(从(-4,-4)到(4,4),除了(0,0)以外)。对于其他两种颜色,请反转这些偏移量。如果样本踩在传送器上,它将立即移动该偏移量。 再选择2种随机颜色。这些是陷阱。对于每种颜色,在3x3邻域中选择一个偏移量(从(-1,-1)到(1,1))。陷阱表示该偏移量处的单元格是致命的。注意:陷阱单元本身不一定具有致命性。 剩下的2种颜色是墙壁,阻碍运动。尝试移动到墙单元上将使移动变得静止。壁细胞本身具有致命性。 对于网格的每个非目标单元,选择一种随机颜色。为每个目标单元选择一个随机的空色。 对于轨道左边缘的每个像元,确定是否可以在100转内达到目标(根据下面的转弯顺序规则)。如果是这样,则此单元格是允许的起始单元格。如果起始单元少于10个,则丢弃轨道并生成一个新轨道。 创建15个样本,每个样本具有随机的基因组,年龄为0。将每个标本放在随机的起始细胞上。 ...

30
图灵完整性的最少(不同)字符
摘要: 对于任何给定的语言,要成为图灵完整的,最少的唯一字符数是多少? 挑战: 对于您选择的任何语言,请找到使您的语言成为图灵全集的最小字符子集。您可以根据需要多次重复使用字符集。 例子: JavaScript:+!()[](http://www.jsfuck.com) Brainfuck :(+<>[]假定包装单元的大小) Python 2 :(()+1cehrx由类似的脚本制作exec(chr(1+1+1)+chr(1))) 得分: 此挑战以字符而不是字节计分。例如,示例的分数是6、5和9。 笔记: 在您仅使您的语言成为图灵全集的意义上,此挑战与其他挑战有所区别(不一定能够使用该语言的所有功能。) 尽管可以,但请不要在不减少使用字符的情况下发布答案。示例:8个字符的Brainfuck(因为默认情况下,每个其他字符都是注释。) 您必须至少提供关于您的子集为何是图灵完成的简短说明。

30
源代码生态足迹
您刚被一家德国汽车制造公司录用。作为工程师,您的第一个任务是编写一个程序,该程序计算ASCII字符串的生态足迹。 角色的生态足迹计算如下: 用二进制写字符的ASCII码,并计算1的数量。 例如,A足迹为2,但O足迹为5则较脏。 字符串的全局足迹是其字符足迹的总和。空字符串的足迹为零。 您的程序必须接受ASCII字符串作为参数(通过命令行或输入),计算其生态足迹并输出。程序本身必须是ASCII编码的。 不过有一个小问题。由于您的公司希望以更严格的环境规则进入新市场,因此您需要调整程序,使其在“测试模式”下表现不同。从而: 程序在接收到字符串test作为参数时应输出0 。 计分 具有最小生态足迹的源代码获胜(是的,答案test是禁止的!)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.