Questions tagged «fastest-code»

最快的代码挑战的赢家取决于提交的运行时性能。为了公平起见,所有提交的文件都应在同一台计算机上进行基准测试,这通常意味着所有提交的文件都必须由挑战主机进行测试。要通过渐近时间复杂度进行评分,请改用[fastest-algorithm]。

2
删除一些并计数
考虑所有2^n不同长度的二进制字符串,n并假设n > 2。您可以b < n/2从每个二进制字符串中删除确切的位,而n-b保留剩余长度的字符串。剩余的不同字符串数取决于您删除的位。假设您的目标是保留尽可能少的其余不同字符串,那么此挑战是编写代码以计算作为的函数可以保留的剩余数量n。 示例n=3和b = 1。您只能留下两个字符串11和00。 对于n=9,b = 1,2,3,4我们有70,18,6,2 对于n=8,b = 1,2,3我们有40,10,4 对于n=7,b = 1,2,3我们有20,6,2 对于n=6,b = 1,2我们有12,4 对于n=5,b = 1,2我们有6,2 这个问题最初是由我于2014年在MO上提出的。 输入输出 您的代码应采用一个整数,n并为b从b = 0和递增的每个值输出一个整数。 得分 在基于Linux的PC上n,您的代码b < n/2在不到一分钟的时间内完成所有代码的最高分。如果出现平局,则b您的代码将获得最大的n胜利。在这一准则也为最大值最快的代码领带断裂的情况n和b决定。如果时间相差一秒或两秒以内,则第一个发布的答案将获胜。 语言和图书馆 您可以使用任何喜欢的库语言。因为我必须运行您的代码,所以如果它是免费的(例如在啤酒中)并且可以在Linux中工作,则将有所帮助。

2
最快的迷你手枪奎宁
迷你Flak是的一个子集脑高射炮语言,其中<>,<...>和[]操作是不允许的。严格来说,它不能与以下正则表达式匹配: .*(<|>|\[]) Mini-Flak是Brain-Flak的最小已知图灵完整子集。 不久前,我能够用Mini-Flak制作Quine,但是它太慢了,无法在宇宙的生命周期中运行。 因此,我对您的挑战是使Quine更快。 计分 要对代码评分,请在代码@cy末尾添加一个标志,然后使用该标志在Ruby解释器中运行(使用ruby解释器在线尝试)-d。您的分数应打印到STDERR,如下所示: @cy <score> 这是程序终止之前所经过的周期数,两次运行之间相同。由于每个周期的运行时间大致相同,因此您的分数应与运行程序所需的时间直接相关。 如果Quine太长而无法在计算机上合理运行,则可以手动计算周期数。 计算周期数不是很困难。循环数等于运行的单子数加运行的nilad数的2倍。这与用一个字符替换每个nilad并计算总共运行的字符数相同。 评分示例 (()()()) 得分为5,因为它有1个单子和3个尼拉德。 (()()()){({}[()])} 得分为29,因为第一部分与以前相同,得分为5,而循环包含6个单子和2个得分为8的尼拉德。循环运行3次,因此我们计算其得分为3次。 1*5 + 3*8 = 29 要求 您的程序必须... 至少2个字节 在Brain-Flak中使用-A标志执行时打印其源代码 不匹配正则表达式 .*(<|>|\[]) 提示 该起重机高射炮解释是断然比Ruby解释器快,但缺少一些功能。我建议您先使用Crane-Flak测试您的代码,然后在您知道它可以工作时在ruby解释器中对其评分。我也强烈建议不要在TIO中运行您的程序。TIO不仅比台式机解释器慢,而且还会在大约一分钟后超时。如果有人在TIO超时之前设法获得足够低的分数来运行他们的程序,那将是非常令人印象深刻的。 [(...)]{}且(...)[{}]工作与<...>但不违反受限源要求 如果您想了解如何应对这一挑战,可以查看Brain-Flak和Mini-Flak Quines。

