Questions tagged «array-manipulation»

通过使用和操纵数组来解决特定问题的竞赛。

14
离散卷积或多项式乘法
给定两个非空的整数列表,您的提交应计算并返回二者的离散卷积。有趣的是,如果您将列表元素视为多项式的系数,则两个列表的卷积代表两个多项式的乘积的系数。 定义 给定列表A=[a(0),a(1),a(2),...,a(n)]和B=[b(0),b(1),b(2),...,b(m)](设置a(k)=0 for k<0 and k>n和b(k)=0 for k<0 and k>m),则两者的卷积被定义为A*B=[c(0),c(1),...,c(m+n)]其中c(k) = sum [ a(x)*b(y) for all integers x y such that x+y=k] 规则 允许使用适用于您的语言的任何方便的输入和输出格式。 不允许使用内置的卷积,创建卷积矩阵,相关性和多项式乘法。 例子 [1,1]*[1] = [1,1] [1,1]*[1,1] = [1,2,1] [1,1]*[1,2,1] = [1,3,3,1] [1,1]*[1,3,3,1] = [1,4,6,4,1] [1,1]*[1,4,6,4,1] = [1,5,10,10,5,1] [1,-1]*[1,1,1,1,1] = [1,0,0,0,0,-1] [80085,1337]*[-24319,406] = [-1947587115,7,542822]

