Questions tagged «parsing»

此标签表示挑战,其中解析输入很大/挑战的主要部分。

19
URL友好的标题
这个网站上的人们真的很喜欢修饰自己的帖子标题... Stewie's sequence: + * - / + * - / 但是,当此标题需要包含在页面URL中时,它可以简化: stewies-sequence 挑战 您的任务是创建一个程序或函数,给定代表帖子标题的字符串,该程序或函数将输出/返回其“ URL友好”转换。 该算法是: 转换为小写字母(如果适用) 用破折号()替换每个空格(),句点(.),逗号(,)或斜杠/(-) 删除所有非字母数字字符,破折号除外。 缩小相邻破折号(a---b -> a-b)的组,删除所有前导/尾随的破折号。 请注意,此算法只是一种简化,可能不会总是产生与该站点的真实方法相同的结果。 规则 您可以假设输入: 不会为空。 将至少包含一个字母数字字符。 仅包含ASCII范围32-126中的字符(可打印) 允许使用完整的程序或功能。 这不准确的任务说明一个内置的是不是允许的。 这是代码高尔夫球,因此最短的解决方案(以字节为单位)获胜! 测试用例 该网站上的大多数帖子都将用作测试,但这是一个方便的列表: Loading... Forever -> loading-forever N(e(s(t))) a string -> nest-a-string "Hello, World!" -> hello-world URL-Friendly titles -> …

27
解析C ++ 14整数文字
根据http://en.cppreference.com/w/cpp/language/integer_literal,整数文字包含一个十进制/十六进制/八进制/二进制文字和一个可选的整数后缀,这显然是完全不必要的,浪费了宝贵的字节,并且在此挑战中未使用。 十进制文字是a non-zero decimal digit (1, 2, 3, 4, 5, 6, 7, 8, 9), followed by zero or more decimal digits (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)。 八进制文字是the digit zero (0) followed by zero or more octal digits (0, 1, 2, 3, 4, 5, 6, 7)。 …

30
12小时至24小时时间转换器
令人惊讶的是,这个简单的任务似乎还不存在,所以... 您的任务是编写一个程序,该程序将12小时时间作为输入,并将其转换为“军事时间”或24小时时间格式。 输入将采用以下形式: HH:MM am/pm 尽管可以有一些细微的变化: 上午/下午与其余时间之间的间隔是可选的。 最后一部分可以是“ am” /“ pm”或“ a” /“ p”。 任何大写字母都可以。 输出将是输入的时间,转换为24小时格式。它可以是数字或字符串。 对于输入和输出: 首先的0是可选的。最后3个位必须为0。 分隔小时和分钟的定界符可以是“:”,“”(空格)或什么都不是。 其他说明: 午夜可以表示为0000或2400。 午夜将被视为“上午”,而中午将被视为“下午”。 您的程序可以是函数,也可以是完整程序,应返回结果或将其输出到标准输出。尾随空格可以。 示例(不需要支持每种格式): 12:00am -> 0000 1200 pm -> 1200 1234Am -> 00:34 134a -> 134 01:34PM -> 13 34 1234pm -> 1234 这是代码高尔夫,因此最少的字节数获胜。由于使用内置程序解决此问题非常简单,因此很高兴看到一些手动解决此问题的代码(但使用内置程序很好)。 只是为了澄清,你是不是需要支持每一个可能的格式。仅支持单个输入和单个输出格式(您选择)就可以了。但是,我想限制上面概述的格式(它已经相当免费了)。{1134,'pm'}例如,这将是不可接受的。