9
尽快计算永久物
面临的挑战是编写最快的代码来计算矩阵的永久性。 n-by- nMatrix A=(ai,j)的永久变量定义为 在此S_n表示的所有排列的集合[1, n]。 作为一个例子(来自维基): 在这个问题中,矩阵都是正方形的,只有值-1和1在其中。 例子 输入: [[ 1 -1 -1 1] [-1 -1 -1 1] [-1 1 -1 1] [ 1 -1 -1 1]] 常驻: -4 输入: [[-1 -1 -1 -1] [-1 1 -1 -1] [ 1 -1 -1 -1] [ 1 -1 1 -1]] 常驻: …

6
主要密闭编号(快速版)
这是序列A054261 第个素数包含数是包含前素数作为子字符串的最低数。例如,数字是最低的数字,其中包含前3个素数作为子字符串,使其成为第3个素数包含数。ññnññn235235235 这是微不足道弄清楚前四个遏制素数是,,和,但随后变得更有趣。由于下一个素数是11,所以下一个素数包含数不是,而是因为它被定义为具有该属性的最小数。222232323235235235235723572357235711235711235711112357112357112357 但是,当您超过11时,真正的挑战就来了。下一个主要收容编号为。请注意,在此数字中,子字符串和 是重叠的。该数字也与数字重叠。1132571132571132571113313 很容易证明此序列在增加,因为下一个数字需要满足该数字之前的所有条件,并且还要有一个子字符串。但是,该序列并不严格增加,如n=10和结果所示n=11。 挑战 您的目标是找到尽可能多的主要收容编号。您的程序应以有序的方式输出它们,从2开始并向上。 规则 允许您对素数进行硬编码。 不允许您对主要的安全壳号(2唯一的例外)或任何使挑战变得微不足道的魔术数字进行硬编码。请友好一点。 您可以使用任何您想要的语言。请包括命令列表,以使环境为执行代码做好准备。 您可以自由使用CPU和GPU,也可以使用多线程。 计分 官方评分将来自我的笔记本电脑(戴尔XPS 9560)。您的目标是在5分钟内生成尽可能多的主要收容编号。 眼镜 2.8GHz英特尔酷睿i7-7700HQ(3.8GHz增强)4核,8线程。 16GB 2400MHz DDR4内存 NVIDIA GTX 1050 Linux Mint 18.3 64位 到目前为止找到的数字,以及最后加上的质数: 1 => 2 ( 2) 2 => 23 ( 3) 3 => 235 ( 5) 4 => 2357 ( 7) 5 …

22
递归字符串替换
任务 编写一个程序或函数,给出给定的三个字符串A, B, C会生成一个输出字符串,其中Bin的每个实例A都已用递归替换C。递归替换表示重复替换,其中在每一步中Bin的所有不重叠实例A(从左到右贪婪地选择)都替换为,C直到B不再包含在中A。 输入输出 您可以对I / O使用任何默认方法。 字符串将仅包含可打印的ASCII字符(并且可以包含任何一个)。 B永远不会是一个空字符串,而A并且C可能是。 字符串应被视为纯文本,例如,您不能将其B视为Regex模式。 输入的某些组合永远不会终止。在这种情况下,您的程序可以执行任何操作。 测试用例 这些格式为: A/B/C\nOutput Hello, world!/world!/PPCG Hello, PPCG Uppercase is up/up/down Uppercase is down ababababa/aba/ccc cccbcccba delete/e/{empty string} dlt {empty string}/no/effect {empty string} llllrrrr/lr/rl rrrrllll +-+-+-+/+-+/+ + ababababa/aba/bada badabbadbada abaaba/aba/ab abb ((())())())/()/{empty string} ) 不会终止的示例: grow/ow/oow loop/lo/lo
25 code-golf  string  substitution  code-golf  math  code-golf  string  set-theory  code-golf  code-golf  compile-time  code-golf  kolmogorov-complexity  binary  code-golf  sequence  cops-and-robbers  code-golf  subsequence  card-games  code-golf  sequence  primes  code-golf  code-golf  number  graphical-output  music  code-golf  ascii-art  code-golf  string  lambda-calculus  code-golf  string  code-generation  code-golf  unicode  code-golf  math  combinatorics  code-golf  balanced-string  code-golf  sequence  cops-and-robbers  code-golf  sequence  cops-and-robbers  code-challenge  fastest-code  chess  code-golf  math  graphical-output  code-golf  string  hello-world  animation  code-golf  number  arithmetic  code-golf  integer  code-golf  code-golf  combinatorics  code-golf  kolmogorov-complexity  graphical-output  code-golf  string  code-golf  code-golf  game  code-golf  math  combinatorics  code-golf  ascii-art  popularity-contest  random  code-golf  arithmetic  number-theory  integer  code-golf  tips  underload  code-golf  math  sequence  primes  code-golf  math  path-finding  code-golf  ascii-art  primes  code-golf  kolmogorov-complexity  alphabet 

