Questions tagged «code-golf»

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

1
mtDNA突变树
背景: MtDNA是人类DNA的一部分,是从母亲传给孩子的,很少发生突变。由于这对所有人类都是如此,因此有可能创建一棵巨大的树,以可视化方式将所有人类如何通过其母系关系彼此联系,一直到假设的EVE。当孩子出生时,MtDNA中的每个突变都会从其父树中的分支创建一个新的子分支。 在此处了解有关线粒体DNA(mtDNA)的更多信息:https://en.wikipedia.org/wiki/线粒体DNA 目的: 您的程序将获得mtDNA树枝突变计数列表,并且您的程序应提供它的树状视图 输入和输出示例: 输入是一个三列的分号分隔表,每个分支都有一行。例: L0a'b'f'k;L0;14 L0a'b'f;L0a'b'f'k;23 L0;mtEVE;10 L0a'b;L0a'b'f;30 L0a;L0a'b;38 L0a1'4;L0a;39 L0a1;L0a1'4;40 L0a1a;L0a1;42 L0a1a NL;L0a1a;43 L0a1a1;L0a1a NL;44 L0a1a2;L0a1a NL;45 L0a1a3;L0a1a NL;44 L0a1 NL;L0a1;41 L0a1b;L0a1 NL;44 L0a1b NL;L0a1b;45 L0a1b1;L0a1b NL;46 L0a1b1a;L0a1b1;47 L0a1b1a1;L0a1b1a;48 L0a1b2;L0a1b NL;48 L0a1b2a;L0a1b2;50 L0a1c;L0a1 NL;45 L0a1d;L0a1 NL;44 L0a4;L0a1'4;55 L0a2;L0a;47 L0a2a;L0a2;49 L0a2a1;L0a2a;50 L0a2a1a;L0a2a1;51 L0a2a1a1;L0a2a1a;53 L0a2a1a2;L0a2a1a;53 L0a2a2;L0a2a;53 L0a2a2a;L0a2a2;54 L0a2b;L0a2;57 …

