Questions tagged «functional-programming»

该标签用于与功能编程范例有关的挑战。

30
从较小的“ H”创建一个“ H”
挑战 创建一个函数或程序,当给定整数时size,该函数或程序将执行以下操作: 如果size等于1,则输出 H H HHH H H 如果size大于1,则输出 X X XXX X X X程序/功能的输出在哪里size - 1 (只要您愿意,0只要您在答案中指定,就可以使基本情况与相对应) 可以使用以下任何一种输出格式,以您更方便的方式: 所需结构的字符串,其中任意两个不同的字符分别对应于H和space 具有所需结构的二维数组,其中任意两个不同的值分别对应于H和space 字符串的数组/列表,每个字符串中有一行输出,并且与H和对应的任意两个不同的值space 只要每行上有恒定数量的前导空格,就可以使用前导空格。两个不同的输出字符可以取决于您选择的任何内容,只要它们不同即可。 指定代码返回的输出格式。 测试用例 1 H H HHH H H 2 H H H H HHH HHH H H H H H HH HH H HHHHHHHHH H HH HH …
73 code-golf  ascii-art  fractal  code-golf  code-golf  string  code-golf  string  matrix  code-golf  graph-theory  maze  binary-matrix  code-golf  kolmogorov-complexity  random  code-challenge  metagolf  test-battery  brain-flak  text-processing  code-golf  matrix  code-golf  number-theory  primes  code-golf  string  matrix  code-golf  binary  bitwise  code-golf  number  factorial  floating-point  code-golf  number  sequence  code-golf  sequence  cops-and-robbers  code-golf  sequence  cops-and-robbers  code-golf  string  code-golf  math  decision-problem  number-theory  integer  code-golf  number  decision-problem  functional-programming  code-golf  array-manipulation  matrix  code-golf  string  classification  string  code-challenge  binary  compression  decode  code-golf  string  string  code-challenge  balanced-string  encode  code-golf  number-theory  integer  base-conversion  code-golf  math  number-theory  geometry  abstract-algebra  code-golf  array-manipulation  sorting  optimization  code-golf  math  geometry  image-processing  generation  code-golf  string  cops-and-robbers  repeated-transformation  grammars  cops-and-robbers  repeated-transformation  grammars  code-challenge  restricted-source  tips  source-layout  javascript  code-challenge  kolmogorov-complexity  restricted-source  code-golf  combinatorics  counting  math  fastest-code  linear-algebra  code-golf  math  permutations  matrix  linear-algebra  code-golf  string  decision-problem  restricted-source  code-golf  number  array-manipulation  subsequence  code-golf  number  array-manipulation  matrix  code-golf  brainfuck  code-golf  color  code-golf  quine  source-layout  code-golf  subsequence  code-golf  string  ascii-art  code-golf  string  ascii-art  alphabet  code-golf  decision-problem  interpreter  hexagonal-grid  halting-problem  code-golf  string  polynomials  calculus  code-golf  math  decision-problem  matrix  complex-numbers  code-golf  random  code-golf  number  arithmetic 

30
任意长度弯曲
编写一个函数,该函数f接受一个正整数并返回一个函数。 返回的新函数应与相同f。但是,当“终止调用”发生时,f应该返回所有传递的整数之和。 例如,g=f(4)(如果f是第一个功能)应设置g为另一个功能。h=g(3)会做同样的。但是,当您h不带任何参数调用时(请参见下文以了解详细信息),它应该输出7,因为这是以前的函数参数的总和。换句话说f(3)(4)() == 7。 请注意,这与f(3,4)()。 “终止呼叫”是以下选项之一(您的选择): 不带参数调用 null作为参数 任何非正值 应该支持任意数量的函数调用,没有预定义的限制。 保证总和不会超过1000。 我们可以假设在“终止呼叫”之前至少进行了一次呼叫。 您的代码不应使用静态的,针对每个程序的变量,因此应该可以在同一运行时中多次运行实验,并观察到完全相同的行为。 例子: f(1)() == 1 f(4)(2)(7)() == 13 f(4)(2)(7)(5)(2)() == 20

