Questions tagged «recursion»

对于涉及递归函数或直接或间接调用自身的函数或程序的挑战。

3
土豆去皮
这是土豆: @@ @@@@ @@@@@@ @@@@@@ @@@@ @@ 更一般而言,将大小为N的马铃薯定义为以下形状: 如果N是偶数,则它是2个居中@符号,然后是4个居中@符号,然后是6个居中@符号,一直到N个居中@符号;然后,N为中心的@符号,后面是N-2为中心@的符号中,所有的方式下降到2。 如果N是奇数,在如上述描述的相同的方式产生一个大小为N马铃薯,但我们开始用1个@符号,而不是2 。 从右上角开始将土豆去皮@,然后按逆时针方向移动每个步骤一个标志。例如,去皮3号土豆看起来像这样: @ @@@ @@@ @ ​ @@@ @@@ @ ​ @@ @@@ @ ​ @@ @@ @ ​ @@ @@ ​ ​ @@ @ ​ ​ @ @ ​ ​ ​ @ ​ 挑战 编写一个程序,给定一个整数输入,该程序将显示削皮该尺寸土豆的所有步骤。 允许尾随空白/换行符。 计分 这是代码高尔夫球;以字节为单位的最短代码为准。 样本测试用例 …

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 …

2
这些列表是否相等?
如您所知,python有列表。您可能不知道这些列表可以包含自己。 a = [] a.append(a) Python 2 Python 3 这些很酷,您可以使用它们做很多有趣的事情,但是您无法将它们进行比较。 a = [] a.append(a) b = [] b.append(b) a == b Python 2 Python 3 任务 您的工作是用Python(或可以直接处理python对象的任何语言)编写一个函数,该函数将包含两个可能包含自身的列表并进行比较。 如果两个列表具有相同的长度,并且不存在数字序列,则两个列表是相等的,因此按此序列对两个列表进行索引会导致在此相等定义下两个对象不相等。为了简单起见,列表中包含的所有非列表对象都是python整数,应将其与python的内置相等性进行比较。 您的程序不应依赖python的递归深度来确定列表是否无限深。那是: def isInfinite(a,b): try: a==b return False except RunTimeError: return True 这不是确定两个列表是否为自引用的有效方法。 测试用例 假设您定义一个函数 equal a = [] a.append(a) b = [] …

12
广义Cantor集段长度
问题 让我们定义一个广义的Cantor集,方法是从单个连续间隔开始,从所有尚未删除的间隔的中间迭代删除一些有理长度段。 给定要删除或不删除的段的相对长度,以及要执行的迭代次数,问题在于编写程序或函数,该程序或函数输出n迭代后已删除或未删除的段的相对长度。 示例:迭代删除第四个和第六个第八个 输入: n –迭代次数,从0或1开始索引 l–分段长度的列表,以正整数gcd(l)=1表示,带有奇数个长度和奇数个长度,表示从保持不变的分段开始的,保持不变或被删除的部分的相对长度。由于列表长度是奇数,因此永远不会删除第一个和最后一个段。例如,对于常规的Cantor集合,这将是[1,1,1],其中三分之一将保留,三分之一将被删除,三分之一将被删除。 输出: 整数列表o,第一次迭代gcd(o)=1中相对片段的长度,n当上一迭代中没有删除的片段被列表的缩小副本所取代l。第一次迭代是[1]。您可以使用任何明确的输出方法,甚至是一元的。 例子 n=0, l=[3,1,1,1,2] → [1] n=1, l=[3,1,1,1,2] → [3, 1, 1, 1, 2] n=2, l=[3,1,1,1,2] → [9,3,3,3,6,8,3,1,1,1,2,8,6,2,2,2,4] n=3, l=[5,2,3] → [125,50,75,100,75,30,45,200,75,30,45,60,45,18,27] n=3, l=[1,1,1] → [1,1,1,3,1,1,1,9,1,1,1,3,1,1,1] 您可以假定输入有效。这是代码高尔夫球,因此以字节为单位的最短程序将获胜。

