编程拼图和代码高尔夫

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

1
行军广场查询
Marching Squares是计算机图形学中的一种算法,用于从样本网格中恢复2D等值线(有关3D设置,另请参见其兄长Marching Cubes)。想法是独立处理网格的每个像元,并根据其角处的值确定通过该像元的轮廓。 此过程的第一步是根据拐角是在轮廓值上方还是下方,确定轮廓连接哪些边缘。为简单起见,我们只考虑沿value的轮廓0,这样我们对拐角是正还是负感兴趣。有一些情况可以区分:24 = 16 图片来源:Wikipedia 白色和黑色的识别在这里并不重要,但是为了明确起见,请说白色为正,黑色为负。我们将忽略其中一个角正好是1的情况0。 鞍点(案例5和案例10)提供了一些额外的困难:仅通过查看拐角并不清楚应该使用哪些对角线。这可以通过找到四个角的平均值(即中心值的近似值)并选择对角线以使轮廓将中心与带有相反符号的角分开来解决。如果平均值恰好是0,则可以选择任何一种情况。 通常,这16种情况仅存储在查找表中。这对于提高效率非常有用,但是当然,我们希望此处的代码简短。因此,您的任务是执行此查找步骤,并以尽可能少的代码打印出外壳的ASCII表示形式。 挑战 您将以选择的固定顺序获得四个角(非零整数)的值。然后,您应该生成轮廓的正确布局,以正确解决鞍点情况。 您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行自变量或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。 输入可以采用任何方便的字符串或列表格式。 这16种情况将使用以下5x5块之一以ASCII艺术形式表示: o---o o---o o---o | | | | | | | | | |---| | | | | | | | | | | o---o o---o o---o o---o o---o o---o o---o |/ | | \| | …

7
最重的递增子序列
子序列是可以通过删除某些元素而不更改其余元素的顺序而从另一个序列派生的序列。严格增加的子序列是每个元素都大于前一个元素的子序列。 序列中增加最重的子序列是元素数量总和最大的严格增加的子序列。 用您选择的语言实现一个程序或函数,该程序或函数查找给定的非负整数列表中最重的递增子序列的元素和。 例子: [] -> 0 ([]) [3] -> 3 ([3]) [3, 2, 1] -> 3 ([3]) [3, 2, 5, 6] -> 14 ([3, 5, 6]) [9, 3, 2, 1, 4] -> 9 ([9]) [3, 4, 1, 4, 1] -> 7 ([3, 4]) [9, 1, 2, 3, 4] -> …

