Questions tagged «code-golf»

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

7
飞机上的有效蛇
受到Vi Hart的视频之一启发(这些视频充满了潜在的挑战想法) 蛇由相同长度的线段组成,每个线段之间的连接可以是直的,也可以是90度的。 我们可以通过记下一条滑行器(它所需要的转弯方向(直/左/右))来编码这样一条蛇(最多旋转一次,具体取决于初始方向)。从左上方开始,指向右侧 -+ +--+ SR RSSR | +-+ | S RSL S +--+ --+ LSSL SSR 将由滑行者代表 SRSLSSLRLRSSRSRSS 当然,一条平面蛇不能相交(如中的SSSSLLLSS),这将导致可怕的像素化游戏结束。 您的任务是确定滑行器是否有效(导致至少一个自相交) 输入 的字符串由字母构成的SLR与2 < length < 10000 输出 的东西Truthy如果它是一个有效的滑行和东西Falsey如果它不是。 测试用例 __Valid__ SSLSLSRSRSSRSSSLLSSSRRLRSLRLLSSS SRRLSLLRRLLSLRRSRLLRSRRLLRRSRLLSSLLRSRRLLRRSRLLRSRRLSLLRRLLSLRR (A hilbert curve) RLLRSRRLSLLRRLLSLRRSRLLRSRRLLRRSRLLSSLLRSRRLLRRSRLLRSRRLSLLRRLLSLRRSRLLRSRRLLRRSRLLSSLLRSRRLLRR SRRSRSRSSRSSRSSSRSSSRSSSSRSSSSRSSSSSRSSSSSRSSSSSSRSSSSSSRSSSSSS (Spiral) SSSSSSSSSSLSSSSSSSLSSSSSSSSLSSSSSLSSSSSSLSSSLLRRLLRRLLSLSSSRRSSSSRSSSRSSSSSSRSSSSSRSSSSSSSSRSSSSSSSRSSSSSSSSS (bigger, squigglier spiral) LRSLLRLSRSLLSRLSLRSLSSSLRRSSLSRRLRSRLRLSLRLLRLRSSLSLRLRSRSSSSSLSRRLSLSSSRRLRLRLRLRRLLSSLSSSRRLRLRLRLRLSLSSSSSSSSSSSSSRLRLLRLRLRLRLRLRLRLSLSSSLSLSLL __Invalid__ SRRLSLLRRLLSLRRSRLLRSRRLLRRSRLLLLRSRRLLRRSRLLRSRRLSLLRRLLSLRR SRRLSLLRRLLSLRRSRLLRSRRLLSRSSSRSSSSSSSRSRSSSSSSSRRLLRRSRLLRSRRLSLLRRLLSLRR SRRSRSRSSRSSRSSSRSSSRSSSSSSSSSSRSSSSRSSSSSRSSSSSRSSSSSSRSSSSSSRSSSSSS SSSSSSSSSSLSSSSSSSLSSSSSSSSLSSSSSLSSSSSSLSSSLLRRLRLRRLLSLSSSRRSSSSRSSSRSSSSSSRSSSSSRSSSSSSSSRSSSSSSSRSSSSSSSSS …

14
颜色的色调
您将获得颜色的RGB值。您的任务很简单:以最简单的定义计算色相。 假设具有最高,中间和最低值的通道是X,Y,Z(分别是红色,绿色或蓝色),其值分别是x,y,z。此颜色的色相为(h(X)-h(Y))*(1 +(xy)/(xz))/ 2 + h(Y),其中: h(red) = 0 (or 360 if one of X or Y is blue) h(green) = 120 h(blue) = 240 输入由3个从0到255的整数组成,这些整数不完全相等(以任何一致的顺序)。输出可以是浮点数,也可以是向上或向下取整的整数,而不必保持一致。如果输出的整数部分为0或360,则可以打印其中一个。 您不能为颜色空间转换(包括诸如在处理图像时进行隐式转换)调用内置函数。 这是代码高尔夫球。最短的代码胜出。 例子 Input: 0 182 255 Output: 197 (or 198) Input: 127 247 103 Output: 110 Input: 0 0 1 Output: 240 Input: …
23 code-golf 

