编程拼图和代码高尔夫

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

1
自枚举的pangram
gram 敏捷的棕色狐狸跳过了那只懒狗。 这是一个连字符(pangram)的例子-一个句子,至少包含一次字母表中的每个字母。 一个自枚举全字母短句是符合标准的生产自己的信件数量的分析是一个全字母短句的句子。 实现这一目标的一个例子是 该Pangram包含四个As,一个B,两个C,一个D,三十个E,六个F,五个G,七个H,十一个Is,一个J,一个K,两个L,两个Ms,十八个Ns,十五个Os,两个Ps ,一个Q,五个R,二十七个S,十八个T,两个Us,七个V,八个W,两个X,三个Y和一个Z。 挑战 产生一个函数,输入是通向字母清单的字符串。在示例中,输入将为“此pangram包含”。每个字母的数量必须采用书面形式,并有助于显示的字母数。 规则 牛津逗号是可选的 在Z之前使用&号(或在硬模式下,包括在函数中的“&”和“ and”之间切换的功能) 每个字母都计入总字母数 没有非书面数字 这是代码高尔夫球,因此以字节为单位的最短代码获胜 在亚硝酸ü本周末r是已婚夫妇,这个数字是在女王的英语编写。例如,nine hundred and ninety-nine Gs对于出现的999个字母G和nine hundred and nine Gs909。 数量级应以标准的小规模命名约定编写 边缘情况 在某些情况下,代码会陷入循环中-例如,如果有两个O,则代码会将计数增加到三个O,这会使代码再次对两个O计数。如果在返回到该值之前计算出其他所有字母都不能解决问题,请认为输入是错误的启动器和输出false,null或者是空字符串。 如果一个字母出现999次以上,则该输入应视为错误的启动器。 测试用例 “此pangram包含”应输出例句

9
计算每个csv记录中的字段数
想象一个文本文件,其中每个csv记录可能具有不同数量的字段。任务是编写代码以输出文件的每个记录中有多少个字段。您可以假设文件中没有标题行,并且可以选择从文件或标准输入中读取内容。 您可以为csv规则假设使用rfc4180版本,以下将为文件的每一行定义进行解释。这是该规范相关部分的轻松编辑版本: CSV格式的定义 每个记录位于单独的行上,并由换行符(CRLF)分隔。例如: aaa,bbb,ccc CRLF zzz,yyy,xxx CRLF 文件中的最后一条记录可能有也可能没有换行符。例如: aaa,bbb,ccc CRLF zzz,yyy,xxx (规则3.不适用于本挑战) 在每个记录中,可能会有一个或多个字段,以逗号分隔。空格被视为字段的一部分,不应忽略。 每个字段可能会或可能不会用双引号引起来。如果字段没有用双引号引起来,则双引号可能不会出现在字段内。例如: "aaa","bbb","ccc" CRLF zzz,yyy,xxx 包含换行符(CRLF),双引号和逗号的字段应用双引号引起来。例如: "aaa","b CRLF bb","ccc" CRLF zzz,yyy,xxx 如果使用双引号将字段括起来,则必须在字段内部出现双引号,方法是在其前面加上另一个双引号,以对其进行转义。例如: "aaa","b""bb","ccc" 例 输入: ,"Hello, World!" "aaa","b""bb","ccc" zzz,yyy, "aaa","b bb","ccc","fish","" 应该给出输出: 2, 3, 3, 5 您可以使用最方便的任何方式提供输出值。 图书馆 您可以使用任何喜欢的库。 到目前为止,真棒答案,但是我们缺少命令行/ bash答案,这将特别酷。
12 code-golf 