30
消失的元素
给定一个字符串S和一个索引列表X,S通过删除每个索引处的元素来进行修改,并将S结果作为的新值S。 例如,给定S = 'codegolf'和X = [1, 4, 4, 0, 2], 0 1 2 3 4 5 6 7 | c o d e g o l f | Remove 1 c d e g o l f | Remove 4 c d e g l f | Remove 4 c …
17 code-golf  string  array-manipulation  code-golf  string  ascii-art  code-golf  number  sequence  pi  code-golf  number  array-manipulation  code-golf  string  ascii-art  code-golf  math  number  game  code-golf  math  sequence  polynomials  recursion  code-golf  math  number  sequence  number-theory  code-golf  permutations  balanced-string  code-golf  string  ascii-art  integer  code-golf  decision-problem  hexagonal-grid  code-golf  ascii-art  kolmogorov-complexity  code-golf  number  code-golf  matrix  binary-matrix  code-golf  math  statistics  code-golf  string  polyglot  code-golf  random  lost  code-golf  date  path-finding  code-golf  string  code-golf  math  number  arithmetic  number-theory  code-golf  tetris  binary-matrix  code-golf  array-manipulation  sorting  code-golf  number  code-golf  array-manipulation  rubiks-cube  cubically  code-golf  grid  optimization  code-golf  math  function  code-golf  string  quine  code-golf  ascii-art  grid  code-golf  decision-problem  grid  simulation  code-golf  math  sequence  code-golf  path-finding  code-golf  ascii-art  grid  simulation  code-golf  number  whitespace  code-golf  sequence  code-golf  sequence  code-golf  sequence  integer  code-golf  math  game  code-golf  internet  stack-exchange-api  code-golf  sequence  code-golf  internet  stack-exchange-api  code-golf  math  factoring  code-challenge  sequence  polyglot  rosetta-stone  code-golf  string  browser  code-golf  date  code-golf  base-conversion  code-challenge  cops-and-robbers  hello-world  code-golf  cops-and-robbers  hello-world 

2
有没有一种方法可以缩短胖箭头功能?
从我在PPCG上所看到的时间来看,大多数涉及胖箭头功能的JavaScript条目往往是两个阵营之一: 能够作为单个语句运行并返回答案的简单示例,就像这样 x=(a,b)=>a*a+b 由于使用循环,通常比较复杂的花括号大括号,因此需要使用return语句。p=b=>{m=b;for(a=1;~-m;)--m,a*=m*m;return a%b} 以类别2的上述示例为例,使用花括号概念作为概念证明...是否有办法像这样重新投放此代码(或类似代码),以便消除花括号和return?我只是问这个问题,因为这有可能(并不是说会一直发生)从JS高尔夫球手的代码中消除8个字节。在这种情况下,可以使用任何技术吗?我尝试了递归,但是该m=b语句已被证明有点麻烦,因为我似乎无法动摇它。 对于上面的代码,return无论打高尔夫球的时间短与短,打高尔夫球如何进一步消除这种说法?


15
手动逻辑门
编写一个模拟基本逻辑门的程序。 输入:一个全大写单词,后跟2个1位二进制数字,以空格分隔,例如OR 1 0。门OR,AND,NOR,NAND,XOR,和XNOR需要。 输出:输入的逻辑门的输出将被赋予两个数字:1或0。 例子: AND 1 0成为0 XOR 0 1变得1 OR 1 1成为1 NAND 1 1成为0 这是codegolf,所以最短的代码获胜。
13 code-golf  logic-gates  hashing  code-golf  code-golf  number  array-manipulation  integer  code-golf  string  unicode  text-processing  cops-and-robbers  boggle  cops-and-robbers  boggle  code-golf  ascii-art  code-golf  word-puzzle  king-of-the-hill  python  code-golf  sequence  kolmogorov-complexity  code-golf  source-layout  code-golf  string  kolmogorov-complexity  math  number  code-golf  date  code-golf  combinatorics  recursion  game  king-of-the-hill  javascript  code-golf  array-manipulation  code-golf  radiation-hardening  self-referential  code-golf  integer  code-golf  number  code-golf  set-theory  code-golf  sequence  code-golf  string  sorting  natural-language  code-golf  decision-problem  number-theory  primes  code-golf  code-golf  ascii-art  code-challenge  array-manipulation  sorting  rubiks-cube  regular-expression  code-golf  counting  file-system  recursion  code-golf  string  kolmogorov-complexity  color  code-golf  game  code-challenge  permutations  encode  restricted-time  decode  code-golf  math  decision-problem  matrix  integer  palindrome  code-golf  matrix  statistics  king-of-the-hill  king-of-the-hill  python  card-games  code-golf  string  natural-language  code-golf  sequence  number-theory 