8
你今天有心情吗?
Debian Linux发行版(以及基于Debian的发行版,如Ubuntu,Kali和其他发行版)使用称为APT的软件包管理器。要安装程序,foo您需要在终端中输入 sudo apt-get install foo 以下是APT的一个小复活节彩蛋: apt-get moo 键入后将产生以下输出 (__) (oo) /------\/ / | || * /\---/\ ~~ ~~ ..."Have you mooed today?"... 您必须编写一个程序,以尽可能少的字节产生此EXACT输出。(包括尾随空格和换行符) 这是与输出相同的输出,\n以表示换行符,并以a *表示尾随空格 (__)*\n (oo)*\n /------\/*\n / | ||***\n * /\---/\*\n ~~ ~~***\n ..."Have you mooed today?"...\n 根据注释中的要求,这是mooing的md5sum。 35aa920972944a9cc26899ba50024115 -

1
您称此为优化吗?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 任务很简单,可以执行相同任务的2个代码段,乍一看似乎一个优化的很好,但实际上比另一个慢得多。 只有一条规则: 两个代码段都必须以完全相同的输出结束(对于相同的给定输入,如果有的话)。

3
格式化浮点数与十进制完全相同
任何二进制浮点都可以完全以十进制格式设置。结果字符串可能有些长,但是有可能。在关于浮点的文章中,我谈到了精度的重要性,现在我需要此功能。面临的挑战是编写一个程序或函数,该程序或函数将浮点值作为输入并格式化精确的十进制字符串作为输出。 为了确保我们使用正确的浮点数,必须提供精确的格式作为程序的输入。此格式将是两个整数Significand Exponent,实际的浮点值是Significand * 2 ^ Exponent。请注意,两个值都可以为负。 细节: 必须支持至少32位浮点数的范围和精度(没有输入会超出该范围) 十进制格式的值必须是精确的表示形式(仅足够接近以保证正确的倒圆角浮点不够好) 我们不信任标准库浮点格式化功能足够正确或不够快(例如:)printf,因此可能无法使用它们。您必须进行格式化。允许使用集成格式/转换功能。 可能没有任何前导零或尾随零,除非在.没有整数部分的情况下,前面必须有一个前导零。 允许一个功能或整个程序。 例子: 1 -2 => 0.25 17 -3 => 2.125 -123 11 => -251904 17 50 => 19140298416324608 23 -13 => 0.0028076171875 3 120 => 3987683987354747618711421180841033728 3 -50 => 0.00000000000000266453525910037569701671600341796875 -3 -50 => -0.00000000000000266453525910037569701671600341796875 10 -2 => 2.5 …

1
确定有理坐标是否在右Sierpinski三角形中
所述的Sierpinski三角形是一组其通过用一个三角形起始和反复分裂的所有三角形分成四个全等三角形并除去中心三角形构造在平面上的点。右侧的Sierpinski三角形在和处有角(0,0),如下所示:(0,1)(1,0) 该集合的一些等效定义如下: n全部针对上述过程的第t次迭代n。 (x,y)带有0 <= x <= 1和的点0 <= y <= 1,对于所有正整数n,nx和y的二进制展开式中的th位都不都是1。 让 T = {(0,0),(1,0),(0,1)} 让f上套由以下定义2D点的函数: f(X) = {(0,0)} ∪ {(x+t)/2 | x∈X, t∈T} 然后右谢尔宾斯基三角形是拓扑封闭的的至少固定的点的(通过一组容纳)f。 让S是正方形{(x,y) | 0<=x<=1 and 0<=y<=1} 让g(X) = S ∩ {(x+t)/2 | x∈(X), t∈T}(T如上定义) 然后,右边的Sierpinski三角形是的最大固定点g。 挑战 编写一个程序或函数,该程序或函数接受4个整数,a,b,c,d如果(a/b,c/d)属于正确的Sierpinski三角形,则给出真实值,否则给出假值。 计分 这是代码高尔夫球。以字节为单位的最短代码获胜。 测试用例 以下是右边的Sierpinski三角形: 0 1 0 1 …

1
替代变量的唯一输出数
给定一组这样的公式: bacb bcab cbba abbc 给出一种算法,该算法可以找到在每个公式中用每个变量替换“ 0”或“ 1”时可获得的唯一结果的数量。 有(k!)^2公式,每个公式都有2k-1变量和k^2术语。用表示你的渐近性k。 最快的算法获胜。如果出现平局,则使用渐近内存使用率较低的解决方案为准。如果那仍然是平局,则第一帖获胜。 对于上述示例,通过替换变量可以获得以下结果: 1110, 0110, 1001, 0100, 1000, 0000, 0010, 1101, 1111, 0001, 1011, 0111 因此正确的答案是12。除其他外,1010不能使用上述公式得出。 我做了三个试验的情况下,与相应的解决方案,230,12076和1446672。

7
找到最长的音乐子串
一个音乐弦线是可以在钢琴键盘上播放任何字符串。 对于那些没有被迫在小时候学习钢琴的人来说,这就是键盘的样子。 所以该字符串feed a dead cabbage是一个音乐字符串,因为每个单个字母都对应于其中一个。 您的挑战是编写一个程序,该程序将一个字符串作为来自STDIN的输入,并找到最长的音乐子字符串。然后,您的程序必须打印子字符串及其长度。这是一些示例输入/输出。 输入:“喂我!我饿了!” 输出:提要4 输入:不不不,没有musistrin! 输出:0 输入: "A **bad** !!!fAd82342" 输出:abadfad 7 输入:“打高尔夫球好!” 输出:dg 2 规则 您的输出可以是大写或小写字母,但不能有标点或空格。 输入字符串中会有大写和标点符号,但这并不影响子字符串是否被视为“音乐”。 音乐子字符串和数字之间必须有一个空格。

2
ASCII艺术方形仿射形
编写可以创建仿射形的最小程序。您可以使用任何会产生与以下规则相同的结果的方法。您不必使用建议方法中的任何想法! 您的程序将有两个输入,第一个输入以074从0到7的三位数组成的格式定义模式。第二个输入将定义大小,3将为8x8,4将为16x16,依此类推(2 ^ n)。您的程序必须为从0(1x1)到至少5(32x32)的所有大小输出正确的结果。如果它为更高的数字生成任何输出,则它必须是正确的,即,它必须在达到一定大小之前生成正确的输出,但是如果出现错误,则不会生成超出该大小的输出。您可能会假定最大大小为15(32768x32768),因为对于ASCII艺术作品(1GB)而言,这已经是疯狂的大小! 8x8模式将如下所示(规则160)。最左边的数字代表Block A,中间的数字代表Block (请不要粗鲁!),B最右边的数字代表Block C。要构建分形,请将其在两个维度上缩小一半,然后对块应用旋转/镜像规则。要缩小图案,请将其均匀分成2x2区域。每个区域中将只有3个可见字符或无。如果有可见的字符,则在较小的块中的适当位置放置一个字符,否则放置一个空格。规则0- 3未镜像,规则4- 7已镜像。规则0和4不旋转,1并且5顺时针旋转90度,2并且6旋转180度,3然后7顺时针旋转270度。按所示顺序将三个块缝在一起,分别A在左上角,B左下角和C右下角。 AAA AA A AA A BBB CC B BBC BBCCC B CCC 按规则编号缩小,旋转和镜像: 0 1 2 3 4 5 6 7 ---- ---- ---- ---- ---- ---- ---- ---- AA BAA CCB C C BCC AAB AA A BB A …

4
us修斯的新船
These修斯之船是一个古老的问题,类似于: 如果一艘船的所有原始零件都已更换,那它还是同一艘船吗? 对于本次高尔夫,我们将逐步替换“船”上的“零件”,并查看获得一艘新船需要多长时间。 任务 一艘船至少由两部分组成。零件以正(非零)整数数组的形式给出,代表零件的状况。 在每个循环中,以统一的方式从列表中随机选择一个零件。该零件的状况将减少一。当零件的条件达到零时,将其替换为新零件。新零件以与原始零件相同的条件值开始。 在第一个周期中,所有部件(至少)被更换了一次(至少),停止并输出所花费的周期数。 例如(假设我在这里随机选择零件): 2 2 3 <- starting part conditions (input) 2 1 3 <- second part reduced 2 1 2 ... 2 1 1 2 2 1 <- second part reduced to zero, replaced 1 2 1 1 2 3 <- third part replaced …

4
精确计算概率
此任务是关于编写代码以准确计算概率。输出应该是精确的概率,以其最大简化形式的分数表示。那是它永远不应该输出4/8,而应该1/2。 对于某个正整数n,请考虑一个长度为1s和-1s的均匀随机字符串,n并将其称为A。现在将A其串联为第一个值。就是说A[1] = A[n+1]从1 A开始的索引 现在具有length n+1。现在还考虑长度的第二随机串n,其第一n值是-1,0或1的概率是1 / 4,1 / 2,1/4每并调用它B. 例如,考虑n=3。对于可能的值A,并B可能会A = [-1,1,1,-1]和B=[0,1,-1]。在这种情况下,两个内积是0和2。 现在考虑的内积A[1,...,n]和B和的内积A[2,...,n+1]和B。 您的代码必须输出两个内积均为零的概率。 对于n=1这种可能性显然是1/2。 我不介意n代码中的指定方式,但是如何更改它应该非常简单明了。 语言和图书馆 您可以使用任何喜欢的语言和库。我想运行您的代码,因此请尽可能提供有关如何在Linux中运行/编译代码的完整说明。

3
IMP:隐式乘法解析器
杰克喜欢C编程语言,但不喜欢写表达式,例如V=a*b*h; 将值相乘。 他想改写V=abh;,为什么编译器抱怨abh自int a, b, h;定义后就没有定义符号,所以我们可以得出乘法呢? 如果已知当前作用域中定义的变量集,请帮助他实现一个解析器,该解析器可解密单个乘法项。 为简单起见,2*a*b不考虑乘以数字(如中的),仅显示变量。 输入是一个乘法项T,满足正则表达式: [a-zA-Z_][a-zA-Z_0-9]* 和可变组Z。 变量集Z上的项T的解析P是满足以下条件的字符串: *从P中删除所有出现的项后,我们收到T, 要么是Z中的变量名,要么由Z中的适当变量名组成,并用单个*字符分隔。 解决方案应打印术语的所有分析。 样品: Vars a, c, ab, bc Term abc Solution ab*c, a*bc Vars ab, bc Term abc Solution - Vars - Term xyz Solution - Vars xyz Term xyz Solution xyz Vars width, height Term widthheight …

2
反转vim中一行的每个单词
您的任务是构建一个vim脚本或提供一系列击键操作,这些操作将对一行文本进行操作,该文本行最多包含140个可打印的ASCII字符(在文件中的任何位置,光标从该行中的任意位置开始)并反转每个空格-将句子中的字符串分开,同时保持字符串的顺序相同。 例如,输入: roF emos nosaer m'I gnisu a retcarahc-041 timil no siht noitseuq neve hguoht ti t'nseod evlovni .rettiwT RACECAR 应该返回: For some reason I'm using a 140-character limit on this question even though it doesn't involve Twitter. RACECAR 字符最少或按键序列最少以实现此结果的脚本是赢家。
9 code-golf  vim 

1
最短子串索引
我是一个懒惰但有效率的人,你们中的许多人也可能是如此。因此,每当我在做某事时,我都想用最少的精力去做。这就是为什么我要你为我解决这个问题。 我在这里有各种各样的文件。本文档的每一行上都有一个单词或简短的短语。该文档未排序,但是我知道所有内容都可以。我可以使用一些帮助更快地找到事物,为此,我需要第二个清单。这就是您的来历。对于本文档中的每一行文本,我都需要一些标识符。我可以CTRL+的东西F,但是它不能超过获得一个结果绝对必要的时间。 输入示例: (blank) an apple spiderman 3 7pm pick up laundry tequila fake mustache dishes on wednesday banana biscuits (blank) 输出示例: ap,3,7,q,f,w,ba,bi 我将在这里重复一遍,以确保我们在同一页面上: 输入是一个无格式的文本文件,其中包含项目列表,并用换行符分隔。我在这里以.txt格式保存,称为“ STUFF.TXT” 文档的第一行和最后一行为空。每隔一行包含一个长度> 0的条目。 该文件仅包含字母数字字符(全部为小写),空格和换行符。 所需的输出是标识符列表,其顺序与我的原始列表相同。 我不希望每个列表项都有多个搜索词。如果有多个答案,请选择一个,我不在乎。在上面的示例中,我为选择了“ ap” an apple,但您可能选择了“ n”,“ a”,“ pp”,“ pl”或“ le”。不是'an',因为它在中banana。 我可以向您保证,该文件永远不会为空,并且永远不会包含重复项。 如有必要,您可以在行终止符上进行匹配。但这是万不得已的方法,只有在没有其他方法可以区分列表项(例如“苹果”和“苹果”)时才使用。 不允许出现标准漏洞。同样,这是代码高尔夫球,因此最短的代码获胜。 再举一个例子: (blank) ban any king bean yen rake …

2
编写一个GIF编码器
是的,很好的旧GIF。GIF因其多功能性而广受青睐,由于对其专利(和专利)的局限性而讨厌其专利,因此GIF的核心是调色板和使用LZW算法压缩的调色板索引图像。 您的任务是编写一个程序,该程序从标准输入读取ASCII PPM格式的图像(“ P3”幻数),然后将GIF格式的同一图像(逐像素相同)写入标准输出。输出可以是二进制形式,也可以是ASCII文本,每个字节由0到255(含)之间的数字表示,并用空格分隔。 确保输入图像的颜色不超过256种。 得分: 您的程序将在3个样本图像上进行测试,您的得分将计算为: 程序大小+总和(输出大小-每个样本图像的参考大小) 得分最低。 要求: 您的程序必须可以处理各种尺寸的任何相似种类的图像,并且不仅限于示例图像。例如,您可以将尺寸限制为2的倍数,或假设ppm最大颜色为255,但它仍应适用于各种输入图像。 输出必须是可以与任何兼容程序一起加载的有效GIF文件(如果使用ASCII输出选项,则转换回二进制文件之后)。 您不能使用任何图像处理功能(内置或第三方),您的程序必须包含所有相关代码。 您的程序必须可以使用免费软件在Linux中运行。 源代码只能使用ASCII字符。 样本图片: 这是将用于评分的3个示例图像。您可以下载包含ppm文件的zip存档(使用该页面顶部的下载按钮)。或者,您可以使用ImageMagick通过以下命令从下面的png图像中转换它们: convert file.png -compress none file.ppm 我还提供了ppm文件的MD5校验和以供确认。 1.琥珀色 参考大小 :38055 MD5 ppm校验和:d1ad863cb556869332074717eb278080 2.蓝眼睛 参考大小: ppm的28638 MD5校验和:e9ad410057a5f6c25a22a534259dcf3a 3.辣椒 参考大小: ppm的53586 MD5校验和:74112dbdbb8b7de5216f9e24c2e1a627

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.