编程拼图和代码高尔夫

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

6
评估减号和波浪号的表达
给定一个与正则表达式匹配的表达式/^[-~]*x$/,请根据对它进行求值x并输出与正则表达式匹配的字符串/^-?x[+-]\d+$/。 例如,字符串的-~x计算结果为x+1,而字符串的-~-x计算结果为-x+1,而字符串的-~-~--x计算结果为x+2。 我们从头开始x并从右到左评估字符串。-对词取反,而~转换y为-y-1。 测试用例: x x+0 ~x -x-1 -~x x+1 ~-~x -x-2 -~-~x x+2 --~~x x+0 ~-x x-1 -~-x -x+1 这是代码高尔夫球。以字节为单位的最短答案将获胜。 输入/输出格式严格。该"x"是强制性的。
16 code-golf  string 

30
挑战之三:移动平均线
注意:这是一系列阵列操作挑战中的第3条。对于上一个挑战,请单击此处。 列表的移动平均值 列表的移动平均值是通过对原始重叠的小子列表进行平均而得出的新的平滑列表。 在创建移动平均线时,我们首先使用一定的“窗口大小”生成重叠子列表的列表,每次将此窗口向右移一次。 例如,给定列表[8, 4, 6, 2, 2, 4]和窗口大小3,子列表将是: [8, 4, 6, 2, 2, 4] Sublists: ( ) <- [8, 4, 6] ( ) <- [4, 6, 2] ( ) <- [6, 2, 2] ( ) <- [2, 2, 4] 然后,我们计算每个子列表的平均平均值以获得结果:([6.0, 4.0, 3.3, 2.7]每个值四舍五入到小数点后一位)。 挑战 你的任务是写一个程序或其中,给定一个列表功能大号和整数1个≤N≤长度(L) ,计算移动平均为大号使用窗口大小Ñ。 规则: 您的程序可能使用整数除法或浮点除法。对于浮点除法,只要值是正确的,就可以允许由于数据类型的限制而产生的小误差。 …

7
测量一堆原木
介绍 这是长度为5的对数: ##### 我想将这些原木堆在一起。我的操作方式是将新的日志从右侧滑动到最上面的日志,并在它们的左端或右端对齐时停止滑动(不要问为什么)。如果新日志更长,它将一直滑动到最上面的日志的左端: ######## <- ##### 如果更短,则仅滑动直到其右端对齐: ###### <- ######## ##### 当我将更多的原木滑入桩中时,它们的位置由当前最上面的原木确定: ## ###### ### #### ## ###### ######## ##### 这看起来在物理上是不可能的,但让我们假装它可行。 任务 您的输入应该是一个非空的正整数列表,代表我的日志长度。最左边的数字是我放到堆中的第一个原木,因此它最终在底部。在上面的示例中,输入为[5,8,6,2,4,3,6,2]。对于所得桩的每一列,您的输出应为越过该列的原木数量。在以上示例中,正确的输出为[2,2,3,3,3,2,4,6,3,3,1,2,2]。 规则和计分 输入和输出可以采用任何合理的格式。输出只能包含正整数,即它不得包含前导或尾随0。普通的代码高尔夫球规则适用:您可以编写完整的程序或函数,最低字节数获胜,并且禁止标准漏洞。 测试用例 [1] -> [1] [4] -> [1,1,1,1] [3,2] -> [1,2,2] [2,3] -> [2,2,1] [2,2,2] -> [3,3] [2,3,2] -> [2,3,2] [3,2,3] -> [1,3,3,1] [1,3,2,2,1,3,1] -> …

16
素数的素数
出于此挑战的目的,素数的素数(PPP)定义为一个数字,可以定义为素数对素数的幂。例如,9是PPP,因为它可以表示为3 ^ 2。另一方面,81不是PPP,因为它只能表示为3 ^ 4,而4不是质数。头几个PPP是:4,8,9,25,27,32,49,121,125,128,169,243,289,343 ...这是OEIS序列A053810 你的任务: 编写一个程序或函数,使其对于输入整数n返回/输出第n个PPP(1索引或0索引),无论您喜欢哪个。 输入: 通过任何合理的方法获得的0到1,000之间的整数。 输出: 输入指示的索引处的PPP。 测试用例: 它们是1索引的,因此,如果您的程序采用0索引的输入,则对于指定的输入-1应该达到相同的输出。 3 -> 9 6 -> 32 9 -> 125 得分: 此代码高尔夫球,最低得分(以字节为单位)获胜!