30
P Pr Pref Pref Prefi Prefixe Prefixes
给定一些有限列表,以其长度的升序返回所有前缀的列表,包括一个空列表。 (基本实现Haskell函数inits。) 细节 输入列表包含数字(如果方便的话,还可以输入其他类型)。 输出必须是一个列表列表。 提交可以但不必一定是函数,可以使用任何默认的I / O。 有一个CW答案为所有平凡的解决方案。 例 [] -> [[]] [42] -> [[],[42]] [1,2,3,4] -> [[], [1], [1,2], [1,2,3], [1,2,3,4]] [4,3,2,1] -> [[], [4], [4,3], [4,3,2], [4,3,2,1]]

19
教会布尔
布尔布尔教堂 一堂布尔是一个函数,返回x为真,y假其中x是第一个参数的功能,y是第二个参数的功能。这些功能可以构成其他功能,这些功能代表and not or xor和implies逻辑操作。 挑战 构建教堂和布尔and not or xor和implies教堂大门在你选择的语言。and or并且xor应接受两个函数(代表教堂布尔值)并返回一个函数(代表另一个教堂布尔值)。同样,not应该反转它需要的功能,并且implies门应该执行布尔值隐含逻辑,其中第一个参数implies第二个。 计分 制作教堂所需的所有代码的总长度,true以及false使用您的语言and not or xor以及implies教堂和教堂大门所需要的代码,不包括功能名称。(例如,false=lambda x,y:y在Python中为13个字节)。您可以稍后在代码中重用这些名称,使它们的计数占该门的总字节数为1个字节。 伪代码示例: 您创建的函数应该可以稍后在您的代码中这样调用。 true(x, y) -> x false(x, y) -> y and(true, true)(x, y) -> x and(true, false)(x, y) -> y # ... etc

25
找到一个固定点
给定一个整数和一些黑盒函数,可以在定义的序列中找到的固定点。x1 f: ℤ → ℤfxk+1 := f(xk) 细节 值x是fif 的固定点x = f(x)。 例如,如果f(x) := round(x/pi)和我们有一个起点,那么我们得到,然后,然后,最后,这意味着提交应该返回。x1 = 10x2 = f(x1) = f(10) = 3x3 = f(x2) = f(3) = 1x4 = f(x3) = f(1) = 0x5 = f(x4) = f(0) = 00 您可以假设生成的序列实际上包含一个固定点。 您可以使用本机类型代替ℤ。 您可以使用在标准IO meta post中输入黑盒功能默认设置的任何语言。如果您的语言没有这样的默认设置,请按照黑盒函数的定义随意添加一个,并确保在该定义中链接您的建议。也不要忘记对它们进行投票。 例子 f(x) = floor(sqrt(abs(x))) …

27
广义矩阵迹
灵感。 给出(通过任何方式): 两个参数(或包含两个元素的列表的单个参数)黑盒函数,(输入和输出为1、2、3,…)f: ℤ+ × ℤ+ → ℤ+ 具有至少两行两列的严格正整数矩阵 返回矩阵的函数trace。 什么是功能跟踪? 法线矩阵轨迹是矩阵的主要对角线(左上至右下)的总和: [[1,2,3],[4,5,6],[7,8,9]]→交通[1,5,9]→交通1+5+9→交通15 但是我们不求总和,而是f沿对角线应用: [[1,2,3],[4,5,6],[7,8,9]]→交通[1,5,9]→交通f(f(1,5),9)或f(1,f(5,9)) 请说明您使用的是从左到右还是从右到左。 给定的矩阵和所有中间值将严格为您语言的整数域内的正整数。矩阵可以是非正方形的。 例子 f(x,y) = xy,[[1,2,3],[4,5,6],[7,8,9]]→交通1×5×9→交通45 f(x,y) = xy,[[1,2,3],[4,5,6],[7,8,9]]→交通 →交通1591 f(x,y) = x-y,[[4,5,6],[1,2,3]]→交通4-2→交通2 f(x,y) = (x+y)⁄2,[[2,3,4],[5,6,7],[8,9,10]]→ 5或7 f(x,y) = x+2y,[[1,2,3],[4,5,6],[7,8,9]]→ 47或29 f(x,y) = max(x,y),[[1,2,3],[4,5,6],[7,8,9]]→交通max(1,5,9)→交通9 f(x,y) = 2x,[[1,2,3],[4,5,6],[7,8,9]]→ 2或4 f(x,y) = lcm(x,y),[[2,2,2],[2,2,3],[2,3,3],[4,4,4]]→交通lcm(2,2,3)→交通6 参考实施。