7
前缀树遍历
编写一个程序(通过标准输入或命令行)以递归形式接收字符串 PREFIX[SUFFIXES] 哪里 PREFIX 可以是任何小写字母(az)字符串,包括空字符串,并且 SUFFIXES可以是递归形式PREFIX[SUFFIXES]连接在一起的任何字符串序列,包括空序列。 通过递归求值每个后缀中的字符串列表并将它们附加到前缀,从输入生成一个小写字母字符串列表。输出以任何顺序输出此列表中的字符串,每行一个(加上可选的尾随换行符)。 例 如果输入是 cat[s[up[][]][]ch[e[r[]s[]]]a[maran[]comb[]pult[[]ing[]]]] 那么前缀是cat和和后缀s[up[][]],[], ch[e[r[]s[]]],和a[maran[]comb[]pult[[]ing[]]]。每个后缀都有自己的前缀和后缀。 输出将是任意顺序的这9个字 catsup cats cat catcher catches catamaran catacomb catapult catapulting 因为输入对这棵树进行了编码 通过从根到叶遍历树可以形成9个输出字中的每一个。 笔记 请记住,前缀可能是空字符串,所以类似 [donut[][]cruller[]] 是有效输入,其输出将是(任何顺序) donut cruller 空行用于第二个后缀匹配的空字符串。 后缀序列也可以为空,因此平凡的输入大小写 [] 有一个空行作为其输出: 您可以假设输入将仅产生唯一的输出字。 例如hat[s[]ter[]s[]]将是无效的输入,因为它hats被编码了两次。 同样,[[][]]无效,因为空字符串被编码两次。 您可能不会假定输入尽可能短或压缩。 例如,'e'上面主要示例中的'ch'节点可以与该节点组合,但这并不意味着输入无效。 同样,[[[[[]]]]]尽管仅对空字符串进行了次优编码,但仍然有效。 代替程序,您可以编写一个函数,该函数将输入字符串作为参数并正常打印输出或将其作为字符串或列表返回。 以字节为单位的最短代码获胜。

