Questions tagged «code-golf»

Code-golf是在最小的源代码字节中解决特定问题的竞赛。

6
迈克尔·克里顿的捕鼠器
1984年,迈克尔·克里顿(Michael Crichton)用BASIC编写了一个安全程序,该程序已发布在《创意计算》杂志上。该程序将要求用户键入自己选择的短语,记录击键之间的间隔,然后要求她重新键入该短语。如果时间差异太大,则程序会将用户识别为冒名顶替者。 您的任务:以您选择的语言创建Crichton程序的版本。 规则: 与用户通信的短语(“请输入关键词”,“请再次输入关键词”等)无论实际长度如何,均计为一个字节。这仅用于用户通信,请勿尝试在字符串中隐藏程序代码。 通过/失败测试应基于与原始间隔的百分比差异的平均绝对值。如果字符串不匹配,请自行决定返回失败还是允许用户重试。 关键字短语不应包含空字符串。如果关键字对于您的字符串数据类型太长,则可以自行决定是截断还是不允许重新开始。 测试的灵敏度(通过/失败测试的阈值)应在源代码中进行调整。 如果您的源代码可以格式化为可识别的类似于恐龙,那么我最初会提供总字节数的20%的奖励。已经指出,这是高度主观的,也许更适合于流行竞赛,所以我删除了此奖金。但是,我仍然衷心鼓励恐龙格式化,如果将代码格式化为看起来像恐龙,则可以从字节总数中扣除任何纯修饰性的注释,换行符或空格字符。 最短的字节数获胜,具体取决于字符串长度和恐龙格式调整。 请注意,我上面的说明与Crichton代码的操作不完全匹配,可以在网上找到其副本。请遵循规范,不要尝试克隆原始文件。
9 code-golf 

1
绘制Google搜索结果图
当您在Google上搜索内容时,它会在页面顶部附近方便地显示一条消息,例如About 53,000,000 results (0.22 seconds)。(数字随搜索内容而变化。) 在此挑战中,您将编写一个程序,当搜索给定搜索词组的所有非空前缀时,绘制一个对数 ASCII图,显示Google提供的结果数。 甲搜索短语被定义为小写字母数字字符的一个或多个字符串,从彼此用一个空格分开。在Regex中,搜索词组是(?:[a-z0-9]+ )*[a-z0-9]+。 所以im ok,r和1a 2全搜索短语,但是I'm OK,R,1a 2,和,都没有。 (由于Google很少考虑大小写或特殊符号,因此存在字符限制。在URL中转义非字母数字字符也很麻烦。) 规格 您的程序必须从stdin或命令行中输入一个搜索短语和一个正浮点数H。(您可以假设它们是有效的,如果您在搜索词中需要引号或其他内容,也可以。) 作为一个工作示例,我们假设搜索短语为,a car并且H = 0.75。 第1步: 收集搜索短语的非空前缀,并将其放在双引号中。引号确保将搜索确切的短语,避免任何“您的意思是……”重定向。 排除所有以a[space]。结尾的前缀。 Prefixes "a" "a c" "a ca" "a car" 第2步: 使用https://www.google.com完全搜索每个术语,并记下返回的结果数。 Search Term Message Results "a" About 6,950,000,000 results (0.27 seconds) 6950000000 "a c" About 861,000,000 results …

3
生成有效的斐波那契平铺
背景 斐波那契平铺是(1D)线的平铺,使用两段:短段S和长段L(它们的长宽比是黄金比例,但这与这项挑战无关)。要将使用这两个原生动物的拼贴实际上是斐波那契拼贴,必须满足以下条件: 拼贴中不得包含子序列SS。 平铺中不得包含子序列LLL。 如果通过执行以下所有替换操作组成新的平铺,则结果仍必须是斐波那契平铺: LL → S S → L L → (空字符串) 让我们看一些例子: SLLSLLSLLSLS 这看起来像是一个有效的平铺,因为它不包含两个* S *或三个* L * s,但让我们执行合成: LSLSLSLL 看起来仍然不错,但是如果我们再次进行组合,我们会得到 LLLS 这不是有效的斐波那契平铺。因此,前两个序列也不是有效的平铺。 另一方面,如果我们从 LSLLSLSLLSLSLL 并反复将其组合成较短的序列 LSLLSLLS LSLSL LL S 所有结果都是有效的斐波那契平铺,因为我们从未在这些字符串内的任何位置获得SS或LLL。 为了进一步阅读,有一篇论文将这种平铺作为与Penrose平铺的简单一维类比。 挑战 编写一个程序或函数,给定一个非负整数N,该程序或函数以包含N个字符(be S或L)的字符串形式返回所有有效的斐波那契平铺。 您可以通过函数参数STDIN或ARGV接受输入,然后返回或打印结果。 这是代码高尔夫球,最短的答案(以字节为单位)获胜。 例子 N Output 0 (an empty string) 1 S, L …

