编程拼图和代码高尔夫

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

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 

7
行,列,对角线,块
为某个正整数N编写一个正方形的代码块,该代码块的宽度为N个字符,高度为N个字符。 例如,您的N可能为5,该块如下所示: ThisI sMy5B y5Cod eBloc kOkay 该块的行为如下: 提取第一行并作为程序运行时,row需要将准确的文本打印到stdout。 例如,ThisI将打印row。 提取左列并作为程序运行时,col需要将准确的文本打印到stdout。 例如,Tsyek将打印col。 从左上角到右下角的主要对角线被提取并作为程序运行时,dia需要将准确的文本打印到stdout。 例如,TMCoy将打印dia。 当整个块作为程序运行时,包括换行符(带有可选的尾随换行符),blk需要将确切的文本打印到stdout。 例如, ThisI sMy5B y5Cod eBloc kOkay 将打印blk。 细节 所有四个程序都以相同的编程语言运行。 原始块中的N 2个字符可能不是行终止符。 如果您的语言没有标准输出,则可以使用另一种常见的输出方法。所有四个程序的方法都必须相同。 提交的原始块包含最少的不同字符(不包括换行符),则获胜。决胜局以较小的N进入提交。

1
俄罗斯方块七巧板
介绍 七巧板是经典的难题,涉及将积木排列/装配成各种形状。来自中文七巧板-字面意思是“七个技巧板”。让我们采用这个想法,并使用七个Tetrominos块填充网格。 挑战 编写一个函数或程序,该函数或程序将网格坐标数组作为输入,并输出一个完整的10 x 20的网格,其中填充有俄罗斯方块,但指定坐标除外。 通过尝试保持片段分布均匀来优化您的分数。 标准 使用此坐标粘贴框完成任务。有五组坐标。随意修改写入坐标的格式,但不要修改值。 数据集#2无法解决-在这种情况下,只需输出填充了输入像元的网格(即X孔所在的位置)。 输入值 网格坐标表示网格中的“孔”。这些细胞不能包含Tetromino的任何部分。 网格坐标: (0,0), (1,0), (2,0), ... (9,0) (0,1), (1,1), (2,1), ... (9,1) . . . (0,19), (1,19), (2,19), ... (9,19) 使用您的编程语言选择的数组样式输入坐标。 用X或其他可打印的ASCII表示网格中的孔。 输出量 使用标准Tetris网格大小(宽10单元,高20单元),当且仅当使用Tetromino碎片可以完全完美地填充网格时,才打印解决方案网格。 用字母构造件I,O,L,J,T,Z,S如下: I I L J I OO L J T ZZ SS I OO LL …

2
单词搜索难题生成
给定一个字符串列表,找到包含每个初始字符串的最小平方矩阵。字符串可能会水平,垂直或对角线出现,并且会向前或向后出现,例如此问题“ 单词搜索难题”。 单词应放置在正方形中,每个方向(水平,垂直和对角线)至少应包含一个单词。单词应该只出现一次。 因此,输入只是单词列表。例如:CAT, TRAIN, CUBE, BICYCLE。一种可能的解决方案是: B N * * * * * * I * * C A T * A C * * * * * R * Y * * C * T * * C * U * * * * * L B * …

6
迭代除数扭曲
定义 设m和n为正整数。我们说m是一个除数扭曲的n,如果存在整数1 < a ≤ b,使得n = a*b和m = (a - 1)*(b + 1) + 1。如果m可以从获得n通过施加零个或多个除数的曲折,然后m是一个后代的n。请注意,每个数字都是其自己的后代。 例如,考虑n = 16。自以来,我们可以选择a = 2和。然后b = 82*8 = 16 (a - 1)*(b + 1) + 1 = 1*9 + 1 = 10 这表明10是的除数扭曲16。与a = 2和b = 5,然后我们看到7是的除数扭曲10。因此7是的后代16。 任务 给定一个正整数n,n以递增顺序计算的后代,不能重复。 规则 不允许使用内置运算来计算数字的除数。 完整的程序和函数都将被接受,并且只要它是经过排序且无重复的,就可以返回集合数据类型(如某种类型的集合)。最低字节数获胜,并且不允许出现标准漏洞。 测试用例 1 …