23
没有条件语句的查找
这项挑战的灵感来自对Arduino微控制器进行编程。我有6个LED和6个按钮连接到板上的各种引脚。在代码中,每个按钮和LED都分配有一个ID号(1-6)。使用switch语句查找与ID号对应的针号(范围为0-13)。纯粹出于娱乐目的,我想知道是否switch可以使用算术/其他函数规避这些ES,以使将来的代码维护人员感到恐惧。 挑战 提供以ID号(整数)为参数并返回6个LED和/或6个按钮的引脚号(整数)的功能,而无需使用条件语句(no if,no switch和no三元)。 LED的返回值: ID Pin 1 3 2 5 3 6 4 9 5 10 6 11 返回按钮的值: ID Pin 1 2 2 4 3 7 4 8 5 12 6 13 奖金挑战 提供一个具有ID号(整数)和第二个参数(任何类型)的单一功能,该参数指示是否请求LED或按钮引脚,并返回相应的引脚(整数)。 规则 这不是特定于Arduino的挑战。使用任何语言,做任何你想要的。 编辑:在steveverril的建议下,这现在是高尔夫挑战赛。 祝好运! (如果您仍在阅读:虽然按编程标准显然是荒谬的和任意的,但映射是基于Arduino Micro的引脚排列的。引脚0和1保留用于串行通信,LED分配给6个编号最小的PWM功能引脚,按钮将分配给其余的引脚)

18
相似形状
相似的数字 两个矩形相似,如果他们双方的比例是相同的。 考虑这两个矩形;一个高5行,宽11个字符的矩形: =========== =========== =========== =========== =========== 以及一个高10行,宽22个字符的矩形: ====================== ====================== ====================== ====================== ====================== ====================== ====================== ====================== ====================== ====================== 这些形状相似,因为它们的边的比例相同。正式地说(hhh是最短的一面,www是最长的一面): h1w1=h2w2h1w1=h2w2 \frac{h_1}{w_1} = \frac{h_2}{w_2} 您也可以这样做: h1h2=w1w2h1h2=w1w2 \frac{h_1}{h_2} = \frac{w_1}{w_2} 挑战 编写一个程序或函数,该程序或函数采用一个“主要”矩形和一些“其他”矩形,并打印“其他”中的哪些类似于“主要”。 输入 形状和形状列表。每个形状由2个非零正整数组成,分别表示矩形的宽度和高度。例如,这: (4,2), (3,9) 表示两个矩形,分别是4x2和3x9。但是,您可能希望输入的确切格式。 输出 “其他”形状的索引类似于“主要”形状。您可以选择索引是基于0还是基于1,以及输出的确切格式和顺序。 样例程序 在Python中: main = eval(raw_input()) # The main rectangle. rects = eval(raw_input()) …

2
帮我拖延我的电脑维修!
真正的(悲惨的)灵感为您带来了挑战。最近,键盘上的数字行有些零星。按键1-9有时可以工作-但其他时候则无济于事。作为一个狂热的程序员,这太可怕了!(看到那个感叹号吗?这就是您知道它们现在正在起作用的方式。)我不仅经常需要数字本身,而且还需要符号!@#$%^&*(也是完全无效的一半!作为一名C程序员,我对解决这个问题更感兴趣,而不是花时间在忙于编写代码以修复笔记本电脑的忙碌工作上。在过去的几周中,慢慢地,我的代码中的所有数字文字都被替换为十六进制,这样我就不必四处寻找要复制和粘贴的数字。但是,如果没有数字键,有些数字很难输入1-9。例如,数字1不能这么简单地以十六进制形式编写,因此1我将代码中的s 替换为0xF - 0xE。受影响的唯一键1-9,所以我保持充分利用像符号+,-和/。但是,我不能使用乘法或括号,因为*并且(经常被打破。这导致了您的挑战。 输入项 一个整数,n以stdin或您的语言等效。如果需要,该整数可以在换行符或其他空白字符之前或之后。或者,您可以通过命令行参数接收输入。 您的程序应正确响应负输入,并且至少可以处理32位带符号整数。 输出量 您的程序应以某种可观察的形式输出最短的(以非空白字符表示)可能的方式,以n一个或多个十六进制值的和,差或除的形式写入数字。解决此问题的方法不止一种,并且没有要求您偏爱任何等长输出的要求。 输出应采用以下形式:A % A % A...where A是一个0x仅包含数字的十六进制值A-F a-f,并且%是符号之一-+/。让我们/描述整数除法,而不是浮点数。 (请注意n,按照惯例,当首先评估从左到右的除法,然后是从左到右的加法和减法时,输出结果应该是。) 测试用例 输入输出 1 0xF - 0xE(或0xF-0xE或0xB-0xA或0xd - 0xc或0xF/0xF) 15 0xF 255 0xFF 30 0xF + 0xF 计分和规则 这是代码高尔夫球。您的初步得分是源文件中的字节数。 您不得使用来源中的任何数字1-9。 您可以!@#$%^&*(在来源中使用符号,但是每个符号的得分都会受到+20的惩罚。 您的程序可以由带有n参数的函数代替,只要该函数产生某种形式的可读输出即可。函数的返回值不计为输出。 不允许出现标准漏洞。 最低分获胜!祝好运! 我是否在格式化/查询/明晰度方面搞砸了?让我知道!这是我第一次提交该网站!

