Questions tagged «restricted-complexity»

要求所有答案满足特定时间复杂性限制的规范所面临的挑战。这可以是特定的(“您的答案必须是O(n ^ 2),其中n是输入中的项目数”),也可以是复杂的级别(“您的答案必须是多项式中的项目数的多项式输入”)。

5
功率编程:O(1 ^ N),O(N ^ 1),O(2 ^ N),O(N ^ 2)合而为一
根据程序的运行方式,编写出表现出四种常见的O大 时间复杂度的程序(或函数)。无论采用哪种形式,都需要一个正整数N,您可以假设它小于2 31。 当程序以其原始形式运行时,它应该具有恒定的复杂性。也就是说,复杂度应为Θ(1)或等效地为Θ(1 ^ N)。 当程序反向运行时,它应该具有线性复杂度。也就是说,复杂度应为Θ(N)或等效地为Θ(N ^ 1)。 (这是有道理的,因为N^1被1^N逆转。) 当程序被加倍,即,级联到本身,并运行它应具有指数复杂性,特别是2 Ñ。也就是说,复杂度应为Θ(2 ^ N)。 (这是有道理的,因为2在2^N是双1中1^N)。 当程序被加倍执行并反转并运行时,它应具有多项式复杂度,尤其是N 2。也就是说,复杂度应为Θ(N ^ 2)。 (这是有道理的,因为N^2被2^N逆转。) 这四种情况是您唯一需要处理的情况。 请注意,为精确起见,我使用大theta(Θ)表示法而不是大O,因为您的程序的运行时必须在上下两方面受所需复杂度的限制。否则,仅在O(1)中编写一个函数就可以满足所有四个点。了解这里的细微差别不是太重要。主要是,如果您的程序针对某个常数k执行k * f(N)运算,则很有可能为Θ(f(N))。 例 如果原始程序是 ABCDE 那么运行它应该花费恒定的时间。也就是说,无论输入N是1还是2147483647(2 31 -1)或两者之间的任何值,它都应在大致相同的时间内终止。 程序的反向版本 EDCBA 应该以N为单位花费线性时间。也就是说,终止所花费的时间应与N大致成比例。因此N = 1花费的时间最少,N = 2147483647花费的时间最多。 该程序的两倍版本 ABCDEABCDE 以N表示,应该花费2到N的时间。也就是说,终止所花费的时间应该大致与2 N成正比。因此,如果N = 1在大约一秒钟内终止,则N = 60将花费比宇宙年龄更长的时间。(不,您不必测试。) 程序的加倍和反转版本 EDCBAEDCBA 应该花费以N为单位的平方时间。也就是说,终止所花费的时间应与N * N大致成比例。因此,如果N …

1
线性时间中最长的公共子串
挑战在于编写代码以解决以下问题。 给定两个字符串A和B,您的代码应输出具有以下属性的A子字符串的开始和结束索引。 A的子字符串也应该与B的某些子字符串匹配。 不再有满足第一个属性的A子字符串。 例如: A = xxxappleyyyyyyy B = zapplezzz apple带有索引4 8(索引从1开始)的子字符串将是有效的输出。 功能性 您可以选择输入是本地目录中文件中的标准输入还是您自己的选择。文件格式将只是两个字符串,用换行符分隔。答案应该是完整的程序,而不仅仅是功能。 我最终想在从http://hgdownload.cse.ucsc.edu/goldenPath/hg38/chromosomes/的字符串中提取的两个子字符串上测试您的代码。 得分 这是带有扭曲的代码高尔夫球。您的代码必须及时运行O(n),其中n表示输入的总长度。 语言和图书馆 您可以使用具有免费编译器/解释器/等的任何语言。对于Linux。您应该只使用不是为解决此任务而设计的标准开源库。如有争议,我将其视为您的语言所标配的任何库,或者可以从默认存储库安装在默认ubuntu计算机中的任何库。 有用的信息 在线性时间内至少有两种方法可以解决此问题。一种是首先计算后缀树,第二种是首先计算后缀数组和LCP数组。 这是线性时间后缀树构造的完整(也许是过度)详细说明(不幸的是,有些数字被弄乱了)。关于https://stackoverflow.com/questions/9452701/ukkonens-suffix-tree-algorithm-in-plain-english的线性时间后缀树构造,还有一个非常好的SO答案。它还包括到源代码的链接。可以在这里找到另一个详细的说明,这一次提供了使用C的完整解决方案。 http://www.cs.cmu.edu/~guyb/realworld/papersS04/KaSa03.pdf的第2节给出了线性时间后缀数组构造算法,附录A具有C ++源代码。该答案告诉您如何计算最长的公共子字符串https://cs.stackexchange.com/questions/9555/computing-the-longest-common-substring-of-two-strings-using-suffix-arrays。https://courses.csail.mit.edu/6.851/spring12/scribe/lec16.pdf的第5节,其中也有相关的视频讲座https://courses.csail.mit.edu/6.851/spring12/lectures/L16 .html还解释了从1:16:00开始的相同算法。

