编程拼图和代码高尔夫

编程益智爱好者和代码高尔夫球手的问答

30
画一些扩大的箭头
这个挑战是关于打印一系列不断增长的ASCII艺术箭头。我将用语言描述模式,但是看一下本系列开始的内容可能会更容易: > < -> <- --> <-- ---> <--- ----> <---- -----> <----- ------> <------ ... 长度为n的箭头包含箭头(<或>)和n-1破折号(-)。朝右的箭头先是破折号,然后是>。左箭头以开头<,后接短划线。该系列包括一个长度为n向右的箭头,然后是长度为n的左向箭头,其中n从1到无穷大。 要完成挑战,请编写一个程序或函数,该程序或函数接受一个输入,一个整数i >= 1并输出第一个i箭头。箭头是单独的,不是左右成对的,因此i=3您应该输出: > < -> 您可以返回字符串列表,或一个接一个地打印它们。如果要打印,则箭头必须由一些一致的定界符来定界,而不必像示例中那样是换行符。 这是代码高尔夫球,因此最少的字节获胜。

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 …

25
检测完美配对
让我们有一个函数,它接收一个字符串并删除所有成对的相邻相同字符。例如fff f(abbbacc)=abaf(abbbacc)=abaf(a\color{red}{bb}ba\color{red}{cc}) = aba 请注意,当两对重叠时,我们只会移除其中一对。 如果重复应用最终产生空字符串,我们将调用完美配对的字符串。例如,上面的字符串不是完美配对的,因为如果再次应用,我们仍然会得到。然而,像这样的字符串是完美配对的,因为如果我们应用三次,我们将得到空字符串abbbaccabbbaccabbbaccfffabaabaabaeabbccaddeeabbccaddeeabbccaddefff f(eabbccadde)=eaaef(eabbccadde)=eaaef(ea\color{red}{bbcc}a\color{red}{dd}e) = eaae f(eaae)=eef(eaae)=eef(e\color{red}{aa}e) = ee f(ee)=f(ee)=f(\color{red}{ee}) = 您的任务是编写完美配对的计算机代码,该代码采用一个字符串(可打印ASCII),并确定其是否完全配对。源的字节串本身必须是完美配对的字符串,尽管您的代码不必一定限于可打印的ASCII。 您可以输出两个不同的值:一个用于输入完美配对的情况,另一个用于不配对的情况。 这是一个代码问题,因此答案将按其来源的字节大小进行评分,而字节越少越好。 测试用例 abbbacc→Falseabcba→Falseabab→Falseabbbaabacc→Trueeabbccadde→Truebbbb→Trueabbbacc→Falseabcba→Falseabab→Falseabbbaabacc→Trueeabbccadde→Truebbbb→Trueabbbacc \rightarrow \mathrm{False}\\ abcba \rightarrow \mathrm{False}\\ abab \rightarrow \mathrm{False}\\ abbbaabacc \rightarrow \mathrm{True}\\ eabbccadde \rightarrow \mathrm{True}\\ bbbb \rightarrow \mathrm{True}