9
解码Microsoft MS-DOS 5.0 FAT目录项
Microsoft FAT文件系统具有一个目录表,用于表示磁盘上哪些“文件”位于哪个“文件夹”中。暂时,这些条目将大量信息塞满了少量比特。出于好奇,Wiki上有很多技术规范,但是这里的挑战将集中在条目的“简单”解码上。 每个条目由一个32字节的二进制字组成,分为几个部分。为了在此挑战中保持一致,我们将使用MS-DOS 5.0版本,字节顺序为big endian,并且将byte 0x00称为最左边,将byte 0x1F称为最右边。 以下是相关部分的简要示意图,以及每个部分的输出(以粗体显示)。 前11个字节是ASCII格式的文件名(这是著名的8.3文件名的来源-文件名8个字节,扩展名3个字节)。这些是直接的ASCII编码,应以ASCII(。)之间的形式输出。 注意:第8部分和第3部分都用空格填充,以进行全长输入。输出应忽略空格(即,不输出空格)。 文件扩展名可能为空(即所有空格),在这种情况下,输出不应输出点。 由于ASCII仅使用低7位,因此所有字节均具有前导0。 下一个字节(0x0b)是以下内容的位掩码: 0x01只读-输出RO 0x02隐藏-输出H 0x04系统-输出S 0x08音量标签输出VL。文件大小(以下)应输出为0,无论其实际输入如何。 0x10子目录-输出SD。文件大小(以下)应输出为0,无论其实际输入如何。 0x20存档-输出A 0x40设备-此挑战被忽略。 0x80保留-对于此挑战被忽略。 由于这是位掩码,因此可能有多个标志-所有适用的输出应以任意顺序串联在一起。例如,0xff可以是ROHSVLSDA(或任何其他组合)。 在MS-DOS 5.0下不使用接下来的两个字节(0x0c和0x0d)。 接下来的两个字节(0x0e和0x0f)是创建时间,如下所示: 位15到11是24小时格式的小时-输出00到23 位10到5是分钟-输出00到59 位4到0是秒数/ 2-输出00到58(请注意,秒仅是两秒的分辨率) 为了澄清:hhhhhmmmmmmsssss写大端时。 接下来的两个字节(0x10和0x11)是创建日期,如下所示: 位15至9年-输出1980年的0高达2107对127 位8到5是月份-输出1到12(带或不带前导零) 位4至0是日期-输出0至31(带或不带前导零) 为了澄清:yyyyyyymmmmddddd写大端时。 接下来的两个字节(0x12和0x13)是最后访问日期。在MS-DOS 5.0中使用时,我们将忽略此部分的挑战。 MS-DOS 5.0不使用接下来的两个字节(0x14和0x15)。 接下来的两个字节(0x16和0x17)是最后修改的时间,遵循与上面创建时间相同的格式。 接下来的两个字节(0x18和0x19)是最后修改日期,其格式与上面的创建日期相同。 接下来的两个字节(0x1a和0x1b)是文件在磁盘上的群集位置。对于这一挑战,我们将忽略这一部分。 最后四个字节(0x1c,0x1d,0x1e和0x1f)是文件大小-输出为 无符号整数,除非设置了VL或SD标志(在上面),否则输出0。 视觉表现 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \______________________________FILENAME________________________________________________/\_ATTR_/\___NOTUSED____/\_CREATIONTIME_/\_CREATIONDATE_/\__LASTACCESS__/\___NOTUSED____/\_MODIFIEDTIME_/\_MODIFIEDDATE_/\___NOTUSED____/\___________FILESIZE___________/ 输入项 单个32字节字(即256位),采用任何方便的格式。 这可能是作为一个串1并0作为几个无符号intS,布尔值的阵列等 …

18
旋转对称数
给定一个整数,如果它是相同的上下颠倒(旋转180°),则输出真实值,否则输出虚假值。 0,1并且8具有旋转对称性。6成为9,反之亦然。 产生真实结果的数字序列:OEIS A000787 0, 1, 8, 11, 69, 88, 96, 101, 111, 181, 609, 619, 689, 808, 818, 888, 906, 916, 986, 1001, 1111, 1691, 1881, 1961, 6009, 6119, 6699, 6889, 6969, 8008, 8118, 8698, 8888, 8968, 9006, 9116, 9696, 9886, 9966, 10001, 10101, 10801, 11011, 11111, 11811, 16091, …
27 code-golf  number  sequence  decision-problem  code-golf  string  parsing  c  code-golf  sorting  integer  code-golf  number  sequence  rational-numbers  graphical-output  atomic-code-golf  assembly  box-256  code-golf  geometry  tips  python  code-golf  number  sequence  arithmetic  number-theory  code-golf  ascii-art  kolmogorov-complexity  geometry  code-golf  graphical-output  code-golf  math  code-golf  grid  cellular-automata  game-of-life  code-golf  string  subsequence  code-golf  arithmetic  rational-numbers  code-golf  tips  dc  code-golf  ascii-art  kolmogorov-complexity  date  code-golf  string  primes  code-golf  string  natural-language  conversion  code-golf  sequence  code-golf  number-theory  primes  base-conversion  code-golf  math  primes  base-conversion  code-golf  ascii-art  fractal  code-golf  matrix  code-golf  math  tips  geometry  python  string  code-challenge  keyboard  code-golf  graphical-output  code-golf  string  code-golf  number  sequence  cops-and-robbers  number  sequence  cops-and-robbers 