4
摩尔迭代
信息 数字1到9分别代表摩尔定居区中的一个单元,其中5为中心单元。所以: 123 456 789 1={-1,-1} 2={-1, 0} 3={-1, 1} 4={ 0,-1} 5={ 0, 0} 6={ 0, 1} 7={ 1,-1} 8={ 1, 0} 9={ 1, 1} 挑战 您可以通过STDIN,ARGV或函数参数获取输入,然后返回结果或将其打印到STDOUT。输入是一个N x N网格(环形拓扑,意味着如果x或y <1则x或y = N,如果x或y> N则x或y = 1),并且您的程序必须输出一个通过将每个单元格替换为其摩尔邻域单元格中的值来建立网格。 输入网格示例(2 x 2): 13 79 输出: 97 31 说明: 从位置1,1开始,我们拥有值1,因为值1 = {-1,-1}我们必须获取1 +(-1),1 +(-1)= …
9 code-golf 

7
按自定义字母排序
面临的挑战是要创建一个对单词列表进行排序的程序,只需要使单词按随机给定的字母顺序排列即可。 您的程序将接受一串用逗号分隔的单词和一个新字母。 您的程序将以新的排序顺序以相同的方式输出每个单词。 例: 输入: home,oval,cat,egg,network,green bcdfghijklmnpqrstvwxzaeiouy 输出: cat,green,home,network,egg,oval 这是一个 代码高尔夫球,因此获胜者是程序最短的人。 这是我的第一个挑战,因此对问题/挑战的任何改进表示赞赏。

15
不转换的字符串总和
您必须接受2个字符串输入并输出这两个字符串的总和,而无需将它们转换为int或使用任何数字数据类型。 例如 string one = "123"; string two = "456"; string sum = "579"; 假设字符串不能超过10位数字。 这是代码高尔夫,最短的答案是角色获胜。对C#中答案的编辑会使我微笑:)。 编辑:转换为int可以定义为这种性质的任何东西 Int.TryParse,(int),Convert.ToInt等