7
希尔伯特-求矩阵
受启发 问题 将2D图像展开为1D字符串的另一种方法是使用 希尔伯特曲线。 该曲线有很多版本,具体取决于计算时使用的迭代次数。下面是从一阶到五阶的希尔伯特曲线示例。 计算该曲线的方法如下。首先,我们将一阶希尔伯特曲线定义为图中所示的那条曲线(n = 1的曲线),以使其适合1x1的正方形。然后,我们制作该曲线的四个副本,将它们间隔为4x4正方形,以便它们都向左侧呈现“凹面”。然后,我们翻转两条最左侧的1曲线,以使顶部的一个凹面朝向顶部,而底部的凹面朝向底部。最后,我们连接相邻的希尔伯特曲线的角。如果要获得(n + 1)阶曲线,我们只需要对四个n阶曲线重复该过程即可。我们可以在此处看到该过程的可视化(我还将添加一张详细描述该过程的图像) 您在此挑战中的任务是沿着该矩阵的最低阶希尔伯特曲线展开整数矩阵。 为简单起见,我们将从矩阵的左上角开始绘制曲线。 您可以将输入作为整数列表的列表来接收,其中每个子列表代表矩阵的一行。 您可以假定输入将是一个方矩阵(n * n)。 例如: 输入: [[ 1, 2,] [ 3, 4 ]] 输出: [ 1, 2, 4, 3 ] 由于我们使用的是如图所示的一阶希尔伯特曲线 输入: [[ 1, 2, 3, 4, ] [ 5, 6, 7, 8, ] [ 9, 10, 11, …

20
波动范围
给定一个带数字的列表,输出如下范围: 输入:[0, 5, 0]将变为[0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0]。 这是通过数组映射范围,因此我们首先必须创建范围[0, 5],即[0, 1, 2, 3, 4, 5]。之后,我们使用5来创建range [5, 0]。附加在我们之前的范围中,这使我们: [0, 1, 2, 3, 4, 5, 4, 3, 2, 1, 0] 让我们观察一下两个彼此相邻的相同数字的测试用例: [3, 5, 5, 3], ranges: [3, 5] = 3, 4, 5 [5, 5] = 5 …

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
计算数组的maxmax
考虑阵列x诸如[1 5 3 4]和一个数n,例如2。写所有的长度- n滑子阵:[1 5],[5 3],[3 4]。让极小极大阵列的被定义为最小的滑动块的最大值的。所以在这种情况下,这将是最小的5, 5, 4,这是4。 挑战 给定一个数组x和一个正整数n,输出如上定义的minimax。 该数组x将仅包含正整数。n将始终至少为1,并且最多为x。 计算可以通过任何过程来完成,而不必如上所述。 代码高尔夫,最少的字节数获胜。 测试用例 x,n,导致 [1 5 3 4], 2 4 [1 2 3 4 5], 3 3 [1 1 1 1 5], 4 1 [5 42 3 23], 3 42

11
计算向量的有界累积和
向量的累加总和可以通过简单地取所有先前元素的总和来计算。例如: vec = [1 1 1 -1 -1 -1 -1 -1 1 1 1 1 -1] cum_vec = [1 2 3 2 1 0 -1 -2 -1 0 1 2 1] 现在,施加一个上限和一个下限,这意味着如果累加总和处于上限,则停止增加,而如果累加总和处于下限,则停止减小。一个简单的例子: upper_lim = 2 lower_lim = -1 vec = [1 1 1 -1 -1 -1 -1 -1 1 1 …

8
Lisp提取任务
在Lisp样式语言中,列表通常是这样定义的: (list 1 2 3) 出于此挑战的目的,所有列表将仅包含正整数或其他列表。我们还将list在开始时省略关键字,因此列表现在如下所示: (1 2 3) 我们可以使用来获取列表的第一个元素car。例如: (car (1 2 3)) ==> 1 我们可以得到原始列表,其中第一个元素被删除cdr: (cdr (1 2 3)) ==> (2 3) 重要说明:cdr即使该列表只有一个元素,也将始终返回一个列表: (cdr (1 2)) ==> (2) (car (cdr (1 2))) ==> 2 列表也可以在其他列表中: (cdr (1 2 3 (4 5 6))) ==> (2 3 (4 5 6)) …

13
精致分区
考虑一个整数数组: [1, 0, 9, 1, 3, 8] 有很多方法可以将该列表划分为连续的子列表。这是三个: A: [[1, 0, 9], [1, 3, 8]] B: [[1], [0, 9], [1, 3], [8]] C: [[1, 0], [9, 1], [3, 8]] 我们将调用一个分区Ÿ另一个分区的和改进X,如果X可以从以下地址获得ÿ通过加入一些子列表的重新走到一起。 所以,B是的改进A:如果我们前两个和最后两个子列表加入到一起,我们得到A。但是,C是不是的改进A:我们不得不分手的9和1以恢复A从它。同样,任何分区本身都是琐碎的改进。 请注意,我们不允许在任何时候重新排列任何子列表或元素。 挑战 鉴于两个分区(整数列表的列表)X,并Y,确定是否Y是一个细化X。 您可以假设分区将仅包含从0到的整数9(含)。您不能假定X和Y是同一列表的分区(如果不是,则它们也不是彼此的优化)。X和/或Y可能为空,但永远不会包含空子列表。 您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行自变量或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。 输入可以采用任何方便的字符串或列表格式。由于元素只能是一位整数,因此您可以选择在子列表中省略定界符,但请确保前导0s是可能的。您可以选择采取X和Y顺序相反。 输出应该是truthy如果Y是的细化X和falsy否则。 您的代码必须能够在一台合理的台式机上在一秒钟内解决以下每个测试用例。(这仅仅是为了避免简单的暴力解决方案而进行的健全性检查。) 这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。 测试用例 每个测试用例都单独显示,写成X Y。我正在使用GolfScript / CJam样式的数组表示法来节省一些水平空间: 真相: [] [] [[0]] [[0]] …

8
跳阵列!
让我们玩一个名为“ 跳数组”的单人游戏。要播放,您只需要一个整数数组,例如a。您从某个位置开始i,然后在每个转弯处都跳到一个新位置。反过来n, 如果n是偶数,则跳至绝对位置a[i] mod length(a), 如果n是奇数,则跳到相对位置(i + a[i]) mod length(a)。 数组索引从零开始。您可以将第一个跳跃算作turn 0或turn 1,这会带来不同的游戏。由于游戏的状态空间是有限的(您的举动取决于您的位置和回合数的奇偶性),因此您最终将进入一个长度均匀的循环。loop(a, i, b)当第一个跳转被计为turn时,由该循环的长度表示b。 输入项 一个非空a整数数组,用于玩游戏。 输出量 这样的最大数量p,当从某个位置开始i并将第一圈计算为0或时1,您最终会进入一个长度循环2 * p。换句话说,您的输出是数字 max { loop(a, i, b)/2 : i in [0 .. length(a)-1], b in [0,1] } 规则 您可以提供功能或完整程序。最小的字节数获胜,并且不允许出现标准漏洞。 测试用例 [0] -> 1 [-213] -> 1 [1,3,12,-1,7] -> 1 [2,3,5,7,9,11,13,17,19] -> …

13
谢尔宾斯基层
首先,/\您可以通过在下面添加一条线来创建类似于Sierpinski三角形的图案,从而... 任何松散的分支/或\再次分裂为两个分支:/\。 分支的任何碰撞都将\/死,其下无任何东西(只有空格)。 重复这些规则将产生 /\ /\/\ /\ /\ /\/\/\/\ /\ /\ /\/\ /\/\ etc... (ViHart的启发) 编写一个程序或函数,该程序或函数接受一个正整数N,并将此模式的前N行打印到stdout,且前导或尾随空格不超过所需数量。 例如,如果输入是1输出,则必须为 /\ 如果输入是2输出,则必须为 /\ /\/\ 如果输入是8输出,则必须为 /\ /\/\ /\ /\ /\/\/\/\ /\ /\ /\/\ /\/\ /\ /\ /\ /\ /\/\/\/\/\/\/\/\ 等等。 字节最少的代码获胜。

30
创建具有重复数字的数组
挑战 这个问题的任务是编写一个程序或一个命名函数,该程序或命名函数采用一个正整数n(大于0)作为通过STDIN,ARGV或函数参数的输入,并通过STDOUT或函数返回值输出一个数组。 听起来足够简单?现在这是规则 该数组将仅包含从1到的整数n 从1到的每个整数n应重复x一次,其中x是每个整数的值。 例如: 输入: 5 输出: [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5] 数组可以排序也可以不排序。 这是代码高尔夫球,因此获胜者是最短的代码(以字节为单位)。 奖金 0.5如果输出数组中没有两个相邻的整数相同,则将您的分数乘以。 例如n = 5,一种这样的配置是 [5, 4, 5, 4, 3, 4, 5, 2, 5, 3, 1, 2, 3, 4, 5]

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, …

8
按混排排序
块随机排序 在块混洗排序是排序的列表的(而人工的)方法。举例说明,其工作方式如下。 [6, 1, 0, 3, 2, 4, -2, -1] Break list into contiguous blocks [6][1, 0][3, 2, 4][-2, -1] Sort each block [6][0, 1][2, 3, 4][-2, -1] Sort blocks lexicographically [-2, -1][0, 1][2, 3, 4][6] Concatenate [-2, -1, 0, 1, 2, 3, 4, 6] 划分为连续块的分区可以任意选择。但是,并不是所有的块选择都会在最后产生一个排序列表: [6, 1, 0, 3, …

10
最小排序列表到矩阵
给定唯一的正整数的未排序列表,请将其最小排序为2D矩阵。输入列表被保证是复合长度,这意味着在输出矩阵不一定是正方形的,但是大小n x m与n,m > 1。 “最小排序”在此表示以下含义: 按升序对列表进行排序。 尽可能压缩输出矩阵-最小化矩阵尺寸的总和(例如,对于20输入元素作为输入,需要a 5x4或4x5输出矩阵,而不是a 2x10)。 从排序列表中的第一个元素开始,将排序的数字尽量压缩到矩阵的左上角。 可以将其视为对列表进行排序,然后将其沿矩阵的对角线(从左上角开始)进行切片。 例子: 对于输入,1..20输出为5x4或4x5矩阵,如下所示: 1 2 4 7 11 3 5 8 12 15 6 9 13 16 18 10 14 17 19 20 1 2 4 7 3 5 8 11 6 9 12 15 10 13 16 18 …

1
来临挑战1:帮助圣诞老人解开他现在的保险库!
下一个>> 描述性关键字(用于搜索):使两个矩阵等效,重叠,数组,查找 挑战 圣诞老人在过去曾有过精灵从他的保险库中偷走礼物的历史,因此,今年他设计了一把很难破解的锁,今年似乎将精灵拒之门外。不幸的是,他丢失了组合,也无法弄清楚如何打开它!幸运的是,他雇用了您编写一个程序来查找该组合。它不需要是最短的,但他需要尽快找到它! 他的日程安排非常严格,他等不起。您的分数将是程序的总运行时间乘以程序为得分输入所输出的步数。最低分获胜。 技术指标 锁是1和0的方阵。它设置为1和0的随机排列,并且需要设置为指定的代码。幸运的是,圣诞老人记住了所需的代码。 他可以执行几个步骤。每个步骤都可以在任何连续的子矩阵上执行(也就是说,您必须选择一个完全由左上角和右下角所包围的子矩阵)(可以是非正方形子矩阵): 向右旋转90度* 向左旋转90度* 旋转180度 左右循环各行n元素(环绕) 循环上移m或下移每个列元素(自动换行) 水平翻转 垂直翻转 翻转主对角线* 翻转主反对角线* *仅当子矩阵为正方形时 当然,他也可以在整个矩阵上执行这些步骤。由于1和0只能在矩阵上交换,而正方形的值不能直接更改,因此开始和结束配置的1和0的数目相同。 格式规范和规则 将以您想要的任何合理格式为您提供两个平方矩阵的输入(开始位置和结束位置)。输出应该是任何可读格式的这些步骤的序列。由于这不是代码来源,请使其成为易于验证的格式,但这不是严格的要求。如果需要,可以选择在输入中采用矩阵的边长。 您的程序将在我的计算机上运行(Linux Mint,如果需要的话,您可以根据要求提供确切的版本详细信息:P),并且我将根据我在命令行上按“ Enter”键之间的时间以及命令退出。 测试用例 1 0 0 1 0 0 0 0 0 1 1 0 -> 0 0 0 0 0 1 1 0 -> 1 1 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.