3
自动元代码高尔夫球
您已经厌倦了所有的代码高尔夫挑战。因此,您决定编写一个程序,该程序将自动为您编写一些Python代码。有3个测试用例: print quickSort([0,7,3,-1,8,10,57,2]) def quickSort(arr): less = [] pivotList = [] more = [] if len(arr) <= 1: return arr else: pivot = arr[0] for i in arr: if i < pivot: less.append(i) elif i > pivot: more.append(i) else: pivotList.append(i) less = quickSort(less) more = quickSort(more) return less + pivotList …
13 python  metagolf 

1
公平分享披萨
与朋友共享披萨的困难在于,很难确保每个人都得到相同数量的意大利辣香肠。因此,您的任务是决定如何公平地切片披萨,以便每个人都开心。 方向 编写一个程序,给定圆形比萨饼上意大利辣味香肠的位置列表和要制作的切片数量,输出一个程序,将比萨饼切成的角度列表,以使每个切片上的比萨饼数量相同它。 披萨只有一个馅料:意大利辣香肠。 您的朋友不在乎切片的大小,只是他们没有从任何意大利辣香肠中被骗。 比萨饼是一个以原点为中心的圆(0, 0),半径为1。 意大利辣香肠是圆心,只要输入内容表明它们居中且半径为0.1 将输入作为代表要制作的切片数量的整数,以及代表意大利辣香肠在直角坐标系上的位置的有序对列表。(以任何合理的格式) 输出应该是一个以弧度表示的角度列表,该角度表示比萨的“切口”的位置(在范围内0 <= a < 2pi)。(以任何合理的格式)(精度至少应为+/- 1e-5。) 您可以在切片上放上一部分意大利辣香肠(例如,如果一个比萨饼上有一个意大利辣香肠,并且需要由10个人共享,则将比萨切成10次,全部切成薄片切成意大利辣香肠。但是要确保它是公平的) !) 切成薄片(可能必须)切成多个意大利辣味香肠。 意大利辣味香肠可能会重叠。 例子 输入: 8 people, pepperonis: (0.4, 0.2), (-0.3, 0.1), (-0.022, -0.5), (0.3, -0.32) 可能的有效输出: slices at: 0, 0.46365, 0.68916, 2.81984, 3.14159, 4.66842, 4.86957, 5.46554 这是此示例的可视化(每个人都可以得到一半的意大利辣香肠): 更多示例: Input: 9 people, 1 pepperoni …

11
计算逆XOR
让f是位域(映射函数{0 1}的大小)n+1大小的位域n应用XOR到i日和i+1次位并将结果写入新位域。 例: f("0101") = "111" 非正式计算: 0 XOR 1 = 1 1 XOR 0 = 1 0 XOR 1 = 1 让f_inverse是的反函数f。由于逆不是唯一的,因此f_inverse返回一个有效的解决方案。 输入:位字段为字符串(即"0101111101011")和给定的自然数k 输出:位字段作为字符串,因此如果f_inverse将k时间应用于输入位字段,则字符串包含结果。(即f_inverse(f_inverse(f_inverse(input)))) 获奖标准:人物最少 奖金: -25如果f_inverse不递归/迭代地应用字符if ,则直接计算输出字符串 Testscript: a = "011001" k = 3 def f(a): k = len(a) r = "" for i in xrange(k-1): r += …
13 code-golf 

