Questions tagged «code-golf»

Code-golf是在最小的源代码字节中解决特定问题的竞赛。

2
数树
甲树是一个连接,无向图,没有周期。您的任务是计算给定数量的顶点中有多少棵不同的树。 如果两棵树不是同构的,则认为它们是不同的。如果两个图的各自顶点可以以如下方式配对,则两个图是同构的:当且仅当与另一个图中的那些顶点配对的顶点之间存在边时,一个图中的两个顶点之间才存在边。有关更完整的描述,请参见上面的链接。 要查看大小为1到6的所有不同树的外观,请在此处查看。 您要输出的序列是OEIS上的A000055。 限制:您的解决方案必须在几分钟或更短的时间内才能在输入上运行6。这并不是要消除指数时间算法,而是要消除双指数时间算法,例如对所有边缘集的强行强制。 输入:任何非负整数。 输入可以通过任何标准方式进行,包括STDIN,命令行参数,功能输入等。 输出:顶点数量与输入数量相同的不同树的数量。 输出可以通过任何标准方式进行,包括STDOUT,函数返回等。 示例: 0, 1, 2, 3, 4, 5, 6, 7应返回1, 1, 1, 1, 2, 3, 6, 11。 评分:按字节编码高尔夫。愿最短的代码获胜! 禁止出现标准漏洞。

5
平均两个清单
平均两个清单 挑战 给定两个正整数列表,请确定是否有可能将元素重新排列为两个新列表,以使新列表具有相同的算术平均值(平均值)。 输入值 输入可以通过STDIN或作为函数参数获取。输入可以视为列表,或者如果您的语言不支持列表(或类似的数组/字典),则可以将输入作为逗号或空格分隔的字符串。那是, "1 4 8 2 5,3 1 5 2 5" 是相同的: [ [1,4,8,2,5], [3,1,5,2,5] ] 所有输入列表的长度将相同。 输出量 如果可以创建两个具有相同平均值的新列表,则程序/函数应打印或返回平均值。如果不能,则程序应输出一张悲伤的脸:(。 请注意,具有相等均值的重新排列的列表(如果存在)不必具有相同的长度。可以进行任意数量的交换以创建新列表。 例子 1 4 8 2 5,3 1 5 2 5 -> 1 4 8 2 3,5 1 5 2 5 (swapped 3 and 5) -> 3.6 1 …

5
CipherSaber加密
实施一个CipherSaber加密程序,如下所述。指导原则: 以字节为单位的最小条目获胜。 但是,与规范高尔夫球规范不同的是,欢迎您发布有趣的条目,即使它们不是认真的高尔夫条目。 条目通常是一个程序,该程序从标准输入中获取纯文本,并将密文写入到标准输出中,并使用您喜欢的某种方式(由用户指定)来指定密钥。 但是,如果您希望将此作为一个过程来实现,那也很好。 IV必须来自加密安全的伪随机数生成器。如果您的语言不支持,请选择其他语言。;-) 请不要使用任何特定于加密货币的库,系统调用或指令(上述PRNG除外)。当然,通用的低级按位运算也可以。 CipherSaber是RC4 / Arcfour的变体,因此我将先描述后者,然后再对CipherSaber进行更改。 0. RC4 / Arcfour Arcfour在其他地方已完全指定,但出于完整性考虑,我将在此处进行描述。(如果互联网草稿与本说明存在任何差异,则前者为规范性。) 按键设定 设置两个数组S和S2,两个数组的长度均为256,其中k_1是密钥的第一个字节,k_n也是最后一个。 S = [0, ..., 255] S2 = [k_1, ..., k_n, k_1, ...] (S2一次又一次地填充密钥的字节,直到所有256个字节都被填充。) 然后,初始化j为0,并随机播放256次: j = 0 for i in (0 .. 255) j = (j + S[i] + S2[i]) mod 256 swap …

