Questions tagged «functional-programming»

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

15
扩展真理机
许多人知道编程中的真机。但是现在是时候让我们努力了。介绍,扩展的真机!扩展的真理机器将两件事作为输入,一个整数n和一个非空字符串s。输出s n带有可选尾随空格的时间。但是,如果n等于0,则必须输出,s直到手动停止程序为止,即永远不要终止它。 另外,如果n为负数,则字符串需要颠倒。例如,使用s=helloand n=-1,输出将为olleh。 输入的标准方法,任何种类的输出,只要可以处理无限。如果您的答案不能处理无限大,请在有趣的情况下或以无法处理无限大输出的语言随意发布。 测试用例 n, s, output 5, "hello world", "hello worldhello worldhello worldhello worldhello world" 0, "PPCG", "PPCGPPCGPPCGPPCG..." -2, "truThY", "YhTurtYhTurt" 2000, "o", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo" 这是代码高尔夫球,所以最短的代码获胜! 这是原始的沙盒帖子。已对其进行了编辑。感谢@ComradeSparklePony创建了这个挑战的想法

4
无点的元组添加
表达功能的最短方法是什么 f(a,b)(c,d)=(a+c,b+d) 用无点表示法? pointfree.io给了我们 uncurry (flip flip snd . (ap .) . flip flip fst . ((.) .) . (. (+)) . flip . (((.) . (,)) .) . (+)) 只需一点点工作就可以缩短到 uncurry$(`flip`snd).((<*>).).(`flip`fst).((.).).(.(+)).flip.(((.).(,)).).(+) 为76个字节。但这似乎还是真的对于如此简单的任务来说漫长而复杂。有什么方法可以将成对加法表示为较短的无点函数? 为了清楚理解我所说的无点,函数的无点声明涉及获取现有函数和运算符,并以创建所需函数的方式将它们相互应用。反引号,括号内文字值([],0,[1..3]等)允许的,但像关键字where和let不是。这表示: 您不得分配任何变量/功能 您不得使用lambda 您可能无法导入 这是CMC时的相同问题

30
创建一个鹦鹉程序
给定输入,输出该输入,然后不断地换行。 输入将是仅由可打印的ASCII字符(0x20-0x7E)和换行符(0x0A)组成的字符串。 如果输入长度为0,则不断输出换行符。 这是代码高尔夫球,因此每种语言中最少的字节会获胜!
15 code-golf  string  sequence  combinatorics  fastest-code  number  code-challenge  restricted-source  rosetta-stone  code-golf  arithmetic  decision-problem  integer  factorial  code-golf  arithmetic  decision-problem  integer  bitwise  code-golf  kolmogorov-complexity  code-golf  tips  vim  code-golf  quine  code-generation  code-golf  string  restricted-source  code-golf  string  random  unicode  code-golf  audio  code-golf  ascii-art  code-golf  decision-problem  code-golf  puzzle-solver  code-golf  restricted-source  code-golf  kolmogorov-complexity  permutations  hexagonal-grid  code-golf  string  math  combinatorics  fastest-code  code-golf  restricted-source  code-golf  string  code-golf  arithmetic  code-golf  math  number  code-golf  string  decision-problem  balanced-string  code-golf  binary  code-golf  string  number  code-challenge  restricted-source  code-golf  ascii-art  printable-ascii  interactive  code-golf  string  ascii-art  code-challenge  restricted-source  source-layout  code-golf  arithmetic  tips  functional-programming  golfing-language  code-golf  binary  encryption 

18
查找相关的数字分组
最近,我的声誉是25,121。我注意到每个数字分组(即用逗号分隔的数字)都是一个完美的正方形。 您的挑战是,给定一个非负整数Ñ和一元布尔黑匣子功能 ˚F:ž * → 乙,如果每个值产生truthy值˚F施加到的数字分组Ñ是truthy,和falsey否则。 您可以通过从右侧开始将数字分成3组来找到数字分组。最左边的组可以有1位,2位或3位数字。一些例子: 12398123 -> 12,398,123 (3 digit groupings) 10 -> 10 (1 digit grouping) 23045 -> 23,045 (2 digit groupings) 100000001 -> 100,000,001 (3 digit groupings) 1337 -> 1,337 (2 digit groupings) 0 -> 0 (1 digit grouping) 附加规则 此函数可以映射到布尔值(例如true和false),1s和0s或任何true / falsey值。请指定您的答案支持的格式。 您可以采用整数作为输入,也可以采用整数字符串(即由数字组成的字符串)。 您可以编写程序或函数。 将数字组传递给函数f时,应修剪所有不必要的前导零。例如,当f应用于N …