15
反复互惠
您需要做的是创建一个将小数作为输入的函数/程序,并输出重复取数字小数部分的倒数的结果,直到数字变成整数。 更具体地说,过程如下: 令x为输入 如果x是整数,则将其输出。 否则:x ← 1Fr a c(x)X←1个F[R一种C(X)x \leftarrow \frac{1}{\mathrm{frac}(x)}。回到2。 Fr a c(x)F[R一种C(X)\mathrm{frac}(x)是的小数成分XXx,并且等于X - ⌊ X ⌋X-⌊X⌋x - \left\lfloor x \right\rfloor。⌊ X ⌋⌊X⌋\left\lfloor x \right\rfloor是x的地板上,这是最大的整数小于XXx。 测试用例: 0 = 0 0.1 = 1/10 -> 10 0.2 = 1/5 -> 5 0.3 = 3/10 -> 10/3 -> 1/3 -> 3 0.4 …

4
国际标准纸张尺寸的输出细分
ISO纸张尺寸定义: A系列纸张尺寸由以下要求定义: The length divided by the width is the square root of 2. The A0 size has an area of 1 unit. Each subsequent size A(n) is defined as A(n-1) cut in half parallel to its shorter sides. 任务: 给定f[n]分为n细分的输入输出A0 。 测试用例: f[1]至f[12]: 此处,A0由给出 f[1],但此索引不是必需的。 获奖标准: 以字节为单位的最短代码获胜。

1
递归Steiner链
斯坦纳链是一组N个圆,每个圆与两个其他不相交的圆以及该链的上一个和下一个圆相切,如下图所示: 在此挑战中,您将编写一个程序/函数以递归方式绘制Steiner链,也就是说,给定链的圆将是链的另一次迭代的基础圆: 挑战 编写一个程序/函数,该程序/函数接受图像尺寸以及表示链的每个连续迭代中圆圈水平的整数列表,并输出绘制了递归Steiner链的图像。 输入值 您的程序/函数将接受2个参数: s -图片的宽度和高度 ls -表示链的每个连续迭代中存在的圆数的正整数列表,从最上链到最下链排序 输出量 您的程序/函数将输出尺寸为sx 的图像,s显示可追溯的Steiner链。 顶层基圆将与图像一样大,直径为s,位于图像内部 为了简化起见,Steiner链的2个基圆将是同心的,即2个基线圆的中心点将是相同的 给定的外半径,R和圆的在链条的数量,N为内半径的公式R'是R' = (R-R*sin(pi/N))/(sin(pi/N)+1) 链的圆以及内部基圆将是链的下一次迭代的外部基圆 在通过链环递归时,下一个链的顺序应对应于中的下一个值 ls 在通过链的内圈递归时,顺序应与其父顺序相同(例如[5,2]): 所有链条应在深度为 ls 链条的旋转无关紧要: 但是,递归链相对于其父母中心点的旋转应相同: 所有圆都应画出轮廓或实心填充 颜色选择留给实现,除了漏洞(例如,用相同的颜色填充所有内容) 示例运行 在以下示例中,颜色由确定(depth of the recursion)^4。 您可以在此处找到源。 chain(600,[5,4,3]) chain(600,[11,1,1,1,1,1,1]) chain(600,[5,6,7,8,9])

7
构造雅可比矩阵
取未知向量,并应用一些通用的微分函数。的雅可比然后通过矩阵给出,使得: 例如,假设m=3和n=2。然后(使用基于0的索引) 雅可比f然后 这个挑战的目标是打印这个雅可比矩阵。 输入值 你的程序/功能应该采取作为输入两个正整数m和n,其代表的部件的数目f和u分别。输入可以来自任何所需的来源(stdio,功能参数等)。您可以指定接收顺序,对于输入的答案必须一致(请在答案中指定)。 输出量 代表雅可比矩阵的东西。此表示形式必须明确拼出Jacobian矩阵的所有元素,但是每个术语的确切形式都是实现定义的,只要明确区分什么以及关于什么进行区分,并且每个条目均以逻辑顺序输出。用于表示矩阵的示例可接受形式: 列表列表,其中外部列表​​的每个条目都对应于雅可比行的一行,内部列表的每个条目都对应于雅可比行的列。 字符串或文本输出,其中每行是Jacobian行,每行中由定界符分隔的条目对应于jacobian的列。 矩阵的一些图形/视觉表示。示例:使用MatrixForm命令时Mathematica显示的内容 其他每个条目都已存储在内存中并且可以查询的密集矩阵对象(即,您不能使用生成器对象)。例如,Mathematica如何在内部表示Matrix对象 条目格式示例: 形式为的字符串d f_i/d u_j,其中i和j是整数。例如:d f_1/d u_2。请注意,d和f_1或之间的这些空格x_2是可选的。此外,下划线也是可选的。 形式为d f_i(u_1,...,u_n)/d u_j或的字符串d f_i(u)/d u_j。也就是说,功能组件的输入参数f_i是可选的,并且可以明确地拼写出来或以紧凑形式保留。 格式化的图形输出。例如:计算表达式时Mathematica会打印什么D[f_1[u_,u_2,...,u_n],u_1] 您可以选择起始索引u和目标索引f(请在答案中指定)。输出可以是任何所需的接收器(stdio,返回值,输出参数等)。 测试用例 以下测试用例使用约定m,n。索引显示为从0开始。 1,1 [[d f0/d u0]] 2,1 [[d f0/d u0], [d f1/d u0]] 2 2 [[d f0/d u0, d f0/d u1], [d f1/d u0, d …

6
二进制重复序列
二进制重复序列是具有以下形式的递归定义的序列: 这是斐波那契(x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1)序列和卢卡斯(x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1)序列的概括。 挑战 给定n,x,y,a,alpha,和beta,在任何合理的格式,输出n对应的二进制递归序列的第术语。 规则 您可以选择序列是1索引还是0索引,但是您的选择必须在所有输入中保持一致,并且必须在答案中记下您的选择。 您可能会假设不会给出任何无效输入(例如在之前终止n的序列或引用未定义术语(例如F(-1)或F(k)where k > n)的序列)。由于这一结果,x并y会一直是积极的。 输入和输出将始终是整数,在语言的自然整数类型的范围内。如果您的语言具有无界整数,则输入和输出将在该范围内[2**31, 2**31-1](即32位带符号二进制补码整数的范围)。 a将始终精确地包含y值(按照定义)。 测试用例 注意:所有测试用例均以0索引编制。 x = 1, y = …

12
可能有不同的组合
问题 给定一个值n,想象一下在(2,0)的参考(0,0)中刻出的山地景观。斜坡之间不会有空白,山也不会下降到x轴以下。要解决的问题是:给定n(定义景观的大小)和峰的数量k(k始终小于或等于n),那么有k个峰的山峰有多少种组合? 输入项 n代表景观的宽度,k代表峰的数量。 输出量 仅可能的组合数量。 例 给定n = 3和k = 2,答案是3个组合。 仅举一个直观的例子,它们是: /\ /\ /\/\ /\/ \ / \/\ / \ 是使用6(3 * 2)个位置和2个峰的3种组合。 编辑:-更多示例- n k result 2 1 1 4 1 1 4 3 6 5 2 10 获奖条件 标准 代码高尔夫球规则适用。以字节为单位的最短提交获胜。
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.