Questions tagged «code-golf»

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

5
打高尔夫球您最喜欢的Minecraft工具
在Minecraft中,默认项目纹理都是相当简单的16×16像素图像,这使它们看起来像打高尔夫球的理想选择。 下面是简化的五个“核心”钻石的Minecraft工具纹理:鹤嘴锄,铲,斧,剑,和锄头。 所显示的图像被放大以显示其细节。单击图像以查看其正确尺寸的16×16像素版本。 为了使打高尔夫球更容易,我将它们从原始文件中修改为仅使用五种相同的24位RGB颜色: R=75 G=82 B=73 为背景。 R=51 G=235 B=203 用于金刚石工具头。 R=14 G=63 B=54 钻石轮廓。 R=137 G=103 B=39 用于木柄芯。 R=40 G=30 B=11 用于木柄轮廓。 选择自己喜欢的工具在五个的和写一个程序,它的输出在任何共同无损真彩色图像格式简化的16×16像素的纹理(例如bpm,png,ppm等等)。 因此,例如,如果您选择了斧头,则将编写一个输出此图像的程序: 请勿输入任何内容,也不需要网络连接。可以将图像输出为带有您选择的名称的文件,或者可以将原始图像文件数据输出到stdout,或者您可以简单地显示图像。 你只需要选择一个五个图像。以最少的字节数输出五个图像中的任何一个的程序就是赢家。 您可以为其中一幅以上的图像编写程序,但是只有字节数最少的图像才计入分数。如果平局,则获最高票数的职位获胜。 如果您喜欢PPCG并玩Minecraft,我邀请您加入我们的Minecraft试用服务器。只需在专用聊天室中询问即可。

17
计算器作为数字和运算符的列表
您的任务是获取一个整数或运算符的参数列表,并按如下方式解析它们: 当前有一个运算符,以+开头。 每次找到操作员时,当前操作员都会更改为该操作员。 可能的运算符为:“ +”,“-”,“ *”,“ /”和“%”,它们对应于C语言和大多数语言的含义。 保留了一个从0开始的运行解决方案。 每次找到整数,解决方案都会根据运算符的数字进行修改。例如,如果运算符为“ /”,则解决方案除以数字。 如果一个运算将导致一个混合数(即一个十进制数),则必须将其下限返回整数(即必须将十进制数切掉)。 输出最终解决方案。 例如: 该参数5 8 25 * 9 6 2 - 104 / 4 7 + 6 % 14将导致: 5 8 25 * 9 6 2 - 104 / 4 7 + 6 % 14 0 5 13 38 342 …
20 code-golf  number 

16
编写一个程序,查找字符串中出现次数最多的配对字母
程序必须输出配对最多的字母。例如,如果为您的程序提供了以下字符串: "Sally's friend Bobby searched for seashells." 它必须输出,L因为"ll"发生两次,这比另一对更频繁"bb"。 规则: 如果出现多个字母的位置排在第一位,则以字母顺序输出所有字母(例如,"Sally's friends Jimmy and Bobby rummaged for seashells."应同时输出两个LAND M(或"LM"请输出),因为它们都比其他字母对更频繁出现。) 三倍,四倍等的字母算作一对(例如"lll"in中"willless"仅算作一对L。) 字母对必须在一个单词中(例如,"Sally's sociable friends Sammy and Bobby searched for fabulous seashells."应该输出,L而不是S因为尽管"ss"出现的次数多于"ll",但它们之间用空格隔开。) 仅计算英文字母中的字母 大小写无关紧要(例如"Ss",与"SS"或相同"ss",并且全部计为一对S。) 您可以从任何地方阅读您的输入。最短的代码胜出。