9
格式化类似Lisp的语法
背景 (根据真实的,令人费解的故事) 在我的时间里,我经常玩Lisp和类似语言。我已经与他们一起书写,运行它们,对其进行了解释,对其进行了设计,并让机器为我为它们编写了……如果有什么困扰着我,那就是Lisp不符合我的特定格式样式。 不幸的是,每当复制和粘贴代码时,一些文本编辑器(cough XCode cough)都会剥离我漂亮的制表符和空格。 (A (B (C) (D)) (E)) (哪里ABCDE有任意函数) 一些文本编辑器将此可爱的代码分割到了下面: (A (B (C) (D)) (E)) 真是一团糟!这是不可读的! 帮帮我吗? 挑战 您在此挑战中的目标是采用一系列功能,这些功能以换行符分隔,格式如下所述,并返回更加美观的布局,突出可读性和优雅性。 输入 我们将Farity N参数的函数定义为类似于以下内容的构造: (F (G1 ...) (G2 ...) (G3 ...) ... (GN ...)) G1, G2, ..., GN自身的功能在哪里?一个arity 0函数A很简单(A),而arity 2函数B的形式是(B (...) (...)) 您的代码应在每个函数的前导括号之前(第一个函数除外)以一个换行符作为一系列函数来输入输入。上面的示例是有效输入。 您可以假设: 括号是平衡的。 一个函数缩进的次数永远不会超过250次。 每个函数都用括号括起来: () 函数名称将仅包含可打印的ASCII字符。 …

22
精确计算(3 + sqrt(5))^ n
今天,您的目标是找到给定非负整数n的整数a和b,使得: 您应该编写一个带有参数n并以您选择的格式输出a和b的程序或函数。 有标准漏洞。另外,您打算自己使用基本算术来实现上述问题。因此,您可能不使用内置的精确代数功能,有理数或实现非平凡数学构造的函数(例如Lucas序列)。 以字节为单位的最短代码获胜。 输入/输出示例: 0→1,0 1→3,1 2→14,6 3→72 32 4→376,168 5→1968,880 6→10304,4608 7→53952,24128 8→282496,126336 9→1479168,661504

3
放置卡尔卡松瓷砖
棋盘游戏 在棋盘游戏“ Carcassonne ”中,玩家通过匹配边缘来放置瓷砖,并通过创建较大的连续地形获得最高分。以下是(大致)游戏中包含的图块的类型和数量: #01 x4 #02 x5 #03 x8 #04 x2 #05 x9 #06 x4 #07 x1 #08 x3 #09 x3 #10 x3 #11 x4 #12 x5 #13 x3 #14 x3 #15 x2 #16 x5 #17 x5 #18 x2 #19 x3 #20 x1 #21 x5 #22 x2 #23 x1 …

