编程拼图和代码高尔夫

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

20
图和地面
资料来源:维基百科 对于这个挑战,您应该编写两个程序,它们类似于上述图像的图形和背景,以便其中一个可以打印figure,而另一个可以打印ground。特别: 编写一个无需输入并打印字符串的程序figure。程序中唯一允许的空格字符是空格(代码点0x20)和换行符(回车,0x0D,换行符,0x0A或两者的组合)。 忽略换行符,空格字符(代码点0x20)和非空格字符的数量必须相同。例如,这将是有效的程序(使用假设的语言): ab c d e f 请注意,第一行上有一个尾随空格。 如果将第n个空格字符与第n个非空白字符交换,则应打印程序ground。对于上面的示例,程序将如下所示: a b cde f 请注意在第二和第三行上有尾随空格。 无论是人物和地面的解决方案应该是在打印到标准输出相同的语言充分的程序。在任何一种情况下,您都可以打印一个可选的尾随换行符。只要STDOUT是正确的,您就可以向STDERR输出任何您想要的东西。 您可以使用任何编程语言,但是请注意,默认情况下,这些漏洞是禁止的。 这是代码高尔夫球,因此以字节为单位的最短有效答案为准。 辅助脚本 您可以使用此CJam脚本在图形和地面程序之间进行转换。只需将两者之一粘贴到“ 输入”字段中并运行程序。它还将告诉您空格和非空格的数量是否不匹配。 排行榜 显示代码段 function answersUrl(a){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+a+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(a,b){return"http://api.stackexchange.com/2.2/answers/"+b.join(";")+"/comments?page="+a+"&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(a){answers.push.apply(answers,a.items),answers_hash=[],answer_ids=[],a.items.forEach(function(a){a.comments=[];var b=+a.share_link.match(/\d+/);answer_ids.push(b),answers_hash[b]=a}),a.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(a){a.items.forEach(function(a){a.owner.user_id===OVERRIDE_USER&&answers_hash[a.post_id].comments.push(a)}),a.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(a){return a.owner.display_name}function process(){var a=[];answers.forEach(function(b){var c=b.body;b.comments.forEach(function(a){OVERRIDE_REG.test(a.body)&&(c="<h1>"+a.body.replace(OVERRIDE_REG,"")+"</h1>")});var d=c.match(SCORE_REG);d?a.push({user:getAuthorName(b),size:+d[2],language:d[1],link:b.share_link}):console.log(c)}),a.sort(function(a,b){var c=a.size,d=b.size;return c-d});var b={},c=1,d=null,e=1;a.forEach(function(a){a.size!=d&&(e=c),d=a.size,++c;var f=jQuery("#answer-template").html();f=f.replace("{{PLACE}}",e+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link),f=jQuery(f),jQuery("#answers").append(f);var g=a.language;g=jQuery("<a>"+g+"</a>").text(),b[g]=b[g]||{lang:a.language,lang_raw:g,user:a.user,size:a.size,link:a.link}});var f=[];for(var g in b)b.hasOwnProperty(g)&&f.push(b[g]);f.sort(function(a,b){return a.lang_raw.toLowerCase()>b.lang_raw.toLowerCase()?1:a.lang_raw.toLowerCase()<b.lang_raw.toLowerCase()?-1:0});for(var h=0;h<f.length;++h){var i=jQuery("#language-template").html(),g=f[h];i=i.replace("{{LANGUAGE}}",g.lang).replace("{{NAME}}",g.user).replace("{{SIZE}}",g.size).replace("{{LINK}}",g.link),i=jQuery(i),jQuery("#languages").append(i)}}var QUESTION_ID=101275,ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",OVERRIDE_USER=8478,answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i; …

14
数组转义-离开那里
有一天,您醒来只是发现自己陷入了阵列。您尝试走出那里,同时获取一个索引,但是似乎还有其他规则: 该数组完全用自然数填充。 如果发现自己在索引上n,请转到该索引array[n],除了: 如果您发现自己n是素数索引,则可以array[n]退后一步 示例:您4从此数组中的index开始(起始索引为0): array = [1,4,5,6,8,10,14,15,2,2,4,5,7]; -----------------^ you are here 由于您所在的字段的值为,因此第一步8将进入索引8。您登陆的字段包含值2。然后,您进入索引2作为第二步。作为2质数,您需要向后退5步,这是您的第三步。由于没有索引-3,您总共分了3个步骤成功地对数组进行了转义。 您的任务是: 编写一个程序或函数,该程序或函数接受一个数组和一个起始索引作为参数,并输出逃逸该数组的步骤数。如果无法转义数组(例如,[2,0,2]使用start-index 2=>,则不断从index 2转到0),则输出错误的值。您可以使用基于1的索引或基于0的索引,但是请指定要使用的索引。 测试用例 输入: [2,5,6,8,1,2,3], 3 输出: 1 输入: [2, 0, 2], 2 输出: false 输入:[14,1,2,5,1,3,51,5,12,3,4,41,15,4,12,243,51,2,14,51,12,11], 5; 输出: 6 最短的答案将获胜。

7
三个多义词,两个句点,两个奎因和一个密码高尔夫球挑战
产生一个程序A,以便以语言A运行它会产生程序B,而以语言B运行程序A会产生程序C。 以语言B运行时,程序B生成程序A,以语言A运行程序B时生成程序C。 程序C以语言A或语言B运行时,输出“语言错误!”。 Program | Language | Result --------|----------|---------- A | A | Program B B | B | Program A A | B | Program C B | A | Program C C | A | "Wrong language!" C | B | "Wrong language!" 您的答案应使用以下模板: 语言A /语言B,{a字节} + {b字节} …

9
删除不必要的括号
您会得到一个由字符组成的字符串0123456789+*()。您可以假定字符串始终是有效的数学表达式。 您的任务是删除不必要的括号,假设乘法的优先级高于加法。 仅在结构上不需要括号时,才应删除括号: 由于乘法具有更高的优先级:3+(4*5)=>3+4*5 由于乘法或加法关联:3*(4*5)=>3*4*5 当它们在表达式周围多余时:3*((4+5))=>3*(4+5) 由于特定的数字值,在可以简化时应保留括号: 1*(2+3) 不应该简化为 1*2+3 0*(1+0) 不应该简化为 0*1+0 例子: (4*12)+11 ==> 4*12+11 (1+2)*3 ==> (1+2)*3 3*(4*5) ==> 3*4*5 ((((523)))) ==> 523 (1+1) ==> 1+1 1*(2*(3+4)*5)*6 ==> 1*2*(3+4)*5*6 1*(2+3) ==> 1*(2+3) 0*(1+0) ==> 0*(1+0) (((2+92+82)*46*70*(24*62)+(94+25))+6) ==> (2+92+82)*46*70*24*62+94+25+6

5
斜体化ASCII艺术
给定ASCII艺术图片的输入,输出斜体的ASCII艺术。 斜体化ASCII文字: 在最后一行之前插入零空格,在倒数第二行之前插入一个空格,在倒数第三行之前插入两个空格,依此类推。 删除可能已创建的所有多余的前导空格。也就是说,如果每行n前面至少有空格,请n从每行的开头删除空格。 更换所有\以s |,所有|以s /,和所有/以s _。保持现有_相同。 确保输入内容仅包含字符\|/_和空格。 例如,输入 /\/\/\ /\/\/\ /\/\/\ /\/\/\ /\ /\ /\ /\ /\ /\ /\/\/\ /\/\/\ /\ /\ /\/\ /\ /\ /\ /\ /\ /\ /\ /\/\/\ /\/\/\ 必须输出 _|_|_| _|_|_| _|_|_| _|_|_| _| _| _| _| _| _| _|_|_| _|_|_| _| _| _|_| …

5
修补段落
本着Patch the Image的精神,这是一个类似的挑战,但带有文本。 挑战 腐烂折磨了您宝贵的文字!给定一个由ASCII字符组成的段落,该段落中有一个矩形孔,您的程序应尝试用适当的文本填充该孔,以使该段落尽可能地融合。 进一步的定义 该孔将始终为矩形,并且可能会跨越多条线。 只会有一个洞。 请注意,孔不一定落在单词边界上(实际上,通常不会)。 孔最多为输入段落的25%,但可能会重叠或延伸到“普通”文本的“末端”(请参见下面的Euclid或Badger示例)。 由于发现孔不是挑战的重点,因此它将仅由井号组成#,以便于识别。 输入段落中的其他任何位置都不会带有井号。 您的代码无法在下面的示例中使用“常规”文本-它只会接收和处理带有漏洞的文本。 输入可以是单个多行字符串,也可以是字符串数组(每行一个元素),也可以是文件等。-您可以选择最适合您的语言的语言。 如果需要的话,可以采用可选的附加输入来详述孔的坐标(例如,坐标元组等)。 请在您的提交中描述您的算法。 表决 要求选民根据算法填补文本空缺的程度来判断条目。一些建议包括以下内容: 填充的区域是否与该段落的其余部分相匹配的空格和标点的近似分布? 填充区域是否引入错误的语法?(例如,连续两个空格,一个句点和一个问号,一个错误的序列,例如, ,,等等) 如果您起眼睛(因此您实际上并没有在阅读文字),您能看到孔过去的位置吗? 如果孔外没有CamelCase单词,该孔是否包含任何单词?如果孔外没有大写字母,该孔中是否包含大写字母?如果孔外有很多大写字母,该孔是否包含一定比例的量? 有效性标准 为了使提交的内容被认为是有效的,不得在孔外(包括尾随空格)更改段落的任何文本。末尾的单个换行符是可选的。 测试用例 格式是代码块中的原始段落,后跟带孔的同一段落。带孔的段落将用于输入。 1(修补图像) In a popular image editing software there is a feature, that patches (The term used in image processing is inpainting as @minxomat …

13
可视化位编织
神秘的编程语言Evil对字节值进行了有趣的操作,称之为“编织”。本质上是字节的八位的排列(因为模式是对称的,所以我们从哪一端开始计数并不重要): 位0移至位2 位1移至位0 位2移到位4 位3移至位1 位4移至位6 位5移至位3 位6移至位7 位7移至位5 为方便起见,这是置换的其他两种表示形式。作为一个周期: (02467531) 并作为映射对的列表: [[0,2], [1,0], [2,4], [3,1], [4,6], [5,3], [6,7], [7,5]] 你的任务是可视化这个排列,使用盒绘图字符─,│,┌,┐,└,┘,┼(Unicode代码点:U + 2500,U + 2502,U + 250C,U + 2510,U + 2514,U + 2518,U + 253C)。该可视化应满足以下约束: 第一行和最后一行完全是: 0 1 2 3 4 5 6 7 在这两者之间,您可以根据需要使用任意多行,每个行最多可以包含15个字符以适合您的方框图字符(您至少需要4行)。这些行应在第一行中的一个数字下方垂直开始,并在最后一行中的相应数字的垂直上方结束。八线必须连接,并且只能交叉通过┼(始终是交叉,绝不能有两条接触的转向线)。线条的确切路径取决于您(而寻找特别适合高尔夫球运动的布局是此挑战的核心)。一个有效的输出将是: 0 1 2 3 4 …

12
产生帕斯卡的辫子
这是帕斯卡的辫子: 1 4 15 56 209 780 2911 10864 40545 151316 564719 1 3 11 41 153 571 2131 7953 29681 110771 413403 1542841 1 4 15 56 209 780 2911 10864 40545 151316 564719 我完全弥补了。据我所知,布莱斯·帕斯卡(Blaise Pascal)没有辫子,如果他这样做,那可能是由头发而不是数字制成的。 它的定义如下: 第一列1中间有一个。 第二列1的顶部和底部都有一个。 现在,我们在将数字放在中间或将数字的两个副本放在顶部和底部之间进行交替。 如果数字位于顶部或底部,则为两个相邻数字的总和(例如56 = 15 + 41)。如果您稍微倾斜头部,这就像是Pascal三角形中的一个台阶。 如果数字在中间,则它将是所有三个相邻数字的总和(例如41 = 15 + …

30
西尔维斯特的序列
Sylvester的序列OEIS A000058是一个整数序列,定义如下: 每个成员是所有先前成员加一的乘积。序列的第一个成员是2。 任务 创建可能的最小程序,该程序需要n并计算Sylvester序列的第n个项。标准输入,输出和漏洞适用。由于结果增长很快,因此您不希望接受任何会导致选择语言溢出的术语。 测试用例 您可以使用零个或一个索引。(这里我使用零索引) >>0 2 >>1 3 >>2 7 >>3 43 >>4 1807

4
快乐的恩德问题
该团圆结局的问题(实际上是一个定理)指出, 平面中一般位置上的任何五个点集都有四个点的子集,这些点形成凸四边形的顶点。 保罗·埃德斯(PaulErdős)用这个名字来命名这个问题,当时最先研究该问题的两位数学家,酯类克莱因(Ester Klein)和乔治·塞克斯(George Szekeres)订婚并随后结婚。 说明: 这里的一般位置意味着没有三个点是共线的。 由四个顶点形成的四边形始终被认为是不相交的,而与点的顺序无关。例如,考虑到四点[1 1],[1 2],[2 1],[2 2]预期的四边形是正方形,没有蝴蝶结: 如果内角不超过180度,则不相交的四边形为凸形;如果两个对角线都位于四边形内,则等效。 挑战 给定5个具有正整数坐标的点,则输出形成凸四边形的那些点中的4个。 规则 如果有多个解决方案(即几组四个点),则可以始终选择输出其中一个或全部。 输入和输出格式像往常一样灵活(数组,列表,列表列表,带有合理分隔符的字符串等)。 代码高尔夫,最少的字节数获胜。 测试用例 输入: [6 8] [1 10] [6 6] [5 9] [8 10] 只有一种可能的输出: [6 8] [1 10] [6 6] [5 9] 输入: [3 8] [7 5] [6 9] [7 8] [5 …

30
画一个沙漏
再次受到编程101任务的启发,这是另一个挑战。 输入: 一个正整数n >= 3。(必须是奇怪的) 输出: n星号行,其中第一行有n星号,每条新行都比前一行少两个星号。直到打1星号。从那里开始,每个新行都比之前的行多两个星号,直到回到n星号为止。空格或类似空格之类的东西必须用于对齐星号,以使其看起来真的像沙漏。 一般规则: 尾随换行符是允许的,但不必使用。 缩进是必须的。 这是代码高尔夫球,因此最短答案以字节为单位。 由于该课程是用C ++讲授的,所以我很想看到C ++的解决方案。 测试案例(n = 5): ***** *** * *** *****

5
炸弹的连锁反应
介绍: 在执行任务之前,这是地图上每个元素的作用: 平原(X):此操作无效。 被破坏的土地(-):与平原相同,但被炸弹破坏。 活动炸弹(!):在地图上,这会摧毁3x3正方形中的所有物体: XXXXX XXXXX XXXXX X---X XX!XX > will become > X---X XXXXX X---X XXXXX XXXXX 被动炸弹(@):无作用,直到被另一枚炸弹引爆为止。这也具有3x3正方形爆炸半径: XXXXX XXXXX XXXXX XXXXX XX@XX > will become > XX@XX (nothing happened) XXXXX XXXXX XXXXX XXXXX 但: XXXXX XXXXX XXXXX X---X XX@XX > will become > ----X (both bombs have …

30
它是无和集吗?
如果集合中没有两个(不一定是不同的)元素在一起,则该集合是不求和的。 例如,{1, 5, 7}是无和的,因为所有成员都是奇数,并且两个奇数加在一起时总是偶数。在另一方面,{2, 4, 9, 13}不是免费求和,如任一2 + 2 = 4或4 + 9 = 13一起添加到该组的一个成员。 编写一个将集合作为输入的程序或函数,如果集合不加和,则输出True值,否则输出Falsy。 例子: Sum-free: {} {4} {1, 5, 7} {16, 1, 4, 9} Not sum-free: {0} {1, 4, 5, 7} {3, 0} {16, 1, 4, 8}

30
二进制到十进制转换器
二进制到十进制转换器 据我所知,我们没有一个简单的二进制到十进制转换的挑战。 编写一个程序或函数,该程序或函数采用正的二进制整数并输出其十进制值。 不允许使用任何内置的基本转换函数。整数到小数的函数(例如,101010变成[1, 0, 1, 0, 1, 0]或的函数"101010")不受此规则约束,因此被允许。 规则: 该代码必须支持二进制数,最高为您的语言支持的最大数值(默认情况下) 您可以选择在二进制表示形式中包含前导零 十进制输出可能没有前导零。 输入和输出格式是可选的,但数字之间不能有任何分隔符。(1,0,1,0,1,0,1,0)不是有效的输入格式,但两者10101010和(["10101010"])都是。 您必须沿“正常”方向输入。1110是14不是7。 测试用例: 1 1 10 2 101010 42 1101111111010101100101110111001110001000110100110011100000111 2016120520371234567 该挑战与其他一些挑战相关,例如this,this和this。

6
井字游戏,只有十字架
介绍 每个人都知道游戏井字游戏,但是在这个挑战中,我们将介绍一些小技巧。我们将只使用十字架。第一个连续放置三个十字架的人输了。一个有趣的事实是,有人输掉前的最大十字架数等于6: X X - X - X - X X 这意味着对于3 x 3的面板,最大数量为6。因此对于N = 3,我们需要输出6。 另一个示例,对于N = 4或4 x 4板: X X - X X X - X - - - - X X - X 这是一个最佳解决方案,您可以看到最大的十字架数量等于9。12 x 12板的最佳解决方案是: X - X - X - X X - X …

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.