22
基本ASCII提示
替代标题:在墙上统计您的监狱判决 给定一个数字n,输出记录分为传统的每组5个和每行50个。 例子 1个 | | | | 4 |||| |||| |||| |||| 5 |||/ ||/| |/|| /||| 6 |||/ | ||/| | |/|| | /||| | 50 |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ |||/ ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| ||/| |/|| |/|| …
36 code-golf  ascii-art  number  code-golf  number  integer  binary  base-conversion  code-golf  array-manipulation  code-golf  chemistry  code-golf  number  sequence  fibonacci  code-golf  matrix  optimization  code-golf  number  code-golf  math  number  sequence  code-golf  math  array-manipulation  matrix  linear-algebra  code-golf  kolmogorov-complexity  cops-and-robbers  cops-and-robbers  code-golf  tips  basic  code-golf  decision-problem  binary  tiling  game  king-of-the-hill  python  code-golf  c  code-golf  ascii-art  code-golf  string  kolmogorov-complexity  alphabet  code-golf  number  code-golf  string  code-golf  number  sequence  integer  code-golf  number  permutations  restricted-complexity  restricted-time 

29
它是前缀代码吗?
在信息论中,“前缀代码”是一个字典,其中所有键都不是另一个的前缀。换句话说,这意味着没有一个字符串以其他任何字符串开头。 例如,{"9", "55"}是前缀代码,但{"5", "9", "55"}不是。 这样做的最大优点是,可以将编码的文本记下来,并且它们之间没有分隔符,并且仍然可以唯一地解密。这在诸如Huffman编码之类的压缩算法中得到了体现,该算法始终会生成最佳的前缀代码。 您的任务很简单:给定一个字符串列表,确定它是否是有效的前缀代码。 您的输入: 将是任何合理格式的字符串列表。 仅包含可打印的ASCII字符串。 将不包含任何空字符串。 您的输出将是一个true / falsey值:如果是有效的前缀代码,则为True,否则为falsey。 这是一些真实的测试用例: ["Hello", "World"] ["Code", "Golf", "Is", "Cool"] ["1", "2", "3", "4", "5"] ["This", "test", "case", "is", "true"] ["111", "010", "000", "1101", "1010", "1000", "0111", "0010", "1011", "0110", "11001", "00110", "10011", "11000", "00111", "10010"] 以下是一些错误的测试案例: ["4", "42"] …