4
解决战块剧院难题
游戏BattleBlock Theatre有时包含一个谜题,这是Lights Out的广义版本。您有三个相邻的块,每个块表示一个介于1到4之间的水平,包括小节,例如: | |||| || 如果触摸一个块,则该块以及任何相邻的块都会增加其级别(从4换回1)。当所有三个块都显示相同的级别(与哪个级别无关)时,难题就解决了。由于触摸块的顺序无关紧要,因此我们通过触摸每个块的频率来表示一种解决方案。上述输入的最佳解决方案是201: | --> || --> ||| ||| |||| | || ||| || || || --> ||| 游戏可以很容易地概括出任意数量的方块,尽管对于某些数字而言,并非所有配置都可以解决。 挑战 给定一系列的块级别,返回需要触摸每个块以解决难题的频率。例如,上面的示例将作为给出142并可能产生201结果。如果没有解决方案,请返回您选择的一致输出,这与所有可能的解决方案(例如-1,空字符串)是有区别的。 您可以编写函数或程序,通过STDIN,命令行参数或函数参数以任何方便的列表或字符串格式进行输入,并通过返回值或通过打印到STDOUT进行类似输出。 您的代码应在一分钟内在一台合理的机器上返回所有测试用例的正确结果。(这不是一个完全严格的限制,因此,如果您的解决方案花费一分十秒,那很好,但是如果花费三分钟,那不是很好。好的算法可以在几秒钟内轻松解决它们。) 这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。 例子 解决方案不是唯一的,因此您可能会得到不同的结果。 Input Output 1 0 11 00 12 No solution 142 201 434 101 222 000 4113 0230 32444 No solution …

2
将字符串与上下文连接
带上下文的字符串 出于此挑战的目的,具有上下文的字符串是字符串的三元组,称为左上下文,数据部分和右上下文。它表示较长字符串的子字符串。我们使用垂直管道|作为分隔符,因此具有上下文的字符串的示例为cod|e-go|lf,其中左侧上下文为cod,数据为e-go,右侧上下文为lf。本实施例代表子串e-go的code-golf。 现在,要使用上下文将两个字符串连接起来,我们使用aa|bcc|dee和cc|de|eee作为示例,进行如下操作。我们按照图中的对齐字符串 a a|b c c|d e e c c|d e|e e e 以便它们的数据部分相邻。在这种情况下,串联的数据部分是数据部分的串联bccde。在这种情况下,左边的上下文是进一步延伸到第一数据部分左边的部分aa。同样,正确的上下文是eee,因此串联是带有context的字符串aa|bccde|eee。对于第二个示例,请考虑a|bb|cd和aabb|cd|,其中第二个单词的权利上下文为空。对齐图是 a|b b|c d a a b b|c d| 第二个单词的左上下文比第一个单词的左上下文延伸得更多。的串联是aa|bbcd|。 但是,等等,有一个陷阱:如果对齐图的字母不匹配,则表示串联不存在!作为一个例子,对图aa|bb|cc和c|c|cIS a a|b b|c c c|c|c 第四列的b和c不一致,因此无法将它们串联在一起。 任务 您的工作是编写一个程序,该程序使用上下文中包含两个字符串的字符串,它们的各部分之间的分隔|符如上所述,如果存在则输出其串联,否则将其串联。“其他”可以是任何值,包括没有输出,只要它不是带上下文的有效字符串,并且在所有情况下都相同。但是,抛出错误是不可接受的。您可以提供STDIN-to-STDOUT程序或函数,也可以接受匿名函数。最小的字节数获胜,并且不允许出现标准漏洞。 测试用例 aa|bcc|dee cc|de|eee -> aa|bccde|eee a|bb|cd aabb|cd| -> aa|bbcd| a|b|cccd aab|cc|c -> aa|bcc|cd a|b|c b||cd -> a|b|cd …
13 code-golf  string 

6
Golfmas 12天
挑战 在圣诞节的12天中的每一天,根据日期输出相应的“圣诞节12天”经文,否则输出“我希望每天都能圣诞节”的合唱。 \n允许使用前导和/或尾随换行符()和尾随空格。您可能没有从任何外部来源阅读。 基本上,您需要做的是读取系统日期并输出“圣诞节12天”的相应经文。 圣诞节的12天 圣诞节的十二天是基督教的节日,从圣诞节(12月25日)开始,到1月5日结束。 例子 如果日期是12月25日(打印出最短/第一节经文): On the first day of Christmas my true love sent to me: a Partridge in a Pear Tree 如果日期是12月31日(打印第七节经文): On the seventh day of Christmas my true love sent to me: 7 Swans a Swimming 6 Geese a Laying 5 Golden Rings …

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.