1
计数坎宁安链
素数总是让人着迷。2300年前,欧几里得在他的《元素》中写道 质数是仅由一个单位测量的质数。 这意味着素只能被 1(或本身)。 人们一直在寻找素数之间的关系,并提出了一些非常奇怪的东西(如“有趣的”)。 例如,一个索菲·热尔曼质数是一个主要p针对2*p+1也是素数。 一个安全素是一种主要p用于哪些(p-1)/2也是黄金,而这正是一个索菲·热尔曼质数的倒退状态。 这些与我们在此挑战中寻找的东西有关。 一个坎宁安链型我是一系列素数,其中除了最后一个的每一个元素是的索菲·热尔曼质数,而除了第一个的每一个元素是一个安全的黄金。该链中元素的数量称为它的length。 这意味着我们从素数开始p计算q=2*p+1。如果也q为质数,则我们有长度为2的I型Cunnigham链。然后进行测试2*q+1,以此类推,直到下一个生成的数字为复合数为止。 II型坎宁安链是按照几乎相同的原理构造的,唯一的区别是我们检查了2*p-1在每个阶段。 坎宁安链的长度可以为1,这意味着2 * p + 1和2 * p-1都不是素数。我们对这些不感兴趣。 坎宁安链的一些例子 2启动长度为5的I型链。 2, 5, 11, 23, 47 下一个构造的数字95不是素数。 这也告诉我们,那5,11,23和47不启动类型的任何链我,因为这将有前述的元素。 2也开始长度为3的II型链。 2, 3, 5 接下来是9,这不是素数。 让我们尝试II11型(之前我们将其排除在I型之外)。 好吧,接下来是下一个,它不是素数,因此该“链”的长度为1,我们不将其计入此挑战。21 挑战 写一个程序或功能,给定一个号码n作为输入,写入/返回的起始数第n个的坎宁安链I或II型的至少长度为2,后跟一个空格,随后链的类型它开始(我或II),然后是冒号,然后是该类型链的长度。万一素数同时启动两种类型的链(类型I 和型 II型),则首先计算型链。 例: 2 I:5 请记住,这n可能是任何类型的先前启动链的一部分,在这种情况下,不应将其视为该类型链的起始编号。 让我们看看这是如何开始的 我们从开始2。由于它是第一个素数,因此我们可以确定没有链从包含的较低素数开始2。 类型I中的下一个数字将是2*2+1 == 5。5是素数,因此我们已经有了至少长度为2的链。 我们将其视为第一条链。那II型呢?下一个号码是2*2-1 == 3。3是素数,因此II型的链长也至少为2。 …

9
教堂减法
教堂减法 Lambda演算一直是我的迷恋,并且将函数相互传递的新出现的行为令人愉快地复杂。教堂数字是自然数的表示,该自然数是由函数的重复应用构成的(通常是常数的一元加法)。例如,数字零返回x并“忽略”输入函数,一个为f(x),两个为f(f(x)),依此类推: ident = lambda x: x zero = lambda f: ident succ = lambda n: lambda f: lambda x: f(n(f)(x)) one = succ(zero) add1 = lambda x: x + 1 to_int = lambda f: f(add1)(0) print(to_int(one)) >>> 1 由此我们可以很容易地看到,通过将第一个函数应用于x然后将第二个函数应用于x可以完成加法运算: add = lambda m: lambda n: lambda f: lambda x: …

5
高尔夫定点组合器
用您选择的语言编写尽可能少的字符的定点组合器。 自由形式(即最短的形式):整个程序,实际功能,代码段 如果您有一个标准库,则可能无法使用 但是,您可能希望从其他高级函数中提取它,而不是从基础上构造它 请包括将其用作演示的递归阶乘或斐波那契。 在这个问题中,自引用是可以接受的,其目的仅仅是将其从递归函数中删除。
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.