30
聪明人的海市age楼
从前,我在阅读有关Quora的问题/答案 真的有没有计算机科学学位的程序员无法通过FizzBu​​zz测试 此代码是显而易见的答案 for i in range(1, 100): if i % 3 == 0 and i % 5 == 0: print "FizzBuzz" elif i % 3 == 0: print "Fizz" elif i % 5 == 0: print "Buzz" else: print i 当然,FizzBu​​zz已经被打死了,但这并不是这个问题的实质。您会在评论中看到有人提到该答案很不错,因为很容易添加额外条件,例如将“ Jazz”打印为4的倍数。(我不同意。扩展此方案需要O(2 ** n )代码行。) 您的挑战是编写由同行判断的最漂亮的FizzJazzBuzz版本。 选民需要考虑的一些事项: 干 除法/模运算的效率 …
29 popularity-contest  code-challenge  word  popularity-contest  string  grid  language-design  code-golf  source-layout  math  fastest-algorithm  assembly  code-golf  json  code-golf  arithmetic  array-manipulation  code-golf  ascii-art  code-golf  crossword  code-golf  string  restricted-complexity  code-golf  ascii-art  kolmogorov-complexity  code-golf  string  decision-problem  balanced-string  syntax  code-golf  grid  puzzle-solver  hexagonal-grid  code-golf  math  number  sequence  code-golf  string  decision-problem  code-golf  cryptography  king-of-the-hill  code-challenge  fastest-code  code-golf  number  code-golf  code-golf  string  code-golf  cryptography  king-of-the-hill  java  code-golf  number-theory  base-conversion  code-golf  code-golf  array-manipulation  code-golf  array-manipulation  sorting  code-challenge  restricted-source  quine  code-golf  tips  python  king-of-the-hill  code-golf  source-layout  fractal  code-golf  tips  game  king-of-the-hill  path-finding  grid  code-golf  kolmogorov-complexity  natural-language  code-golf  tips  python  code-golf  number  arithmetic  sequence  array-manipulation  code-golf  number  combinatorics  random  integer-partitions  code-golf  string  code-golf  vim  comment  code-golf  combinatorics  counting  code-challenge  rosetta-stone  code-golf  combinatorics  sequence  subsequence  code-golf  code-challenge  restricted-source  primes  printable-ascii  popularity-contest  graphical-output  image-processing 

3
实施简化字距调整
介绍 字距调整是指调整文本字母之间的间距。例如,考虑Top用以下三个字形写的单词: ##### ..... ..... ..#.. ..... ..... ..#.. ..##. .###. ..#.. .#..# .#..# ..#.. .#..# .#..# ..#.. ..##. .###. ..... ..... .#... ..... ..... .#... 我们可以用点填充字形之间的间隙并完成它,但是间隙看起来太宽了。相反,我们将字形滑动到左侧,以便它们几乎可以接触: #####........ ..#.......... ..#..##..###. ..#.#..#.#..# ..#.#..#.#..# ..#..##..###. .........#... .........#... 看起来好多了!请注意,的条形图T在的左边框上方o。在此挑战中,您的任务是为此类矩形字形实现一个简单的字距调整程序。 字距调整过程 考虑具有.和#形状相同的两个矩形2D字符数组。在简单的字距调整过程中,我们首先将数组并排放置,中间放置一列.s。然后,我们将#右阵列中的每一个向左移动一步,直到#左右阵列中的s正交或对角相邻。字距调整的结果是引入相邻s 之前的步骤#。您的任务是实施此过程。 让我们举个例子: Inputs: ..### #.... #.... ..##. ...#. ...## ..### ....# Process: …
24 code-golf  grid  code-challenge  atomic-code-golf  code-golf  combinatorics  probability-theory  card-games  code-golf  number  geometry  code-golf  decision-problem  chess  code-golf  math  number  sequence  code-golf  string  regular-expression  code-golf  arithmetic  integer  code-golf  math  array-manipulation  code-golf  number  decision-problem  integer  code-golf  string  ascii-art  kolmogorov-complexity  code-golf  decision-problem  graph-theory  binary-matrix  code-golf  string  parsing  code-golf  string  code-golf  morse  code-golf  code-golf  string  code-golf  ascii-art  cellular-automata  code-golf  binary  base-conversion  code-golf  arithmetic  decision-problem  integer  checksum  code-golf  matrix  linear-algebra  code-golf  code-golf  game  code-golf  sequence  binary  code-golf  combinatorics  optimization  code-golf  decision-problem  quine  code-golf  rational-numbers  bitwise  code-golf  string  permutations  code-golf  kolmogorov-complexity  unicode  code-golf  ascii-art  number  code-golf  number  integer  binary  base-conversion  code-golf  array-manipulation  code-golf  chemistry  code-golf  number  sequence  fibonacci  code-golf  matrix  optimization  code-golf  number  code-golf  math  number  sequence  code-golf  math  array-manipulation  matrix  linear-algebra  code-golf  kolmogorov-complexity  cops-and-robbers  cops-and-robbers  code-golf  tips  basic  code-golf  decision-problem  binary  tiling  game  king-of-the-hill  python  code-golf  c  code-golf  ascii-art  code-golf  string  kolmogorov-complexity  alphabet  code-golf  number  code-golf  string  code-golf  number  sequence  integer  code-golf  number  permutations  restricted-complexity  restricted-time 