11
保加利亚纸牌
保加利亚纸牌是马丁·加德纳(Martin Gardner)在《科学美国人》的数学专栏中最受欢迎的单人游戏。 您有N相同的卡片,分成几堆。您从每堆纸牌中取出一张纸牌,并与移除的纸牌形成新纸堆。您重复此过程,直到达到已经看到的状态,因此继续操作将重复该循环。 例如,假设您有8几张纸牌,分成一堆5和一堆3。我们在写从大到小的顺序堆大小:5 3。这是游戏的文字记录: 5 3 4 2 2 3 3 1 1 4 2 2 首先,您从两堆纸叠中各取出一张卡片,留下堆4和2,以及新堆成的2给予4 2 2。下一步,将这些减小到3 1 1一堆新的3。最终,最后一步清空了已经出现的一堆堆大小1和产量4 2 2,因此我们停止了。 请注意,桩大小的总和保持不变。 您的目标是从给定的起始配置中打印游戏的副本。这是代码高尔夫,所以最少的字节获胜。 输入项 代表初始堆大小的降序正数列表。通过STDIN或功能输入进行输入。您可以使用所需的任何类似列表的结构。 您没有得到总卡数N作为输入。 输出量 打印保加利亚纸牌游戏所经历的桩号顺序。请注意,需要打印,不能返回。每个步骤应该是自己的一行。 每行应有一个正数序列,其降序为no 0。您可能有分隔符以及开始标记和结束标记(例如[3, 3, 1, 1])。这些数字可能有多个数字,因此应以某种方式将它们分开。 打印您看到的绒头大小的裂缝,直到达到并包括重复为止。因此,第一行应该是输入,最后一行应该是前一行的重复。不应有其他重复。 测试用例 >> [1] 1 1 >> [2] 2 1 1 2 >> [1, …
9 code-golf  game 

3
计数杆;数你的杆
一些背景 计数棒是小棒(3-14厘米长),许多亚洲文化的数学家使用该棒已有2000多年的历史了,它代表任何整数或分数。(尽管在本次挑战中,我们将重点放在无符号整数上)还有一个书面版本,称为标杆数字。 运作方式如下: (如果您在任何时候感到困惑,请查看每个数字的ascii表示形式以及我在底部提供的一些示例) 杆号是一个真实的位置数字系统,数字为1-9,空格为0。行数越多,数字越高。一旦超过5,则在顶部放置一条水平线,以将5加到下面的行数中。一条垂直线是1,两条垂直线2,五条垂直线是5,一条垂直线的顶部有一条水平线是6,四条垂直线的顶部有一条水平线是9(最高位数)。 垂直三位数: ||| ||| ||| ||| ||| 为了使读杆数字更容易,他们为每个交替的数字使用了不同的符号。第二种表示法互换了水平线和垂直线的作用。因此3用三条水平线表示,8用三条水平线表示,顶部有一条垂直线。 水平8位数字: | | __|__ _____ _____ 如前所述,知道使用哪种表示法很容易,这是交替使用的,孙子写道“一个是垂直的,十个是水平的”。所以最右边的数字是垂直的,我们从那里开始交替。 挑战 这些标尺用于表示负数和分数(如关于它们的Wikipedia文章中所述。出于此挑战的目的,我们仅关注正整数。目标很简单: 编写一个函数或完整程序,该函数或完整程序以任何方式将整数值作为输入,并将该整数的标尺数字表示形式打印到STDOUT(如果效果更好,也可以写入文件)。以字节为单位的最短代码获胜。 每个数字将由5x5的ASCII字符表示,并由5个空格的两个列分隔。您将使用的每个数字的确切表示形式如下: space between two digits (two colums): 0 digit, both vertical and horizontal (five columns): 1 digit, vertical: | | | | | 2 digit, vertical: | | …

3
ASCII艺术代码生成器
我有一个生成格式化的Brainfuck代码的程序。我运行我的程序 ./example "S" 和输出是 +[>+ < +++ ] >--. 在Brainfuck中打印S。 您的目标是编写一个程序,该程序接受字符串作为输入,并以另一种语言输出输出该字符串的源代码。 程序输出的源代码必须经过格式化,使其以ASCII艺术形式表示字符串(水平打印,而不是垂直打印)。 源代码不能包含字符串(但是,它可能包含字符串中出现的字母,只是不顺序出现) 除此以外, 有标准漏洞。 最短的代码胜出。 请使用所使用的语言,输出的语言以及总大小(以字节为单位)为提交的标题命名。输入字符串UNCOPYRIGHTABLE时,请包括程序的输出。 谢谢!

6
提供自Unix时间戳以来经过的时间的最短脚本
为克服这一挑战,您需要做的是编写最短的“ timeago”脚本,该脚本输出在给定的Unix时间戳与脚本运行时间之间的数十年,数年,数周,数天,数小时,数分钟和数秒的时间。 您必须以“最低的条款”给出时差,例如1 weeknot 7 days,9 yearsnot 0 decades 9 years。您还必须正确使用复数形式,例如,1 day不能1 days。 您的脚本必须精确到正负1秒以内(因此精确的第二个舍入方法并不重要)。 Time Equivalency Table 1 decade = 10 years 1 year = 31536000 seconds (not technically correct but close enough) 1 week = 7 days 1 day = 24 hours 1 hour = 60 minutes 1 minute …
9 code-golf  date 

4
森林小径
您之后灾难性乘坐独木舟,你结束了在湍急的河流最终掉下瀑布。您的独木舟爆炸了,但您成功度过了爆炸。但是,您的河流之旅完全偏离了地图-您现在发现自己迷失在森林之中。幸运的是,您仍然具有编程技能,因此决定将程序雕刻到树的一边,以帮助您找到穿过森林的道路。但是,树上没有太多的表面积,因此您必须使程序尽可能短。 森林可以用字符n的n(n > 5)平方来描述,该字符仅由小写字母组成a-z。一个示例森林: anehcienwlndm baneiryeivown bnabncmxlriru anhahirrnrauc riwuafuvocvnc riwnbaueibnxz hyirorairener ruwiiwuauawoe qnnvcizdaiehr iefyioeorauvi quoeuroenraib cuivoaisdfuae efoiebnxmcsua 您可能已经注意到,在这个森林中,a从左上角到右下角有一条斜线贯穿其中。这是穿过森林的“路径”,如果您跟随它,它将指引您到达某个地方。您的任务是编写一个程序,它将找到单数路径。我现在将更具体地描述在此挑战中什么代表“道路”。 在此挑战中,“路径”被定义为类似于可能用Bresenham算法生成的线,但具有以下附加要求: 该行必须至少6个字符长 行中的每个共线(完全相邻)字符组必须具有相同的长度。 它将从森林的一侧开始,到另一侧结束(详细说明请参见我的评论) 为了更清楚地解释第二个要求,请考虑以下内容: aaa aaa aaa aaa aaa 该行由字符的共线“段”组成,每个字符正好是三个字符长。它有资格作为一条路径。现在考虑这一行: a aa a aa a aa 该行由共线的“段”组成,它们并非完全相同长度的字符(其中一些长度为1个字符,而某些长度为2个)。因此,这条路径不符合条件。 给定森林图,您的程序将识别路径中使用的字符。输入是方便的任何内容(例如,命令行参数,STDIN prompt()等)。不能将其预先初始化为变量。输入的第一部分是一个单个整数,n代表森林的大小(森林总是一个正方形)。在那之后是一个空格,然后将整个森林作为单个字符串。例如,示例林将作为输入呈现,如下所示: 13 anehcienwlndmbaneiryeivownbnabncmxlriruanhahirrnraucriwuafuvocvncriwnbaueibnxzhyirorairenerruwiiwuauawoeqnnvcizdaiehriefyioeorauviquoeuroenraibcuivoaisdfuaeefoiebnxmcsua 输出为: a 因为路径是使用字母形成的a。森林中只有一条路。这是代码高尔夫,因此获胜的字符数最少。如有疑问,请在评论中提问。

4
调弦
任务 编写一个程序,确定调到给定频率并在给定位置按下的弦的音调,以及失调多少分。 为简单起见,假定产生的声音的频率与按下声音的右侧的弦长成反比。 注意:此任务仅涉及基音,而不涉及泛音/其他谐波。 输入项 您的程序获得了两条数据: 任意长度的字符串,表示所讨论的字符串。该字符串将用X标记,该字符串将被按下。 [-----] is a string divided in six sections (five divisions). [--X--] is a string pressed at the exact center of the string. [X----] is a string pressed at 1/6 the length of the string. (Length used is 5/6) [-X--] is a string pressed …

3
验证Loopy解决方案
这是生成Loopy拼图挑战的附加挑战。在尝试上一个链接中的较难挑战之前,您可能需要解决此挑战。 这项挑战的目的是验证一个循环难题的解决方案。请从上一链接中获取有关什么是难题的所有文档。解决的循环拼图的格式与对“生成循环拼图”挑战的有效提交的输出非常相似,其格式如下: +-+-+ +-+ +-+ + | | | |2|3| +-+ + + + + +-+ 2| | | |2| 3| + + +-+ + + +-+ 2| 2 1|3| | +-+ +-+ +-+ +-+ |2 | | 1 2| + +-+ +-+ +-+ + | |2 1 2|3|3| | …
9 code-golf 

3
计算一个立方体可以切成多少个立方体
想象一些立方体,我们可以将其切成较小的立方体,而没有剩余的碎片。 查找一个立方体可以切割多少个立方体。 例如,一个立方体可以切成8个,27个(显然是整数的3阶次幂)和20个(19个小立方体加一个其他立方体大小的八分之一,见图)。 在这里看到一些帮助:http : //mathworld.wolfram.com/CubeDissection.html 程序应将整数n(0 <= n <= 1 000)作为输入,并打印所有小于或等于的数字,n以便可以将一个立方体切成该数目的立方体。假设可以将多维数据集切成1个多维数据集,而不能切成0个多维数据集。 您只能使用大小不超过64位的整数数据类型(无数组,对象等)。最短的代码胜出。

6
排列编号
挑战 对于给定的n个整数集,编写一个程序,该程序将输出其字典索引。 规则 输入只能是由空格分隔的一组唯一的非负整数。 您应该输出排列的字典索引(范围从0到n!-1)。 不能使用置换库或内置置换。 您可能不会生成输入的排列集或排列的任何子集来帮助您找到索引。 您也不能将给定的排列递增或递减到下一个/上一个(按字典顺序)排列。 如果您找到某种无需使用阶乘就可以完成的奖励积分(-10字节)。 对于n = 100,运行时间应少于1分钟 字节数最短的代码获胜 优胜者选择星期二(2014年7月22日) 有关排列的更多信息 http://www.monkeyphysics.com/articles/read/26/numbering_permutations.html 排列组运算 http://lin-ear-th-inking.blogspot.com/2012/11/enumerating-permutations-using.html 例子 0 1 2 --> 0 0 2 1 --> 1 1 0 2 --> 2 1 2 0 --> 3 2 0 1 --> 4 2 1 0 --> 5 0 …

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.