10
自然日志上的蚂蚁
这是一个很好的初学者挑战,也是一个很好的时间杀手。 我只说了-自然-对数,因为标题太短了,这与对数无关。 给定2个变量: 蚂蚁数量n。 日志的宽度w。 输出日志宽度w与n蚁(实施例示出w=3,n=6) | | | \O/ \O/ \O/ | | -O- -O- -O- | | /o\ /o\ /o\ | | ^ ^ ^ | | | | \O/ \O/ \O/ | | -O- -O- -O- | | /o\ /o\ /o\ | | ^ ^ ^ | …

13
进行长型签名
挑战 查找最长具有100个字节且类型签名最长的表达式。 规则 允许任何具有类型推断的静态类型语言 该类型必须是无歧义的,但否则可能包括没有定义实例的类型。例如Num [a]和Eq [a]是允许的,即使没有定义的实例 除了使用STDIN / STDOUT编译程序所需的最低要求外,没有其他导入 不允许无限类型 如果一个答案有多个表达,则只有一个可以参与评分。例如,尽管composition的类型签名为(.) :: (b -> c) -> (a -> b) -> a -> c,得分为20,但包含25个副本的答案(.)\n的得分为20,而不是500 表达式最多为100个字节 分数是类型签名中的字符数,不包括函数名称和任何空格。例如,f :: (a -> b) -> a -> b得分为12 最高分获胜! 例子 尽管允许使用其他语言,但是以下示例位于Haskell中: Score: 112 map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map.map f :: (a -> b) -> [[[[[[[[[[[[[[[[[[[[[[[[[a]]]]]]]]]]]]]]]]]]]]]]]]] -> [[[[[[[[[[[[[[[[[[[[[[[[[b]]]]]]]]]]]]]]]]]]]]]]]]] Score: …