1
你能听到我吗?
背景 您是软件帝国的有钱人。您的时间值得很多金钱。因此,您必须始终以最有效的路线行驶。但是,作为主管,您会花费大量时间参与重要的电话通话。绝不要打断电话,这是至关重要的,因此您绝不能穿越没有电池服务的区域! 挑战 您将得到一个三元组列表,每个元组代表一个蜂窝塔的位置和功能。作为示例,[50, 25, 16]将代表位于<x,y> = <50, 25>其周围的半径为16的圆的蜂窝塔。请牢记此清单,您必须以最短的距离从起始位置<0, 0>到达目的地的目的地<511, 511>,而不会丢失电池服务。这是代码高尔夫球,所以最短的代码获胜! 输入输出 您可以自由地将输入操作为易于阅读的形式,例如在文件中,或者使用STDIN通过使用STDIN的嵌套数组eval等。您可以对输入进行硬编码,只要您的代码可用于其他输入即可:好。用于硬编码输入的确切字符将不计算在内,但变量名称和赋值字符将被计算在内。您不应该假设输入是按任何特定顺序排列的,也不应该假设每个基站都与问题有关。如果您有任何疑问,请发表评论,我会尽力澄清。 输出将是一个坐标列表,标记点,这些点在按顺序连接时将形成出口的路径。精度只需要四舍五入到最接近的整数,如果您的输出示例比我的输出示例低1-2个单位,那就很好。我在下面提供了图片以澄清这一点。 祝你好运! 例子 input: [ 32, 42, 64] [112, 99, 59] [141, 171, 34] [157, 191, 28] [177, 187, 35] [244, 168, 57] [289, 119, 20] [299, 112, 27] [354, 59, 58] [402, 98, 23] [429, 96, …

13
DVI连接器引脚
从更简单的角度来看,这应该是代码高尔夫挑战。但是我认为在这里进行一些微优化可能会很好。 DVI连接器有三种基本类型:DVI-A(模拟),DVI-D(数字)和DVI-I(集成)。此外,还有DVI-D和DVI-I连接器的单链接和双链接版本。这五个不同的连接器中的每一个都使用一组不同的引脚。 给定的一个A,D1,D2,I1,I2作为用于连接器的种类的识别符,打印连接器的销的对应的ASCII表示: A: # # # # # # # ===== # # # # # # # # # D1: # # # # # # ===== # # # # # # # # # # # # D2: # # # # # # # # …

14
新年回收
2015年的一个好的决议是生活更加可持续。我们将从回收开始。就是回收代码! 您的任务是将数字打印2015到STDOUT,带或不带尾随换行符(仅此而已)。但是,您必须通过回收 PPCG中的一些旧代码来做到这一点。这是这样的: 选择在2014-12-16 00:00:00Z(我在沙盒中发布此日期)之前在CodeGolf.SE上发布的所有答案。例外:您不能使用去年的“新年挑战”中的任何答案。 从该答案中选择一个代码块(不是内联代码段,它必须在其自己的段落中)。该块必须作为实际代码发布,例如,您不能使用碰巧使用等宽格式的测试用例或示例输出。 重新排列该代码块中的字符以形成您对此挑战的提交。您只能更改顺序,不能添加或删除任何字符。这包括换行符。 您必须能够证明原始源代码块在您的语言上在语法上是有效的。在最佳情况下,您可以通过显示其运行时没有编译时或运行时错误来做到这一点。因此,尽管原始代码可能是Java,但您可以将其用于空白答案(因为每个文件在空白中均有效),但可能无法将其用于Python答案(因为原始密码无效) )。 请注意,您的答案必须忽略所有输入和外部状态(包括实际当前日期)。它可以从标准输入,比如阅读,只要当它是空的,并产生相同的输出流的所有可能的内容,它不会崩溃。 生成的代码必须是完整程序(不是函数,也不是假定为REPL环境的代码段)。 这是代码高尔夫,所以最短的答案(以字节为单位)获胜。 排行榜 我相信这会以不同的语言显示出来。因此,以下Stack Snippet会按语言生成常规排行榜和获胜者概述。 为确保您的答案显示出来,请使用以下Markdown模板以标题开头。 # Language Name, N bytes N您提交的文件大小在哪里。如果您提高了分数,则可以通过打败旧分数来保持标题。例如: # Ruby, <s>104</s> <s>101</s> 96 bytes 显示代码段 function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function getAnswers(){$.ajax({url:answersUrl(page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(e){answers.push.apply(answers,e.items);if(e.has_more)getAnswers();else process()}})}function shouldHaveHeading(e){var t=false;var n=e.body_markdown.split("\n");try{t|=/^#/.test(e.body_markdown);t|=["-","="].indexOf(n[1][0])>-1;t&=LANGUAGE_REG.test(e.body_markdown)}catch(r){}return t}function shouldHaveScore(e){var t=false;try{t|=SIZE_REG.test(e.body_markdown.split("\n")[0])}catch(n){}return t}function getAuthorName(e){return e.owner.display_name}function process(){answers=answers.filter(shouldHaveScore).filter(shouldHaveHeading);answers.sort(function(e,t){var n=+(e.body_markdown.split("\n")[0].match(SIZE_REG)||[Infinity])[0],r=+(t.body_markdown.split("\n")[0].match(SIZE_REG)||[Infinity])[0];return n-r});var e={};var t=1;answers.forEach(function(n){var r=n.body_markdown.split("\n")[0];var i=$("#answer-template").html();var s=r.match(NUMBER_REG)[0];var …