6
实施Anyfix注释!
在前缀表示法中,运算符位于参数之前,因此您可以想象该运算符next()会以递归方式调用。在后缀表示法中,运算符在参数之间移动,因此您可以简单地将其想象为解析树。在后缀表示法中,运算符位于参数之后,因此您可以将其想象为基于堆栈的。 用anyfix表示法,操作员可以在任何地方*。如果操作员出现并且没有足够的参数,则操作员将等待直到有足够的参数。对于这一挑战,您将实现一个非常基本的anyfix评估程序。(请注意,anyfix是我放弃的一种娱乐语言,您可以在此处试用或在此处查看) 您将需要支持以下命令: (Arity 1) 重复 负 (Arity 2) 加成 乘法 相等:返回0或1。 您可以选择对这些命令使用任何五个非空白符号。出于演示目的,我将使用"重复项,×乘法和+加法。 对于文字,您仅需要支持非负整数,但是您的解释器必须能够包含所有整数(在您语言的(合理的)整数范围内)。 让我们来看一个示例:10+5。该存储应表现为堆栈,而不是队列。因此,首先,堆栈从开始[],而排队的操作员列表从开始[]。然后,对文字10进行求值,从而使stack成为可能[10]。接下来,对运算符+进行求值,它需要两个参数。但是,堆栈上只有一个参数,因此排队的运算符列表变为['+']。然后,对文字5进行求值,从而使stack成为可能[10, 5]。在这一点上,'+'可以对运算符进行评估,使它成为堆栈[15]和队列[]。 最终的结果应该是[15]为+ 10 5,10 + 5和10 5 +。 让我们来看一个更困难的示例:10+"。堆栈和队列从[]和开始[]。10首先被评估,这使堆栈[10]。接下来,+对进行评估,它不会更改堆栈(因为没有足够的参数),并使队列成为['+']。然后,"进行评估。这样就可以立即运行,从而形成堆栈[10, 10]。+现在可以求值,以使堆栈成为[20]和队列[]。最终结果是[20]。 操作顺序如何? 让我们来看看×+"10 10。堆栈和队列都以[]: ×:堆栈未更改,队列变为['×']。 +:堆栈未更改,队列变为['×', '+']。 ":堆栈未更改,队列变为['×', '+', '"']。 10:堆栈变为[10]。即使×应该是第一个要评估的运算符,因为它首先出现,但"可以立即运行,并且没有运算符可以运行,因此可以对其进行评估。堆栈变为[10, 10]并排队['×', '+']。×现在可以求值,这使堆栈[100]和队列成为可能['+']。 10:堆栈变为[100, 10],可以+对其进行求值。堆栈变为[110]并排队[]。 最终结果是[110]。 这些演示中使用的命令与anyfix语言的命令一致。但是,由于我的解释器中的错误,最后一个示例将无法正常工作。(免责声明:您的提交将不会在anyfix解释器中使用) 挑战 选择一组5个非空白非数字字符,并根据上述规范创建一个anyfix解释器。您的程序可以输出奇异数组或包含的值;确保值栈在执行结束时仅包含单个值,并且确保运算符队列在执行结束时为空。 这是代码高尔夫球,因此以字节为单位的最短代码获胜。 测试用例 对于这些测试用例,重复项为",否定为-,加法为+,乘法为×且相等为=。 Input -> Output 1+2×3 …

19
生成打印长度为n倍的程序
给定一个非负整数n,您的解决方案必须以您选择的语言输出一个程序,该程序的输出n字节数与输出程序的字节数相同。 规则 您必须指定解决方案输出的程序的语言和编码,并且不得为解决方案的不同输入选择不同的语言或编码。输出程序的语言可能与解决方案的语言相同,也可能不同。 您提交的内容仅需要处理您语言范围内的整数,但请勿滥用此规则。 这是代码高尔夫球,因此以字节为单位的最短提交会获胜。 例 假设n是4。然后f_8,我的解决方案输出了一个程序,该程序以我的(虚构的)语言输出j3 1s+/2]!mz。程序输出的长度为3,其输出的长度为3 * 4 = 12,因此该解决方案对于输入4是正确的。 假设它n是1,我的程序输出ffffpfpffp(10个字节)。ffffpfpffp用我选择的语言编写的程序必须产生10 * 1 = 10字节的输出。
16 code-golf  quine 

