编程拼图和代码高尔夫

编程益智爱好者和代码高尔夫球手的问答

21
Levenshtein距离
尽管有很多编辑距离问题,例如这一问题,但编写一个计算Levenshtein距离的程序并不是一个简单的问题。 一些博览会 两个字符串之间的Levenshtein编辑距离是将一个单词转换为另一个单词的最小可能插入,删除或替换次数。在这种情况下,每次插入,删除和替换的成本均为1。 例如,之间的距离roll,并rolling为3,因为缺失花费1,我们需要删除3个characterrs。toll和之间的距离tall为1,因为替换成本为1。 规则 输入将是两个字符串。您可以假设字符串是小写字母,仅包含字母,非空并且最大长度为100个字符。 如上定义,输出将是两个字符串的最小Levenshtein编辑距离。 您的代码必须是程序或函数。它不必是命名函数,但不能是直接计算Levenshtein距离的内置函数。允许使用其他内置插件。 这是代码高尔夫,所以最短的答案会获胜。 一些例子 >>> lev("atoll", "bowl") 3 >>> lev("tar", "tarp") 1 >>> lev("turing", "tarpit") 4 >>> lev("antidisestablishmentarianism", "bulb") 27 与往常一样,如果问题仍然不清楚,请告诉我。祝你好运,打高尔夫球! 目录 var QUESTION_ID=67474;var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";var COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk";var OVERRIDE_USER=47581;var answers=[],answers_hash,answer_ids,answer_page=1,more_answers=true,comment_page;function answersUrl(index){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(index,answers){return"http://api.stackexchange.com/2.2/answers/"+answers.join(';')+"/comments?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){answers.push.apply(answers,data.items);answers_hash=[];answer_ids=[];data.items.forEach(function(a){a.comments=[];var id=+a.share_link.match(/\d+/);answer_ids.push(id);answers_hash[id]=a});if(!data.has_more)more_answers=false;comment_page=1;getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){data.items.forEach(function(c){if(c.owner.user_id===OVERRIDE_USER)answers_hash[c.post_id].comments.push(c)});if(data.has_more)getComments();else if(more_answers)getAnswers();else process()}})}getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;var OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(a){return a.owner.display_name}function process(){var valid=[];answers.forEach(function(a){var body=a.body;a.comments.forEach(function(c){if(OVERRIDE_REG.test(c.body))body='<h1>'+c.body.replace(OVERRIDE_REG,'')+'</h1>'});var match=body.match(SCORE_REG);if(match)valid.push({user:getAuthorName(a),size:+match[2],language:match[1],link:a.share_link,});else console.log(body)});valid.sort(function(a,b){var …
40 code-golf  string 

30
最大公约数
您的任务是在尽可能少的代码字节中计算两个给定整数的最大公约数(GCD)。 您可以编写程序或函数,通过我们接受的任何标准方法(包括STDIN / STDOUT,函数参数/返回值,命令行参数等)获取输入并返回输出。 输入将是两个非负整数。您应该能够处理语言的默认整数类型支持的完整范围,也可以处理range [0,255],以较大者为准。您可以确保至少有一个输入为非零。 不允许使用用于计算GCD或LCM(最小公倍数)的内置函数。 适用标准代码高尔夫球规则。 测试用例 0 2 => 2 6 0 => 6 30 42 => 6 15 14 => 1 7 7 => 7 69 25 => 1 21 12 => 3 169 123 => 1 20 142 => 2 101 202 => 101

8
Ho浩时间单位
在弗诺·温格(Vernor Vinge)的出色且引人入胜的书《天空中的深处》 (顺便提一下,我强烈推荐1)中,跨越各种恒星系统的文化“ Ho何 ”没有“天”,“月”,“ ”等,因此具有独特的计时系统,可以完全以秒为单位测量时间。最常用的单位是Ksec(毫秒),Msec (兆秒)和Gsec(千兆秒)。这是我自己的书本中的一个方便的图表(由于无法在线查找): 您目前正乘坐Pham Nuwen飞机飞行,并且刚刚收到来自一个陌生的未知行星“ 地球 ” 的消息。2它们使用的时间单位与您使用的时间单位不同,并且您的计算机无法识别它们的时间单位。作为船舶的常驻程序员-考古学家,您的工作是打补丁时间处理代码,以便它可以识别地球的时间单位。 自然,由于您只剩下了几Ksec的时间才进入冷睡眠状态,因此您希望使代码尽可能短,以便可以快速编写。幸运的是,作为星际贸易文化,Qeng Ho可以使用每一种发明的编程语言。 输入项 输入将是一个包含一个或多个用空格分隔的组件的单个字符串 。甲组件被定义为一个整数> 0且≤255,然后一空间,然后之一second,minute,hour,day,week,month, year,decade,或century,可能有多个(具有添加的s,或者 centuries在过去的情况下)。 以下是一些有效的示例输入: 10 days 12 hours 1 year 184 centuries 1 second 9 weeks 6 days 2 hours 1 minute 20 seconds 您可以对输入假设以下内容: 复数单位将始终与相关数量一致。 如果输入中包含多个分量,则它们将始终按长度降序排列。 对于此挑战,以下是各种输入单位的含义: unit relative absolute --------------------------------------- second …
40 code-golf 

24
将文本居中!
将文本居中! 在此挑战中,您将以各种线条为中心。 例子 Foo barbaz Foo barbaz Hello World Hello World Programming Puzzles & Code Golf Programming Puzzles & Code Golf 技术指标 每个输入行将始终至少包含一个非空白字符,您可以假设唯一的空白字符是空格()和换行符。每个输入行都没有尾随和/或前导空格(换行符除外)。尾随在输出空白是不是允许。 您应该在输入中最长的线中间居中。如果该行的长度相等,则您的程序/功能应偏向左侧居中。最大行长是您的语言可以处理的,但您的程序应在至少500条长度的行上运行。 排行榜 这是一个堆栈片段,用于按语言生成常规排行榜和获胜者概述。 为确保您的答案显示出来,请使用以下Markdown模板以标题开头。 # Language Name, N bytes N您提交的文件大小在哪里。如果您提高了分数,则可以通过打败旧分数来保持标题。例如: # Ruby, <s>104</s> <s>101</s> 96 bytes 如果要在标头中包含多个数字(例如,因为您的分数是两个文件的总和,或者您想单独列出解释器标志罚分),请确保实际分数是标头中的最后一个数字: # Perl, 43 + 2 (-p flag) = 45 bytes …

30
提前祝您2016年新年快乐!
您的输入将是1970年至2090年(含)之间的整数,代表一年。您的程序应输出与输入年份相同的第二天,即下一年的“元旦”。 测试用例: 以下是示例输入和输出 2001 => 2007 2047 => 2058 2014 => 2020 1970 => 1976 1971 => 1982 1977 => 1983 2006 => 2012 20%红利:输出元旦星期几 2001 => 2007 (Mon) 2047 => 2058 (Tue) 2014 => 2020 (Wed) 1970 => 1976 (Thu) 1971 => 1982 (Fri) 1977 => 1983 (Sat) 2006 …

30
用位和字节编程
在这个挑战中,您将为我编写的一种简单语言编写一个解释器。该语言基于单个累加器A,该累加器A的长度恰好是一个字节。在程序的开头,A =0。这些是语言说明: !:反转 该指令仅将累加器的每一位取反。每个零变为1,每个零变为0。简单! >:右移 该指令将A中的每一位右移一位。最左边的位变为零,最右边的位被丢弃。 <:左移 该指令将A中的每一位向左移一位。最右边的位变为零,最左边的位被丢弃。 @:交换Nybbles 该指令将A的高四位与低四位交换。例如,如果A是01101010并且您执行@,则A将是10100110: ____________________ | | 0110 1010 1010 0110 |_______| 这就是所有指示!简单吧? 规则 您的程序必须在开始时接受一次输入。这将是一行代码。这不是交互式解释器!您只能接受一次输入,而不必在执行该行后循环回到起始位置。 您的程序必须评估所述输入。上面没有提到的每个字符都将被忽略。 然后,您的程序应以十进制打印出累加器的最终值。 适用有效编程语言的常规规则。 不允许出现标准漏洞。 这是代码高尔夫球,最小字节数获胜。 这里有一些小程序可以测试您提交的内容。箭头之前是代码,之后是预期结果: ! -> 255 !>> -> 63 !<@ -> 239 !nop!&6*! -> 255 请享用!

23
甜甜圈中的圣孔,蝙蝠侠!
有些角色比其他角色更圣洁。尽可能少使用邪恶的字母,显示上面的语句。 挑战 编写完整的程序以打印Holy Hole In A Donut, Batman!到STDOUT或最接近的替代品。如果您可以压缩输入以降低得分,请疯狂:) 输入项 没有 输出量 Holy Hole In A Donut, Batman! 规则 这是一个代码挑战,最低分获胜 可以从文件中读取所需的输出,但随后应将其计入总数。 尾随换行符在输出中很好 标准漏洞和条款和条件适用 计分 您的分数是字节数,加上一些修饰符: 使用神圣人物0469abdegopqrADOPQR@#每个计为2分 使用额外的神圣角色得8B%$&1分(不罚分) 使用邪恶的角色会12357cfhijklmnstuvwxyzCEFGHIJKLMNSTUVWXYZ!"^*()[]{}-=_+|\/?,.<>:;'~受到较重的惩罚,每个角色会被计为10点。 空格,制表符和换行符为1点(不罚)。 未列出的任何其他字符均为10分。 *在我的键盘上,键“ $”和“&”非常神圣。如果字体变化导致字符变得邪恶,请参考上面的列表 未修改的字符串Holy Hole In A Donut, Batman!得分172 Ruby:puts "Holy Hole In A Donut, Batman!"得分225 分数检查器 @DeadChex友好地汇总了得分脚本 请让我知道是否需要澄清任何事情。如有必要,我将更新字符列表-此时,我仅包括明显的键。尽管这个想法很简单-字符上的空洞还是不错的。

8
9个字节中的40个数字
有40点的方式定向汉弥尔顿路径可以设置在3×3的网格: 该图形(感谢SP3000! )仅示出了20条无向路径。在两个方向上遍历每条彩色线,以获得40条有向路径。 挑战 仅使用可打印的ASCII,编写一个3×3的字符网格,例如: ABC DEF GHI 当从该网格中读取40个有向路径中的每一个作为40个单行9个字符的程序时,目标是使每个程序输出从1到40的唯一整数。对所有 40条路径执行此操作似乎很困难,而且不太可能,因此,您只需要使它适用于尽可能多的路径即可。 提交者的40个路径程序输出的数字从1到40最为不同。Tiebreaker转到了较早的提交。 错误或不输出从1到40的整数或输出已经覆盖的另一个路径程序的整数的路径程序不计算在内。特别: 在编译,运行或退出时发生错误的程序不计在内。警告可以。 不输出的整数从1到40或输出什么程序略微畸形如-35或35 36不计数。 需要用户输入才能产生输出的程序不计算在内。 永不结束的程序不计算在内。 从现在开始,不算确定性的程序就不算在内。 否则,将不输出已经输出另一个有效程序的从1到40的整数的有效程序。(第一程序被计数。) 只有输出整数表示形式(从1到40(含))的程序才计入总数。这些数字应采用通常的1,,2... 39,40格式,除非这不是您所用语言的规范。(输出中的尾随换行符就可以了。) 程序输出的数字和它们的顺序无关紧要。只有有效程序中不同整数的数量才重要。 所有路径程序必须以相同的语言运行。但是,“程序”实际上可以是打印或返回其目标整数的函数(没有必需的参数)或REPL命令以及完整程序。您可以在函数,REPL命令和完整程序之间混合使用。 您的9个可打印ASCII字符不需要区分。 例 如果您的3×3网格是 ABC DEF GHI 您的40个程序和输出看起来像这样 ABCFEDGHI -> 26 ABCFIHEDG -> 90 ABCFIHGDE -> 2 ABEDGHIFC -> syntax error ADEBCFIHG -> prints 40 but then errors …

30
打印所有2个字母的拼字游戏单词
挑战: 使用尽可能少的字节打印Scrabble中可接受的每个2个字母的单词。我在这里创建了一个文本文件列表。另请参见下文。有101个单词。没有任何一个词以C或V开头。即使是非最佳的解决方案,也鼓励采用创造性的解决方案。 AA AB AD ... ZA 规则: 必须以某种方式分隔输出的单词。 大小写无关紧要,但应保持一致。 允许使用尾随空格和换行符。不得输出其他字符。 该程序不应接受任何输入。不能使用外部资源(词典)。 没有标准漏洞。 单词表: AA AB AD AE AG AH AI AL AM AN AR AS AT AW AX AY BA BE BI BO BY DE DO ED EF EH EL EM EN ER ES ET EX FA FE GO …

12
我们沉没还是游泳?
问题 甲最坏的情况是由三个数字在一行中描述,n,m,和p。在该行之后是每行n具有m值的行。每个值代表每个单元格可以容纳的总水量。 以下几p行描述了接下来p几天的天气。每天有1单位降雨落在一个单元格上。如果一个单元格中的水量超过了它可以容纳的数量,该单元格就会泛洪。如果多个相邻单元格已满,则将它们视为共享公共邻居的一个单元格(单击一组空白时请考虑Minesweeper)。 一个中间单元有4个邻居 两个相邻的满容量中间电池被视为一个具有6个相邻电池的电池 一个角单元有2个邻居 一个壁单元有3个邻居 单元泛洪时,会发生泛洪事件。所有多余的水平均分配给其邻居。如果那导致一个或多个邻居泛洪,则发生另一泛洪事件。这种情况一直持续到水已经沉淀或城市完全被洪水淹没为止。 输入示例 7 5 3 3 2 3 4 5 2 2 0 3 4 1 1 2 3 3 4 1 2 2 2 4 1 1 2 2 4 4 1 2 2 4 4 2 2 2 0 0 1 …
40 code-golf 

22
检查点是否位于三角形内
您的目标是确定给定的2D点X是否位于具有给定顶点A,B,C的三角形区域内。 编写一个函数,该函数接受测试点X和三个三角形顶点的坐标(因此总共有8个坐标),如果该点位于该三角形内部,则返回True,如果位于该三角形外部,则返回False。 不用担心边缘情况。如果该点位于三角形(边或顶点)的边界上,或者该三角形实际上是线段,则您的代码可以执行任何操作,包括崩溃。也不必担心数值稳定性或浮点精度。 您的代码必须是一个命名函数。代码段将不被接受。 最少的角色获胜。 输入: 八个实数代表坐标。这些数字将在范围内(-1,1)。 确切的输入格式是灵活的。例如,您可以输入八个数字,一个八个数字的列表,一个由元组给定的四个点的列表,一个2 * 4矩阵,四个复数,两个x坐标和y坐标列表,等等。 输入只需要是某个容器中的数字即可,没有其他数据。您无法使用输入进行任何预处理,也可能不需要对输入进行任何约束,例如要求以y坐标递增来指定点。您的输入必须允许任何八个坐标(尽管您的代码在前面提到的极端情况下可以任意运行)。 请说明您的输入格式。 输出: 相应的布尔值True/ False,相应的数字1/ 0或您语言中的类似物。 测试用例 为输入提供了[X,A,B,C]四个元组的列表,首先是测试点,然后是三个三角形顶点。我将它们分为应该输出True和应该输出的那些False。 True 实例: [(-0.31961, -0.12646), (0.38478, 0.37419), (-0.30613, -0.59754), (-0.85548, 0.6633)] [(-0.87427, -0.00831), (0.78829, 0.60409), (-0.90904, -0.13856), (-0.80685, 0.48468)] [(0.28997, -0.03668), (-0.28362, 0.42831), (0.39332, -0.07474), (-0.48694, -0.10497)] [(-0.07783, 0.04415), (-0.34355, -0.07161), (0.59105, -0.93145), …

30
反转正整数的最有创意的方法
提供的输入为无符号整数: 13457 您的函数/子例程应返回: 75431 由于这是一次人气竞赛,因此要有创造力。创新的解决方案使用不寻常或巧妙的技术来完成给定的任务。 限制条件: 您不能使用数组。 您不能使用字符串。 无RTL替代(&#8238) 布朗尼点使用创造性算术。 由于这是一场人气竞赛,因此建议不要%在代码中使用modulo()运算符。 关于前导零: 如果输入是: 12340 然后输出: 4321 是可以接受的。

30
我的名字是什么?间接产生语言的名称
仅使用语言本身的功能仅产生编程语言的名称。语言名称只能间接调用,即从非自定义环境变量,内置函数或方法或语言的解释器/编译器调用。输出应仅是语言的名称。 一个例子是: $ awk --v | awk 'NR<2 { print $2}' # GNU Awk 3.1.8 Awk 我选择的答案将是得票最多的答案。如果是平局,则最短的高尔夫球版本(单独给出或仅给出给定的答案)将成为平局。

30
随机密码生成器
域服务器要求所有员工都具有严格的随机密码,并遵守以下规则: 恰好15个字符。 只能由键盘输入的字符(如下面的代码类型所示)。禁止教销售人员使用ALT + NUMPAD代码。 至少1个小写字母: abcdefghijklmnopqrstuvwxyz 至少1个大写字母: ABCDEFGHIJKLMNOPQRSTUVWXYZ 至少1个数字: 0123456789 至少1个符号: `~!@#$%^&*()_+-={}|[]\:";'<>?,./ 为此,IT已委托并将将“随机密码生成器”分发给所有员工。所有员工都必须使用随机密码生成器。除了上述密码限制之外,Random Password Generator的要求还包括: 它必须能够生成所有允许字符的所有排列。 它必须在屏幕上显示生成的密码。 要求代码尽可能小(以字节为单位)。 请在下周内提交您建议的解决方案。
40 code-golf  random 

30
加而不加(或4个基本算术运算符中的任何一个)
问题: 您的目标是不使用以下任何数学运算符就添加两个输入数字:+,-,*,/。 此外,您不能使用旨在取代这些数学运算符的任何内置函数。 得分: 最小的代码(以字节数为单位)获胜。 更新资料 我见过的大多数程序都将包含它们的数字的两个数组连接在一起,或者将first number一个字符组成,追加second number字符,然后将它们全部计数。 最短的数组计数器:Tobia的8个字符的APL 最短数组连接:Doorknob编写的具有4个字符的Golfscript 最短的对数解决方案:Quincunx编写的具有19个字符的TI-89 Basic 集成解决方案:具有45个字符的Mathematica,作者:Michael Stern 在我看来,最酷:javascript中的按位运算符,作者:dave

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.