编程拼图和代码高尔夫

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

18
单个数字的最长重复子序列
挑战: 给定一个正整数,输出至少出现两次的最长的单个数字子序列,并且具有另一个数字的边界(或整数的开始/结尾)。 一个例子: 输入:7888885466662716666 单个数字的最长子序列为88888(7[88888]5466662716666),长度为5。但是,该子序列在整数中仅出现一次。 相反,输入的结果7888885466662716666应为6666(78888854[6666]271[6666]),因为它(至少)出现两次。 挑战规则: 子序列的长度优先于其发生的次数。(即输入8888858888866656665666,我们输出88888([88888]5[88888]66656665666;长度5,发生两次),而不是666(88888588888[666]5[666]5[666];长度3,发生三次)。 如果多个子序列的长度相等,则输出出现次数最大的子序列。即,具有输入3331113331119111,输出我们111(333[111]333[111]9[111];长度为3时,发生三次),而不是333([333]111[333]1119111;长度3为好,但发生两次) 如果多个子序列的出现次数和长度相等,则可以输出其中一个或全部(以任何顺序)。即,具有输入777333777333,可能的输出是:777; 333; [777, 333]; 或[333, 777]。 子序列必须具有其他数字的边界(或整数的开始/结尾)。即,输入122222233433结果为33(1222222[33]4[33];长度2,出现两次)而不是222(1[222][222]33433,长度3,两次出现都无效)。 这适用于所有计入出现次数计数器的数字。即,输入811774177781382结果为8([8]117741777[8]13[8]2;长度1,发生三次,三次)而不是77(811[77]41[77]781382/ 811[77]417[77]81382;长度2,发生两次,一次无效)或1(8[1][1]774[1]7778[1]382;长度1,发生四次,两次无效。 您可以假设输入内容不包含任何数字0(它将与匹配[1-9]+)。(这是为了避免不得不处理10002000应该输出的测试用例,默认情况下000大多数语言都将输出0。) 您可以假定输入将始终包含至少一个有效输出。 I / O都很灵活。可以是数字/字节/字符的列表/数组/流,也可以是字符串而不是单个整数。 通用规则: 这是代码高尔夫球,因此最短答案以字节为单位。 不要让代码高尔夫球语言阻止您发布使用非代码高尔夫球语言的答案。尝试针对“任何”编程语言提出尽可能短的答案。 标准规则适用于您的答案,因此您可以使用STDIN / STDOUT,具有正确参数的函数/方法和返回类型的完整程序。你的来电。 默认漏洞是禁止的。 如果可能的话,请添加一个带有测试代码的链接。 另外,强烈建议为您的答案添加说明。 测试用例: Input: 7888885466662716666 / [7,8,8,8,8,8,5,4,6,6,6,6,2,7,1,6,6,6,6] Output: 6666 / [6,6,6,6] Input: 3331113331119111 / [3,3,3,1,1,1,3,3,3,1,1,1,9,1,1,1] Output: 111 / [1,1,1] Input: …

30
总和
设(输入)n=42n=42n=42 然后除数是:1,2,3,6,7,14,14,21,42 平方除数:1,4,9,9,36,49,196,441,1764 求和(加法):2500 由于因此我们返回真实值。如果它不是理想的正方形,则返回虚假值。50×50=250050×50=250050\times 50=2500 例子 : 42 ---> true 1 ---> true 246 ---> true 10 ---> false 16 ---> false 这是代码高尔夫球,因此每种语言的最短代码(以字节为单位)获胜 感谢@Arnauld指出了序列:A046655

25
工作日倒计时
我只是有一个天才的想法,那就是使工作生活更轻松-倒计时到特定的日期,只计算工作日。 基本任务是创建一个到特定日期的倒计时,该日期仅包括倒计时中的工作日。 工作日为星期一,星期二,星期三,星期四和星期五。 输入内容应为“非官方”欧洲标准格式的特定日期,dd.MM.yyyy并且必须为今天或将来的一天。 输出仅应为剩余天数。 因为它是代码高尔夫球,所以最短的代码获胜。 测试用例: Today | Input | Output 10.12.2018 | 17.12.2018 | 5 02.10.2018 | 16.10.2018 | 10 如果我错过了这个问题,请原谅我-这是我的第一个问题:) 编辑: 您可以将其false用作输出而不是0 <-,但它并不漂亮 无需遵守DST
17 code-golf  date 

22
按数字对描述的内容排序
给定一个正整数,我们可以形成一个新的数字,该数字由成对的数字描述(对于带有奇数数字的数字,添加前导0)。 例如: 1234可以读为1 2、3 4s-因此,1234的输出为2444。 643的位数为奇数,因此添加前导零使其成为偶数。然后,将0643读取为:零6s,四个3s,因此输出为3333。 (这是OEIS A056967)。 任务:给定一个正整数数组,按升序对它们按数字对描述的值排序。导致相同值的输入数字之间的顺序无关紧要。 输入:正整数的数组/列表/集合。在输入前导零不会允许的,并输入作为数字/字符串/列表等。不允许-输入的语言应尽可能接近整数/数字类型。 输出:以上述方式排序的数组,以任何常用方式返回(函数返回值/ STDOUT /呼入void /等)。您可以单独打印它们,将它们以数字,字符串或列表形式返回数字。 测试用例 Input Output [19, 91, 2345, 2023] [19, 2023, 2345, 91] [25257, 725, 91, 5219, 146125, 14620512] [725, 5219, 14620512, 91, 146125, 25257] [123130415 3335 91 111111111 528 88] [528, 111111111, 123130415, 3335, 88, 91] [1 …

15
帮助我的多节律
我是一名音乐家,一生中需要更多的节奏! 当两个事件(拍手,音符,萤火虫闪烁等)以两个不同的规则间隔发生时,音乐(和自然界)中就会发生多节奏。两种事件在同一时间间隔内发生的次数不同。 如果我在同一时间间隔内用左手敲击两次,用右手敲击3次,看起来会像这样: ------ R . . . L . . 顶部的连字符表示多节奏模式的长度,它是最低的公共倍数或2和3。这可以理解为模式重复的点。 还有一个“节奏感”,这是两只手轻拍时产生的模式: ------ R . . . L . . M . ... 这是一个简单且非常常见的节奏,比率为3:2。 只是说我不想做一个简单的可以在脑海中锻炼的多节律,所以我需要一些东西来为我锻炼。我可以在纸上做长版,或者... 规则: 如上所述,编写一些代码以生成并显示一个多节奏图。 任何旧的语言,请尝试使用最少的字节。 您的代码有两个参数: 左手的抽头数(正整数) 右手的抽头数(正整数) 它将计算出长度,这是两个参数的最小公倍数。 第一行将包含两个空格字符,后跟显示长度的连字符(长度*'-') 第二和第三行将显示左右手的模式: 它将以R或L开头,表示它是哪只手,后跟一个空格。 那只手的间隔是长度除以其参数。 点击将从第三个字符开始,由您选择的任何字符表示。从那时起,它将显示相同的字符“间隔”字符。 它不会长于长度线。 第四行是元节奏: 它将以大写字母M开头,后跟一个空格。 从第三个字符开始,它将在每个位置上显示一个字符(您选择的任何字符),左右手都可以点击。 尾随空格无关紧要。 测试用例: r = 3,l = 2 ------ …
17 code-golf 

7
堆叠式数字楼梯
给定正整数和,如下所述输出列和行文本。^ h w ^ ^ hwwwHHhwwwHHh 第一行以11 0秒开始,第二行以10 1秒开始,第三行以9 2秒开始,依此类推,在第十行以2 9秒开始。在前十行中的每行上,在连续运行连续数字之后,第二个最低位出现两次,第二个最低位出现两次之后,此模式将永远重复。如果0出现s,则其后的数字始终为9s。 第十行下方的行与紧接在其上方的行相同,但向右移一行。如果新数字不位于其自身的另一个实例旁边,则它与最左上的数字相同。否则,它是下一个最高的数字(从9循环回0)。 前元素如下:11 × 1011×1011\times10 00000000000 11111111110 22222222211 33333333221 44444443322 55555544332 66666554433 77776655443 88877665544 99887766554 这是带有彩色文本的图像,以使图案更清晰。 如果您需要减少列数/行数,则只需裁剪以上文本即可。 如果您需要产生更多的列/行,则应扩展现有的楼梯。如果更多的列/行增加了连续数字的新阶梯,则应从整数中循环选择数字。因此对于输入,输出应为(15 ,13 )(15,13)(15,13) 000000000009988 111111111100998 222222222110099 333333332211009 444444433221100 555555443322110 666665544332211 777766554433221 888776655443322 998877665544332 099887766554433 009988776655443 100998877665544 这是带有颜色的文本图像: 规则 输出可以通过任何方便的方法给出。 完整的程序或功能都是可以接受的。如果是函数,则可以返回输出而不是打印输出。 如果愿意,可以返回行列表。 您可以根据需要返回2D数字数组或数字列表。 不允许出现标准漏洞。 …

15
将列表分为大小的块,但不计算不包含谓词的项目
动机:有时候列表中的某些项目不会计入您的总数。例如,按排计数飞机乘客,其中婴儿坐在父母的膝盖上。 挑战:编写一个程序将项目列表拆分为多个块。每个块(除了最后一个块)都具有相同的大小,其中size定义为通过谓词函数的项目数。 规则: 您的程序必须 项目清单 正整数块大小 谓词函数(获取一项,并返回true或false) 您必须返回输入列表,并将其分成多个部分 每个块都是项目列表 总体而言,这些物品必须保持相同的顺序,且没有杂物 每个块(可能是最后一个块除外)中通过谓词的项目数应与输入块大小匹配。 无法通过谓词的项目不应计入此大小 谓词失败的项目是 仍包含在输出块中 分配给最早的块,如果块“满”,但接下来的项是不通过谓词的项 因此,最终块可能不仅仅包含不符合谓词的项目 最终块的大小可能小于块大小,因为所有项目都已考虑在内。 非详尽示例: 最简单的示例是考虑1s和0s,其中谓词函数为x ==> x > 0。在这种情况下,sum每个块的都必须与块大小匹配。 项目:[],大小:2,谓词:x > 0-> []或[[]] 项目:[0, 0, 0, 0, 0, 0],大小:2,谓词:x > 0->[[0, 0, 0, 0, 0, 0]] 项目:[0, 1, 1, 0],大小:2,谓词:x > 0->[[0, 1, 1, 0]] 项目:[0, …

3
死蛙走
介绍 乔尼想扮演Frogger。但是,他不是很好。实际上,只有在平台移动之后,他才会尝试前进。 找出Jonny的青蛙是否设法到达路径的尽头或它是否在途中死亡。 挑战 该程序将接收由0s和1s 组成的Frogger网格作为输入,格式如下: 网格将具有随机的宽度和长度,并且至少为3x3 1 代表平台 0 代表水 F 代表青蛙的起始位置 网格的第一行和最后一行仅由1s 组成,并且不会移动,并且青蛙F将随机放置在最后一行 每个中间层将始终在移动,并且每行的末尾都有一个<或>,指示它是向左还是向右移动 允许将这些符号替换为您自己的符号,只要它们完全不同并且您在答案中指定替换即可。 输入可以采用任何兼容格式(带换行符的字符串,字符串数组,字符数组等)。 挑战规则 每转,所有平台都会根据<或>符号指示的方向移动一个正方形 如果平台被推离“屏幕”,它们会重新出现在网格的另一侧 如果青蛙在移动的平台上,它将随之移动 在那之后,青蛙将跳到顶部一格。青蛙每转都会移动。 如果青蛙跳入水中(0)或与移动平台一起接触网格的一侧,则会死亡。 如果青蛙幸存,您的程序必须输出真实值,否则输出虚假值。 这是代码高尔夫球,因此最短的答案以字节为单位。有标准漏洞。 例子 例子1 输入项 11111 00111> 00101< 1F111 输出量 1 执行 转弯1: 11111 10011 01010 1F111 11111 10011 0F010 11111 转弯2: 11111 11001 F0100 11111 …

30
在文本中搜索前缀并在文本中列出其所有后缀
我在这里宽松地使用“后缀”来表示“前缀之后的任何子字符串”。 “前缀”在此表示单词的开始,其中单词的开始定义为空格或输入文本的第一个字符之后(对于第一个单词)。单词中间的“前缀”将被忽略。 例如,如果您输入的前缀是“ arm”,并且输入文本是“ Dumbledore的军队已为即将发生的世界末日大战充分武装”,则输出列表将包含(y,ed,ageddon)。 测试用例 假定区分大小写,字符串以空格结尾。输入将不会以空格开头。 删除重复项是可选的。 Input prefix: "1" Input text: "He1in aosl 1ll j21j 1lj2j 1lj2 1ll l1j2i" Output: (ll, lj2j, lj2) - in any permutation Input prefix: "frac" Input text: "fracking fractals fracted fractional currency fractionally fractioned into fractious fractostratic fractures causing quite a fracas" Output: …

12
广义Cantor集段长度
问题 让我们定义一个广义的Cantor集,方法是从单个连续间隔开始,从所有尚未删除的间隔的中间迭代删除一些有理长度段。 给定要删除或不删除的段的相对长度,以及要执行的迭代次数,问题在于编写程序或函数,该程序或函数输出n迭代后已删除或未删除的段的相对长度。 示例:迭代删除第四个和第六个第八个 输入: n –迭代次数,从0或1开始索引 l–分段长度的列表,以正整数gcd(l)=1表示,带有奇数个长度和奇数个长度,表示从保持不变的分段开始的,保持不变或被删除的部分的相对长度。由于列表长度是奇数,因此永远不会删除第一个和最后一个段。例如,对于常规的Cantor集合,这将是[1,1,1],其中三分之一将保留,三分之一将被删除,三分之一将被删除。 输出: 整数列表o,第一次迭代gcd(o)=1中相对片段的长度,n当上一迭代中没有删除的片段被列表的缩小副本所取代l。第一次迭代是[1]。您可以使用任何明确的输出方法,甚至是一元的。 例子 n=0, l=[3,1,1,1,2] → [1] n=1, l=[3,1,1,1,2] → [3, 1, 1, 1, 2] n=2, l=[3,1,1,1,2] → [9,3,3,3,6,8,3,1,1,1,2,8,6,2,2,2,4] n=3, l=[5,2,3] → [125,50,75,100,75,30,45,200,75,30,45,60,45,18,27] n=3, l=[1,1,1] → [1,1,1,3,1,1,1,9,1,1,1,3,1,1,1] 您可以假定输入有效。这是代码高尔夫球,因此以字节为单位的最短程序将获胜。

16
矩阵列的进展
考虑无限矩阵: 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 2 3 0 0 2 3 0 0 2 3 0 0 2 3 0 0 0 4 5 6 0 0 0 4 5 6 0 0 0 4 ... …
17 code-golf  matrix 

16
计算时间跨度
受到现实生活场景的启发,我要求在这里给出答案:https : //superuser.com/questions/1312212/writing-a-formula-to-count-how-many-times-each-date-出现在一组日期中 给定一组时间跨度(或开始日期-结束日期对),输出总范围内所有天每天覆盖多少时间跨度的计数。 例如: # Start End 1 2001-01-01 2001-01-01 2 2001-01-01 2001-01-03 3 2001-01-01 2001-01-02 4 2001-01-03 2001-01-03 5 2001-01-05 2001-01-05 根据上述数据,结果应如下所示: 2001-01-01: 3 (Records 1,2,3) 2001-01-02: 2 (Records 2,3) 2001-01-03: 2 (Records 2,4) 2001-01-04: 0 2001-01-05: 1 (Record 5) 您只需要输出每天的计数(按最旧-最新的顺序排序);而不是它们出现在哪些记录中。 您可以假设每个时间跨度仅包含日期,而不是时间;因此,总是代表着整天。 输入输出 输入可以是表示一组时间跨度的任何格式,因此可以是一组时间对,也可以是一组包含开始日期和结束日期的(内置)对象。日期时间限制在1901年到2099年之间,这是PPCG挑战的正常情况。 您可以假设输入是预排序的,但是可以根据自己的喜好进行输入(在答案中指定)。输入日期包括在内(因此范围包括整个开始日期和结束日期)。 您还可以假定在任何给定范围内的两个日期中,第一个日期将早于或等于第二个日期(即,您将没有负数的日期范围)。 输出是一个数组,其中包含按开始日期排序时输入中从最旧到最新的每一天的计数。 因此,以上示例的输出为 …
17 code-golf  date 

7
尼姆乘法
背景 如果您进行大量代码打高尔夫球,则可能会意识到按位XOR操作。给定两个整数,它给出1两个输入不同的位中带有s的另一个整数。因此,例如1010 XOR 0011 = 1001。 事实证明,它在博弈论中非常有用,在游戏理论中,它被称为“零和”。如果你有两场比赛的总和(也就是,你让在一场比赛中同时移动),该值的位置是在每个单独的游戏的位置值的NIM总和。 但是我们可以更进一步。使用nim加法和适当的nim乘法定义,我们可以从非负整数形成一个字段。因此,挑战在于高尔夫nim乘法。 定义 Nim乘法遵循以下规则: Fermat 2次方n =(2 ^(2 ^ k))且任何较小数字的nim乘积为普通乘积。 费马2幂n的尼姆乘积本身为3n / 2。 尼姆乘法分布在尼姆加法上。 Nim乘法是可交换的和关联的(如nim加法)。 乘法身份为1(加性身份为0)。 可以将任何非负整数表示为2的不同幂的nim和,并且可以将2的任意幂作为不同的Fermat数的乘积,因此这足以为所有非负整数定义nim乘法。 例 那都是非常抽象的,所以让我们来看一个例子。我将+用来表示nim加法(XOR)和*nim乘法。 6 * 13 = (4 + 2) * (8 + 4 + 1) = (4 + 2) * ((4 * 2) + 4 + 1) …
17 code-golf  math 

24
获取序列步骤
挑战 给定一个数字序列,创建一个返回序列步骤的函数。 假设一个序列将是 N >= 3 序列将至少重复一次该步骤 序列将仅包含自然数 您的函数或程序应返回最短的步骤顺序 例: 输入: [1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 17] 输出: [1, 1, 2] 说明:初始序列来自1 => 2 (1 step), 2 => 3 (1 step), 3 => 5 (2 steps)。然后重复。输出是[1 step, 1 step, 2 steps] => [1, …

12
功能剪贴板:复制
作为2018年5月每月语言活动的一部分,此挑战与MATL语言的某些功能有关。 相关挑战:功能剪贴板:粘贴。 介绍 MATL有几个剪贴板,您可以在其中存储值(副本)以供以后检索(粘贴)。某些剪贴板是自动的,这意味着某些事件会自动触发复制。这项挑战着眼于自动剪裁工具之一,称为功能输入剪贴板,或简称为功能剪贴板。 该剪贴板将输入存储到最近四个对常规输入函数的调用。普通函数是MATL中最常见的函数类型。输入接受意味着该功能至少接受一个输入(功能剪贴板不考虑不接受任何输入的功能)。 最好使用以下示例解释这些示例,这些示例使用两个常规函数: +,这会从堆栈中弹出两个数字并压入它们的和。 U,它会弹出一个数字并按其平方。 范例1: 3 2 + 6 + 12 4 U + + 产生结果39。该代码解释如下: 数字文字,例如3或被12压入堆栈 诸如此类的功能会+弹出其输入,并将其输出推入堆栈。 按时间顺序排列的函数调用为: 3 2 + 给 5 5 6 + 给 11 4 U 给 16 12 16 + 28 11 28 +给39。 剪贴板可以视为四个列表的列表。每个内部列表都包含函数调用的输入,最近的调用在前。在每个内部列表中,输入均按其原始顺序。 因此,在运行代码之后,剪贴板的内容是(用Python表示法): [[11, 28], [12, 16], …
17 code-golf  number 

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.