2
计算尽可能大的字符串可能的最大运行次数
[此问题是计算字符串的运行的后续步骤] p字符串的周期w是任何正整数p,因此w[i]=w[i+p] 只要定义了该方程式的两边。让per(w)表示最小周期的大小w。我们说一个字符串w是周期iff per(w) <= |w|/2。 因此,非正式地,定期字符串只是由重复至少一次的另一个字符串组成的字符串。唯一的麻烦是,在字符串的末尾,我们不需要重复的字符串的完整副本,只要整个字符串至少重复一次即可。 例如,考虑字符串x = abcab。per(abcab) = 3作为x[1] = x[1+3] = a,x[2]=x[2+3] = b并且没有更短的期限。abcab因此,该字符串不是周期性的。但是,字符串ababa是周期性的per(ababa) = 2。 随着越来越多的例子abcabca,ababababa并且abcabcabc也是周期性的。 对于那些喜欢正则表达式的人,此程序可以检测字符串是否为周期性的: \b(\w*)(\w+\1)\2+\b 任务是在更长的字符串中找到所有最大的周期性子字符串。这些有时在文献中称为运行。 子字符串w是最大的周期性子字符串(运行),如果它是周期性的,也不w[i-1] = w[i-1+p]是w[j+1] = w[j+1-p]。非正式地,“运行”不能包含在具有相同时间段的较大“运行”中。 由于两次运行可以表示出现在整个字符串中不同位置的相同字符串,因此我们将按间隔表示运行。这是按照间隔重复的上述定义。 在字符串中运行(或最大周期性子串)T是时间间隔 [i...j]与j>=i,使得 T[i...j] 是一个带有句点的周期词 p = per(T[i...j]) 最大。从形式上讲,也不T[i-1] = T[i-1+p]是T[j+1] = T[j+1-p]。非正式地,该运行不能包含在相同期间的较大运行中。 用RUNS(T)字符串形式的运行集表示T。 运行示例 在串四个最大的周期性子(运行)T = atattatt是T[4,5] = tt,T[7,8] = …

10
最短的唯一标识子字符串
给定一个字符串列表,请用其非空子字符串之一替换每个字符串,该子字符串不是列表中任何其他字符串的子字符串,并且应尽可能短。 例 给定list ["hello","hallo","hola"],"hello"应替换为,"e"因为该子字符串未包含在其中"hallo","hola"并且它尽可能短。"hallo"可通过任一取代"ha"或"al"并"hola"通过任何"ho","ol"或"la"。 规则 您可以假定字符串将为非空,并且仅包含大小写相同的字母字符。 您可以假定列表中的每个字符串都存在这样的子字符串,即列表中的任何字符串都不是其他任何字符串的子字符串。 输入和输出可以采用任何合理的格式。 这是code-golf,因此请尝试使用您选择的语言使用尽可能少的字节。 测试用例 在大多数情况下,仅给出一种可能的输出。 ["ppcg"] -> ["p"] (or ["c"] or ["g"]) ["hello","hallo","hola"] -> ["e","ha","ho"] ["abc","bca","bac"] -> ["ab","ca","ba"] ["abc","abd","dbc"] -> ["abc","bd","db"] ["lorem","ipsum","dolor","sit","amet"] -> ["re","p","d","si","a"] ["abc","acb","bac","bca","cab","cba"] -> ["abc","acb","bac","bca","cab","cba"] 相关:最短识别子字符串 -类似的想法,但涉及更多规则和繁琐的格式。
23 code-golf  string  code-golf  string  code-golf  array-manipulation  code-golf  quine  code-golf  array-manipulation  integer  matrix  classification  code-golf  quine  code-golf  string  matrix  conversion  code-golf  string  number  code-golf  string  code-golf  number  sequence  integer  code-golf  decision-problem  matrix  code-golf  string  code-golf  math  code-golf  math  array-manipulation  combinatorics  code-golf  random  code-golf  code-golf  alphabet  code-golf  python  c  code-golf  base-conversion  code-golf  string  counting  code-challenge  code-generation  fastest-code  code-golf  kolmogorov-complexity  matrix  code-golf  string  code-golf  array-manipulation  decision-problem  random  sudoku  code-golf  chess  code-golf  card-games  encode  code-golf  decision-problem  code-golf  code-golf  math  array-manipulation  matrix 