15
走开!No-1在这里!
我在玩一些数字,发现一个序列,当然是关于OEIS的序列。它是A005823:三进制扩展数不包含1的数字。它去了: a(2n)= 3 * a(n)+2 a(2n + 1)= 3 * a(n + 1) a(1)= 0 a = 0,2,6,8,18,20,24,26,54 .... 我编写了一个CJam程序,该程序通过将索引转换为二进制,将1替换为2,然后从三进制转换为十进制,来生成这些数字的前n个。 我还注意到,通过取序列中两个数字的和(有时是数字本身)可以得到任何偶数。 挑战: 给定任何非负偶数作为输入,请按求和顺序输出两个数字的索引。(请注意,有时可能有多对。) 规则: 指定使用0索引还是1索引。 如果要以字符串形式输出,请在两个索引之间放置一个定界符。 允许您输出为复数。 如果您愿意,可以输出每个有效对。 Code Golf:最短答案胜出 测试用例 我使用0索引。在这里,我列出了每个输入的所有可能输出,但您只需要输出一个即可。 0: [0 0] 2: [1 0] 4: [1 1] 6: [2 0] 8: [2 1] [3 0] 10: …

16
我有几个分区?
正整数的分区号定义为可将其表示为正整数之和的方式数。换句话说,它具有整数分区的数量。例如,数字4具有以下分区: [[1,1,1,1],[1,1,2],[1,3],[2,2],[4]] 因此,它具有5分区。这是OEIS A000041。 任务 给定正整数N,确定其分区号。 所有标准规则均适用。 输入和输出可以通过任何合理的方式进行处理。 这是code-golf,因此以字节为单位的最短代码获胜。 测试用例 输入| 输出量 1 | 1个 2 | 2 3 | 3 4 | 5 5 | 7 6 | 11 7 | 15 8 | 22 9 | 30 10 | 42

24
对串联三角形的行求和
考虑下面的三角形。 1个 23 456 7891 01112 131415 1617181 92021222 324252627 2829303132 33343536373 839404142434 4454647484950 51525354555657 585960616263646 5666768697071727 37475767778798081 您可能已经注意到,第一行的长度为1,此后的每一行都比前一行长1位,并且它包含连接的正整数的数字。 您将得到一个整数ñ。您的任务是找到位于上述三角形的第N行上的数字的总和。 规则 您可以选择0或1索引。请在您的答案中指定。 默认漏洞适用。 您可以采用任何标准均值和任何合理格式来接受输入并提供输出。 这是OEIS A066548,此序列是三角形本身(除了我们不删除前导零)。 这是code-golf,所以以字节为单位(每种语言)的最短代码获胜。打高尔夫球吧! 测试用例 Input | Output 0 | 1 1 | 5 2 | 15 3 | 25 4 | 5 5 | 15 6 …

15
被1000003整除?容易,只需将最后一位乘以300001然后加!
给定一个P大于的质数10,您的程序或函数必须弄清楚其除数规则x,定义为具有最小绝对值的整数,当将其与质数的最后一位相乘并加到其余的原始数时,该整数将产生原始质数的倍数主要。 例 给定输入31,最后一个数字为1,其余数字为3。因此,您的程序必须找到x具有最小绝对值的整数,该整数应1*x + 3是的倍数31。在这种情况下,x=-3可以正常工作,因此程序或函数将返回-3。 给定输入1000003,最后一个数字为3,其余数字为100000。这样您的程序就会找到,x=300001因为3*300001+100000 = 1000003它是的倍数1000003。 数学背景 的值x可以用作除数检验。如果一个数字可N被整除P,则将x的最后一位数字N与的余数相加N将得到Pif和only N的可被P第一个整数整除的倍数。 因为P=11,我们得到x=-1,它等于以下公知的除数规则11:一个数字可通过11交替改变其数字的位数来除以11。 规则 输出可以采用任何清楚地编码输出的符号和值的形式。 输入素数将在10到2 ^ 30之间。 如果输入不是素数或不在范围内,则无需处理。 如果x和-x均为有效输出,则不需要处理(不应发生)。 允许使用蛮力,但希望有更多创造性的解决方案。 这是代码高尔夫球,因此每种语言中最短的代码胜出!不要让打高尔夫球的语言的答案妨碍您发布其他语言的信息。 测试用例 Input Output 11 -1 13 4 17 -5 19 2 23 7 29 3 31 -3 37 -11 41 -4 43 13 47 -14 53 16 59 6 …