19
记住元音!
输入项 一串可打印的ASCII字符,例如: This is an example string. 输出量 对于每个BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz没有元音(AEIOUaeiou)的辅音(),请在其末尾添加小写字母。 第一个元音之前的辅音保持原样: Thisi isi ana examapale seterinigi. 测试用例 AN EXAMPLE WITH A LOT UPPERCASE (plus some lowercase) => ANa EXAMaPaLE WITiHi A LOTo UPuPEReCASE (pelusu some lowerecase) And here comes a **TEST** case with 10% symbols/numbers(#)! => Anada here comese a **TESeTe** …
25 code-golf  string 

30
零和计数
编写一个程序或函数,如果n≥1,则返回的解数为±1±2±3±...±n = 0。 对于n = 6,没有解,所以答案为0。对于n = 4,有两个解,所以答案为2(两个解是1-2-3 + 4 = -1 + 2 + 3-4 = 0)。 这是OEIS序列A063865。一些示例输入/输出是: n a(n) 1 0 2 0 3 2 4 2 5 0 6 0 7 8 8 14 9 0 10 0 11 70 12 124 13 0 14 0 15 …

25
Golf A括号匹配算法
您将得到一个字符串s。保证字符串具有相等的且至少为[s和]s。还可以保证括号是平衡的。该字符串也可以包含其他字符。 目的是输出/返回元组列表或包含每个[和]对的索引的列表列表。 注意:字符串为零索引。 示例: !^45sdfd[hello world[[djfut]%%357]sr[jf]s][srtdg][]应返回 [(8, 41), (20, 33), (21, 27), (36, 39), (42, 48), (49, 50)]或与此等效的东西。元组不是必需的。列表也可以使用。 测试用例: input:[[asdf][][td([)ty54g% ]hg[[f]u][f[[jhg][gfd]sdf]sdfs]ghd]fr43f] output:[(0, 62),(1, 6), (7, 8), (9, 56), (13, 22), (25, 30), (26, 28), (31, 52), (33, 47), (34, 38), (39, 43)] input:[[][][][]][[][][][[[[(]]]]])) output:[(0, 9), (1, 2), (3, 4), (5, …

30
让我们设计一个数字马赛克
挑战 给定一个正整数,重复其数字一个,对应于它在位置。换句话说,每个数字应该重复次(对于每个,以1为索引),从而创建新的数字:NñNd1,d2,d3,⋯,dnd1个,d2,d3,⋯,dñd_1, d_2, d_3, \cdots, d_nNñNdkdķd_kkķk1≤k≤n1个≤ķ≤ñ1\le k\le n d1d2d2d3d3d3⋯dndndn⋯dnn times¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯d1个d2d2d3d3d3⋯dñdñdñ⋯dñ⏟ñ 次¯\overline{d_1d_2d_2d_3d_3d_3\cdots\underbrace{d_nd_nd_n\cdots d_n}_{n\text { times}}} 然后,将其水平和垂直记录下来,并在空白处填充数字的副本,该副本与空格的列索引和行索引之间的较大索引相对应。最终输出应如下所示: ⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢d1d2d2d3d3d3⋯d2d2d2d3d3d3⋯d2d2d2d3d3d3⋯d3d3d3d3d3d3⋯d3d3d3d3d3d3⋯d3d3d3d3d3d3⋯⋮⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥[d1个d2d2d3d3d3⋯d2d2d2d3d3d3⋯d2d2d2d3d3d3⋯d3d3d3d3d3d3⋯d3d3d3d3d3d3⋯d3d3d3d3d3d3⋯⋮]\begin{bmatrix} \color{red}{d_1} \color{green}{d_2 d_2} \color{blue}{d_3 d_3 d_3} \cdots \\ \color{green}{d_2 d_2 d_2} \color{blue}{d_3 d_3 d_3} \cdots \\ \color{green}{d_2 d_2 d_2} \color{blue}{d_3 d_3 d_3} \cdots \\ \color{blue}{d_3 d_3 d_3 d_3 d_3 d_3} \cdots \\ \color{blue}{d_3 d_3 …

29
用我的周期性继任者之和代替我!
这次,我对您有一个简单的挑战。给定一个正整数数组A(或您的语言中的等价整数),将每个条目A i替换为下一个A的总和我的元素一个,骑自行车从一开始就回来,如果没有足够的项目。 像往常一样,您可以使用任何编程语言进行竞争,并且可以通过任何标准方法并以任何合理的格式接受输入并提供输出,同时请注意,默认情况下会禁止这些漏洞。您也可以选择使用A的大小作为输入。这是代码高尔夫球,因此每种语言的最短提交(以字节为单位)将获胜。 示例/测试用例 考虑到[1,3,4,5],你的代码应该输出[3,10,13,14],因为1被替换3,3被替换4+5+1=10(注意它是如何从一开始就缠回),4通过5+1+3+4=13和5通过1+3+4+5+1=14。 鉴于[3,2,1,9],你的程序产生[12,10,9,33],因为我们替换3用2+1+9=12,2用1+9=10,1用9而9用3+2+1+9+3+2+1+9+3=33(注意我们是如何包裹从一开始就回一次以上)。 一些其他测试用例供您选择: [4,3,2,1] -> [10,7,5,4] [3,2,1,9] -> [12,10,9,33] [1,3,4,5] -> [3,10,13,14] [4,4,3,2,2] -> [11,11,8,6,8] [3,5,3,2,1] -> [10,14,6,4,3] [3,2,4,3,2,1,1] -> [9,7,7,4,2,1,3] [7,8,6,5,4,3,2,1,5] -> [29,33,20,15,11,8,6,5,30] [28,2,4,2,3,2,3,4,5,3] -> [137,6,10,5,9,7,12,38,39,34] [1,2,3,4,5,4,3,2,1,2,3,4,3,2,1] -> [2,7,13,14,12,8,5,3,2,7,9,7,4,2,1]

30
IP地址与否?
您的网络扫描工具烦人地挑剔输入,如果您向它提供了包含不正确字符或格式不正确的IPv4地址,则会立即崩溃。 IPv4地址是一个32位数字地址,用四个数字隔开,每个数字用句点分隔。每个数字可以为零到255。 我们需要编写一个工具来对输入进行预验证以避免这些崩溃,并且我们的特定工具很挑剔:有效的格式如下所示:a.b.c.da,b,c和d: 可以是一个无前导零0的自然数。 应介于0-255(含)之间。 如果不包含特殊符号+,-,,,等。 应为小数(以开头10) 输入:字符串 输出:真值或假​​值(也可以接受任意值) 测试用例: Input | Output | Reason | | - 1.160.10.240 | true | - 192.001.32.47 | false | (leading zeros present) - 1.2.3. | false | (only three digits) - 1.2.3 | false | (only three digits) - 0.00.10.255 | false …

2
是魔方吗?
敬拜的传教士经过的时间过长,是要指出“ Rubik's Cubes”(在T恤,海报等上)的图片实际上无法解决。 首先要检查的是多维数据集由正确的部分组成。要解决一个立方体需要六种颜色,每个颜色有九个正方形。多维数据集还需要每个边缘和角单元(这些是组成多维数据集的较小的多维数据集)是唯一的。它们不仅必须是唯一的,而且如果两个中心部分彼此相对,则任何边或角部分都不能包含这两种颜色。 一旦拥有由所有正确零件组成的多维数据集,您仍然需要验证它是否可以解决。这里有一些规则,所以我请专家来解释它们,下面的破坏者解释了我们如何做到这一点。如果您有兴趣自行解决问题,则无需访问该站点即可了解或参与此挑战。 链接说明 您的任务是采用一种模式作为输入,并确定它是否实际上是可解决的魔方。为了解决问题,必须有一种方法可以在多维数据集上执行有效的移动,以使多维数据集的每个面上只有一种颜色(不同的面上有不同的颜色)。大多数Rubik立方体具有标准颜色(白色与黄色相反,等等),您可能不会假定求解状态遵循该特定颜色。 有效的移动是立方体的单个面的顺时针或逆时针旋转。随着立方体表面的旋转,与该表面相邻的任何正方形也将旋转,并保持连接到它们先前接触的表面。 IO 您可以以任何合理的方式使用该多维数据集。如果您的语言具有一些内置的对您有利的“立方体面”类型,也可以作为输入,否则,您可以采用2D网格的网络,立方体的数组,每个面1 3 x 3列表。只是合理。如果您想知道某种特定格式是否可以接受,请在聊天中对我进行评论或ping我,然后我将添加挑战以说明其有效性。 您的输入格式最多只需要支持9种颜色。 对于输出,这是一个决策问题,因此您应该为“是,这是一个有效的魔方”输出一个常数,而为“否,这不是有效的魔方”则输出一个常数。 这是代码高尔夫球,因此答案将以字节计分,而字节数越少越好。 测试用例 这是测试用例。它们的格式为一个立方体的网络,每个正方形为一个字母。不同的字母代表不同的颜色。可以根据要求添加更多的测试用例。 可解决的 RRR RRR RRR GGGWWWBBBOOO GGGWWWBBBOOO GGGWWWBBBOOO YYY YYY YYY GRR GRR ORW WWRBWYBOOGGY GGRBWGYBBOOO OOGRWGYWWRBB WYO YYB YYB 无法解决 RRR RRR RRR GGGWWWBBBOOO GGGWWWBBBOOO GGGWYWBBBOOO YWY YYY YYY RRR RRR RRR …

30
令人困惑的字母楼梯
在没有输入的情况下,通过一种可接受的输出方法在任何一种情况下(必须保持大小写)输出此有趣的字母模式: 一种 AB ACBC 光盘 阿比西德 AFBFCFDFEF AGBGCGDGEGFG AHBHCHDHEHFHGH 艾比西迪菲菲 AJBJCJDJEJFJGJHJIJ AKBKCKDKEKFKGKHKIKJK ALBLCLDLELFLGLHLILJLKL AMBMCMDMEMFMGMHMIMJMKMLM ANBNCNDNENFNGNHNINJNKNLNMN AOBOCODOEOFOGOHOIOJOKOLOMONO APBPCPDPEPFPGPHPIPJPKPLPMPNPOP AQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQ ARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQR ASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRS ATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTST AUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTU AVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUV AWBWCWDWEWFWGWHWIWJWKWLWMWNWOWPWQWRWSWTWUWVW AXBXCXDXEXFXGXHXIXJXKXLXMXNXOXPXQXRXSXTXUXVXWX AYBYCYDYEYFYGYHYIYJYKYLYMYNYOYPYQYRYSYTYUYVYWYXY AZBZCZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZYZ 尾随空格和换行符是可以接受的,不允许出现标准漏洞,并且这恰好是代码高尔夫,因此以字节为单位的最短答案为胜!

20
形状识别程序
您的任务是构建一个识别输入形状的程序。要标识的形状可以是以下任意一种: 广场 要被识别为正方形,源必须具有所有等长的行,并且每行的字符数与行数相同(不包括换行符)。可选的尾随换行符是可接受的。 $_=' $_=" $_"' ;say 长方形 要被识别为矩形,源必须具有全部等长的行,但是行数与每行的字符数不匹配(不包括换行符)。可选的尾随换行符是可以接受的。这可以是水平或垂直的。 $_= "no t a squ are ";# $_="but it is still a consistent shape!";## 三角形 要标识为三角形,源代码必须以一个字符开头,并且每行之后必须有一个附加字符(包括最后一个字符),或者在第一行之后,每行之后的最后一行应少一个字符,直到最后一行只有一个。 $ _= "So this "."". shape; $_="or even, this way !! " 混乱 任何不遵循上述一致格式的内容,都必须识别为混乱。 规则 您可以返回任何四个一致的可打印值来标识每个形状。 您的源代码还必须遵守上述形状之一(不,不要乱成一团)。 您的源中的一条尾随换行符是可以接受的。 您可以假定输入不包含任何空行(包括尾随换行符),不为空并且不仅由换行符组成。 所有形状的高度和宽度必须大于等于2,否则定义为混乱。 禁止出现标准漏洞。 每种语言中以字节为单位的最短解决方案为准。

23
交通方向
规则 给定ISO3166-1-Alpha-2国家/地区代码,您的任务是确定该国家/地区的交通方向: 输入的内容将是有效的国家/地区代码(有效,因为它是所提供的两个列表中的一个) 如果有帮助,输入可以是两个字符的列表,而不是字符串 您可以选择小写输入 你会选择一个值,说了正确的(你的选择),并输出值,当且仅当在该国的业务是右撇子,并在其他情况下,别的 您只需要处理以下列表之一中包含的国家/地区代码: 这些都是左撇子流量的国家: ['AI', 'AG', 'AU', 'BS', 'BD', 'BB', 'BM', 'BT', 'BW', 'VG', 'BN', 'KY', 'CX', 'CC', 'CK', 'CY', 'DM', 'FK', 'FJ', 'GD', 'GG', 'GY', 'HK', 'IN', 'ID', 'IE', 'IM', 'JM', 'JP', 'JE', 'KE', 'KI', 'LS', 'MO', 'MW', 'MY', 'MV', 'MT', 'MU', 'MS', 'MZ', 'NA', …

6
Gimli,让它更短吗?
我是Gimli的作者之一。我们已经在C中拥有2个tweet(280个字符)的版本,但是我想看看它有多小。 Gimli(论文,网站)是一种高速,高安全级别的加密排列设计,将在2017年加密硬件和嵌入式系统大会(CHES)(9月25日至28日)上展出。 任务 像往常一样:用您选择的语言来实现Gimli的较小可用的实现。 它应该能够将384位(或48个字节,或12个无符号int ...)作为输入并返回(如果使用指针,则可以在适当位置进行修改)应用于这384位的Gimli结果。 允许从十进制,十六进制,八进制或二进制的输入转换。 潜在的极端情况 整数编码被假定为低端(例如,您可能已经拥有的)。 您可以重命名Gimli为,G但是它仍然必须是函数调用。 谁赢? 这是代码高尔夫球,因此最短的答案以字节为单位!标准规则当然适用。 下面提供了参考实现。 注意 引起了一些关注: “嗨,帮派,请用其他语言免费实施我的程序,这样我就不必了”(致谢@jstnthms) 我的回答如下: 我可以轻松地用Java,C#,JS,Ocaml来完成它……这很有趣。目前,我们(Gimli团队)已在AVR,Cortex-M0,Cortex-M3 / M4,Neon,SSE,SSE展开,AVX,AVX2,VHDL和Python3上实现(并优化)。:) 关于金利 状态 Gimli将一轮回合应用于384位状态。状态表示为尺寸为3×4×32的平行六面体,或等效地表示为32位字的3×4矩阵。 每个回合是三个操作的序列: 非线性层,特别是应用于每列的96位SP盒; 在第二轮中,形成一个线性混合层; 在第四轮中,不断增加。 非线性层。 SP盒包含三个子操作:第一个单词和第二个单词的旋转;第二个单词的旋转。3输入非线性T函数;以及第一个和第三个单词的交换。 线性层。 线性层包含两个交换操作,即小交换和大交换。从第1轮开始,每4轮进行一次小交换。从第3轮开始,每4轮进行一次大掉期。 舍入常数。 Gimli有24发子弹,编号为24,23,...,1。当舍入数r为24、20、16、12、8、4时,我们将舍入常数(0x9e377900 XOR r)与第一个状态字进行异或。 C语言参考源 #include <stdint.h> uint32_t rotate(uint32_t x, int bits) { if (bits == 0) return x; …

17
模拟我的笨老闹钟
我有一个带两个按钮的笨拙的旧闹钟:hour和minute。该hour按钮增加设置警报的小时数,并minute增加设置警报的分钟数。但是,一些聪明的设计师意识到同时按下两个按钮应该具有一定的意义,因此决定同时按下hour和minute将导致警报设置为12:00 am/ 0:00。您的任务是模拟此行为。 任务 给定开始时间和一系列按钮状态,请确定结束时间。 从开始时间开始,增加每次出现的小时的时间,增加每次出现(1,0)的分钟(0,1)的时间,并将每次出现的时间设置0:00为(1,1)。状态(0,0)应被忽略,因为它们与两个按钮都不对应。 当加上分钟和小时时,如果分钟/小时超过最大值,则将其设置为0,即,增加分钟值59应将分钟值设置为0,增加小时值23应将小时值设置为0。将分钟/小时值增加到它们的限制以上不会影响其他值,例如增加10:59产量的分钟10:00,而不是增加11:00。 例 给定输入时间13:58和步骤[(0,1),(0,1),(0,1),(0,0),(1,1),(1,0)], (0,1)。这相当于minute被按下。现在是时候了13:59。 (0,1)。这相当于minute被按下。现在是时候了13:00。 (0,1)。这相当于minute被按下。现在是时候了13:01。 (0,0)。这对应于两个按钮均未被按下。现在不受影响的时间13:01 (1,1)。这对应于两个按钮都被按下。现在是时候了0:00。 (1,0)这相当于hour被按下。现在是时候了1:00。 因为我们以结尾1:00,所以它是输出。 输入输出 输入将包含一个时间和一系列按钮状态。输出是单个时间。 输入时间和输出时间可能是 (hour, minute)或(minute, hour)以24小时为单位的2元组,例如(13, 30)(hour范围从0至23,minute范围从0至59) 同前,但在12-Hour时间和布尔am/ pm开关(hour范围为0到11或12并1以11与minute从0至59)。 此后的分钟数,0:00例如810(从0到1439,包括0) 编码相同信息的任何其他格式 按钮状态的序列表示布尔2元组的列表,例如: 元组列表: [(0,1),(1,0),(0,0),(1,1)] 用空格分隔的字符串: "01 10 00 11" 字符串: "01100011" 在第四纪: [1,2,0,3] 转换为整数: 99 编码相同信息的任何其他格式 测试用例 time,steps -> output 06:49,[(0, 1)] -> 06:50 …
25 code-golf  date 

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.