15
分配号码
在这个挑战,你会使用BE 分配了金额和数量的不同产品,如解释在这里。 例子 Input | Output -------------|------------- 23(12+42) | (23*12)+(23*42) 9(62-5) | (9*62)-(9*5) 4(17+8-14) | (4*17)+(4*8)-(4*14) 15(-5) | -(15*5) 2(3) | (2*3) 8(+18) | +(8*18) 8(-40+18) | -(8*40)+(8*18) 规格 输入将是形式为字符串的字符串n(_),带有单个正无符号整数,n后跟一个带括号的表达式_。该表达式_将由以+和-号分隔的多个正整数项之一的和与差组成。第一项之前可以带有+符号,-符号或没有符号。 在输出中,n应分配初始数字以乘以每个项。a应该将的每个术语左乘以n产生带括号的表达式(n*a),并且这些新术语应与+和-符号以与原始术语完全相同的方式进行组合。 输入无效 这些是您不必处理的输入示例。 3(5 plus 3) 6(5 13) (5+8)(6+6) (5+3)8 获奖 这是代码高尔夫球,因此以字节为单位的最短代码获胜。

16
主功率因数分解的除数和
任务是计算给定素数分解的数的除数和。 输入值 长度为n的两个数组(或等效的数组),一个包含素数因子,另一个包含相应的指数。 输出量 所有除数的总和(包括数字本身)。 例 数字240以2、3和5为素数,分别以4、1和1为指数。预期输出为744。 Input: [2,3,5] [4,1,1] Output: 744 计分 以字节为单位的最短代码胜出! 如果您的解决方案的运行时复杂度是O(指数的总和)而不是O(指数的乘积),则您的分数可能会乘以0.8。 这里也有类似的问题,但这不是挑战。我认为这个问题足够有趣。 获胜者将在本周末选出
11 code-golf  math  primes 

5
最短最长公共子序列码
解决SLCSC问题的任务是,找到可能的最短代码以解决最长公共子序列问题。 给LCS问题的一个有效的解决方案为两个或多个字符串小号1,内容S Ñ是任意字符串Ť使得字符最大长度的Ť出现在所有s ^ 我,以相同的顺序在Ť。 注意,T不必是S i的子字符串。 例 字符串axbycz和 xaybzc具有8个常见的长度为3的子序列: abc abz ayc ayz xbc xbz xyc xyz 这些中的任何一个都是解决LCS问题的有效解决方案。 细节 如上所述,编写程序或函数以解决LCS问题,并遵守以下规则: 输入将包含两个或更多个仅包含小写字母的字符串。 您可以将这些字符串读取为字符串数组,也可以将单个字符串与您选择的分隔符一起读取。 您的代码必须输出该问题的任何一种可能的解决方案,可以选择后跟换行符或用引号引起来。 您可以假设字符串少于1000个字符,并且最多有20个字符串。 在这些限制内,您的代码应能在理论上按预期工作(给定无限的时间和内存)。 您的代码必须在我的机器(Intel Core i7-3770,16 GiB RAM)上不到一个小时的时间内完成下一部分的组合测试用例。 仅对所有可能的子序列进行迭代的方法将不符合时间限制。 LongestCommonSequence不允许使用琐碎此任务的内置程序,例如。 适用标准代码高尔夫球规则。 测试用例 a ab 输出: a aaaaxbbbb bbbbxcccc ccccxaaaa 输出: x hxbecqibzpyqhosszypghkdddykjfjcajnwfmtfhqcpavqrtoipocijrmqpgzoufkjkyurczxuhkcpehbhpsuieqgjcepuhbpronmlrcgvipvibhuyqndbjbrrzpqbdegmqgjliclcgahxoouqxqpujsyfwbdthteidvigudsuoznykkzskspjufgkhaxorbrdvgodlb qnnprxqpnafnhekcxljyysobbpyhynvolgtrntqtjpxpchqwgtkpxxvmwwcohxplsailheuzhkbtayvmxnttycdkbdvryjkfhshulptkuarqwuidrnjsydftsyhuueebnrjvkfvhqmyrclehcwethsqzcyfvyohzskvgttggndmdvdgollryqoswviqurrqhiqrqtyrl 输出:hxbbpyhogntqppcqgkxchpsieuhbncvpuqndbjqmclchqyfttdvgoysuhrrl或其他任何相同长度的公共子序列 riikscwpvsbxrvkpymvbbpmwclizxlhihiubycxmxwviuajdzoonjpkgiuiulbjdpkztsqznhbjhymwzkutmkkkhirryabricvhb jnrzutfnbqhbaueicsvltalvqoorafnadevojjcsnlftoskhntashydksoheydbeuwlswdzivxnvcrxbgxmquvdnfairsppodznm kzimnldhqklxyezcuyjaiasaeslicegmnwfavllanoolkhvqkjdvxrsjapqqwnrplcwqginwinktxnkfcuuvoyntrqwwucarfvjg …