5
最快的家用Prime发电机
什么是家庭必备? 例如,以HP(4)为例。首先,找到主要因素。4的质因子(按从最小到最大的数字顺序,始终为)为2。2。将这些因子作为文字数。2,2变成22。分解的过程一直持续到您达到素数为止。 number prime factors 4 2, 2 22 2, 11 211 211 is prime 达到质数后,序列结束。HP(4)= 211。这是一个更长的例子,有14个: number prime factors 14 2, 7 27 3, 3, 3 333 3, 3, 37 3337 47, 71 4771 13, 367 13367 13367 is prime 您面临的挑战是创建一个程序,该程序将在给定x的情况下计算HP(x)并尽快执行。您可以使用所需的任何资源,而不是已知的家庭素数列表。 请注意,这些数字很快变得非常大。在x = 8时,HP(x)一直跳到3331113965338635107。尚未找到HP(49)。 平均在以下输入下,将在Raspberry Pi 2上测试程序速度: 16 20 …

28
做一个简单的自动包装
(注意:这是我有史以来第一个关于高尔夫的代码问题,但是据我所知,没有人能完全做到这一点,所以我应该很好。) 您的任务是制作一个程序或函数,该程序或函数接受一个字符串s和一个整数n,并返回或输出包装成多行的文本。每个单词必须全部在一行上;即中间没有字。每行的n字符长度不能超过字符,并且每行中必须包含尽可能多的单词。 例: s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget erat lectus. Morbi mi mi, fringilla sed suscipit ullamcorper, tristique at mauris. Morbi non commodo nibh. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed at iaculis mauris. Praesent a …
22 code-golf  string  code-golf  string  parsing  apl  math  primes  integer  fastest-code  code-golf  math  primes  integer  code-golf  ascii-art  kolmogorov-complexity  code-golf  string  array-manipulation  code-golf  number  code-golf  sequence  code-golf  math  arithmetic  code-golf  date  conversion  code-golf  geometry  combinatorics  grid  code-golf  string  code-golf  counting  java  code-golf  chess  code-golf  path-finding  conversion  atomic-code-golf  logic-gates  code-golf  fibonacci  code-golf  ascii-art  fractal  code-golf  quine  code-golf  string  code-golf  array-manipulation  decision-problem  code-golf  quine  code-golf  code-challenge  array-manipulation  code-challenge  word-search  code-golf  binary  conversion  code-golf  code-golf  restricted-source  code-golf  kolmogorov-complexity  restricted-source  code-golf  kolmogorov-complexity  random  animation 

23
ASCII艺术八边形
给定输入整数n > 1,输出边长由n字符组成的ASCII八角形。请参阅以下示例: n=2 ## # # # # ## n=3 ### # # # # # # # # # # ### n=4 #### # # # # # # # # # # # # # # # # #### n=5 ##### # # # # # # …
22 code-golf  ascii-art  code-golf  geometry  code-golf  balanced-string  code-golf  cops-and-robbers  code-challenge  cops-and-robbers  code-golf  code-golf  random  cryptography  code-golf  array-manipulation  number  code-challenge  integer  code-golf  math  integer  code-golf  math  math  parsing  image-processing  test-battery  math  number  combinatorics  fastest-code  code-golf  code-golf  math  number-theory  rational-numbers  polynomials  code-golf  math  geometry  code-golf  code-golf  number-theory  primes  factoring  code-golf  restricted-source  code-golf  string  decision-problem  counting  code-golf  math  sequence  fibonacci  code-golf  array-manipulation  counting  code-golf  array-manipulation  number-theory  code-golf  array-manipulation  code-golf  random  code-golf  string  hexadecimal  code-golf  string  code-challenge  sorting  code-golf  number  floating-point  code-golf  sorting  code-golf  decision-problem  fibonacci  code-golf  number  combinatorics  code-golf  string  code-golf  math  code-golf  electrical-engineering  code-golf  javascript  code-golf  base-conversion  code-golf  array-manipulation  matrix  binary-matrix  code-golf  kolmogorov-complexity  python  perl  ruby  code-golf  number  code-golf  optimization  integer-partitions  code-golf  string  code-golf  ascii-art 

