编程拼图和代码高尔夫

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

30
在64位整数中找到前导零的数目
问题: 在64位有符号整数中找到前导零的数目 规则: 输入不能视为字符串;数学和按位运算可以驱动算法的任何事物 无论使用哪种语言,都应针对数字的64位带符号整数表示形式验证输出 高尔夫球场默认规则适用 以字节为单位的最短代码获胜 测试用例: 这些测试假定二进制补码有符号整数。如果您的语言/解决方案缺少或使用带符号整数的其他表示形式,请注明出来并提供其他可能相关的测试用例。我已经提供了一些解决双精度问题的测试用例,但是请随时建议其他应该列出的用例。 input output 64-bit binary representation of input (2's complement) -1 0 1111111111111111111111111111111111111111111111111111111111111111 -9223372036854775808 0 1000000000000000000000000000000000000000000000000000000000000000 9223372036854775807 1 0111111111111111111111111111111111111111111111111111111111111111 4611686018427387903 2 0011111111111111111111111111111111111111111111111111111111111111 1224979098644774911 3 0001000011111111111111111111111111111111111111111111111111111111 9007199254740992 10 0000000000100000000000000000000000000000000000000000000000000000 4503599627370496 11 0000000000010000000000000000000000000000000000000000000000000000 4503599627370495 12 0000000000001111111111111111111111111111111111111111111111111111 2147483648 32 0000000000000000000000000000000010000000000000000000000000000000 2147483647 33 0000000000000000000000000000000001111111111111111111111111111111 2 62 …

8
三进制if转换器
在Java / .NET / C / JavaScript / etc中。您可以使用三元if来缩短if语句。 例如(在Java中): // there is a String `s` and an int `i` if(i<0)s="Neg";else if(i>0)s="Pos";else s="Neut"; 可以通过三元数缩短为: s=i<0?"Neg":i>0?"Pos":"Neut"; 挑战: 输入:设置单个变量的常规if-else(可以嵌套)。 输出:转换后的三进制-if。 挑战规则: 您可以假设所有if-else情况都可能没有括号(因此,每个if / else-if / else块都有一个主体)。 您可以假设将没有任何空格,制表符或换行符,除了每个空格,制表符或换行符else(包括处的else if)之外。 您可以假设使用的变量名始终是一个小写字母([a-z])。 赋予变量的值可以是以下之一: 字符串(不带空格/选项卡/新线),这将通过双引号包围(即"Test","SomeString","Example_string"等等)。您可以假定字符串将永远不包含子字符串if或else,也不包含空格,制表符,换行符(转义的双引号)或字符=。它可以包含字符><(){}[];?:!&|,但只能在可打印的ASCII范围内(['!' (33), '~' (126)])。 整数(即0,123,-55等等) 小数(即0.0,0.123,-55.55等等) 这些值永远不会混淆。因此,分配的所有变量都是整数,并非某些是整数,有些不是字符串。 括号内的条件可以包含以下字符=<>!+-/*%&|[],a-z,0-9。您可以假设将没有任何内部括号,也可以假设将不使用任何使用多个字符(如if(if<0))的(令人困惑)字段。 您可以假设不会有i*=10代替的快捷方式i=i*10。 您无需处理悬而未决的else案件,因此if可以将所有案件与配对else。即if(a)if(b)r=0;else r=1;不是一个可能的输入案例。if(a)if(b)r=0;else r=1;else …
18 code-golf  string 

30
文字压缩
在下面的给定文本中,文本中有些单词在文本中重复多次。使用任何编程语言编写简短的代码即可压缩文本以显示它。换句话说,使用最少的字节数来显示文本。 文本是: Peter Piper picked a peck of pickled peppers. A peck of pickled peppers Peter Piper picked. If Peter Piper picked a peck of pickled peppers, Where's the peck of pickled peppers Peter Piper picked?

25
将数字从Zeckendorf表示形式转换为十进制
关于Zeckendorf表示形式/基本斐波那契数 这是一个以斐波那契数为基础的数字系统。数字由0和1组成,每个1表示该数字包含相应的斐波那契数,而0表示不包含。 例如,让我们将所有<= 10的自然数转换为基本斐波那契数。 1将成为1,因为它是1的总和,这是一个斐波那契数, 2将变为10,因为它是2的总和,这是一个斐波那契数,并且不需要1,因为我们已经实现了所需的总和。 3将变为100,因为它是3的总和,这是一个斐波那契数,它不需要2或1,因为我们已经实现了所需的总和。 4将成为101,因为它是[3,1]的和,两者均为斐波那契数。 5将成为1000,因为它是5的总和,这是一个斐波纳契数,我们不需要任何其他数。 6是1001,因为它是斐波那契数5和1的总和。 7是1010,因为它是斐波那契数5和2的总和。 8将成为10000,因为它是斐波那契数。 9将成为10001,因为它是斐波那契数8和1的总和。 10将成为10010,因为它是斐波那契数8和2的总和。 让我们将一个随机的基本斐波那契数10101001010转换为十进制:首先,我们编写相应的斐波那契数。然后,我们计算1以下数字的总和。 1 0 1 0 1 0 0 1 0 1 0 144 89 55 34 21 13 8 5 3 2 1 -> 144+55+21+5+2 = 227. 阅读有关基本斐波那契数字的更多信息:link,它还有一个将正整数转换为基本斐波那契数字的工具。您可以尝试一下。 现在的问题: 您的任务是在Zeckendorf表示形式中获取一个数字,然后输出其十进制值。 输入是一个仅包含0和1的字符串(尽管您可以根据需要使用任何输入方式)。 以十进制输出一个数字。 测试用例:(格式为输入->输出) 1001 -> 6 …

30
max()还不够
介绍 今天,一位朋友以稍微不同的方式提出了这个问题:“单个[Python]命令可以确定某些整数中的最大值,并且它们不相等吗?”。 虽然我们在“单个命令”的合理定义内没有找到实现此目的的方法,但我认为打高尔夫球可能是一个有趣的问题。 挑战 “ 如果并且都不都是整数,则返回整数列表中的最大值。 ” 进一步来说: 给定一个仅包含逗号分隔的整数列表的字符串: 如果它们相等,则什么也不返回/输出 否则,返回/输出最大 规则 的输入必须是仅包含整数的逗号分隔的列表的字符串 该输出必须是没有(任何种类的输出),否则最大的元素从输入,表示它是在输入 条目可以是完整程序,也可以只是一个功能,只要您提供一些测试方法即可! 假设条件 假设输入列表元素可以超过一位,但不超过(2 32 − 1) 假设输入列表中的元素不超过一百万 假设输入将不包含负值 假设输入永远不会为空 为避免疑问,紧接在“更具体地”之后给出的对挑战的解释应取代其上方的挑战声明(“返回最大的……”)。 例子 (1)全部相等: Input: 1,1 Output: (2)不同: Input: 1,2 Output: 2 (3)零!: Input: 0,0,0,0,0,0,0,1,0,0 Output: 1 (4)随机: Input: 7,3,8,4,8,3,9,4,6,1,3,7,5 Output: 9 (5)更大的数字,更大的列表: Input: 627,3894,863,5195,7789,5269,8887,3262,1448,3192 Output: 8887 其他示例: …
18 code-golf 

26
coprime这个词是吗?
给定一个单词,将每个字母都当作英语字母中的数字(因此a变成1,b变成2,z变成26,依此类推),然后检查所有它们(包括重复项)是否都是成对的互质数。 输入的内容正好是一个小写英文字母的单词。如果单词是互质的,则输出为事实:任何真值/假值,但只有它们的两个变体。禁止出现标准漏洞。 测试用例: man: True day:(True感谢ØrjanJohansen) led:False(l=12和d=4有gcd=4) mana:(True尽管a多次出现,1和1是互质数) mom:False(gcd(13,13)=13)) of:False(感谢XNOR;虽然15∤6,gcd(15,6)=3) a:(True如果没有成对的字母,也将该单词视为互素) 这是一个代码高尔夫球,因此以字节为单位的最短代码胜出!