1
查找栅栏
背景 原子弹在栅栏工厂附近爆炸了!由于栅栏对于我们的文明生存至关重要,因此我们必须营救尽可能多的人。我们正在派出抗辐射的机器人搜索该区域,对它们的人工视觉进行编程是您的任务。 输入值 输入的字符是一个矩形网格|-#,代表两种栅栏部分和瓦砾,以换行符分隔的字符串形式给出。爆炸造成的伤势严重,有些甚至被高温融化了。我们将候选栅栏定义为开始于此并且结束于它们之间|并且具有一个或多个-s 的水平模式(例如|-|或|---|不是||),或者是开始于并且结束于其之间-具有一个或多个|s 的垂直模式。水平候选栅栏旋转90度)。一个实际的栅栏柱是候选栅栏柱不与另一位候选人栅栏柱共享任何部件。 输出量 您的输出是输入网格中实际栅栏的数量。 例 考虑输入网格 |#|-|#|## #||--|||# ###|#|--# ###-||--| -#-|#-|#- #---#-#-| #-#-|#--| 此网格中有5个候选栅栏,但其中只有2个是实际栅栏(以粗体显示)。因此正确的输出是2。 规则 您可以编写完整的程序或函数。最低字节数获胜,并且不允许出现标准漏洞。 其他测试用例 输入: ##-- ||## -#|- |#|# 输出:0(0个候选栅栏) 输入: -##|-##-- #|#-|#||- --|-#|#|| ##||||-## ||#|--|-| -#|-#--|# |####|#-# 输出:0(5个候选栅栏) 输入: #|--|---|-|# ####|##--||- -|-##||#|--- -#|#-|-#-||| #|-##--###|- ---#-||-#-## #|---|###|-# -|---#-#|#|# |#--|####-|- 输出:4(8条候选栅栏) 输入: -|-||---##|# ---|######-# …

17
三角形平方数
平方数是以n^2n为整数形式的数字。这些也称为完美平方,因为当您求平方根时,您会得到一个整数。 前10个平方数是:(OEIS) 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 三角数是可以形成等边三角形的数。第n个三角数等于1到n之间所有自然数的总和。 前10个三角形数字是:(OEIS) 0, 1, 3, 6, 10, 15, 21, 28, 36, 45 正方形三角形数字是正方形和三角形的数字。 前10个方形三角数为:(OEIS) 0, 1, 36, 1225, 41616, 1413721, 48024900, 1631432881, 55420693056, 1882672131025, 63955431761796 有无限多个平方数,三角形数和正方形三角形数。 编写一个给定输入(参数或标准输入)数的程序或命名函数n,计算出n第平方三角数并输出/返回,其中n是一个非零正数。(对于n = 1返回0) 为了使程序/功能有效提交,它至少应返回所有小于2 ^ 31-1的正方形三角形。 奖金 -4字节,能够输出小于2 ^ 63-1的所有平方三角数 -4个字节,理论上可以输出任何大小的平方三角数。 对于采用非多项式时间的解决方案,+ …
11 code-golf  number 