3
失踪人数修订
背景: 我最初是在昨晚发布此问题,并因其模糊性而遭到强烈反对。从那以后,我不仅就问题的措辞,而且就其复杂性(不是O(1))咨询了许多人员。这个编程问题是对亚马逊面试问题的一个恶性循环。 题: 给定一个字符串,其中包含0至250个互斥的随机串联整数[0,250),序列中缺少一个数字。您的工作是编写一个程序,该程序将计算此丢失的数字。除了一个之外,序列中没有其他遗漏的数字,这就是使此问题如此困难,甚至可能使计算困难的原因。 手动在较小的String上完成此问题,例如下面的示例1和2显然很容易。相反,在涉及三位数或四位数数字的庞大数据集上计算缺失数将非常困难。该问题背后的想法是构造一个程序,它将为您执行此过程。 重要信息: 昨晚我发布此问题时,看起来很困惑的一件事是:确切的数字定义为。缺少的数字是上述指定范围内的数字;不一定是数字。在示例3中,您会看到丢失的数字为9,即使它出现在序列中。DIGIT 9将在三个[0,30)系列中出现3个位置:“ 9”,“ 19”和“ 29”。您的目标是对它们进行区分,并发现9是缺少的NUMBER(在示例3中)。换句话说,棘手的部分在于找出哪些数字序列是完整的,哪些序列属于其他数字。 输入: 输入是字符串S,包含从0到249(含)或0到250(不含)(即[0,250))的整数。如上所述,将这些整数加扰以创建随机序列。没有分隔符(“ 42、31、23、44”)或填充0(003076244029002);问题完全与示例中描述的相同。保证实际问题中只有一种解决方案。不允许使用多种解决方案。 获奖标准: 谁拥有最快和最低的内存使用率将是赢家。如果发生时间中断的奇迹,则将较低的内存用于时间限制器。如果可以,请列出Big O! 例子: 示例1和2的范围为[0,10) 示例3和4的范围为[0,30) (示例1-4仅用于演示。您的程序无需处理它们。) 示例5的范围为[0,250) 1. 420137659 - Missing number => 8 2. 843216075 - Missing number => 9 3. 2112282526022911192312416102017731561427221884513 - Missing number => 9 4. 229272120623131992528240518810426223161211471711 - Missing number => 15 …

9
建立电网
挑战 N个城市按直线排列。第i个城市位于A[i]原点右边几公里处。没有两个城市会在同一个地方。 您将要建立带有一些发电厂的电网。电厂必须建在城市内部。但是,只允许您建立K(<N)发电厂,因此有些城市中将没有发电厂。对于每个没有电厂的城市,必须在它和最近的拥有电厂的城市之间建立电缆。 例如,如果位于的三个城市0, 1, 2,而只有位于的城市0有发电厂,则需要构建两条电缆,一条电缆从2到0(2km),另一条电缆从1到0(1km),总长度为3km 。 给定K和城市位置(A),您应该计算出构建网格所需的最小电缆公里数。 示例测试用例 K = 1, A = [0, 2, 4, 6, 8] : 12 # build power plant in the city at position 4, total length = 4 + 2 + 0 + 2 + 4 = 12 K = 3, A = …

8
等于和的产品,反之亦然
一个有趣的等价对是1 + 5 = 2·3和1·5 = 2 + 3。像这样的有很多,另外一个是1 +1 + 8 = 1·2·5和1·1·8 = 1 + 2 + 5。通常,n个正整数的乘积等于n个正整数的和,反之亦然。 在此挑战中,必须为输入n> 1生成所有这样的正整数组合(不包括置换)。您可以以任何合理的格式输出它们。例如,n = 3的所有可能解为: (2, 2, 2) (1, 1, 6) (1, 2, 3) (1, 2, 3) (1, 3, 3) (1, 1, 7) (1, 2, 5) (1, 1, 8) 该程序可以在我的2GB RAM上在一分钟内生成最高n的最大组合,因此胜出的是64位Intel …