2
编写事件令牌发布器
背景 事件是一种非常不常见的编程语言,它的令牌列表不是预先确定的,而是从输入中推断出来的。这样,对事件程序进行标记可能会非常困难,尤其是如果您想高效地这样做。这项任务是您自己做的。 任务 您的程序将被提供一个字符串作为输入。这是Incident用于标记它的算法: 完全以三种方式识别作为输入的子字符串出现的所有字符串(即,该字符串在输入中恰好出现了三个)。 丢弃所有这些字符串中的任何一个,这些字符串是另一个此类字符串的子字符串(例如,对于input ababab,剩下的唯一字符串将是ab,not a或b,因为a和b都是的子字符串ab)。 丢弃输入中重叠的所有字符串。(例如,aaaa正好包含的三个副本aa,但是这些副本在第二个和第三个字符处重叠,因此将被丢弃。同样,在中abababa,存在的三个副本ab和的三个副本ba,但第二个至第六个字符分别位于的重叠ab和ba,这样既ab和ba将被丢弃)。 此时剩下的任何字符串都是程序使用的标记。将原始输入标记为这些标记的序列(由于上一步中的丢弃,只有一种方法可以做到)。输入中不属于任何标记的任何字符都将被视为注释并被丢弃。 您的程序必须将字符串作为输入,并返回该字符串的相应标记化(标记列表,每个标记均表示为字符串)作为输出。此外,这必须至少适度地有效地完成;具体来说,程序必须在二次时间(“ O(n²)”)或更短的时间内运行。(顺便提一下,几乎肯定有可能比平方更快,但这不是最快算法,因此可以随意使用最复杂的算法,找到适合复杂度范围的算法。) 澄清说明 尽管理论上事件程序可以包含256个八位字节中的任何一个,但出于此挑战的目的,您的程序只能处理由可打印ASCII(包括空格),换行符和制表符组成的输入,这是可以接受的。(所有已知的突发事件程序都将自己限制在此子集中)。请注意,空格/换行符/制表符不是特殊的,可以出现在标记的中间。事件将所有256个八位位组视为不透明。 “二次时间”的定义是“如果输入的大小加倍,则程序将以不超过常数加4的速度慢运行”,即,如果t(x)是程序花费的最长时间。处理一个大小为x的输入,则必须有一个常数k,使得所有x的t(2 x)<4 t(x)+ k。请记住,比较字符串所花费的时间与字符串的长度成正比。 如果以具有无限内存并使用无界整数的语言(可能是假设的)变体运行,则从理论上讲,您的程序应该能够处理任何长度的输入程序(如果在实践中由于以下原因而无法达到此目标,则可以:语言的整数或内存实际上是有限的)。您可能会假设(出于计算复杂度的目的)可以在恒定时间内比较不大于输入长度的整数(尽管请记住,如果使用较大的值,例如由于将输入转换为整数)整数),它们将花费一定的时间与它们所拥有的位数成正比。 您可以使用适合复杂性范围的任何算法,即使它没有遵循与上面发布的算法相同的步骤,只要它能产生相同的结果即可。 这个难题是关于标记输入,而不是真正格式化输出。如果以您的语言输出列表的最自然的方式是模棱两可的格式(例如,当字符串包含文字换行符或字符串之间没有定界符时,则用换行符分隔),请不必担心输出结果最终会模棱两可( (只要列表是实际构建的)。您可能需要制作第二个版本的提交文件,以产生明确的输出,以帮助测试,但是原始版本是计分的版本。 测试用例 对于以下输入字符串: aaabcbcbcdefdfefedghijghighjkllkklmmmmonono-nonppqpq-pqprsrsrstststuvuvu 您的程序应产生以下输出列表: a a a bc bc bc d e f d f e f e d gh gh gh k l l k k l …

3
排列平方根
在数学上,阶数n的置换 σ是从整数1 ... n到其自身的双射函数。此清单: 2 1 4 3 表示置换σ,使得σ(1)= 2,σ(2)= 1,σ(3)= 4,σ(4)= 3。 置换σ的平方根是一个置换,当应用于自身时,得出σ。例如,2 1 4 3具有平方根τ = 3 4 2 1。 k 1 2 3 4 τ(k) 3 4 2 1 τ(τ(k)) 2 1 4 3 因为对于所有1≤k≤n,τ(τ(k))= σ(k)。 输入项 由n > 0个整数组成的列表,都在1到n之间(包括1和n),表示一个排列。排列将始终具有平方根。 只要输入和输出一致,就可以使用0 ... n-1列表。 输出量 排列的平方根,也作为数组。 限制条件 您的算法必须在n的多项式时间内运行。这意味着您不能只遍历所有n!n阶排列。 …

2
书库排序
堆放书籍时,通常需要将最大的书籍放在底部,最小的书籍放在顶部。但是,如果我有两本书,其中一本短(高)但比另一本宽,那么我潜在的OCD会让我感到非常不安。无论我按什么顺序放置它们,顶层的书都会在一侧超出底层的书。 例如,假设一本书具有尺寸(10,15),另一本书具有尺寸(11,14)。不管我以哪种方式放置它们,我都会伸出来。但是,如果我有尺寸为(4,3)和的书(5,6),则可以通过将书本放在书本下面来避免悬垂。 出于此挑战的目的,我们将仅考虑与紧随其后的书有关的突出部分。例如,如果我有一个堆栈(5,5),(3,3),(4,4)(没有任何理智的人会这么做),顶书算是悬垂,虽然它不超出底部的书。同样地,堆栈(3,3),(3,3),(4,4)也只有一个悬,尽管超出底部一个顶部的书。 挑战 给定用于书籍尺寸的整数对列表,请对这些对/书籍进行排序,以使突出的数量最少。您不能旋转书本-我希望所有的脊椎都朝向相同的方向。如果存在多个具有相同悬垂数的解决方案,则可以选择任何此类顺序。您的排序算法不一定是稳定的。您的实现可能假设每本书的尺寸小于2 16。 时间复杂度:为了使这一点更有趣,算法的渐近最坏情况复杂度必须是堆栈大小的多项式。因此,您不能仅仅测试所有可能的排列。请提供算法最佳性和复杂性的简短证明,并提供一个可选的图表,以显示大型随机输入的比例。当然,您不能使用输入的最大大小作为代码在O(1)中运行的参数。 您可以编写程序或函数,通过STDIN,ARGV或函数参数以任何方便的(未经预处理的)列表格式进行输入,然后打印或返回结果。 这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。 我相信存在多项式解,但是如果您可以证明我错了,则可以提交这样的证明,而不是打高尔夫球。在这种情况下,您可以假设P≠NP。我将接受第一个正确的此类证明,并给予悬赏。 例子 In: [[1, 1], [10, 10], [4, 5], [7, 5], [7, 7], [10, 10], [9, 8], [7, 5], [7, 5], [3, 1]] Out: [[10, 10], [10, 10], [9, 8], [7, 7], [7, 5], [7, 5], [7, 5], [4, 5], [3, …

3
一个上升,另一个下降
介绍 在这个挑战中,您的任务是确定给定的数字序列是否可以分为两个子序列,其中一个在增加,另一个在减少。例如,考虑序列8 3 5 5 4 12 3。它可以分为两个子序列,如下所示: 3 5 5 12 8 4 3 第一行的子序列增加,第二行的子序列减少。此外,您应该有效地执行此任务。 输入项 您的输入是一个非空L的整数列表,范围在0到99999(含)之间。它以您的语言的本机格式给出,或仅由空格分隔。 输出量 如果L可以分解为递增和递减子序列,则输出为真值,否则为假值。子序列不必严格增加或减少,它们中的任何一个都可以是空的。 规则和奖金 您可以编写完整的程序或函数。最低字节数获胜,并且不允许出现标准漏洞。此外,在此挑战中禁止强行使用:您的程序必须在输入长度内以多项式时间运行。 您不需要实际返回这两个子序列,但是这样做有-20%的奖金。为了使奖金更容易以静态类型的语言申领,可以为伪造的实例返回一对空列表。 测试用例 input -> None以错误输入和input -> inc dec真实输入的格式给出。这里只给出一对可能的子序列。可能还有更多。 [4,9,2,8,3,7,4,6,5] -> None [0,99999,23423,5252,27658,8671,43245,53900,22339] -> None [10,20,30,20,32,40,31,40,50] -> None [49,844,177,974,654,203,65,493,844,767,304,353,415,425,857,207,871,823,768,110,400,710,35,37,88,587,254,680,454,240,316,47,964,953,345,644,582,704,373,36,114,224,45,354,172,671,977,85,127,341,268,506,455,6,677,438,690,309,270,567,11,16,725,38,700,611,194,246,34,677,50,660,135,233,462,777,48,709,799,929,600,297,98,39,750,606,859,46,839,51,601,499,176,610,388,358,790,948,583,39] -> None [0,1,2,3,4] -> [0,1,2,3,4] [] [4,3,2,1,0] -> [] [4,3,2,1,0] …

11
最大化平方差
考虑从1到的整数值的置换N。例如此示例N = 4: [1, 3, 4, 2] 我们将认为此列表是循环的,因此1和2被视为相邻列表。我们可以为这样的列表计算的一个量是相邻值的总平方差: (1-3)² + (3-4)² + (4-2)² + (2-1)² = 10 给定正整数,您的任务是找到一个最大化此数量的排列N。在N = 4上面的例子中不是最佳的(实际上,这是最小的)。18通过以下排列(以及其他几个排列),我们可以实现的总平方差: [1, 4, 2, 3] 您的算法必须在(的N)多项式时间内运行。特别是,您不能简单地计算所有排列的总平方差。 您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行自变量或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。 输出可以采用任何方便,明确,平坦的列表或字符串格式。您可以选择从与返回值的列表0,以N-1代替1向N。 适用标准代码高尔夫球规则。 测试数据 这个问题有一个很好的分析解决方案。例如,所有有效的解决方案N = 10均等效于以下列表(直至循环移位和反转): [7, 5, 6, 4, 8, 2, 10, 1, 9, 3] 我不想透露过多的信息(尽管足以找出模式),因此无需给出更多示例,您可以检查您的结果是否具有给定的总平方差N: N Total squared difference 1 0 2 …
19 code-golf  array-manipulation  permutations  restricted-complexity  code-golf  geometry  grid  code-golf  string  sorting  code-golf  simulation  code-golf  string  code-golf  arithmetic  code-golf  sorting  code-golf  string  code-golf  sorting  code-golf  interpreter  code-golf  number  kolmogorov-complexity  natural-language  conversion  code-golf  random  internet  code-golf  board-game  code-golf  number  sequence  code-golf  math  number  code-challenge  image-processing  classification  test-battery  code-golf  ascii-art  code-golf  tips  code-golf  arithmetic  code-golf  tips  code-golf  tips  javascript  code-golf  array-manipulation  code-golf  ascii-art  code-golf  string  binary  code-golf  arithmetic  linear-algebra  matrix  code-golf  sequence  code-golf  math  number  arithmetic  code-golf  primes  code-golf  math  code-golf  array-manipulation  counting  code-golf  arithmetic  code-golf  quine  code-generation  polyglot  code-golf  math  kolmogorov-complexity  trigonometry  code-golf  string  encryption 

20
给出一个排列,没有彼此相邻的两个连续整数
挑战 给定整数n≥4,输出整数[0,n-1]的置换,其属性是没有两个连续的整数(绝对差为1的整数)彼此相邻。 例子 4 → [1、3、0、2] 5 → [0,2,4,1,3] 6 → [0,2,4,1,3,5] 7 → [0,2,4,1,5,5,6] 您可以改为使用1索引(使用整数[1,n]代替[0,n-1])。 您的代码必须在n的多项式时间内运行,因此您无法尝试所有排列并测试每个排列。

10
升序矩阵
“升序矩阵”是整数(包括0)的无限矩阵,其中任何元素是最小的可用元素,之前尚未在相应的行和列上使用: | 1 2 3 4 5 6 ... --+---------------- 1 | 0 1 2 3 4 5 ... 2 | 1 0 3 2 5 4 ... 3 | 2 3 0 1 6 7 ... 4 | 3 2 1 0 7 6 ... 5 | 4 5 …
17 code-golf  math  matrix  programming-puzzle  code-golf  music  code-challenge  programming-puzzle  code-golf  fastest-code  code-golf  number  game  code-golf  combinatorics  code-golf  math  sequence  restricted-complexity  code-golf  number  random  code-golf  array-manipulation  code-golf  math  matrix  code-golf  number  sequence  counting  code-golf  math  number  sequence  popularity-contest  number  sequence  code-golf  music  code-golf  number  code-golf  ascii-art  arithmetic  code-golf  code-golf  number  code-golf  code-challenge  array-manipulation  code-golf  grammars  code-challenge  polyglot  code-golf  game  math  python  programming-puzzle  code-challenge  king-of-the-hill  code-challenge  fastest-code  primes  number-theory  number-theory  primes  fastest-code  factoring  popularity-contest  compile-time  code-golf  math 

6
实时字符串匹配
任务 任务是打入您选择的实时精确字符串匹配算法。 输入值 标准输入上提供两行文本,并用新行分隔。第一行包含“模式”,将只是从字母中提取的ASCII字符串a-z。 第二行包含较长的“文本”,也将只是从字母中提取的ASCII字符串a-z。 输出量 精确匹配发生位置的索引列表。您应该输出发生的每个比赛的开始位置。 规格 您的算法可以花费线性时间对模式进行预处理。然后,它必须从左到右读取文本,并为文本中的每个单个字符花费恒定的时间,并在出现任何新匹配项时立即输出。匹配当然可以彼此重叠。 算法 有许多实时精确匹配算法。例如,在KMP Wiki上提到了一个。您可以使用任意一个,但必须始终输出正确的答案。 我将保留每个语言领导者的表格,以便那些喜欢流行语言的人也能以自己的方式获胜。请说明您实施了哪种算法。 即时的 对于实时的含义似乎有很多困惑。这不仅仅是线性时间。因此,标准的KMP 不是实时的。问题中的链接明确指向KMP Wiki页面上有关KMP实时变体的部分。Boyer-Moore-Galil也不是实时的。这个理论性的问题/答案讨论了这个问题,或者只是谷歌“实时精确匹配”或类似的条款。

4
求ax + b的最大值
您将获得(a,b)列表和x列表。计算每个x的最大ax + b。您可以假设a,b和x为非负整数。 您的程序或函数必须在预期的时间内运行(如果您的代码涉及到该随机性,而不是输入,则为随机性)O(n log n)时间,其中n为总输入长度(两个列表的总和或最大值)。 这是代码高尔夫球。最短的代码获胜。 例 [[2 8] [4 0] [2 1] [1 10] [3 3] [0 4]] [1 2 3 4 5] 输出: [11 12 14 16 20] 说明: 11 = 1*1 + 10 12 = 1*2 + 10 = 2*2 + 8 14 = 2*3 + …

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.