1
归一化我的决策图
编写处理文本块并返回新文本的函数或程序。最小的有效程序获胜。 文本块中的每一行将具有以下格式: 12:34,56 第一个数字是行ID,其他两个逗号分隔的数字是对其他行的引用。 在输入文本中,数字可以是大于或等于0的任何整数。所有数字将以ASCII编码的十进制表示,且不带前导零。不会有重复的行ID。尽管可能存在未引用的行ID,但不会引用不存在的行ID。 在输出文本中,编号最小的行将移至文本块的开头,并重新编号为0。对此行的所有引用也必须更新。该行上的第一个引用必须为0或1。如果第一个引用为1,则第二个引用只能为2。否则,它必须为0或1。 所有行必须按升序,升序排列(没有跳过的数字)。如果先前已有对第n-1行的引用或当前行ID为n,则只能对第n行进行引用。除第0行外,不得存在所有未由低行ID引用的行。必须在最终输出之前删除所有此类行。 您可以假设输入文本始终采用正确的格式。 测试输入1: 45:73,24 78:24,78 89:24,73 73:45,3 72:3,24 3:24,24 24:3,89 重新排序: 3:24,24 24:3,89 89:24,73 73:45,3 45:73,24 78:24,78 72:3,24 重新编号: 0:1,1 1:0,2 2:1,3 3:4,0 4:3,1 78:1,78 72:0,1 删除未引用的行以最终输出: 0:1,1 1:0,2 2:1,3 3:4,0 4:3,1 当然,您的程序不必遵循此顺序,只需产生正确的输出即可。输出必须是单个文本块或您所用语言中最接近的等价文本,即没有直接字符输出。您可以返回它(首选),也可以直接输出整个块。假设您的输出将传递给另一个函数或程序。 测试输入2 5:2,3 7:3,2 2:4,2 4:2,3 3:4,3 输出: 0:1,0 1:0,2 2:1,2 测试输入#3 …
11 code-golf 

12
CodeGolf-Barry凌乱的开发人员#2
这是CodeGolf的后续 内容-忽略噪音#1 唯一的问题是Barry使我们变得更糟。让我们来看看发生了什么 更新资料 我添加了代码以创建随机输入和期望的输出,因为我不太擅长解释我想要的内容,而且我猜有时候单词比代码更具误导性(不是总是这样吗?) 描述 Dumb Corp API中的另一种方法可以使我们提供程序为项目提供的当前价格,可以实现最大销售的最优价格以及该价格与字符串UP或之前价格相比的趋势DOWN。我们需要决定是否应该从商店中删除商品或等待。 输入值 80,90,UP 150,100,DOWN 65,65,UP 1618,1618,DOWN 840,1200,DOWN 54,12,UP 30,1,UP 对于具有预期输出的巨大输入示例演示,请将以下代码(js)放入浏览器控制台,它应输出有效的随机输入以进行测试。 var output = ""; var result = ""; for(i=10;i--;){ var currentPrice = Math.floor(Math.random() * 10000) + 1; var optimalPrice = Math.floor(Math.random() * 10000) + 1; var tendency = Math.round(Math.random())?"UP":"DOWN"; var tresult = …

2
寻找保利尼莫!
不好了!Nemo,我们的小小丑鱼在这个ASCII海洋中迷路了,他的父亲Marlin试图找到他。 您的任务是让Marlin安全地到达Nemo。但是要当心,我们在宽松的状态下有疯狂的布鲁斯,所以最好不惜一切代价避免他! 细节 您将获得一个仅包含小写字母的矩形ASCII海洋网格a-z。该海洋将具有nemo,marlin并bruce以连续多米诺的形式存在于其内部,始终从多米诺第一列的最顶部单元开始。因此,例如,在所有可能的Tetromino中,有效片段在下面的代码段中列出 显示代码段 nemo n e m o no em ne om nem o o nem n e mo o m ne ne m o n emo ne mo n em o mo ne 运行代码段隐藏结果展开摘要 但是这样的形式是无效的,并且不会出现在输入中: omen ne mo nem o o m en nem o n eo …