14
带领带的马里奥赛车得分
我在为该网站提出另一个挑战时遇到了这个问题。在这项挑战中,我使用“ Mario Kart 8 Scoring ”。玩家在第k位获得的积分数量由此1索引数组表示:[15,12,10,9,8,7,6,5,4,3,2,1]。因此,第一名获得15分,第二名获得12分,依此类推。 像这样分配点很容易,但是棘手的部分是如何处理领带的。我要做的是给每个并列玩家平均每个并列位置的得分。例如,如果只有第1名和第2名并列,则两个玩家都将获得(15 + 12)/ 2 = 13.5分。(注意:允许四舍五入到最接近的整数,因此13或14都可以接受。)然后,第3-12位获得其位置的正常点数。 挑战 给定12个非负整数分数,这些分数递减排序,输出每个玩家获得的积分数。您也可以将点列表[15,12,10,9,...]作为输入。请注意,每个玩家获得的积分数并不取决于分数的实际值,而是取决于它们与其他分数的比较方式。 测试用例 [21,21,15,14,12,9,6,5,4,3,2,1] => [ 14,14,10,9,8,7,6,5,4,3,2, 1] [20,15,15,15,10,9,8,7,6,5,4,3] => [15,10,10,10,8,7,6,5,4,3,2, 1] 说明:(12 + 10 + 9)/ 3 = 10.3333 [1,1,1,1,1,1,1,1,1,1,1,1,1] => [ 7,7,7,7,7,7,7,7,7,7,7,7, 7 ] 说明:(15 + 12 + 10 + 9 + 8 + 7 + …

11
求反正切之和的正切
背景 可以证明,对于任何整数k >= 0,f(k) = tan(atan(0) + atan(1) + atan(2) + ... + atan(k))都是有理数。 目标 编写一个完整的程序或函数,如果给定k >= 0,f(k)则将其输出为单个减少的分数(分子和分母为互质数)。 测试用例 前几个值是 f(0) = (0,1) f(1) = (1,1) f(2) = (-3,1) f(3) = (0,1) f(4) = (4,1) f(5) = (-9,19) f(6) = (105,73) 规则 禁止出现标准漏洞。 输入和输出可以采用任何方便的格式。您可以将其输出f(k)为字符串numerator/denominator,两个整数的元组,分数或有理对象等。如果输出字符串,则仅提供两个整数,即输出3/2而不是1 1/2。 这是代码高尔夫球,最短的答案(以字节为单位)获胜。

7
我的PPCG ID是什么?
挑战 输入PPCG成员的名称,然后输出其PPCG ID号。如果该用户不存在,则可能会报告错误或返回任何非正数。如果有多个使用此名称的成员,则可以选择仅输出一个ID或全部输出。 测试用例 “ musicman523”-> 69054 “丹尼斯”-> 12012 “ xnor”-> 20260 “泄漏修女”-> 48934 “ fəˈnɛtɪk”-> 64505 “约格·赫尔瑟曼”-> 59107 “社区”-> -1 “任何不存在的用户”-> 0 “ Alex”-> 69198(这是一种可能的结果) “泄漏N”-> 0 “豪尔赫”-> 3716

20
枚举单元符号
因此,我们都希望熟悉Spreadsheet“ A1”单元格表示法。 它只是该单元格在网格中的位置的字母数字表示。字母表示单元格的列位置,数字表示行。 “字母”部分可以包含26个英文字母中的1个或多个字母,所有字母必须为大写字母。这些通过使用26-adic双射数来映射为数字。“数字”部分可以由任何非零的正整数组成。 挑战在于,编写一个程序,以任何字符串的形式给出任何单元格的A1表示,可以输出一个字符串,该字符串包含以数字表示的列位置,然后是空格,然后是行号。 下面的示例输入/输出: A1 >>1 1 B10 >>2 10 AC4 >>29 4 AAC753 >>705 753 F123 >>6 123 GL93 >>194 93 这是我面临的第一个挑战,因此,该标准相对简单且可能很差。 编辑:字符串必须是字母,后跟数字,并且获胜标准是最短的代码长度(如果可以的话) 编辑:与此有关,但是用不同的起始索引进行了反向处理。有人可能会争辩说,这一事实使链接之谜变得更加有趣。

6
双缝实验
懒惰的物理学家有工作要做双狭缝实验。但是,它们很懒惰,不会麻烦自己设置所有设备,因此将模拟效果。他们无法编程,因此需要一些帮助。由于它们很懒,因此您的程序应尽可能短。 给定一个奇数正整数n(n >= 1和n % 2 == 1),执行仿真。 怎么运行的 您将以一块空的画布开始,每帧都有一个单独的光线穿过缝隙并降落在画布上。粒子将以最大概率着陆: n = 1: +-----+ | | | 1/2 | | | +-----+ n = 3: +-----+ +-----+ +-----+ | | | | | | | 1/4 | | 1/2 | | 1/4 | | | | | | | +-----+ …

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.