9
消除死代码
死代码坐在那里什么也没做,盯着我们知道它永远不会被执行……但是今天我们可以报仇了。 规格 输入将是多行字符串。 每行可以是一个赋值或一个表达式。 分配 作业的形式为 <name> = number name是字母,下划线和数字的序列,但不能以数字开头。 变量可以被分配任意次。 表达 表达式的形式 <var_name OR number> <operation> <var_name OR number> ... 表达式可以是以下各项的任意组合: 已经定义的变量 基本算术运算符 +-*/ 数字(整数) 预期产量 您应该输出带有多余赋值的字符串,该赋值已删除,其后的任何表达式都不会使用这些赋值。请注意,如果在执行使用变量的表达式之前执行了对同一变量的附加分配,则分配也可以变得多余。 测试用例 在 a = 10 a * 3 出 a = 10 a * 3 在 foo = 8 2 - 1 …

6
源代码自拍照
目的: 一位大师曾经说过,最好从左上角对角线拍摄完美的代码自拍照。代码自拍照几乎像Quine,但顺时针旋转了45度。您的任务是编写一个输出代码自拍照的程序。 规则: 您可以使用任何编程语言。 您的程序不应从文件,文件名,网络或其他任何内容中获取任何输入。 强制标准: 自拍照是关于动机和背景的,因此空格(以及其他不可见的内容,如换行符等)不算作字符计数的一部分。限制所有可见字符在正确的45度旋转位置上输出,而所有不可见字符并不限于正确的45度旋转位置。就像普通自拍照上的调色板一样,代码自拍照必须执行的操作是它包含至少16个字符:{a-zA-Z0-9} 例: 如果此示例是有效的源代码: Output abcd Output efgh Output ijkl Output mnop 示例代码应输出以下内容: O O u O u t O u t p u t p u t p u t p u t u t a t e b i f c m j …
20 code-golf  quine 

2
曼哈顿最坏情况排除
想象一下W到H的正方形正方形网格,它们以环形环绕。将项目如下放置到网格上。 第一项可以放置在任何正方形上,但是后续项一定不能在任何先前项的曼哈顿距离 R内(也称为范围R的冯·诺伊曼邻域)。仔细选择位置可以在没有更多有效位置之前将大量项目装配到网格上。但是,请考虑相反的目标:可以放置的且没有其他有效位置的最少物品数是多少? 这是半径5的禁区: 这是另一个半径5排除区域,这次是在边缘附近,因此包裹行为很明显: 输入值 三个整数: W:网格宽度(正整数) H:网格高度(正整数) R:禁区半径(非负整数) 输出量 整数N,它是可以放置的最小项数,可以防止任何其他有效的放置。 细节 半径为零时,排除区域为1平方(放置该项目的区域)。 半径N排除了在N个正交步长中可以到达的区域(请记住边缘以环形方式缠绕)。 您的代码必须适用于琐碎的R = 0情况,但不需要适用于W = 0或H = 0。 您的代码还必须处理R > W或R > H的情况。 时限和测试用例 您的代码必须能够处理所有测试用例,并且每个测试用例必须在5分钟内完成。这应该很容易(示例JavaScript解决方案每个测试用例需要花费几秒钟的时间)。期限主要是为了排除极端暴力手段。示例方法仍然是蛮力的。 如果您的代码在一台计算机上在5分钟内完成,但在另一台计算机上没有完成,这将足够接近。 输入形式的测试用例:输出为W H R : N 5 4 4 : 1 5 4 3 : 2 5 4 2 : 2 …