2
医生,我们螺旋式上升!
为了逃避达莱克部队的努力,医生决定将它们以螺旋运动在各个空间移动,从而使其旋转。 根据可用时空的性质,医生需要进入TARDIS,控制空间部分的高度和宽度以及开始螺旋的入口点。 可以将空间的一部分想象成一个h x w的网格,从左到右,从上到下,从1开始填充连续的整数。 起始位置以rc的形式提供给行和列...从这开始,TARDIS的软件需要吐出从r列c沿逆时针方向向外螺旋地向上获得的整数的有序列表。 作为Doctor的助手,您的任务是对TARDIS进行编程,使其采用以下格式的四个数字,height width row column并确定TARDIS需要移动哪个空间区域以匹配下面描述的螺旋运动... 输入1 5 5 3 3 (5 x 5格,从位置3,3开始) 输出1 13 8 7 12 17 18 19 14 9 4 3 2 1 6 11 16 21 22 23 24 25 20 15 10 5 解释输出 原始网格 产生螺旋 输入2 2 4 …
11 code-golf 

6
最大串联产品
给出了一个整数列表p1,...,pk(不一定是不同的),其中每个值的范围都在1到9之间(含1和9)。仅使用一次每个p1,...,pk,我们就可以形成数字的级联,以获得一个新的数字列表;然后,我们输出此新列表的产品。目的是通过选择最佳的数字级联来最大化此乘积。 例如,我们得到以下列表:2 3 2(用空格分隔)。我们可以形成以下串联: 2 3 2(这些串联的乘积是12) 23 2(商品是46) 32 2(商品是64) 22 3(商品是66) 因为我们可以形成的最大乘积是66,所以我们将其输出。 规则: 必须至少有一个乘法(即,您不能只连接所有数字并输出)。 除乘法或插入括号等外,不能使用任何其他运算符。 假定给定的整数列表由空格分隔,并且所有整数的值都在1到9之间。 最短的代码(以字节为单位)获胜! 测试用例: 输入:1 2 3; 输出:(63即21*3) 输入:2 5 9; 输出:468(52*9) 输入:1 2 3 4; 输出:1312(41*32)

2
数独的Y翼策略
我最近获得了一个新的Sudoku应用程序,该应用程序可以生成非常难的Sudoku,这无法使用标准策略来解决。所以我必须学习一些新知识。这些策略之一是Y翼策略。它被列为“艰难策略”,但实际上并不难。 例 对于此策略,只有4个单元很重要。因此,我忽略了图像中的所有其他单元格。 我们查看每个单元的所有候选。在以下示例中,我们有一个包含候选对象的单元格3 7(这意味着我们已经拒绝了这些候选对象1 2 4 5 6 8 9,例如,因为1在同一行中有一个2,在同一3x3框中有一个...),一个具有候选对象的单元格6 7,有候选人3 6的牢房和有候选人的牢房2 6。Y翼策略将建议,6可以将其从彻头彻尾的单元格的候选项中删除,只留下一个可以2作为填充项的候选项。因此,我们找到了一个正确的数字,并且在解决完整数独问题上又迈进了一步。 为什么可以将6其删除? 说明 让我们假设,对于6正确的单元格,正确的数字是。现在6在此列中有一个,因此我们可以6从右上方单元格的候选项中删除,仅留下一个7,我们可以填写。左下方单元格也是如此。我们可以删除6并填写3。现在,如果我们看一下左上方的单元格,就会发现矛盾。因为现在7在同一行和3同一列中已经有一个,所以我们可以删除的7和3,而根本没有任何候选人。这显然是不可能的。因此,6不能是正确的直立单元格数。 更精确地讲:如果我们有4个具有候选对象的单元格[A B] [A C] [C D] [B C](按此顺序或循环旋转),并且这些单元格(通过相同的行,相同的列或相同的3x3框)连接成一个圆(单元格1连接到了单元格2,连接到单元3,该单元3已连接到单元4,该单元4已连接到单元1),那么您可以C从该[C D]单元中卸下它。这是至关重要的,这三个细胞[A B],[A C]并且[B C]只包含各两名候选人。不同地,该单元[C D]可能包含更多或更少(D可以是零,一个或什至更多个候选)。 请注意,我明确表示可以使用任何一种方式进行连接。在下一个示例中,您可以看到策略再次被应用。但是这次这4个单元格没有形成矩形。左下和右下单元格是简单连接的,因为它们位于同一3x3框中。Y-Wing说,我们可以删除1左上单元格的as候选。这次,该单元格中还剩下2个候选者,因此我们实际上没有找到新的正确数字。但是尽管如此,1罐的拆除为不同的策略打开了大门。 如果您需要有关该策略的更多信息或更多示例,请访问sudokuwiki.org。 挑战规格 您将收到4个列表作为输入,代表这些单元格的候选项。四个单元以圆形连接(单元1连接到单元2,单元2连接到单元3,单元3连接到单元4,单元4连接到单元1)。您可以假定每个列表都按升序排序。 您的工作是通过应用Y翼策略删除一名候选人,并以相同的顺序返回结果候选人列表。如果您无法应用该策略,则只需返回相同的候选人列表即可。 如果有两种可能的解决方案(您可以删除单元格B的A或删除单元格D的C),则只返回一个解决方案。哪一个都没关系。 输入可以是任何本机列表或数组格式。您还可以使用列表列表或类似内容。您可以通过STDIN,命令行参数,提示或函数参数接收输入,并通过返回值或简单地通过打印到STDOUT返回输出。 这是代码高尔夫球。最短的代码(以字节为单位)获胜。 测试用例 [3 7] [6 7] [2 6] [3 6] => [3 7] …
11 code-golf  sudoku 