9
超快速的呕吐功能
目标很简单:在10秒钟内计算尽可能多的数字的求助函数并求和。 您必须在最后打印结果,并且必须进行实际计算。不允许使用自动totient功能,但是bignum库是允许的。您必须从1开始并连续计数所有整数。你是不是允许跳过数字。 您的分数是您的程序可以在您的计算机上计算多少个数字/我的程序可以在您的计算机上计算多少个数字。我的代码是C ++中的一个简单程序(已关闭优化),希望您可以运行它。 您可以使用的重要属性! 如果 gcd(m,n) = 1, phi(mn) = phi(m) * phi(n) 如果p是素数,phi(p) = p - 1(用于p < 10^20) 如果n是偶数phi(2n) = 2 phi(n) 第一个链接中列出的其他人 我的密码 #include <iostream> using namespace std; int gcd(int a, int b) { while (b != 0) { int c = a % b; a …

8
最快的数独求解器
找到优胜者 好像我们有赢家!除非有人计划与世界上最快的数独求解器竞争,否则用户53x15会以惊人的快速解算器Tdoku获胜。对于仍在使用其求解器的任何人,我将在有时间的时候仍然对新提交的内容进行基准测试。 挑战 数独游戏的目标是用数字1-9填满棋盘,每个单元格中填入一个数字,这样每一行,每一列和每个盒子只包含一个数字。数独难题的一个非常重要的方面是应该只有一个有效的解决方案。 挑战的目标很简单,您应该尽快解决数独难题。但是,您不仅会解决任何旧的Sudoku问题,而且还将解决存在的最困难的Sudoku难题,即17线索Sudokus。这是一个例子: 规则 语言 您可以自由使用任何语言。如果我没有使用您的语言安装的编译器,则应该能够提供安装在Linux上可以运行脚本的环境所需的一组命令行说明。 标杆机 该基准测试将在Dell XPS 9560、2.8GHz Intel Core i7-7700HQ(3.8GHz增强)4核,8线程,16GB RAM上运行。GTX 1050 4GB。该机器运行Ubuntu 19.04。这是uname输出,任何有兴趣的人。 Linux 5.0.0-25-generic #26-Ubuntu SMP Thu Aug 1 12:04:58 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux 输入项 输入将作为文件给出。可以在这里找到。该文件包含49151个数独难题。文件的第一行是拼图的数量,其后每行长81个字符,代表一个拼图。未知细胞是0,已知细胞是1-9。 您的程序应该能够将文件名作为参数,或者具有来自STDIN的文件输入,以便于手动检查解决方案。请提供有关程序如何输入的说明。 时间/计分 通过评论中的讨论和一些反思,评分标准已更改为您整个程序的时间。即使在官方评分中,您的程序也应生成具有正确哈希值的输出文件。这不会干扰任何现有解决方案,也不会改变目前的排名。对计分系统的任何想法都将受到赞赏。 如果两个解决方案的单次运行得分相似,则我将运行多个基准测试,平均时间为最终得分。如果平均分数相差不到2%,我会认为这是平局。 如果您的解决方案运行时间超过一个小时,则不会获得正式评分。在这种情况下,您有责任报告其运行所在的计算机以及您的分数。对于优化的求解器,这应该不是问题。 编辑:引起我注意的是,尽管困难重重,但摆在眼前的问题并不是最困难的。如果有时间,我将尝试将此处介绍的解决方案与较难的难题组合进行基准测试,并将分数添加到每个提交的内容中。但是,这并非官方评分,只是为了好玩。 验证 您的解决方案将通过MD5 / SHA256校验和进行验证。您的脚本应该能够生成包含所有难题及其解决方案的文件。但是,该文件也将被手动检查,因此请勿尝试获取哈希冲突。您的输出文件应匹配: MD5:41704fd7d8fd0723a45ffbb2dbbfa488 SHA256:0bc8dda364db7b99f389b42383e37b411d9fa022204d124cb3c8959eba252f05 该文件将采用以下格式: <num_puzzles> <unsolved_puzzle#1>,<solved_puzzle#1> …

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.