Questions tagged «data-structures»

对于涉及组织数据方式(数据类型,数组,二叉树等)的挑战

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

7
二叉树旋转
平衡的二进制搜索树对于保证O(log n)查找(或类似操作)至关重要。在动态环境中,随机地插入和/或删除了许多密钥,树可能会退化为链接列表,这对于查找来说是可怕的。因此,存在多种抵消这种效果的自平衡二叉树(例如AVL树或八叉树)。这些树是基于不同种类的旋转来重新平衡树的。 轮换 在此挑战中,我们将仅关注单个右旋,这样的旋转(左旋将是对称的)如下所示: 5 3 / \ / \ 3 6 => 1 5 / \ / \ 1 4 4 6 如果有任何叶子1,4或者6有左子树或右子树,则旋转只需将它们保留在那里。如果这是较大树的子树,则只需在节点处“将其切除”,5然后将旋转后的树(现在为node 3)“重新连接” 到该节点。 挑战 给定二分搜索树1和关键字,如上所述,该树在该节点上向右旋转。上例中提供的密钥为5。 规则和I / O 您可以使用任何类型的键,只要您选择的键与测试用例的键之间存在双射 您可以选择二叉树的任何表示形式,只要没有歧义(例如,[3,[]]除非另有说明,否则是模棱两可的),这对于您选择的语言是很自然的 由于输入将始终是二叉搜索树,因此没有重复的键 您可以假设密钥包含在树中 您可以假定包含密钥的节点有一个左子节点 您可能无法在提供的键下假设正确的子树 您可能不认为旋转之前树是不平衡的 您可能不认为旋转后树是平衡的 您可以使用任何默认的I / O方法 您提交的内容可能是返回树的功能或打印解决方案的完整程序 测试用例 这些示例表示一棵树,如下所示 如果是一片叶子: [] 如果它是带有键的树x并且两个子树都是叶子:[x] 如果它是带有键x和子树的树left right:[x,left,right] …

13
是最大堆吗?
甲堆,也被称为优先级的队列,是一个抽象的数据类型。从概念上讲,它是一个二叉树,其中每个节点的子代小于或等于节点本身。(假定它是一个最大堆。)当元素被推入或弹出时,堆会重新排列自身,因此最大的元素是下一个要弹出的元素。它可以很容易地实现为树或数组。 您应该选择接受的挑战是,确定数组是否为有效堆。如果每个元素的子元素小于或等于元素本身,则该数组为堆形式。以以下数组为例: [90, 15, 10, 7, 12, 2] 实际上,这是一个以数组形式排列的二叉树。这是因为每个元素都有孩子。90岁有两个孩子15和10。 15, 10, [(90), 7, 12, 2] 15岁还有7岁和12岁的孩子: 7, 12, [90, (15), 10, 2] 10个有孩子: 2 [90, 15, (10), 7, 12, ] 而下一个元素也将是10的孩子,除了没有空间。如果数组足够长,则7、12和2也都将有子级。这是堆的另一个示例: [16, 14, 10, 8, 7, 9, 3, 2, 4, 1] 这是先前数组制作的树的可视化效果: 以防万一这还不够清楚,这是获取第i个元素的子元素的显式公式 //0-indexing: child1 = (i * 2) + …

6
评估一个简单的电子表格
规则 没有单元格范围参考(A2:B3)。 最多9行9列。 没有循环引用或公式错误。 空单元格的计算结果为0。 数据仅是数字,但可以视为字符串。 公式是字符串。 实施选择 您必须在以下事项中陈述您的选择: 要求公式以任何单个字符为前缀,例如=–或不带。 根据Excel等人使用的两种约定,第二行的最左侧单元格为A2或R2C1。 在单元格引用中要求任何单字符前置或后缀,例如$-或不要求。 空,空字符串,空列表等(但不是0)之一,代表空单元格。 您提交的语言(不允许使用电子表格管理器)。 公式的语言(可能与上述语言有所不同)。* 布朗尼点或cookie,用于解释您的解决方案。 例子 选择:7 :=;8 :A2;9:没有 10 :"";12:Excel公式语言 在: [[ 2, 3], ["=A1+B1",""]] 出: [[2,3], [5,0]] 在: [[ 2,"=A1+B2"], ["=A1+B1", ""]] 出: [[2,2], [4,0]] 在: [[ 3, 4,"=A1*B1"], [ 2, 5,"=A2*B2"], ["","","=C1+C2"]] 出: [[3,4,12], [2,5,10], [0,0,22]] …