3
环绕子序列
介绍 在这个挑战中,您的任务是找到字符串的广义子序列。子序列不一定是连续的,它们也可以“环绕”字符串,越过字符串的末端并从头开始。不过,您将需要尽量减少换行次数。 更正式地说,让u并且v是任意两个字符串和k ≥ 0一个整数。我们说u是k,计量子的v,如果有不同的指标,从而,在大多数指标的满足。这意味着可以在内部找到,方法是从左到右,在途中选择其某些字符,然后最多包装(等效地,最多扫描一次)。请注意,即使重新包装后,也不能选择一个以上的字符,而且-wrapping子序列恰好是我们都熟悉的普通子序列。i1, i2, ..., ilen(u)u == v[i1] v[i2] ... v[ilen(u)]kijij > ij+1uvkk+1v0 任务 您的输入是两个非空的字母数字字符串u和v,而您的输出是最小的整数k,因此u是的k换行子序列v。如果不k存在,则输出为-1。 例 考虑输入u := xyzyxzzxyx和v := yxzzazzyxxxyz。如果我们开始寻找的字符u在v一个贪婪的方式,我们将环绕3次: yxzzazzyxxxyz >─x─────y────z┐ ┌─────────────┘ └y───────x────┐ ┌─────────────┘ └──zz─────x─y─┐ ┌─────────────┘ └──────────x──> 因此,正确的输出最多为3。请注意如何x选择最左边的字符一次,然后在第二次扫描中将其忽略,因为它无法重复使用。但是,存在一种较短的方法,只有两个环绕: yxzzazzyxxxyz >──────────xyz┐ ┌─────────────┘ └yxzz────x────┐ ┌─────────────┘ └───────y─x───> 事实证明,仅一次环绕(即两次扫描)是不够的,因此正确的输出是2。 规则和奖金 您可以编写函数或完整程序,也可以根据需要更改输入顺序。最低字节数获胜,并且不允许出现标准漏洞。 在不到10秒的时间内计算所有测试用例,可获得-10%的奖励。我将在机器上测试不清楚的情况;我在Python中的参考实现大约需要0.6秒。我有一台使用1.86 GHz双核CPU的7年笔记本电脑,您可能要考虑到这一点。 测试用例 "me" "moe" -> 0 "meet" "metro" …

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.