3
岛屿地图(和河流)
介绍 许多世纪以来,有一条从未被绘制过的河流。制图师协会想要绘制河流图,但是他们从未成功过-出于某种原因,他们派去绘制河流图的所有制图师都被该地区的野生动物吞噬了。需要不同的方法。 输入说明 该区域是长m和宽单元格的矩形网格n。左下角0,0的单元格是,右上角的单元格是m-1,n-1。m并且n在输入中以元组形式提供m,n。 通过使用长距离地理探测技术,已经确定了河流周围岛屿的位置。也已经确定了岛的大小(即,岛占据了多少个单元格),但形状尚未确定。我们在一个元组s,x,y中提供此信息,该元组s是该岛的大小,x并且y是该岛的一个特定单元格的x和y位置。输入中的每个元组均以空格分隔,因此这是示例输入: 7,7 2,0,0 2,3,1 2,6,1 2,4,3 2,2,4 8,0,6 1,2,6 3,4,6 为了更清楚地说明,这是图形上的输入: y 6|8 1 3 5| 4| 2 3| 2 2| 1| 2 2 0|2 ======= 0123456 x 输出说明 使用ASCII字符输出地图以表示区域的一部分。每个单元格将是#(陆地)或.(水)。地图应遵循以下规则: 定义。岛屿是一组正交的陆地单元,完全由河流单元和/或该区域的边界限制。 定义。河流是一组正交的水单元,它们完全由陆地单元和/或该区域的边界限制,并且不包含“湖泊”(2x2的水单元区域)。 规则。地图应包含一条河流。 规则。输入中每个编号的单元格应为包含精确s单元格的孤岛的一部分。 规则。地图中的每个岛应在输入中精确包含一个编号的单元格。 规则。每个输入都有一个唯一的映射。 这是示例输入的输出: #.#.##. #....#. #.##... ##..##. ###.... ...##.# ##....# 这是另一个输入和输出。 输入: …

3
这是一棵真正的树吗?
您应该编写一个程序或函数来接收字符串作为输入,然后输出或返回(如果输入是ASCII树)。 _ \/ / \_/ | | ASCII树由字符/ \ | _ spaces和组成newlines。 非空白字符通过线段连接其单元格的两个边缘点: / 连接左下角和右上角 \ 连接右下角和左上角 | 连接底边和顶边的中点 _ 连接左下角和右下角以及底边的中点 (请注意,这意味着|只能连接|或_但不与/或\)。 如果遵循以下规则,则ASCII图片称为树: 恰好一个字符的一个点(根)碰到最后一行的底部边缘。 您可以通过以下方式到达任何线段的任意点: 从根开始 仅使用线段 永远不要朝下(甚至不向侧面) 输入值 一个由字符组成/ \ | _ space并且newline包含至少一个非空白字符的字符串。 您可以选择两种输入格式: 树周围没有不必要的空格(如示例所示)。 除了行右侧的空格使所有行具有相同的长度外,树周围没有不必要的空格(如示例所示)。 尾随换行符是可选的。 输出量 如果输入是ascii树,则为一致的真实值。 一致的falsy如果输入不是一个ASCII树值。 例子 有效树: | _ \/ / \_/ | | …