8
数字出现
输入: 整数列表(永远不会包含零) 输出: 相同大小的列表,其计数基于以下内容: 如果当前项目为负:查看该项目之前的所有项目,并计算该数字在这些其他数字中出现了多少次 如果当前项目为正:则查看此项目之后的所有项目,并计算该数字在其他数字中出现了多少次 有一种说法:如果列表的大小为偶数,则我们仅对每个数字计数一次(即使它与多个数字匹配),如果列表的大小为奇数,则为当前项的每个数字计算数字的每个数字(重复数字被多次计数)。 让我们举一些例子来澄清这一点: 带有偶数列表的示例: Input: [4, 10, 42, -10, -942, 8374, 728, -200] Output: [3, 2, 4, 1, 2, 1, 1, 5 ] 列表的大小为偶数,因此我们只对每个数字计数一次。 4:这是积极的,所以我们很期待。有包含数位三数4(42,-942,8374)。因此,我们从开始3。 10:这是积极的,所以我们很期待。有两个数字,分别包含数字1和/或0(-10,-200)。因此,第二个输出是2。 42:再次肯定,如此向前。有含有任一数字四个数字4和/或2(-942,8374,728,-200)。因此,第三个输出是4。 -10:这一次是负面的,所以我们往后看。只有一个数字包含数字1和/或0(我们忽略减号)(10)。因此,第四输出是1。 等等 带有奇数列表的示例: Input: [382, -82, -8, 381, 228, 28, 100, -28, -2] Output: [13, 2, 2, 4, …

19
双打基地
背景 IEEE 754双精度浮点格式是一种表示64位实数的方法。看起来如下: 实数按以下方式n转换为double: s如果数字为正,则符号位为0,否则为1。 的绝对值n以22**y * 1.xxx的幂乘以base的形式表示。 指数e是y(2的幂)减去1023。 分数f是xxx部分(基数的分数部分),采用最高有效52位。 相反,位模式(由sign s,exponent e和fraction 定义f,每个都是整数)表示数字: (s ? -1 : 1) * 2 ** (e - 1023) * (1 + f / (2 ** 52)) 挑战 给定一个实数n,将其double表示形式的52位小数部分输出n为整数。 测试用例 0.0 => 0 1.2 => 900719925474099 (hex 3333333333333) 3.1 => 2476979795053773 (hex 8cccccccccccd) 3.5 …
12 code-golf 

15
及时分箱
这项挑战中的任务是将数组的元素放入时间仓。输入将是一个非递减的正整数数组,该整数表示事件的时间,而整数则表示每个bin的大小。让我们从一个例子开始。我们称为输入数组A和输出数组O。 `A = [1,1,1,2,7,10]` and `bin_size = 2`. `O = [4,0,0,1,1]`. 为什么呢 使用a bin_size = 2,我们将具有以下间隔:在第一个间隔内(0,2], (2,4], (4,6], (6,8], (8,10]有四个项目,在第二个和第三个间隔(1,1,1,2)内(0,2]没有一个7,在间隔中(6,8]一个10,在间隔中一个(8,10]。 您的代码应考虑bin_size从开始的每个长度间隔,0并计算每个间隔中A有多少个数字。您应始终将区间的右端包括在bin中,因此在上面的示例2中将其包括在中4。您的代码应在输入和输出长度之和的线性时间内运行。 更多示例: `A = [1,2,7,12,15]` and `bin_size = 5`. `O = [2, 1, 2]`. `A = [1,2,7,12,15]` and `bin_size = 3`. `O = [2,0,1,1,1]`. 您可以假定输入和输出可以以您认为方便的任何格式给出。您可以使用任何喜欢的语言和库。

30
整数对数
鉴于整数N , P > 1,找到最大的整数M这样P ^ M ≤ N。 输入/输出: 输入为2个整数N和P。输出将是整数M。 例子: 4, 5 -> 0 33, 5 -> 2 40, 20 -> 1 242, 3 -> 4 243, 3 -> 5 400, 2 -> 8 1000, 10 -> 3 笔记: 输入将始终有效,即它将始终是大于1的整数。 学分: 该名称的信誉归@cairdcoinheringaahing所有。最后3个示例由@Nitrodon提供,改进说明的功劳归@Giuseppe所有。

2
分解多项式
给定度数严格大于1的整数多项式,请将其完全分解为度数严格大于1的整数多项式的组合。 细节 一个完整的多项式是唯一的整数作为系数的多项式。 给定两个多项式p和q所述组合物由下式定义(p∘q)(x):=p(q(x))。 整数多项式的分解是整数多项式p的有限有序序列,q1,q2,...,qn其中deg qi > 1对1 ≤ i ≤ n和和p(x) = q1(q2(...qn(x)...)),并且所有qi不可进一步分解。分解不一定是唯一的。 您可以使用系数列表或内置的多项式类型作为输入和输出。 请注意,用于此任务的许多内建函数实际上会分解给定字段上的多项式,而不一定是整数,而此挑战则需要分解整数多项式。(某些整数多项式可能允许分解为整数多项式以及包含有理多项式的分解。) 例子 x^2 + 1 [x^2 + 1] (all polynomials of degree 2 or less are not decomposable) x^6 - 6x^5 + 15x^4 - 20x^3 + 15x^2 - 6 x - 1 [x^3 - 2, …

14
将数组放入垃圾箱
在这个简单的挑战中,将为您提供L非负整数的输入数组,以及数量b大于0但不超过的长度的bin L。您的代码必须返回一个新数组M,该数组的长度为b,并且已对该数组进行分箱L。用示例最容易解释。 L = [1,0,5,1]然后b = 2返回M = [1,6]。 L = [0,3,7,2,5,1]然后b = 3返回M = [3,9,6]。 到目前为止,如此简单。但是,在这个问题b上并不一定要分开len(L)。在这种情况下,最后一个垃圾箱将只有更少的数字可以组成。 除可能的最后一个垃圾箱外,每个垃圾箱必须具有相同数量的数字,以构成其总数。最后一个垃圾箱所贡献的号码不得超过其他垃圾箱。在其他规则的约束下,最后一个bin必须具有尽可能多的数字。 L = [0,3,7,2,5,1]然后b = 4返回M = [3,9,6,0]。 M = [10,8,0,0]是不可接受的输出,因为第三个bin的名称编号不包含在bin 1和中2。 L = [0,3,7,2,5]然后b = 2返回M = [10,7]。 M = [3, 14]不是可接受的输出,因为最后一个bin会有3贡献的元素,但是第一个只有2。 L = [1,1,1,1,1,1,1]然后b = 3返回M = [3,3,1]。 作为最后一条规则,您的代码必须在线性时间内运行。 您可以使用任何喜欢的语言或库,并且可以假定以您认为方便的任何方式提供了输入。 事实证明,有些输入无法解决。例如[1,1,1,1,1]和b=4。您的代码可以输出任何喜欢的输入。

5
通过…布雷森纳姆(Bresenham)的线栅格化,可跟踪任何矩阵
灵感来自此。 大二的阿加莎·斯蒂芬代尔(Agatha Stephendale)确实很喜欢栅格图形,他学习了线性代数课程。现在,她将矩阵想象为矩形,但是在她的艺术思想中,她将对角线附加到这些矩形上,并尝试计算沿它们的迹线。实际上,她想计算所有矩阵的迹线,而不仅仅是正方形。 由于Agatha是一位艺术家,她知道如何在自己喜欢的图像编辑器中绘制线条,而后者使用Bresenham的算法绘制线条。她甚至检查了维基百科,并找到了伪代码: function line(x0, y0, x1, y1) real deltax := x1 - x0 real deltay := y1 - y0 real deltaerr := abs(deltay / deltax) // Assume deltax != 0 (line is not vertical), // note that this division needs to be done in a way that preserves …

5
稀疏量角器
给定一些正整数n,设计一个带有最少标记数的量角器,使您能够测量所有角度的整数倍2π/n(每个角度一次测量)。 细节 作为输出,可以在的范围内输出的整数列表0到n-1(或1到n)表示每一个标记的位置。或者,也可以输出长度的串/列表n与#在每个标记的位置和_(下划线)在有无。(或两种不同的字符,如果更方便的。) 实施例:对于n = 5您需要的3马克到能够测量所有角度2π/5, 4π/5, 6π/5, 8π/5, 2π通过设置(例如)在1马克0,在1马克2π/5和1马克6π/5。我们可以将其编码为列表[0,1,3]或字符串##_#_。 例子 注意,输出不一定是唯一的。 n: output: 1 [0] 2 [0,1] 3 [0,1] 4 [0,1,2] 5 [0,1,2] 6 [0,1,3] 7 [0,1,3] 8 [0,1,2,4] 9 [0,1,3,4] 10 [0,1,3,6] 11 [0,1,3,8] 20 [0,1,2,3,6,10] PS:这类似于稀疏标尺问题,但是我们考虑使用圆形(角形)刻度,而不是线性刻度(两端)。 PPS:此脚本应为每个脚本计算一组标记的一个示例n。在线尝试! PPPS:正如@ngn所指出的,此问题等效于找到阶的循环组的最小差分基n。最小订单在http://oeis.org/A283297中列出,一些理论界限在https://arxiv.org/pdf/1702.02631.pdf中找到

5
减少因果分解的领导者变动
tl; dr:输出减少的素因数分解前导改变的值。 每个正整数都有一个唯一的素因式分解。让我们称简化素数分解为素数的多重性列表,按因子的大小排序。例如,减少的素因数分解1980为[2, 2, 1, 1],因为1980 = 2 * 2 * 3 * 3 * 5 * 11。 接下来,让我们记录下每个简化素数分解发生的频率[1, 2, ..., n]。例如,在中[1, 2, ..., 10],发生以下减少的素数分解: [1]: 4 (2, 3, 5, 7) [2]: 2 (4, 9) [1, 1]: 2 (6, 10) []: 1 (1) [3]: 1 (8) 我们将把领导者召集到n最经常发生的减少的素因分解[1, 2, ..., n]。因此,的简化素因分解导数n …

11
平衡的零一编码
任务 A-Z使用您自己喜欢的方案,仅使用零和一来对完全由大写字母()组成的字符串进行编码。但是规则不是那么简单! 规则 您的程序/函数必须正确处理长度为8的任何有效输入字符串。 所有输入的结果长度必须相同。 对于不同的输入,结果必须是不同的。 结果必须尽可能短。 结果必须为零一平衡(具有与零相似的数目)。他们不必相等(即完全平衡),但是您的分数将因此受到惩罚。 您不必提供解码您的编码的程序/功能。 输入输出 您可以决定接受任何一组26个不同的可打印ASCII字符代替A-Z。 您可以决定输出任意一对不同的可打印ASCII字符来代替0和1。 您不允许输出整数而不是位字符串,因为它可能有前导零,并且不清楚您是否确实满足规则2。 如果决定偏离默认值(A-Z输入和01输出),则必须在提交中指定输入/输出字符集。 计分 基本分数:代码大小,如果程序为空,则为1。 罚则 长度处罚:相乘 1.5 ** (encoded length - 42) 矮个没有奖金。42是字母大小为26的8长度字符串的完美平衡编码的最小长度。 不平衡的惩罚:乘以2 ** max(abs(ones - zeros) for every valid input of length 8),其中ones和zeros分别是每个输出中1和0的计数。 您的提交必须显示最坏情况的示例(输入/输出)或惩罚值的理论解释。 最低分获胜。 提交示例 假设的esolang,0字节,得分74733.8906 这是一个假设的esolang,其中一个空程序以二进制形式打印输入字符的所有ASCII码。 例如,如果您提供AAAAAAAA输入,程序将1000001连续打印8次,即10000011000001100000110000011000001100000110000011000001。 输入的字母选择为CEFGIJKLMNQRSTUVXYZabcdefh。这样,所有字符都将转换为二进制的七位数字,并且每个字符的零一计数仅相差一个(转换为二进制时,它们全部具有三个1和四个0,反之亦然)。 输出长度始终为56,最坏情况下的不平衡发生在输入上,如CCCCCCCC,其中零比1多出现8次。 因此,此提交的分数是1.5 ** (56 - 42) …

8
尽快计算Hafnian
挑战在于编写可能最快的代码来计算矩阵的Hafnian。 对称2n按2n矩阵的Hafnian A定义为: 这里S 2n表示整数从1to 的所有置换的集合2n,即[1, 2n]。 Wikipedia链接还提供了一个可能引起您兴趣的不同外观公式(如果您在网络上进一步浏览,甚至可以使用更快的方法)。相同的Wiki页面讨论了邻接矩阵,但是您的代码也应适用于其他矩阵。您可以假设所有值都是整数,但不能假设它们都是正数。 还有一种更快的算法, 但似乎很难理解。而Christian Sievers是第一个实施它的人(在Haskell中)。 在这个问题上,矩阵都是正方形的,并且对称且偶数维。 参考实现(请注意,这是使用最慢的方法)。 这是Xcoder先生提供的一些示例python代码。 from itertools import permutations from math import factorial def hafnian(matrix): my_sum = 0 n = len(matrix) // 2 for sigma in permutations(range(n*2)): prod = 1 for j in range(n): prod *= matrix[sigma[2*j]][sigma[2*j+1]] my_sum += prod return …

3
罗马化韩文
是的,基本上,您是一个浪漫主义者,宝贝,但是要难一些。象,路更难。 学习韩语很困难。至少对于亚洲以外的人来说。但是他们至少有机会学习,对吗? 你必须做什么 您将获得韩国声明。例如,안녕하세요。您必须将输入转换为其罗马发音。对于给定的示例,输出可以为annyeonghaseyo。 现在获得技术 朝鲜语字符分为三个部分:起始辅音,元音和结束辅音。字符中可能不存在结尾辅音。 例如,아是ㅇ(开始辅音)和ㅏ(Vowel),并且손是ㅅ(开始辅音),ㅗ(Vowel)和ㄴ(结束辅音)。 Evert辅音和元音有其发音。每个辅音的发音如下。 Korean ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ Romanization Starting g kk n d tt r m b pp s ss – j jj ch k t p h Ending …

3
狂热的“快棕色狐狸”沿着时髦的螺旋形“跳跃”
介绍 编写一个程序,按照给定的规则输出著名的八卦的输出螺旋。 挑战 一个全字母短句是使用给定的字母的每一个字母至少一次的句子。最著名的语言之一是在Windows字体查看器中广泛使用的语言,即“ 快速的棕色狐狸跳过懒狗 ”。挑战在于根据此文本输出螺旋形。 您的任务将输出以下确切文本: heeeeellllllllllllazzzzzzzzzzz hummmmmmmmmmmmmppppppppppppppy hubrrrrrrrrrrrrrrrrrrooooooosy hukyddddoooooooooooooooggggwsy hukyveeeeerrrrrrrrrrrrrrrrtwsy hukyvxjjjjjjjjjjuuuuuuuuuttwsy hukyvxkbbrrrrrrrrrrrrrrrmttwsy hukyvxkogggggggttttttttomttwsy tukyvokoellllllllllllahomttwsy tukyvokoeovvvvvvvvvvvzhomttwsy tukyvocoeoummmmmmmmmezhomttwsy tukyvocoeoufooooooopezhomttwsy tukyvocohoufroooooxpezhomttwsy tukyvoiohoufrquuuwxpezhomttwsy tucyvoiohoufbqttiwxpezhomttwsy tucyvoiohoufbeehiwxprzhomttwsy tucyvoiohoufkccciwxprzeomttwsy tjiyvoidhounnnnnnwxprzeomttwsy tjiyvoidhojjjjjjjjxprzeomttwsy tjiyvoidhssssssssssprzeopttwsy tjiyvoidttttttttttttrzeopttwsy tjiyvoiyyyyyyyyyyyyyyzqopttwoy tjiyvouuuuuuuuuuuuuuuuqwpttwoy tjiyvffffnnnnnnnnnnnnnnwpttwoy tjiyossssssssssssssssssspthwoy tjizzzzalllllllllllleeeeehhwoy tjuuqqqqqqqqqqqqqqqqqeeeeehnod txxxxxoooooooooooooooffffffnod reeeeevvvvvvvvvvvvvvvvvvvvvvod gggggggoooooooooooooood 它是这样产生的, 有一只热心的狐狸喜欢八卦,“敏捷的棕色狐狸跳过了懒狗”。一天,他在向外螺旋的中心,决定跳进去并画画。 他想从头到尾遍历全能图,如果一个字母是字母表中的第n个字母,他想把它画n次。 但是,狐狸不太擅长在拐角处转弯,因此在到达每个拐角处时,他还必须停下来切换到下一个字母。 他还决定重复三次全字母短句强调,他是在敏捷的棕色狐狸。 您的工作是显示在狐狸涂完所有这些字母后的螺旋状。 (普通版,不讲故事) 重复三次著名的字母“快速的棕色狐狸越过懒狗”,去掉空格,所有字母都小写,生成 thequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydogthequickbrownfoxjumpsoverthelazydog 螺旋从中心开始,以字母“ t”开始,从右向开始,然后顺时针向外延伸。如果当前字符是字母表中的第n个字母,则无论何时只要切换到下一个字符 螺旋到达一个角,或 当前字母正好打印n次。 …

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.