6
在O(log n)内存中打印ascii螺旋
您可以编写一个程序来接收一个奇数,正整数 n,其中n >= 3,作为函数参数,命令行参数或在STDIN(或您系统的等效参数)上,并打印到STDOUT(或系统等效参数)ASCII螺旋顺时针向内旋转,顶部边缘恰好是n字符长。n+1显然,第一个右边缘应该是字符长。例如, 输入: 11 输出: *********** * ********* * * * * * ***** * * * * * * * * * * * * * * * *** * * * * * * * ******* * * * *********** 收获: 您的程序只能使用O(log n)内存。 您的程序只能打印字符*(ASCII 42),(ASCII 32),<CR>(ASCII …

1
拯救大雁免于灭绝
被称为Alex A的鹅种以其居于由64个单元格组成的三角形网格中而闻名: (图片来自这个无关的欧拉项目问题。) 我们将用数字标记每个单元格,0使其63从第一行开始,然后在其下方的每一行中从左向右移动。因此,顶部的单元格是0,而右下角的单元格是63。 每个单元都有三个边界。我们可以在表格a,b中标记每个边框,其中a和b是共享该边框的单元格的编号。例如,单元格0和之间的边界2将被称为0,2或2,0(将它们置于哪个顺序都没有关系)。 网格最边缘的边框的标记系统是不同的,因为网格边缘的单元格具有不与其他单元格共享的边界。如果边框只是一个单元格的一部分,我们将使用字母X。例如,小区的三个边框0是0,2,0,X和0,X。 一些细胞含有鹅。但是,如果您不保护它们,这些鹅将会被邪恶的狐狸杀死(来自网格外部)。如果所有的鹅都死了,那么BrainSteel会很难过。因此,我们将编写一个程序在鹅周围建起篱笆,以保护它们免受狐狸侵害。鹅应该存在于单个完全封闭的栅栏多边形中。我们的围栏预算很低,因此请使用尽可能少的围栏。 输入说明 从0到的逗号分隔的数字列表63,代表包含鹅的细胞。例: 6,12 输出说明 为了成功保护鹅,需要在其上建立围栏的边界列表。这应该是最小数量的围栏。例: 5,6 6,7 11,12 12,13

3
自然线性Diophantine方程
两个变量中的线性Diophantine方程是ax + by = c形式的方程,其中a,b和c是常数,x和y是整数。 对于许多自然发生的丢番图方程,x和y表示不能为负的数量。 任务 编写一个接受系数a,b和c作为输入并返回任意对自然数(0、1、2,...)x和y的程序或函数,以验证方程ax + by = c(如果有)存在。 附加规则 您可以选择任何只涉及所需整数的语言,只要您不在输入中嵌入任何代码,就可以选择仅涉及所需整数的任何格式,以及(可选)语言的数组/列表/矩阵/元组/矢量表示法。 您可以假设系数a和b都非零。 您的代码必须适用于-2 60和2 60之间的任何三元整数;它必须在一分钟内在我的计算机(Intel i7-3770,16 GiB RAM)上完成。 您可能不使用任何可解决Diophantine方程从而使这项任务变得微不足道的内置函数,例如Mathematica FindInstance或FrobeniusSolve。 如果找不到解决方案,只要符合时间限制并且其输出不能与有效解决方案混淆,您的代码可能会按照您希望的方式运行。 适用标准代码高尔夫球规则。 例子 下面的示例说明方程2x + 3y = 11的有效I / O,正好具有两个有效解((x,y)=(4,1)和(x,y)=(1,3))。 Input: 2 3 11 Output: [4 1] Input: (11 (2,3)) Output: [3],(1) (x,y)=(1,0)对是2x + 3y = 2的唯一有效解决方案。 …

1
XKCD支架概率
今天的XKCD是一种运动比赛风格的支架,其中的参赛者都是众所周知的名字,分成几组可能令人困惑的名字。 根据给定回合中每个参赛者赢得该回合的机会均等,给出给定参赛者将赢得整个锦标赛的概率。 输入值 参赛者的名字。 XKCD喜欢使用所有大写字母,但是您可以使用任何对您有意义的大小写,也可以使您的输入不区分大小写。 您可以假定所有输入名称均有效。 Jeff Gordan可能是的拼写错误Jeff Gordon。您可以选择接受其中一个或两个。 一些名称包括标点符号,例如H. G. Wells和Joseph Gordon-Levitt。您可以选择接受带或不带标点符号的名称(或同时包含两者)。上面没有标点的将是H G Wells和Joseph Gordon Levitt 同样,你可以选择接受或者Beyoncé或Beyonce或两者 这Mister/Fred Astaire/Rogers条线有点奇怪。对于这一个,你必须接受以下所有的:Fred Rogers,Mister Rogers和Fred Astaire 输出量 给定参赛者以合理形式赢得整个比赛的概率(例如1/64) 例子 路易斯·阿姆斯特朗(Louis Armstrong)可能会参加6轮比赛,每轮有两名选手,因此他有1/64的获胜机会。 艾伦·里克曼(Alan Rickman)可能会参加7轮比赛,第一轮有3名选手参加,其余的有2名选手参加,因此他有1/192的获胜机会。 为了节省您键入图像中所有名称的工作量,explainXKCD已经将它们制成表格了。我也把它们丢到了这个粘贴桶里。 请注意,explainXKCD中的获胜概率是错误的-它们是应有值的两倍,因为它们大概忘记了最后一轮。感谢您指出@Geobits。


5
现在是选举时间!
是时候...点票了! 今天,我在整个国家举行地方选举。在此,使用D'Hondt方法确定每个宴会的席位数量。您的目标是实现一个程序或功能,该程序或功能将确定每个方以最少的字节数获得多少席位。 对于这种方法,要分配固定数量的席位,方法是这样的: 每一方都分配有一个可变数字,该数字从其获得的票数开始。 然后将第一个席位分配给变量中具有最大价值的政党,然后该政党的那个价值将成为其投票总数除以1+seats,四舍五入后,seats该席位中已有的席位数(因此,首先,他们的选票将被2除,并在获得第二个席位后被3除。 此后,再次比较当事方的票数。该过程继续进行,直到分配了所有席位。 如果最高数目是两个或多个参与方之间的平局,则它是随机解决的(必须是随机的,它不能只是列表中两个中的第一个)。 输入值 您将收到一个数字N,该数字将指示可用席位的数量,以及各方喜欢的任何格式的投票列表。例: 25 12984,7716,13009,4045,1741,1013 输出量 您应该输出每方获得席位的列表。在上面的示例中,它将类似于 8,5,9,2,1,0 它们的顺序应与输入中各方的顺序相同。 例子 5 3,6,1 outputs: 2,3,0 135 1116259,498124,524707,471681,359705,275007,126435 outputs: 45,20,21,19,14,11,5 奖金 如果以参与方的名字作为输入并在输出中提供他们,则获得-20%的奖励,例如: 25 cio:12984,pcc:7716,irc:13009,icb:4045,cub:1741,bb:1013 outputs cio:8 pcc:5 irc:9 icb:2 cub:1 bb:0
13 code-golf 

1
在Python中逐项串联字符串列表
这是在python中打高尔夫球的提示问题。 假设您有两个字符串列表,并且想要连接每个列表中的相应条目。例如,用a=list("abcd")和b=list("1234")计算["a1","b2","c3","d4"]。 在基于数组的编程语言中,这是微不足道的,在这种语言中,操作通常以成员方式应用于列表。例如,在我的高尔夫语言Pip中,代码就是a.b。但是在Python中,这并不容易。 Python方式可能是使用zip列表理解(25个字符): [x+y for x,y in zip(a,b)] 另一种方法是map使用lambda函数(23): map(lambda x,y:x+y,a,b) 以下是我想出的最短的(21): map("".join,zip(a,b)) 有没有更短的方法? 假设列表的长度相同,并且只需要某种可迭代的内容(因此map在Python 3中可以使用对象)。
13 code-golf  tips  python 

11
计算距离mod N
很长时间以来,您一直在从Advanced Collecting Device Controller™收集数据。您检查了日志,并惊恐地发现出了什么问题:数据只包含数字的最后几位! 幸运的是,您知道初始值,并且该值永远不会快速变化。这意味着您可以通过查找起点之间的距离来恢复其余部分。 挑战 您将编写一个程序或函数来计算值的变化量,给定一个模数N和一系列中间值modulo N。 每对数字之间的变化始终小于N/2,因此每个测试用例只有一个有效答案。 将以N您选择的格式为您提供输入> 2 的整数和值列表作为输入。输入可以通过STDIN或命令行或函数自变量给出。 您将输出一个整数,原始值已更改的数量。输出可以打印到STDOUT或返回。 规则 您的程序必须能以小于的距离和模数工作2^20。 您可以假设: N至少是3。 该列表至少包含2个值。 列表中的所有值都至少为0且小于N。 数字中的所有变化均小于N/2。 其他都是无效的输入,您的程序可能会做任何想做的事情。 禁止为此目的而使用标准漏洞,任何非标准库和内置函数。 这是代码高尔夫球,因此以字节为单位的最短程序获胜。 示例测试用例 输入: 3 0 1 2 2 0 1 0 2 1 2 0 1 2 1 1 输出: 4 说明(带有示例值): Value mod 3: 0 1 2 …
13 code-golf  math 

4
非常好的弗里德曼数字
甲弗里德曼号是一个正整数,它等于使用它自己的位结合的操作+,一个非平凡表达- ,*,/,^,括号和级联。 尼斯弗里德曼数是一个正整数,等于一个不平凡的表达式,该表达式使用其自己的数字与相同的运算结合使用,这些数字按其原始顺序排列。 我在这里发明的甚尼斯弗里德曼数(VNFN)是一个尼斯弗里德曼数,可以不用这种表达的不太漂亮的部分来书写(在我看来)。括号,串联和一元取反是不允许的。 对于此挑战,可以使用三种可能的方式编写不带括号的表达式。 前缀:这等效于左联想。这种类型的表达式的所有运算符都写在数字的左侧。每个运算符适用于以下两个表达式。例如: *+*1234 = *(+(*(1,2),3),4) = (((1*2)+3)*4) = 20 可以这样写的VNFN是343: ^+343 = ^(+(3,4),3) = ((3+4)^3) = 343 后缀:这等效于右联想。就像前缀表示法一样,除了操作在数字的右边。每个运算符都适用于前面的两个表达式。例如: 1234*+* = (1,(2,(3,4)*)+)* = (1*(2+(3*4))) = 14 可以这样写的VNFN是15655: 15655^+** = (1,(5,(6,(5,5)^)+)*)* = (1*(5*(6+(5^5)))) = 15655 中缀:中缀表示法对这五个操作使用标准操作顺序。出于挑战的目的,将按以下方式定义操作顺序:括号^右为第一个,关联为右。然后,将括号括起来*,/同时将其左移。最后,将括号括起来+,-同时将其左移。 1-2-3 = (1-2)-3 = -4 2/3*2 = (2/3)*2 = 4/3 2^2^3 = …

1
二零一五难题
背景 这个难题是四个四分之一难题的变体(本身就是上一个问题的主题)。像这个难题一样,目标是仅使用四位数字和某些数学运算符来查找不同整数的数学表达式。但是,在这种情况下,允许的数字仅为2、0、1和5。每个解决方案必须以正确的顺序准确地出现一次。令人惊讶的是,可以用这种方式表示许多整数。鼓励求解器首先尝试手动解决问题,因为它很有趣。 规则 常数可以由一个或多个数字构成: 整数:例如2、0、15等 小数:例如.2,.01、1.5等。 重复小数点:例如.2〜(= 0.222 ...)、. 15〜(= 0.1555 ...),20.15 ~~(= 20.1515 ...) 允许以下一元运算: 一元否定:-x 平方根:sqrt(x) 整数阶乘:x! 允许以下二进制操作: 标准算术运算符:x + y,xy,x * y和x / y 任意幂:x ^ y 任意根:rt [x](y)(= y的第x个根) 任务 您的程序应打印出尽可能多的0到100之间的整数的表达式,然后输出产生的表达式数量。 解决方案必须按顺序打印,格式为n = [expr]。 表达式必须依次使用所有数字2、0、1、5。 表达式必须使用上述符号打印。允许但不需要括号,空格也是如此。运算符的优先级顺序为一元否定,阶乘,乘幂,乘/除和加/减。 该程序无需返回所有数字的解决方案。因此,仅输出0的程序有效。但是,请参阅下面的评分部分。 该程序应在不到15分钟的现代计算机上运行。 您可以编写程序或函数。表达式应打印到STDOUT(或最接近的替代项)。表达式的数量可以打印到STDOUT或作为整数返回。适用标准代码的高尔夫限制。 输出示例 0=2*0*1*5 10=20*1*.5 42=((2+0!)!+1)!/5! 100=20*1*5 4 计分 …

4
单词可以彼此相邻键入吗?
在阅读此书之前,我建议阅读这个小难题:https : //puzzling.stackexchange.com/questions/11408/longest-word-with-adjacent-letters-on-a-keyboard 我希望您编写一个程序,该程序带有一个参数,一个单词(仅小写字母),如果可以用键盘上的相邻键键入该单词,则输出“是”(请参见文章),如果该单词可以,则输出“否”不能用相邻的字母键入。 这是此挑战中使用的键盘布局: ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ | Q | W | E | R | T | Y | U | I | O | P | └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┘ | A | S | D | F | G | H | J | K | L | └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┘ | Z …

2
ASCII艺术生成
任务 编写一个程序或函数,该程序或函数获取一个宽度w和高度为h2的整数a <= w/2和b <= h/2的图像,并输出该图像的图像,其尺寸为ax b。 应该通过以下步骤(或具有相同输出的其他过程)生成ascii艺术: 将wx h图像调整为2ax 2b。(x, y)调整大小后的图像中像素的颜色应等于矩形内具有以下角的原始图像中所有像素的颜色平均值: (floor[x * w/2a], floor[y * h/2b]) (ceil[(x+1) * w/2a], ceil[(y+1) * h/2b]) 调整大小后的图像应通过获取颜色的红色,绿色和蓝色分量的平均值,然后将每个分量设置为该平均值来降低饱和度。 应按照以下规则为每个2x2像素块输出一个字符: 令e = 3 - floor[color/64],其中color表示左上方像素的红色分量(在0..255范围内)。让f,g和h引用此值,但分别用于右上,左下和右下像素。 让z是平均的e,f,g,h。 输出与以下字符相对应的字符(白色代表3 - floor[color/64]零像素,灰色代表非零像素)。 =输出一个空格() 或=输出"如果e (or f) >= 2和'其它。 或=输出,如果g (or h) >= 2和.其它。 或=输出- 或=输出; =输出 \ …

30
计算字符串中每个单词的元音数量
这是一个相当容易的挑战。 挑战 输入将包含null最大长度为100 的字符串(非或为空)。输出字符串中每个单词的元音数量,以空格分隔。 规则 该字符串的长度不能超过100个字符。 该字符串将仅包含字母A-Z,a-z也可以包含空格。 输入必须通过stdin或命令行参数使用。 输出必须在中输出stdout。 您可以编写完整的程序,也可以编写从中获取输入stdin并输出结果的函数。 您的程序/功能需要计算的元音为aeiou和AEIOU。 测试用例 This is the first test case --> 1 1 1 1 1 2 one plus two equals three --> 2 1 1 3 2 aeiou AEIOU --> 5 5 psst --> 0 the quick brown fox jumped over …

2
查找镜像配置以匹配激光目标
更新的评分:由于这项挑战比我预期的要困难,因此我调整了评分。可以解决单个镜像输入的程序是有效的答案。更复杂的程序会为其分数加分。 在PPCG上有几个难题,无法在一面镜子中找到激光路径。在这个难题中,您需要创建一个镜子框以匹配多个激光目标。 您会得到一个框和一个说明激光进入和退出位置的说明。您的程序需要在盒子中精确放置N个双面镜才能满足规格要求。镜子必须成45度角,但可以向前倾斜或向后倾斜。 输入值 您的程序应通过STDIN,命令行参数或以下格式示例的文件接受盒形网格: +--G--+ +abcde+ G | f/////d | /| a// c +-----+ f | +-b-e-+ 字母对(可以使用[a-zA-Z])表示最多52个激光器的输入/输出。盒子内部将放置N面/镜子。框的尺寸将为3 <= W,H <=200。该框由+|-字符组成。框中的镜子数量可以为零,包括零。 输出量 输出应该与输入匹配,除了/字符可以移动和/或更改为\字符。您的程序应将正确的镜像框字符串发送到STDOUT或文件,并在尾随新行添加可选。如果没有任何反射镜放置可以满足输入规格,则输出Impossible\n。可能的解决方案示例: +--G--+ +abcde+ G / | f \ \ d | | a/ \ c +-----+ f / //| +-b-e-+ 测试例 输入: +abcdefghijklmnopqrstuvwxyA-+ |/////////////// | |/////////////// | …
13 code-golf  grid 

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.