3
斜线绘图
编写一个程序,它在文本的矩形块组成X的和.的,像这样的粗糙A: ...... ..XX.. .X..X. .XXXX. .X..X. .X..X. 通过绘制斜线(视上下文而定是向前还是向后),在网格的X边框a .或边的任何地方(其余部分都填满空格),输出此网格的表示,逆时针旋转45度: /\/\ / /\ \ \/ / \ /\/ /\ \ \ / \/ \ \ \ \ \/ 只要X输入中的'的形状由斜杠保持,则尾随和前导空格(和换行符)的数量无关紧要。可以修剪的额外行或列.。 对于I / O,您可以使用stdin / stdout / files /命令行参数的任意组合。例如,您的脚本可能会使用X.模式的文件名,并使用斜杠模式重写该文件。否则您的脚本可能会X.逐行从stdin 接受模式(d完成后按),然后将结果输出到stdout。 输入可能会很大,但您可能会认为它总是格式正确。 除/ \输出字符和换行符外,任何输出均不应包含字符。 计分 以字节为单位的最短代码获胜。如果使用非ASCII字符,请使用https://mothereff.in/byte-counter作为字节计数器。 奖励:如果您可以在程序中更改(替换而不是删除)一个字符,则减去50个字节,以便输出顺时针旋转45度的斜杠网格,例如: /\/\ / /\ \ / \ \/ …

21
不同的前进方向
给定整数列表,将以指定的顺序/深度产生正向差异。 对于整数列表: (10, 18, -12, 4, 8, -3, -5, 67, 9, 14) 各种订单/深度的远期差异为: 0 10, 18, -12, 4, 8, -3, -5, 67, 9, 14 1 8, -30, 16, 4, -11, -2, 72, -58, 5 2 -38, 46, -12, -15, 9, 74, -130, 63 3 84, -58, -3, 24, 65, -204, …

9
撒盐挑战
这是一个ASCII 撒盐饼干: _________________ | . . . | | . . | | . . . | | . . | | . . . | |_________________| 这是堆叠的两个饼干: _________________ | . . . | | . __________|______ | . | . . . | | .| . . | | …

7
如何在Python中别名成员函数?
在Python中,可以通过重复使用别名函数来保存字节。例如: r=range a=r(100) b=r(200) c=r(300) 但是,当函数是成员函数在一起时,我不知道如何以允许链接的方式对它们进行别名。例如: s='Hello' // Plain code s=s.replace('H','J').replace('e','i').replace('l','m').replace('o','y') // What I am trying to do q=replace s=s.q('H','J').q('e','i').q('l','m').q('o','y') 显然,我试图做的是无效的。这也不是: q=s.replace s=q('H','J') // Replaces the 'H' in 'Hello' s=q('e','i') // Replaces the 'e' in 'Hello'... and the J is gone. s=q('l','m') s=q('o','y') 是否有另一种别名成员函数和链​​接函数来保存字符的方法?
23 code-golf  tips  python 

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.