编程拼图和代码高尔夫

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

2
改过自新
您会得到一棵树,按照计算机科学的传统,它的根在顶部,叶在底部。叶子节点用数字标记。您的目标是获取标记的特殊叶子-1并将其向上移动为新的根。 [3, [[16], -1], [4]] --> [[[[4], 3], [16]]] 您可以想象将特殊的叶子旋转到顶部,然后让其余的树垂下来。旋转树时将树保持在平面上,以获取所有分支的正确的从左到右顺序。 新的树除的外,其余都有原始树的叶子-1。 输入: 一棵树,其叶子是不同的正整数,除了的一片叶子-1。树的根将至少有两个分支脱落。 输入以嵌套列表之类[3, [[16], -1], [[4]]]或其字符串表示形式给出。分隔符是可选的,取决于您,但是相邻的数字需要分开。 输出: 以与输入相同的格式输出或打印翻转的树。列表条目的顺序必须正确。就地修改很好。 如果您的输入/输出是一种数据类型,则默认情况下它必须是一种以所需格式打印的数据。不允许使用基本上为您执行任务的内置程序。 测试用例: >> [3, [[16], -1], [4]] [[[[4], 3], [16]]] >> [2, -1] [[2]] >> [44, -1, 12] [[12, 44]] >> [[[[-1]]], [[[[4]]]]] [[[[[[[[[4]]]]]]]]] >> [[1, 2, 3], [4, -1, 6], …

1
让我们建立一个赛车轨道!
介绍 我的外女想要赛车。她的木部分可以组合成轨道。每个零件均为正方形,并包含不同的形状。我将使用管道绘图字符进行说明: │:垂直走的路 ─:水平行驶的道路 ┌ ┐ └ ┘:转向的道路 ┼:带有地下通道的桥梁 奇怪的是,没有t型接头。 这是一个可能的赛车轨迹的示例: ┌─┐ │ │┌─┐ │ └┼─┘ └──┘ 有效赛车轨道的规则如下: 没有路可走。 它必须形成一个循环(所有部分都必须是同一循环的一部分)。 在桥梁/地下通道,您不能转弯(因此,您必须直接穿过它们)。 不幸的是,我和我的侄女所拥有的赛车履带有限。但是我们绝对希望在赛道上使用所有这些。编写一个程序,给定我们库存中有哪些零件的列表,并输出使用所有这些零件的赛车轨道。 输入说明 我们希望输入通过STDIN,命令行参数,文件读取或用户输入函数(例如raw_input或prompt)输入。输入是逗号分隔的正整数,格式为 │,─,┌,┐,└,┘,┼ 其中每个代表我们所拥有的特定件数。因此,例如输入: 1,1,1,1,1,1,1 意味着我们每个都有一个。 输出说明 使用上面列出的管道图字符输出赛车轨道。赛车轨道应准确使用输入中指定的每个零件的编号-不得多于或少于。每次输入至少会有一条有效的赛车轨迹。 输入和输出示例 输入: 3,5,2,2,2,2,1 可能的输出: ┌─┐ │ │┌─┐ │ └┼─┘ └──┘ 输入: 0,0,1,4,4,1,3 可能的输出: ┌┐ └┼┐ └┼┐ └┼┐ └┘

12
最小素数和
SF(n)是一个函数,用于计算给定数字n的最小素数。 我们称T(N)为每个SF(n)的总和,其中2 <= n <=N。 T(1)= 0(总和超过0) T(2)= 2(2是第一个素数) T(3)= 5 = 2 + 3 T(4)= 7 = 2 + 3 + 2 T(5)= 12 = 2 + 3 + 2 + 5 ... T(10000)= 5786451 获胜者将是能够在我自己的笔记本电脑(东芝Satellite L845,Intel Core i5、8GB RAM)上在60秒内计算出最大T(N)的人。 Current top score: Nicolás Siplis - 3.6e13 points - …

14
Spintax {任务|问题|问题}
带有Spintax的文章旋转 文章旋转是一种搜索引擎优化技术,通过该技术搜索引擎优化器可以在文章目录,Web 2.0网站或其他反向链接源上发布相关内容的唯一版本。 网站作者偶尔会在自己的网站上使用它,但通常会避免使用,因为旋转内容的质量将低于手写内容。旋转通过重写现有文章或文章的某些部分,并用任意数量的替代版本替换特定的单词,短语,句子甚至整个段落来进行,从而为每次旋转提供稍有不同的变化。 此过程可以完全自动化或手动重写。今天的工作是创建一个程序或函数,该程序或函数解释一个包含Spintax的字符串,该语法将使程序读取可用的不同选项。以下是使用Spintax的示例字符串: {Hello|Hi there|Bonjour}, user! {What's up?|How are you?|Feeling alright?|I caught a fish!} 如您所见,字符串中要“旋转”的部分用花括号括起来,其中各个选项按|字符分开。这是一些可能产生的例句。 Hi there, user! What's up? Hello, user! How are you? Bonjour, user! Feeling alright? Hello, user! What's up? Hi there, user! I caught a fish! 你的工作 您的任务(如果您选择接受)是创建一个程序或函数,该程序或函数采用可能包含或可能不包含Spintax的输入字符串,然后打印该字符串的5个版本,并从每个选项块中随机选择一个选项。您可以做一些假设: 您将不需要处理嵌套的Spintax({This|is {an|one}|example})。 的|,{并且}字符不会超过Spintax块内的其他地方的其他进行。 只要代码使用您语言的随机数功能选择选项,就无需检查5个输出语句是否不同。 您可以假设输入以换行符结尾。 规则 …
19 code-golf 

14
回文逆转加法
回文逆转加法 反向加法的过程是向其反向添加数字,直到创建的数字是回文。例如,如果我们从68开始,则过程将是: 68 + 86 => 154 + 451 => 605 + 506 => 1111 如您所见,这花了3次加法才得到回文数。如果从开始89,我们将需要24个步骤(您可以在此处查看细分)。 达到回文记录之前所采取的大多数步骤的世界纪录是261,该数字最高发生1186060307891929990,产生的数字大于10 118。但是,有很多数字我们还无法得到回文。这些称为Lychrel数。 由于我们的工作基础是10,因此我们只能称他们为候选人,因为没有证据表明这些数字永远不会达到回文率。例如,最小的以10为底的Lychrel候选对象是196,并且已经经历了十亿多次迭代。如果回文确实存在,则比10 10 8.77大得多。作为比较,如果原子上刻有多个1 ,则假设存在,我们将需要2.26772×10 588843575个宇宙原子来写出。 你的任务 创建一个程序或函数,该程序或函数接受整数输入并返回或打印到达回文所需的步骤数。您无需与Lychrel候选者打交道(即,当您的程序被赋予Lychrel候选者时,将允许其抛出错误或永久运行)。 测试用例: f(0) => 0 f(11) => 0 f(89) => 24 f(286) => 23 f(196196871) => 45 f(1005499526) => 109 f(1186060307891929990) => 261 规则 没有标准漏洞。 奖金 …

10
尽管梭罗掷得透彻,但巨魔却投出了艰难的低谷
为这9个令人困惑的相似单词中的每一个,以您喜欢的任何方式分配数字1-9: though through thorough Thoreau throw threw trough tough troll 编写一个包含字符串的程序。如果输入是这9个单词之一,则输出分配给它的数字。如果输入不是以上单词之一,则程序可能会执行任何操作(包括错误或永久循环)。 单词区分大小写,例如Thoreau,应产生一个1到9的数字,但thoreau不一定会一样。 例 假设您分配数字如下: though 9 through 2 thorough 7 Thoreau 6 throw 3 threw 5 trough 4 tough 1 troll 8 然后在tough输入时,1应输出。 当through输入时,2应当输出。 当throw输入时,3应当输出。 。。。 当though输入时,9应当输出。 所有其他输入都可以做任何事情。 细节 通过stdin或命令行获取输入字符串,然后输出到stdout。 输出可能包含单个尾随换行符。 您可以编写一个可以接受字符串并正常打印结果或返回结果的函数,而不是程序。 以字节为单位的最短提交胜出。

9
给定输入,将其沿键盘移动N个字符
挑战: 给定可以在键盘上键入的任何输入,将文本移动N个字符。 这是要使用的QWERTY键盘。您可以忽略修饰键(Shift,Caps,Enter,Delete和Tab)。一旦到达一侧(例如|),则将其循环回去,|然后转到Qif N = 1。 不必移动空格(当您跳过修饰符时,它们会返回到空格处)。如果转变是用来输入的字符(如!和@)改变的字符也应该利用移键入(即!变为@不2若N = 1)。 英国键盘与此有所不同,但是请使用此键盘以便我们进行比较。 输入: 可以在上述键盘上键入的任何句子,后跟一个正整数。此整数的大小没有最大值。 输出: 同一句话,向左移动N。 例子: My name is Tim 3 ?o .f/y [g I[/ Hello World 7 Spgge Oe[g; I Wi5h I h4d b3773r C@d3ing ski{{s 3 { T[8l { l7h ,6006u N%h6[.k g'[QQg 这是代码高尔夫,所以最短的代码获胜。

9
谁赢得黑桃把戏
编写代码以确定谁在黑桃游戏中赢得四张牌。最少的字节数获胜。 输入是一个字符串,其中列出了依次播放的四张牌,例如TH QC JH 2H(红心十张,俱乐部皇后,红心杰克,两张红心)。卡片由两个字符组成:的西装CDHS和的值23456789TJQKA。您可以确保输入有效,并且卡片是不同的。 您应该为该技巧的赢家输出1、2、3或4。在此示例中TH QC JH 2H,红心大佬将赢得胜利,因此您应输出3。 您的输入和输出必须完全与描述的相同,除了结尾的换行符是可选的。 这是黑桃赢得比赛的规则。获奖卡片是四张卡片中最高的一张,但有一些警告。黑桃是王牌,因此任何黑桃都比任何非黑桃都重要。第一张打出的牌是主打牌,只有该套牌或黑桃的牌才有资格赢球。比较相同花色的卡的值,并按升序给出23456789TJQKA。 测试用例: TH QC JH 2H 3 KC 5S QS 9C 3 QD 2D TD 5D 1 9S 5D AD QS 4 3D 4C 3H JH 1 9S 4S TS JS 4 5H 9H 2C AD 2 5S 4C 3H …

2
在给定点列表的情况下确定正方形的旋转
在这项挑战中,您将获得要点列表。 这些点位于假想正方形的周长上。您的目标是: 如果可能,请打印出正方形的旋转度,该旋转度将是[0,90)中的值,其中0表示垂直和水平线的正方形。旋转应以逆时针计数。 如果正方形的旋转模棱两可(例如仅获得2分),则打印出“未知” 如果无法根据给定的点创建正方形,请打印“不可能” 您所获得的分数将保证是唯一的,并且没有特定的顺序。您可以使用任何希望输入列表的格式,但是对于我的示例,我的观点将采用格式x,y,并以空格分隔。这些数字是浮点数字,您可以假定它们在您的语言可以处理的范围内。您的输出应至少精确到小数点后三位,并假定您的语言以完美的精度处理浮点数。 这是一些测试用例(为了方便查看,我使用了大多数数字,但是您的程序应该处理浮点数): 未知: 0,0 0,0 1,0 0,0 1,0 0,1 0,0 1,0 0,1 1,1 0,1 0,2 1,0 1,3 2,0 2,3 3,1 3,2 不可能: 0,0 1,0 2,0 3,1 4,2 0,0 1,0 2,0 1,1 0,1 0,2 1,0 1,3 2,0 2,3 3,1 3,2 2,2 2,0 0,1 2,2 0,3 0,0 …

2
具有独特输出的Brainf ***子程序
您应该编写一个100字节长的Brainfuck(BF)程序。 将以各种可能的方式从其中删除一个字符,从而得到100个新程序(长99字节)。例如,对于该计划++.>.的5个子程序是+.>.,+.>.,++>.,++..和++.>。 您的分数将是100个程序生成的唯一输出的数量。分数越高越好。 细节 输出第一个字符后,程序将终止。 无效或不终止的程序以及生成空输出的程序不计入分数。 BF单元是8位换行的。(255 + 1 = 0,0-1 = 255) 您的程序没有输入。如果,在代码中使用它,则将当前单元格设置为0。 起始位置左侧没有任何单元格。例如<.无效,但.<由于执行在处终止而有效.。磁带在另一个方向上是无界的。 方括号([和])不平衡的程序无效。 您的原始程序可以少于100个字节,因为很容易将其扩展为100个字节而无需更改分数。 您的原始程序不必是有效的BF代码。 您可以使用此python3程序(ideone链接)来确定答案的分数。(对于长时间运行的程序,您可能需要修改maxstep变量。) 例 (为简单起见,此程序短于100个字节。) Solution: ++,+[-]+><.-,-. Score: 3 Explanation: Subprogram => Output +,+[-]+><.-,-. => 1 +,+[-]+><.-,-. => 1 +++[-]+><.-,-. => 1 ++,[-]+><.-,-. => 1 ++,+-]+><.-,-. => None ++,+[]+><.-,-. => None ++,+[-+><.-,-. => None …

3
有没有一种较短的方法来分配Python中的两个变量之一?
这是在python中打高尔夫球的提示问题。 在用Python完成的多次高尔夫球比赛中,将固定值分配给布尔值选择的两个变量之一。所选变量被给定值覆盖,另一个不变。 17个字符: if b:y=z else:x=z 分配条件值很容易,但是分配给条件变量似乎很麻烦。我想知道是否缺少更短的方法。 如果x,y是列表L,这将很容易,但是假设上下文需要引用足够多的变量以致于编写L[0]且L[1]过于禁止。转换时间太长: 20个字符: L=[x,y];L[b]=z;x,y=L 我知道最快的方法是使用Python 2 exec,这很奇怪: 16个字符,Python 2: exec"xy"[b]+"=z" 元组选择似乎更长: 18、19、18、18个字符: x,y=b*(x,z)or(z,y) x,y=[z,x,y,z][b::2] y,x=[y,z,x][b:b+2] y,x,*_=[y,z,x][b:] # Python 3 是否有一些较短的方法或节省字符的优化?您可以假设bis 0或1,不仅是Falsey或Truthy,还可以对数据类型和值进行假设(如果有帮助的话)。
19 code-golf  tips  python 

16
sed高尔夫技巧
您在sed中打高尔夫球有哪些一般提示?我正在寻找可以应用于代码高尔夫球问题并且至少在某种程度上特定于sed的想法(例如,“删除注释”不是答案)。 请为每个答案发布一个提示。
19 code-golf  tips  sed 

8
从字符串中删除单行和多行注释
目标 使用您选择的编程语言,编写最短的程序以消除代表C程序的字符串中的注释。 输入项 字符串可以视为任何形式的输入,但也可以视为变量。 使用说明 两种不同的注释将被删除: 多行注释,以开头/*和结尾*/ 单行注释,//以Linux样式的换行符(LF,\n)开始和结束 字符串中的注释不可删除。出于此挑战的目的,您只需要考虑- "分隔的字符串。特别是,您可以忽略使用- '分隔字符文字的可能性。您也可以忽略三边形和连字号(/\<LF>*...)。 例子 输入: #include <stdio.h> int main(int argc, char** argv) { // this comment will be removed if (argc > 1) { printf("Too many arguments.\n"); // this too will be removed return 1; } printf("Please vist http://this.will.not.be.removed.com\n"); printf("/* This will …

15
每日随机高尔夫#4:贝特朗悖论
关于系列 首先,您可以像对待其他任何代码高尔夫挑战赛一样对待它,并回答它而不必担心系列赛。但是,在所有挑战中都有排行榜。您可以在第一篇文章中找到排行榜以及有关该系列的更多信息。 尽管我在本系列中有很多想法,但未来的挑战还没有定下来。如果您有任何建议,请在相关的沙箱帖子上让我知道。 第4洞:贝特朗悖论 该贝特朗悖论是一个有趣的问题,它显示了在一个圆圈采摘随机和弦可以产生和弦,它们的中点和它们的长度的不同分布如何不同的方法。 在这一挑战中,您应该使用“右”方法生成单位圆的随机和弦,即产生在分布和平移下不变的和弦分布的方法。在链接的Wikipedia文章中,“方法2”就是这样的方法。 确切的规则如下: 您应该使用一个正整数N,该整数指定应返回多少个和弦。输出应该是一个N和弦列表,每个和弦都指定为单位圆上的两个点,以其弧度的极角表示。 您的代码应该能够为两个角度中的每个角度至少返回2 20个不同的值。如果可用的RNG范围较小,则必须首先在内置的RNG之上构建具有足够大范围的RNG,或者必须实现自己合适的RNG。此页面可能对此有所帮助。 和弦的分布必须与链接的Wikipedia文章中“方法2”产生的和弦没有区别。如果您采用其他算法来选择和弦,请提供正确性证明。无论您选择实施哪种算法,从理论上讲,它都必须能够在单位圆中生成任何有效的和弦(不包括基础PRNG或有限精度数据类型的限制)。 您的实现应使用并返回浮点数(至少32位宽)或定点数(至少24位宽),并且所有算术运算都应在16 ulp以内准确。 您可以编写完整的程序或函数,并通过STDIN(或最接近的替代方案),命令行自变量或函数自变量接受输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数产生输出。 输出可以采用任何方便的列表或字符串格式,只要可以清楚地区分各个数字并且它们的总数始终为偶数即可。 这是代码高尔夫球,因此最短的提交(以字节为单位)获胜。当然,每位用户最短的提交时间也将进入该系列的整体排行榜。 可视化 您可以使用以下代码段渲染生成的线并检查其分布。只需将成对的角度列表粘贴到文本区域即可。该代码段应该能够处理几乎所有列表格式,只要这些数字是简单的十进制数字(无科学计数法)即可。我建议您至少使用1000行来了解分布情况。我还提供了以下文章中介绍的不同方法的一些示例数据。 显示代码段 function draw() { document.getElementById("output").innerHTML = svg } function drawLines() { lines = document.getElementById("lines").value; var e = prefix; //e += '<circle cx="' + offset + '" + cy="' + offset + '" …

13
精致分区
考虑一个整数数组: [1, 0, 9, 1, 3, 8] 有很多方法可以将该列表划分为连续的子列表。这是三个: A: [[1, 0, 9], [1, 3, 8]] B: [[1], [0, 9], [1, 3], [8]] C: [[1, 0], [9, 1], [3, 8]] 我们将调用一个分区Ÿ另一个分区的和改进X,如果X可以从以下地址获得ÿ通过加入一些子列表的重新走到一起。 所以,B是的改进A:如果我们前两个和最后两个子列表加入到一起,我们得到A。但是,C是不是的改进A:我们不得不分手的9和1以恢复A从它。同样,任何分区本身都是琐碎的改进。 请注意,我们不允许在任何时候重新排列任何子列表或元素。 挑战 鉴于两个分区(整数列表的列表)X,并Y,确定是否Y是一个细化X。 您可以假设分区将仅包含从0到的整数9(含)。您不能假定X和Y是同一列表的分区(如果不是,则它们也不是彼此的优化)。X和/或Y可能为空,但永远不会包含空子列表。 您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行自变量或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。 输入可以采用任何方便的字符串或列表格式。由于元素只能是一位整数,因此您可以选择在子列表中省略定界符,但请确保前导0s是可能的。您可以选择采取X和Y顺序相反。 输出应该是truthy如果Y是的细化X和falsy否则。 您的代码必须能够在一台合理的台式机上在一秒钟内解决以下每个测试用例。(这仅仅是为了避免简单的暴力解决方案而进行的健全性检查。) 这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。 测试用例 每个测试用例都单独显示,写成X Y。我正在使用GolfScript / CJam样式的数组表示法来节省一些水平空间: 真相: [] [] [[0]] [[0]] …

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.