10
解析四元数
如果您还不知道,则四元数基本上是4位数的数字。出于这一挑战的目的,它具有一个实部和三个虚部。虚数分量是由后缀表示i,j,k。例如,1-2i+3j-4k是用四元数1为实分量和-2,3和-4作为虚数分量。 在此挑战中,您必须将四元数的字符串形式(例如"1+2i-3j-4k")解析为系数(例如[1 2 -3 -4])的列表/数组。但是,四元数字符串可以用多种不同的格式进行格式化... 这可能是正常的: 1+2i-3j-4k 它可能缺少术语:1-3k,2i-4k(如果缺少术语,则输出0这些术语) 它可能已丢失的系数:i+j-k(在此情况下,这相当于1i+1j-1k换句话说,一个。i,j,或k不被假定在前面的数以具有1在由缺省前) 它的顺序可能不正确: 2i-1+3k-4j 系数可以只是整数或小数: 7-2.4i+3.75j-4.0k 解析时有一些注意事项: 条款之间总会有a +或- 您将始终获得有效的输入信息,该输入内容至少包含1个字词,并且没有重复的字母(no j-js) 所有数字都可以视为有效 你可以,如果你想解析后更改号码为另一种形式(例如,3.0 => 3,0.4 => .4,7 => 7.0) 不允许使用解析/四元数内置函数和标准漏洞。这包括eval关键字和功能。输入将是单个字符串,输出将是列表,数组,由空格分隔的值等。 因为这是代码高尔夫,所以以字节为单位的最短代码获胜。 吨测试用例 1+2i+3j+4k => [1 2 3 4] -1+3i-3j+7k => [-1 3 -3 7] -1-4i-9j-2k => [-1 -4 -9 -2] 17-16i-15j-14k => [17 …

4
逆转正则表达式
挑战 给定有效的正则表达式,输出匹配相同字符串集但反向的正则表达式。 任务 这个挑战使用最基本的正则表达式操作:^,$,?,+,*,[],{},|。没有捕获组或任何复杂的东西。特殊字符可以转义。 样本输入/输出 注意:永远不会给出无效的输入,对于给定的输入,通常会有多个可能的答案! Input | Sample Output -----------|------------- abc | cba tuv? | v?ut a(b|c) | (c|b)a 1[23] | [23]1 a([bc]|cd) | (dc|[bc])a ^a[^bc]d$ | ^d[^bc]a$ x[yz]{1,2} | [yz]{1,2}x p{2} | p{2} q{7,} | q{7,} \[c[de] | [de]c\[ ab[c | <output undefined> a(?bc) | <output undefined> a[]]bc …

30
解码chmod
挑战 给定一个三位数的八进制权限号,输出它授予的权限。 chmod 在UNIX OS上,使用以下chmod命令可以更改文件许可权。使用chmod的方法很少,但是我们今天将重点讨论的是使用八进制权限。 权限编号中的三个数字代表一个不同的人: 第一位代表用户的权限 第二位数字表示该组的权限 最后一位代表他人的权限 接下来,每个数字代表一个权限,如下所示: Key: number | permission 7 | Read Write and Execute 6 | Read and Write 5 | Read and Execute 4 | Read only 3 | Write and Execute 2 | Write only 1 | Execute only 0 | None …

15
拼写单词算术
我们都已经看到过这些在线“算术”,如下所示: Think of a number, divide by 2, multiply by 0, add 8. 而且,通过魔术,每个人最终都得到8! 语言 让我们定义一种使用上面文本的语法的编程语言,称为“ WordMath”。WordMath脚本遵循以下模板: Think of a number, <commandlist>. 这基本上意味着:将一个数字(作为来自STDIN的输入)作为初始累加器,对其执行所有命令,然后输出结果。 这些命令由定界符,(逗号+空格)分隔。有效的命令是(注意,它#代表一个非负整数:): add #/ subtract #-添加/减去累加器的值。 divide by #/ multiply by #- floordiv /乘累加器由给定的值。 subtract from #-与相似subtract,但acc = # - acc代替acc = acc - # repeat-再次执行最后一个命令。这不能是第一个命令,但是您必须支持多个连续的重复。 挑战 你的任务是创建一个程序或功能,这需要一个有效WordMath脚本作为输入和 …

5
解析二维语法
背景 爱丽丝(Alice)和鲍勃(Bob)正在创造一种高尔夫语言,以赢得每一个PPCG挑战。爱丽丝想制作一种二维语言(如> <>),但鲍勃(Bob)更喜欢像J中那样的前缀-前缀语法。作为一种折衷,他们决定创建一种二维前缀-前缀语言。解析器很难编写,他们需要您的帮助! 语法规范 在Alice和Bob的语言中,有变量(由小写ASCII字母表示a-z)和函数(由大写ASCII字母表示)A-Z。可以使用一个或两个参数来调用一个函数。一个方案是字母矩形网格a-zA-Z和空间,以及左上角不能包含空格。这是一个有效程序的示例: F Gy H R x 解析程序后,它将转换为C风格语言(C,Java,Python ...)的表达式,其中包含单字母变量和函数调用,格式为<func>(<arg>)或<func>(<arg1>,<arg2>)。例如,上面的程序产生以下表达式: F(H(R(x)),G(x,y)) 解析过程的详细信息如下: 这些空格只是填充符,因此不会被解析。 每个变量a-z始终被解析为自身。 每个函数都A-Z被解析为一个函数调用。它的参数是它下面和右边在网格中最接近的表达式(按此顺序)。如果仅存在其中之一,则将其作为唯一参数。您可以假设所有函数在网格中至少有一个参数。 在上面的示例中,变量x和y被解析为自身。该函数在其R下方和x右侧没有任何内容,因此将其解析为单参数调用R(x)。同样,由于位于下方,因此H被解析为。该功能具有以下,并在其右侧,所以它解析为,和类似的。左上角解析的表达式是解析过程的结果。H(R(x))RGxyG(x,y)F 输入输出 您的输入是一个非空的矩形字符数组。它始终是Alice和Bob语言的有效程序,但是它可能包含未在输出中使用的表达式。您的输出应为上述过程产生的解析表达式。 规则和计分 您可以编写功能的完整程序。最低字节数获胜,并且不允许出现标准漏洞。 测试用例 这些以格式提供grid <newline> expression,大小写---之间带有连字符。SE格式将某些行留空,但应使用空格填充。 x x --- x y z x --- Fx F(x) --- Fx y F(y,x) --- ABu A(B(u)) --- G H k G(H(k)) --- ABCA …

9
对字符串取消括号
给定正确括号化的字符串作为输入,输出匹配括号内(或所有括号外)的所有非空子字符串的列表,并删除嵌套括号。每个子字符串应为完全相同的匹配括号中的字符序列。子串应按深度顺序列出,而相同深度的子串应按它们在字符串中出现的顺序列出。假定输入总是正确地加上括号。 您可以假定输入仅包含小写的ASCII字母和括号。 您的答案应该是一个函数,当给定一个字符串时,它返回一个字符串列表。 例子: 'a(b)c(d)e' -> ['ace', 'b', 'd'] 'a(b(c)d)e' -> ['ae', 'bd', 'c'] 'a((((b))))' -> ['a', 'b'] 'a()b' -> ['ab'] '' -> [] 'a' -> ['a'] '(((a(b)c(d)e)f)g)h' -> ['h', 'g', 'f', 'ace', 'b', 'd'] 'ab(c(((d)ef()g)h()(i)j)kl)()' -> ['ab', 'ckl', 'hj', 'efg', 'i', 'd'] 最少的字节数获胜。

14
解析包裹
感谢您在“ 标记我的邮件”挑战中的帮助,PPCG-Post已成功地在所有包裹上盖印了生成的条形码! 现在,该解码它们了。 在此挑战中,给定从“ 标记我的邮件”挑战生成的条形码,您的程序将对其解码并返回编码的整数。 但是要当心!条码可能上下颠倒... 4状态条形码 如果您错过了编码挑战,则需要了解我们正在谈论的条形码类型。4状态条形码是一行带有四个可能状态的条,每个状态代表以4为底的整数: | | Bar: | | | | | | Digit: 0 1 2 3 条形码以ASCII呈现,将占用三行文本,使用竖线(|)字符代表条形的一部分,并使用空格()代表空白部分。每个小节之间只有一个空格。条形码示例如下所示: | | | | | | | | | | | | | | | | | | | | | | | | | | | …

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 

10
将TIO答案转换为CMC答案
让我们一次做一些有用的事情。 给定来自在线试用代码提交的文本,请生成等效的“聊天迷你挑战”提交,其形式为 Language, N bytes: [`code`](URL) 或(如果提交是一个字节,TIO仅在需要时在第一行添加尾随) Language, 1 byte: [`code`](URL) 您可以假设提交 只有一行 不包含反引号(`) 没有前导空格 具有以下示例中所示的常规格式;代码行缩进了四个空格( ),而不是HTML标记(<pre><code>… </code></pre>),即没有尾随空格。 请注意,提交内容可能具有语法突出显示标签。请参阅最后一个示例。 您可以选择包括标题文本,即…url "Language - Try It Online"。 例子 给定 # [05AB1E], 1 byte Ô [Try it online!][TIO-j3v72bss] [05AB1E]: https://github.com/Adriandmen/05AB1E [TIO-j3v72bss]: https://tio.run/##MzBNTDJM/f//8JT//zNSgSAnJycfDAA "05AB1E – Try It Online" 返回 05AB1E, 1 byte: [`Ô`](https://tio.run/##MzBNTDJM/f//8JT//zNSgSAnJycfDAA) 要么 …

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 …

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.