9
每个维度的总和
您将获得一个多维整数数组。每个尺寸都有固定的尺寸(因此,如果尺寸为2D,则始终为矩形)。您的程序应计算每个维度中的总和,并将该总和作为该维度中新的最后一项附加。 假设输入和输出数组为A和B,并且A 的维度i的大小为n i。B将具有与A相同的维数,并且维i的大小将为n i +1。B j 1,j 2,...,j m是A k 1,k 2,...,k m的和,其中: ķ 我 = j的我如果j 我 <= N 我 如果j i = n i +1 则0 <k i <= n i 对于输入: [[1 2 3] [4 5 6]] 您的程序(或函数)应输出: [[1 2 3 6] [4 5 6 15] …

1
一组数字中最高的塔
编辑:问题结尾的赏金难题。 给定一组1位数字,您应该确定它们可以建造多高的塔。 这些数字生活在一个水平的平面上,可以站立。没有数字希望与多位数字混淆,因此它们的两边总是有空白。 4 2 1 9 6 8 一个数字可以位于另一个数字之上: 2 6 或可以由它下面的对角线另外两个支撑: 9 5 8 底部的重量必须支撑上部的重量(如果有),再加上上部的重量始终为1。如果有两个支撑物,它们将鞋帮的总重量平均分配(50%-50%)。 每个数字的权重都是1,与它的值无关。 如果一个数字支持另外两个数字,则它必须能够支持其相应权重的总和。一个数字最多可以支持其数值。 一些有效的塔(有高度4,3和5): 0 7 1 5 1 1 1 9 supports a total weight of 1.5 = (1+1/2)/2 + (1+1/2)/2 2 5 4 5 5 3 5 9 5 5 6 3 …
20 code-golf 

9
识别一半的扑克牌
赌场使用以下纸牌。(*是卡服的一个D,S,C或H。) _________ _________ _________ _________ _________ | | | | | | | | | | | | | | | * | | * * | | * * | | | | * | | | | | | | | * | | | | * | …

12
将括号和方括号评估为整数
编写一个程序,()[]使用满足以下要求的四个字符组成的字符串: 每个左括号(都有一个匹配的右括号)。 每个左括号[都有一个匹配的右括号]。 配对的括号和方括号不会重叠。例如[(])是无效的,因为匹配括号没有完全包含在匹配括号中,反之亦然。 第一个和最后一个字符是一对匹配的括号或括号。所以([]([]))和[[]([])]是有效的,但[]([])不是。 (输入格式的语法为<input> ::= [<input>*] | (<input>*)。) 每对匹配的括号和括号都得出一个非负整数: 匹配括号内的对值全部相加。空匹配()具有价值0。 匹配括号内的对值全部相乘。空匹配[]具有价值1。 (一个数字的总和或乘积是相同的数字。) 例如,([](())([][])[()][([[][]][][])([][])])可以细分并评估为9: ([](())([][])[()][([[][]][][])([][])]) <input> (1 (0 )(1 1 )[0 ][([1 1 ]1 1 )(1 1 )]) <handle empty matches> (1 0 2 0 [(1 1 1 )2 ]) <next level of matches> (1 0 2 0 [3 …

4
(有点)小学生生日悖论
背景 在生日悖论是概率论这颠覆流行的问题(大多数人)的数学直觉。问题陈述是: 给定N个人,他们中至少有两个生日相同(不考虑年份)的概率是多少? 通常通过完全忽略leap日来简化此问题。在这种情况下,N = 23的答案是P(23)≈0.5072972(作为常见示例)。链接的维基百科文章解释了如何得出这种可能性。另外,此Numberphile视频也做得很好。 但是,对于这个挑战,我们想做正确的事,不要忽略leap年。这有点复杂,因为现在需要添加2月29日,但是这个特定的生日比其他所有生日都少。 我们还将使用完整的leap年规则: 如果一年可被400整除,则表示a年。 否则,如果一年可被100整除,则不是a年。 否则,如果将一年除以4,则表示a年。 否则,这不是a年。 困惑?这意味着1700、1800、1900、2100、2200、2300年不是leap年,而是1600、2000、2400年(以及其他任何可以除以4的年份)。该日历每400年重复一次,我们将假设这400年中的生日统一分配。 现在N = 23的校正结果为P(23)≈0.5068761。 挑战 给定一个整数1 ≤ N < 100,请N考虑the年规则,确定至少两个人中有相同生日的概率。结果应该是浮点数或定点数,至少精确到小数点后6位。截断尾随零是可以接受的。 您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行自变量或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。 您的解决方案必须能够在几秒钟内产生所有99个输入的输出。这主要是为了排除使用大量样本的蒙特卡洛方法,因此,如果您以过于缓慢的深奥语言使用主要是快速且精确的算法,那么我愿意在这条规则上留有余地。 测试用例 这是完整的结果表: 1 => 0.000000 2 => 0.002737 3 => 0.008195 4 => 0.016337 5 => 0.027104 6 => 0.040416 7 => 0.056171 8 => 0.074251 …

3
删除通畅的矩形
该图像是通过将7个不同颜色的矩形彼此叠加而制成的: 黑色和栗色矩形不受阻碍,也就是说,上方没有其他矩形。 编写一个程序,以获取诸如此类的图像并删除任何单个无障碍的矩形,然后输出结果图像。 例 如果您在上面的图像上运行程序,并在输出上重新运行它,则程序可能会像这样进行。 运行1-黑色被移除(可能是栗色的): 运行2-栗色已移除(唯一选择): 运行3-删除黄色(唯一选择): 运行4-已删除蓝色(本来可以是绿色): 运行5-移除绿色(唯一选择): 运行6-移除棕色(唯一选择): 运行7-移除红色(唯一选择): 任何其他运行都应产生相同的白色图像。 希望Stack Exchange不会无损地压缩任何这些图像。 图像将始终具有白色背景,并且每个矩形都是唯一的RGB颜色,而不是白色。 您可以假定图像始终可以解释为一组重叠的矩形。具体来说,您可以假定,对于特定颜色,该颜色最接近图像顶部的像素是该颜色矩形的上边缘的一部分。底部,左侧和右侧边缘也是如此。 因此,例如,在此图像中,红色矩形的顶部边缘将恰好在黄色矩形的底部边缘下方,因为橙色矩形覆盖了旧的红色顶部边缘: 在此图像中,可以先删除红色矩形(以及黑色/栗色/橙色/灰色): 当下部矩形的顺序不明确时,可以给它们任何顺序。 例如,此处的左侧图像可能变为中间或右侧: 输出不应有矛盾的重叠(因此应该可以使用画家的算法来实现)。因此,在此图像中(感谢user23013),它必须在橙色矩形下为绿色: 额外细节 图像和矩形可以具有任何尺寸。 矩形可能会触及图像边框。 最多可能有256 3-1 个矩形。 如果输入是全白的,则输出也应该是白色。 您可以使用图像库。 输入应该是图像文件名或原始图像数据。它可以来自stdin或命令行。 可以将输出写入相同或另一个图像文件,将原始图像输出到stdout,或简单地显示。 允许使用任何常见的无损Truecolor图像文件格式。 字节最少的提交将获胜。

7
我的世界胸部放置
电子游戏Minecraft就是要在构成虚拟世界的3D 整数格子中放置和移除不同类型的块。每个晶格点可以仅包含一个块,也可以为空(正式为“ air ”块)。在此挑战中,我们将只关注3D世界的一个水平2D平面和一种块:宝箱。 箱子让玩家存放物品。当两个箱子在同一水平面内正交相邻时,它们的纹理会链接在一起,形成容量为两倍的双箱子。没有比双胸大的东西了。没有三联箱,也没有四联箱。 仅当胸块的四个正交相邻点都为空时,或者如果正好包含一个尚未属于双胸的一部分的胸块时,才可以将其放置在空的网格点中。这些放置规则确保了哪个胸块链接在一起形成双胸永远不会有任何歧义。 例如,假设.是一个空白空间并且C是一个箱子:(数字也是空白空间,仅用于标识目的。) .......C.. .1.C2.C3.. ........5C .CC4..CC.. .......... 箱子可以放置在位置1,因为它的4个邻居是空的。 可以将胸部放置在位置2中,因为相邻的胸部还不是双胸部的一部分。 不能将箱子放在位置3,因为双箱子的形成方式会含糊不清。 无法将箱子放在位置4,因为相邻的箱子已经是双箱子的一部分。 可以在位置5放置一个箱子。对角相邻的双箱子不会影响任何东西。 假设超出网格的区域是空的,.则将网格中的每个区域更改为一个*是否可以在其中放置箱子的结果: ******.C** ***C**C.** *..***..*C .CC.*.CC.* *..***..** 当然,并不是所有的*空间都可以同时被箱子占用,但是如果您只有一个箱子,则可以将其放置在任何一个箱子中。 挑战 编写一个程序和函数,该程序或函数接受.和C网格,如果可以在其中放置一个箱子,则将其全部更改.为a *,以打印或返回结果网格。 输入可以来自stdin或文件,也可以来自函数的字符串参数。 您可以假设输入格式正确-即一个完美的矩形文本网格,至少包含1个字符的宽度和高度,仅包含.和。C您可以选择假设最后一行之后有换行符(并且输出中可能有一个换行符) )。 您可以假设输入中的箱子排列与上述规则一致。关于哪个箱子形成双箱子永远不会有任何歧义。 如果需要,你可以使用任何三个不同的打印的ASCII到位的人物.,C和*。您不能使用其他方式代替换行符。 所有的箱子都是正常的箱子。没有被困的箱子或下者的箱子。 计分 字节最少的提交将获胜。 对于与Minecraft相关的挑战,它更具挑战性,请尝试Nether Portal Detection。
20 code-golf 

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.