20
简约熔岩灯
介绍: 我想每个人都知道熔岩灯是什么,但万一他们不知道: (图片来源) 它们基本上是在半透明液体中包含蜡的玻璃管。打开灯时,底部会被加热,从而导致密度变化,因此蜡会浮到顶部。冷却后,它会再次掉落,从而产生我们上面看到的效果。 灯的底座通常需要大约45-60分钟的时间才能升高到足以将固体蜡变为液体蜡的温度(如果灯位于室温下的区域)。 有关Wikipedia的更多信息,该信息也用作上述某些文本的来源。 挑战: 给定一个正整数n,该值指示自从我们打开熔岩灯以来经过的分钟数,请基于五个级别的整数输出熔岩灯的随机状态。 对于此挑战,我们将说熔岩灯总共包含1000单位蜡,并且我们可以将蜡置于5个级别。 1)如果n低于45,熔岩灯仍在加热,因此输出将是四个空行,1000底部是: 1000 2)如果熔岩灯的温度n在此范围内,则[45, 60)其温度升高到足以使蜡移动的程度,但还没有很高。蜡可以达到并包括第三级。 3)如果n为60或更高,则蜡的含量可以为五个级别中的任何一个。 因此,给定正整数n作为输入,我们将牢记上述三个规则来输出随机状态。 以下是一些示例输出: 可能的输出n是>= 45: 523 106 371 913 87 可能的输出n是>= 60: 73 113 312 5 497 284 55 637 24 常量输出n是<= 44(以及任何可能的输出n): 1000 挑战规则: 即使上面的级别不为空,也可以有空行。 只是0不允许在任何行上。应该为空。 输出有些灵活。您可以输出字符串/对象的列表/数组,而不是上述的以换行符分隔的结果。我说字符串/对象的原因是由于上述规则。一个空行应"",null,[]等,但不能是0或负整数(也不能被false)(即["", "", 913, "", 87]用于n >= 45)。您还可以反转输出(即,1000\n\n\n\n代替\n\n\n\n1000或[87, null, 913, null, …

24
检查我的隧道阵列
假设您有一个整数数组,其非负值是指向同一数组中其他位置的指针,只是这些值表示隧道,因此如果位置A中的值为正并指向位置B,则位置中的值B也必须为正,并指向位置A以代表隧道的两端。所以: 挑战 给定一个整数数组,请检查该数组是否符合作为隧道数组的限制,并为true和false返回两个不同的连贯值。 对于非隧道位置,数组中的值将小于零;对于隧道位置,数组中的值将小于零或大于零。如果您的数组是1索引的,则零值表示非隧道位置。不需要检查非隧道值。 如果单元格中的正值指向自身,那是错误的。如果A指向B,B指向C,C指向A,那是错误的。如果一个正值指向数组的范围之外,那是错误的。 例子 以下示例是0索引的: [-1, -1, -1, 6, -1, -1, 3, -1, -1] Truthy (position 3 points to position 6 and vice versa) [1, 0] Truthy (position 0 points to position 1 and vice versa) [0, 1] Falsey (positions 0 and 1 point to themselves) [4, 2, …

14
平方随机对称
挑战 编写返回或打印平方随机对称矩阵的程序或函数。 输入值 N:矩阵的大小,即6 x 6 输出量 矩阵。您可以打印它,将其作为字符串(带有换行符)或作为列表/数组的列表/数组返回。 规则 您需要至少使用N不同的字符,其中N是方阵(输入)的大小。由于我们仅使用字母[a,z] [A,Z]和数字[0,9](当时仅使用1个数字),因此可以假定N < 27and N > 2,这是因为在那时N <= 2您不能同时拥有两个字母和数字。最后但并非最不重要的一点是,每个字母/数字的发生概率都必须为非零(不必均匀分配)。但是,结果必须至少具有N不同的字母/数字。 矩阵必须水平和垂直对称。 恰好2行2列必须严格包含一个个位数(它的位置也应该是随机的)。其余的行/列将仅包含字母。将字母视为[a,z]和[A,Z],当然将一位数字视为[0,9]。 只是要更容易,你可以假设信件的情况下无所谓,只要案件是对称的意思是:a=A, b=B, etc。 每个可能的输出都必须具有非零的发生概率。随机分布不需要是统一的。 例 输入 8 输出: c r p s s p r c r k o z z o k r u t 2 a a 2 …
18 code-golf  matrix 

9
填充字符串列表之间的最大汉明距离
等长的两个字符串之间的汉明距离是相应字符不同的位置数。如果弦的长度不相等,则汉明距离未定义。 挑战 编写一个程序或函数,该程序或函数从字符串列表中的所有字符串对中找出最大汉明距离,并根据下文所述的规则进行填充。 字符将来自内部a-zA-Z0-9。 字符串的长度可能不相等,因此对于每个比较而言,较短的字符串都必须按以下方式填充: 从头开始将字符串包装多次,以匹配所需的长度 每次奇数换行(第1,第3,第5等)更改字母的大小写 a-zA-Z包装时,将外部物品保持不变 例如,假设您需要填充5个字符串ab9Cd,以使其最终以18个字符结尾。您最终将得到: ab9CdAB9cDab9CdAB9 ^^^^^ ^^^ 与^第一和第三包裹下加入到亮点的情况下更改。 输入输出 输入/输出格式灵活。您可以假定输入至少包含两个字符串,并且所有字符串都将至少包含一个字符。 输出为整数。 规则 这是代码高尔夫球。适用标准规则。 测试用例 [ "a", "b" ] => 1 [ "a", "b", "c" ] => 1 [ "a", "a", "c" ] => 1 [ "abc", "abcd" ] => 1 [ "abc12D5", "abC34d3", "ABC14dabc23DAbC89d"] => …
18 code-golf  string 

8
划掉44仍然是常规44;(
介绍 2015年3月24日,@ isaacg将他的Pyth答案从44字节压缩到42字节。由于划掉的44(44)看起来很像常规的44,@ Optimizer发表了以下评论: 打出44仍然是正常44 :( 之后,在2015年10月21日,@ Doorknob♦将他的Ruby答案从44字节压缩为40字节(之后为38字节),并将以下部分添加到他的答案中,并带有指向@Optimizer的原始注释的链接: 划掉44仍然是常规44;( 这是答案链模因的开始,其中每个划掉的44个(有时是4个或444个)都链接回前一个模因。 然后在2017年4月8日(我不确定这是否是这样做的第一个答案,但这是我能找到的最早的答案),@ JonathanAllan将他的Python答案从44提升到39。但是他使用<s> 44 </s>了44看起来像这样: 44 ,并在他的答案中添加了以下内容: 划掉  44  不再是44 :) 这基本上就是模因的(开头)结尾。 挑战 关于此挑战:给定一个正整数列表和一个日期,将列表以逗号和空格分隔,其中除最后一个数字外的每个数字都放置在<s>...</s>标记之间。 此外,如果有任何被划掉的数字在序列中[4, 44, 444, 4444, ...](oeis.org上的A00278): 如果日期在2017年4月8日之前:则在第二行上输出准确的文本crossed out N is still regular N ;((所有小写​​字母,并带有分号图释),文本(N是序列中的划线数字)。 如果日期是2017年4月8日或更晚:N序列中的划线编号应 添加前导和尾随。无需任何其他输出行。 例子: 输入:list = [50, 48, 44, 41],date = January 1st, 2017 输出: <s>50</s>, <s>48</s>, <s>44</s>, …

20
折叠矩阵
相关:让我们设计一个数字马赛克,打印/输出L-phabet。沙盒发布在这里 给定2个输入,C = columns and rows, S = starting point输出矩阵如下: Input 4, 3 1 2 3 0 2 2 3 0 3 3 3 0 0 0 0 0 说明 给定 C = 4, S = 3 1)创建一个C x C填充有0 4 columns 4 _____|____ | | r --0 0 0 …
18 code-golf  matrix 

10
解密扩展的韦氏格式
此挑战基于user48538的沙箱帖子。由于他不再活跃于此站点,因此我接手了这项挑战。 apgsearch是Conway的《生命游戏》的分布式汤搜索程序和搜索结果数据库,Catagolue使用apgcodes对样式进行分类和表示。apgcode本身使用扩展的Wechsler格式,这是Allan Wechsler在1992年开发的模式符号的扩展。 以下示例和图像取自LifeWiki。 集合中与正则表达式匹配的n个字符的字符串[0-9a-v]表示一条5行,n列宽的条带。每个字符表示对应于位串五个单元在垂直柱[ 00000,10000,01000... 00010,10010,01010,11010... 11111]。 例如,27deee6对应于重量级的太空飞船: ⎡⎣⎢⎢⎢⎢⎢⎢01个0001个1个1个001个01个1个001个1个1个001个1个1个001个1个1个001个1个00⎤⎦⎥⎥⎥⎥⎥⎥[01个1个00001个1个01个1个1个1个01个1个1个1个1个1个001个1个1个1个00000000] \begin{bmatrix} {\color{Gray}0} & 1 & 1 & {\color{Gray}0} & {\color{Gray}0} & {\color{Gray}0} & {\color{Gray}0} \\ 1 & 1 & {\color{Gray}0} & 1 & 1 & 1 & 1 \\ {\color{Gray}0} & 1 & 1 & 1 & 1 & 1 …

29
计算给定范围内的幸运彩票
在俄罗斯,我们有一种类似的传统:我们喜欢寻找幸运票。 普通票的外观如下: 如您所见,该票证有一个六位数的号码。 如果前三位数字的总和等于后三位数字的总和,则认为六位数数字是幸运的。 照片上的数字不是很幸运: 038937 038 937 0 + 3 + 8 = 11 9 + 3 + 7 = 19 11 != 19 挑战 给定范围的限制(包括),返回其中包含的幸运彩票号码的数量。 参量 输入:2个整数:范围中的第一个和最后一个整数 输入范围为0至999999(含)之间 输出:1个整数:该范围内有多少个幸运数字 您可以接受输入并以任何可接受的格式返回输出 假设数字小于100000的前导零。 例子 0, 1 => 1 100000, 200000 => 5280 123456, 654321 => 31607 0, 999999 => 55252 …
18 code-golf  math  number 

12
颠簸
您的任务是编写一个计算机程序或函数,该程序或函数采用长度至少为2的正整数列表,并确定它们是否为“ zigzag”。当且仅当数字交替地大于和小于其前面的数字时,序列才为之字形。例如和是曲折形,但和不是。[ 1 ,2 ,0 ,3 ,2 ][1个,2,0,3,2][1,2,0,3,2][ 4 ,2 ,3 ,0 ,1 ][4,2,3,0,1个][4,2,3,0,1][1,2,0,0,3,1][1,2,0,0,3,1][1,2,0,0,3,1][ 1 ,2 ,3 ,1 ][1个,2,3,1个][1,2,3,1] 根据您的决定,应为每种可能性输出两个不同的一致值之一(之字形而不是之字形)。 程序或函数的代码点本身也必须是Z字形。这意味着当您采用代码点序列时,它应该是锯齿形的。 这是代码高尔夫球,因此答案将以字节计分,而字节越少越好。

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.