30
获取一个具有不同数字的随机n位数字,第一个不是0
我读了这个问题,并认为这将是一个不错的挑战。 任务 给一个输入0<n<10生成一个随机数 正好n位数字 第一个不是 0 所以 f(n)>10**(n-1)-1 不同的数字 获奖标准 这是代码高尔夫球,因此最短的代码获胜。 随机 我的意思是随机分布均匀。因此,从程序的角度来看,每个可能的数字都有相同的机会。如果您使用的语言具有一个奇怪的随机数生成器,则可以使用该生成器。 例 要从中随机选择的值的列表n=2是: [10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, …
22 code-golf  number  random  grid  game  king-of-the-hill  javascript  code-golf  arithmetic  statistics  code-golf  math  code-golf  math  code-golf  string  palindrome  code-golf  string  interactive  code-golf  quine  polyglot  code-golf  string  stack-exchange-api  code-golf  number-theory  decision-problem  code-golf  tips  code-golf  string  internet  code-golf  graphical-output  image-processing  fractal  code-golf  ascii-art  geometry  hexagonal-grid  code-golf  string  restricted-source  hello-world  code-golf  game  code-golf  cipher  code-golf  permutations  cops-and-robbers  permutations  cops-and-robbers  code-golf  internet  stack-exchange-api  code-golf  ascii-art  random  code-golf  tips  code-golf  ascii-art  code-golf  code-golf  kolmogorov-complexity  code-golf  string  unicode  code-golf  number  sequence  primes  palindrome  code-golf  game  decision-problem  code-golf  math  geometry  code-golf  graphical-output  interactive  code-golf  set-partitions  code-golf  number  arithmetic  restricted-source  code-golf  decision-problem  python  recursion  code-golf  ascii-art  code-golf  source-layout  code-golf  function  recursion  functional-programming  code-golf  game  combinatorics  permutations  code-golf  string  file-system  code-golf  string  hashing  code-golf  stack-exchange-api  code-golf  string  code-golf  math  number  arithmetic  polyglot 

9
实施函数式编程范例
您的公司才刚刚开始一个项目,并且您第一次决定使用功能性编程代码风格。但是,您的老板确实很不满意,不想使用内置功能,需要您自己实现主要功能。特别是你需要写功能:Map,Nest,Apply,Range,Fold并Table在您选择的语言。老板是一个非常忙碌的人,他想让程序尽可能短,这样他就不会浪费时间阅读。他也不想让您使用循环,因此,如果不使用循环,您的字节数将减少10%。 功能的详细要求如下: 地图 该Map函数有两个参数:f和list其中where f是一个函数,list是一个值列表。它应返回f应用于的每个元素list。因此它将按以下方式工作: Map(f,{a,b,c}) 退货 { f(a), f(b), f(c) } 和 Map(f, {{a,b},{b,c}}) 退货 { f({a,b}), f({b,c})} 巢 该Nest函数有三个参数,以及:f,arg,times这里f是一个功能,arg就是它的启动参数,times是功能多少次应用。它应返回一个对f施加times时间的表达式arg。因此它将按以下方式工作: Nest(f, x, 3) 退货 f(f(f(x))) 和 Nest(f, {a,b}, 3) 退货 f(f(f({a,b}))) 应用 该Apply函数有两个参数:f和args这里f是一个函数和args一个列表。它应该适用f于args。因此: Apply(f, {a,b,c}) 退货 f(a,b,c) 范围 该Range函数采用一个整数,r并输出直至该数字的整数。因此: Range(5) 退货 { 1, 2, 3, 4, 5} 折 该Fold函数有三个参数f,arg,others这里f是一个功能,arg就是简单的参数,并others列表。它将这样工作: …

13
让我来点咖喱
有一个函数f带有参数x 1,x 2,…,x n –即 f:X 1 ×X 2 ×…×X n →Y – currying将f重新定义为带有单个参数a 1的函数,该参数映射到另一个函数。这项技术对于部分应用很有用,例如具有pow我们可以编写的curried 函数exp = pow(e)。 例 假设我们有以下函数f接受三个参数(f:X 1 ×X 2 ×X 3 →Y): def f(a,b,c): return a + b * c 调用此函数将使我们留下f_curry:X 1 →(X 2 →(X 3 →Y)),如果我们现在两次调用该函数,f_curry(1)(2)我们将得到一个h等于以下返回值的函数(): def h(c): return 1 + 2 * c curried函数f可以这样编写(Python …

14
这是一个截断的三角形数字吗?
相关OEIS序列:A008867 截断三角数 三角数的一个共同属性是它们可以排列成三角形。例如,取21并排列成os 的三角形: Ø OO oo oo oo oo 让我们定义一个“截断:”从每个角切割相同大小的三角形。截断21的一种方法如下: 。 。。 oo oo 。oo。 。。哦。。 (的三角形.是从原始三角形切出的)。 o剩下12 秒,因此12是一个截断的三角形数字。 任务 您的工作是编写一个程序或函数(或等效函数),该程序或函数采用整数并返回(或使用任何标准输出方法)数字是否为截断的三角形数字。 规则 没有标准漏洞。 输入是非负整数。 切口的边长不能超过原始三角形的一半(即,切口不能重叠) 切口的边长可以为零。 测试用例 真相: 0 1 3 6 7 10 12 15 18 19 虚假: 2 4 5 8 9 11 13 14 16 17 …
20 code-golf  math  decision-problem  number-theory  integer  code-golf  number  decision-problem  functional-programming  code-golf  array-manipulation  matrix  code-golf  string  classification  string  code-challenge  binary  compression  decode  code-golf  string  string  code-challenge  balanced-string  encode  code-golf  number-theory  integer  base-conversion  code-golf  math  number-theory  geometry  abstract-algebra  code-golf  array-manipulation  sorting  optimization  code-golf  math  geometry  image-processing  generation  code-golf  string  cops-and-robbers  repeated-transformation  grammars  cops-and-robbers  repeated-transformation  grammars  code-challenge  restricted-source  tips  source-layout  javascript  code-challenge  kolmogorov-complexity  restricted-source  code-golf  combinatorics  counting  math  fastest-code  linear-algebra  code-golf  math  permutations  matrix  linear-algebra  code-golf  string  decision-problem  restricted-source  code-golf  number  array-manipulation  subsequence  code-golf  number  array-manipulation  matrix  code-golf  brainfuck  code-golf  color  code-golf  quine  source-layout  code-golf  subsequence  code-golf  string  ascii-art  code-golf  string  ascii-art  alphabet  code-golf  decision-problem  interpreter  hexagonal-grid  halting-problem  code-golf  string  polynomials  calculus  code-golf  math  decision-problem  matrix  complex-numbers  code-golf  random  code-golf  number  arithmetic 

1
将λ表达式转换为SK表达式
所述λ演算,或演算,是根据匿名功能的逻辑系统。例如,这是一个λ表达式: λf.(λx.xx)(λx.f(xx)) 但是,出于此挑战的目的,我们将简化表示法: 更改λ为\(以便于键入):\f.(\x.xx)(\x.f(xx)) 该.拉姆达头是不必要的,所以我们可以删除它:\f(\xxx)(\xf(xx)) 在应用程序中使用Unlambda样式的前缀表示法,`而不是将两个函数一起编写(有关如何执行此操作的完整说明,请参见在Lambda微积分表示法之间转换):\f`\x`xx\x`f`xx 这是最复杂的替换。根据变量相对于其所属的lambda标头的嵌套深度(即,使用基于0的De Bruijn索引),用括号中的数字替换每个变量。例如,在\xx(身份函数)中,x主体中的in将替换为[0],因为它属于在将表达式从变量遍历到末尾时遇到的第一个(从0开始)头。\x\y``\x`xxxy将被转换为\x\y``\x`[0][0][1][0]。现在,我们可以将变量放在标头中,离开\\``\`[0][0][1][0]。 组合逻辑基本上是由λ微积分构成的Turing Tarpit(嗯,实际上,它是第一位的,但是在这里无关紧要。) “组合逻辑可以看作是lambda演算的一种变体,其中lambda表达式(代表功能抽象)被有限的组合器集合所取代,这些组合器不存在绑定变量。1个 组合逻辑最常见的类型是SK组合器演算,它使用以下原语: K = λx.λy.x S = λx.λy.λz.xz(yz) 有时I = λx.x会添加一个组合器,但它是多余的,因为SKK(或实际上SKx对任何而言x)都等同于I。 您只需要K,S和应用程序即可编码λ微积分中的任何表达式。例如,这是从函数λf.(λx.xx)(λx.f(xx))到组合逻辑的转换: λf.(λx.xx)(λx.f(xx)) = S(K(λx.xx))(λf.λx.f(xx)) λx.f(xx) = S(Kf)(S(SKK)(SKK)) λf.λx.f(xx) = λf.S(Kf)(S(SKK)(SKK)) λf.S(Sf)(S(SKK)(SKK)) = S(λf.S(Sf))(K(S(SKK)(SKK))) λf.S(Sf) = S(KS)S λf.λx.f(xx) = S(S(KS)S)(K(S(SKK)(SKK))) λx.xx = S(SKK)(SKK) λf.(λx.xx)(λx.f(xx)) = S(K(S(SKK)(SKK)))(S(S(KS)S)(K(S(SKK)(SKK)))) 由于我们使用的是前缀表示法,因此为```S`K``S``SKK``SKK``S``S`KSS`K``SKK`。 1资料来源:维基百科 挑战 到目前为止,您可能已经猜到了什么:编写一个程序,该程序将有效的λ表达式(以上述符号表示)作为输入和输出(或返回)相同的函数,并用SK组合器演算重写。注意,有无数种方法可以重写它。您只需要输出无限方式之一。 …

13
Dirichlet卷积
该狄利克雷卷积是一种特殊的卷积出现在数论中一个非常有用的工具。它对一组算术函数进行运算。 挑战 给定两个算术函数(即函数),计算Dirichlet卷积如下定义。F,g ^f,gf,gF,g ^:N → Rf,g:N→Rf,g: \mathbb N \to \mathbb R(f ∗ g ):N → R (f* 克):N → R(f∗g):N→R(f * g): \mathbb N \to \mathbb R 细节 我们使用约定。0 ∉ Ñ = { 1 ,2 ,3 ,... }0∉N={1,2,3,…} 0 \notin \mathbb N = \{1,2,3,\ldots \} 两个算术函数的Dirichlet卷积再次是算术函数,它的定义为(两个和都是等价的。表达式表示除以,因此求和在的自然除数上 。类似地,我们可以用F* 克f∗gf*gF,g ^f,gf,g(f* …


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.