7
前缀树遍历
编写一个程序(通过标准输入或命令行)以递归形式接收字符串 PREFIX[SUFFIXES] 哪里 PREFIX 可以是任何小写字母(az)字符串,包括空字符串,并且 SUFFIXES可以是递归形式PREFIX[SUFFIXES]连接在一起的任何字符串序列,包括空序列。 通过递归求值每个后缀中的字符串列表并将它们附加到前缀,从输入生成一个小写字母字符串列表。输出以任何顺序输出此列表中的字符串,每行一个(加上可选的尾随换行符)。 例 如果输入是 cat[s[up[][]][]ch[e[r[]s[]]]a[maran[]comb[]pult[[]ing[]]]] 那么前缀是cat和和后缀s[up[][]],[], ch[e[r[]s[]]],和a[maran[]comb[]pult[[]ing[]]]。每个后缀都有自己的前缀和后缀。 输出将是任意顺序的这9个字 catsup cats cat catcher catches catamaran catacomb catapult catapulting 因为输入对这棵树进行了编码 通过从根到叶遍历树可以形成9个输出字中的每一个。 笔记 请记住,前缀可能是空字符串,所以类似 [donut[][]cruller[]] 是有效输入,其输出将是(任何顺序) donut cruller 空行用于第二个后缀匹配的空字符串。 后缀序列也可以为空,因此平凡的输入大小写 [] 有一个空行作为其输出: 您可以假设输入将仅产生唯一的输出字。 例如hat[s[]ter[]s[]]将是无效的输入,因为它hats被编码了两次。 同样,[[][]]无效,因为空字符串被编码两次。 您可能不会假定输入尽可能短或压缩。 例如,'e'上面主要示例中的'ch'节点可以与该节点组合,但这并不意味着输入无效。 同样,[[[[[]]]]]尽管仅对空字符串进行了次优编码,但仍然有效。 代替程序,您可以编写一个函数,该函数将输入字符串作为参数并正常打印输出或将其作为字符串或列表返回。 以字节为单位的最短代码获胜。

10
解开双链接数据
双向链接列表是一种数据结构,其中每个节点都具有value指向列表中的previous和的“链接” nodes。例如,考虑以下具有值12、99和37的节点: 在此,值为12和99的节点指向其各自的next值为99和37的节点。值为37的节点没有next指针,因为它是列表中的最后一个节点。同样,值分别为99和37的节点指向它们各自的previous节点12和99,但是12没有previous指针,因为它是列表中的第一个节点。 设置 实际上,节点的“链接”被实现为指向内存中上一个和下一个节点位置的指针。对于我们的目的,“内存”将是节点的数组,而节点的位置将是其在数组中的索引。节点可以认为是形式的3元组( prev value next )。那么,上面的示例可能如下所示: 但它看起来可能像这样: 从任何节点开始,您可以跟随previous链接(显示为红色箭头的起点)到达其之前的节点,并跟随链接(next绿色箭头)以查找后续节点,以便按顺序获取所有节点的值:[12, 99, 37]。 上面的第一个图可以用数组表示[[null, 12, 1], [0, 99, 2], [1, 37, null]]。那么第二个是[[2, 99, 1], [0, 37, null], [null, 12, 0]]。 挑战 编写一个程序,该程序将节点数组和节点索引作为输入,并以列表顺序返回同一双链表中节点的值。 并发症 “内存”并不总是只包含一个列表的节点。它可能包含几个列表: 上面的数组包含三个双向链接列表,为方便起见用颜色编码: 在索引节点7,10,1,4,3,12(只显示next链接,以减少混乱;点击放大): 给定此数组和所有这些索引,您的程序应按顺序返回values [0, 1, 1, 2, 3, 5, 8]。 索引处的节点9: 给定索引9,您的程序应返回[99]。 在索引节点11,8,0,6,2: 给定这些索引之一,它应该返回[2, 3, 5, …

18
简单的CSV / DSV导入器
略大于此的倒数。 输入: 多行DSV数据和单个定界符。DSV可以视为文件,文件名,以换行符分隔的字符串,字符串列表等。所有记录的字段数均相同,并且没有字段为空。数据不包含定界符,也没有引用或转义机制。 Out: 表示DSV的数据结构,例如,字符串列表列表或字符串矩阵。 例子 ["here is,some,sample","data,delimited,by commas"]和",": [["here is","some","sample"],["data","delimited","by commas"]] ["hello;\"","\";world","\";\""]和";":( [["hello","\""],["\"","world"],["\"","\""]]转义,因为此示例使用JSON) ["to be or not","that is the question"]和" ": [["to","be","or","not"],["that","is","the","question"]]

6
N个碱基中的回文数
给定一个非负整数n >= 0,请永远输出x_i >= 3以完全n不同b的底数为回文数的整数序列,底数可以是2 <= b <= x_i-2。 这基本上是OEIS A126071的反函数,在此输出中该序列中的哪些索引具有值n。有点不同,因为我更改了它,所以您忽略了碱基b = x_i-1, x_i, x_i+1,因为这些碱基的结果始终是相同的(值始终是回文率,或者始终不是)。此外,偏移量也不同。 x_i限制为数字,>= 3因此每个结果的第一项n为A037183。 请注意,输出格式是灵活的,但是应该以很好的方式分隔数字。 例子: n seq 0 3 4 6 11 19 47 53 79 103 137 139 149 163 167 ... 1 5 7 8 9 12 13 14 22 23 25 29 35 …
10 code-golf  sequence  base-conversion  palindrome  code-golf  array-manipulation  matrix  code-golf  string  ascii-art  code-golf  ascii-art  physics  code-golf  number  sequence  fibonacci  code-golf  ascii-art  packing  code-golf  string  hexadecimal  code-challenge  restricted-source  decision-problem  binary  code-golf  code-golf  code-golf  stack-exchange-api  code-golf  string  parsing  generation  data-structures  code-golf  kolmogorov-complexity  graphical-output  code-golf  array-manipulation  integer  generation  data-structures  code-golf  number  random  probability-theory  king-of-the-hill  java  minesweeper  code-golf  string  kolmogorov-complexity  animation  code-golf  string  code-golf  code-golf  quine  code-golf  internet  code-golf  arithmetic  base-conversion 

1
弹性弯曲
作为程序员,看着我们伸缩并不是很有趣。今天我们改变了!在这个挑战中,您将使用lex和flex六面体。 关于 有关视频介绍,请在flexagons上观看viharts视频 柔版是您可以弯曲以露出顶部和底部以外的其他面的形状;我们正在制作六面六面体。参见下图,了解如何从纸条上折叠六六边形。 A显示了条带的两侧。两个白色三角形粘合在一起。这是您如何调整它: 以下是可能的状态及其关系的图表: 彩色圆圈代表与第一个图像相同编号的6个三角形。每个圆圈都有两种颜色-最下面的圆圈代表背面(如果在哪里可以翻转柔印,您会看到什么),在此挑战中无需考虑。 背景中的灰色圆圈代表你如何展示你的flexagon在任何给定的状态:有4点不同的方式来弯曲它,我们称这些Left,Right,Up和Down。您实际上并没有朝着这些方向弯曲,重要的一点是,有些方向是相反的。 如果您在中心位置,可以使用Left并Right转到其他中心位置。要离开中心,请使用Up和Down。如果您不在中心,则无法使用Left或Right。 Left/Down = clockwise Right/Up = anti-clockwise 挑战 创建一个函数或程序,该函数或程序将柔性版的18个正面和18个背面上应有的内容,左,右,上,下弯曲的序列作为输入,并在弯曲后返回8个可见面。 详细的示例计算: flex "hexaflexaperplexia" "flexagationdevices" [Right, Right, Left] Divide a strip of paper into 18 triangles: 1/2\3/1\2/3\1/2\3/1\2/3\1/2\3/1\2/3 Front 4/4\5/5\6/6\4/4\5/5\6/6\4/4\5/5\6/6 Back Write "hexaflexaperplexia" on the front of the paper strip: 1/2\3/1\2/3\1/2\3/1\2/3\1/2\3/1\2/3 hexaflexaperplexia 123123123123123123 h a …
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.