编程拼图和代码高尔夫

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

28
将二进制分解为交替的子序列
这个灵感来自非重复二进制-问题13的HP CodeWars'最近的比赛。 让我们取一个随机的十进制数 727429805944311 并查看其二进制表示形式: 10100101011001011111110011001011101010110111110111 现在,将该二进制表示形式拆分为数字0和1交替的子序列。 1010 010101 10 0101 1 1 1 1 1 10 01 10 0101 1 1010101 101 1 1 1 101 1 1 并将每个子序列转换回十进制。 10 21 2 5 1 1 1 1 1 2 1 2 5 1 85 5 1 1 1 5 …

30
子序列替换
大多数语言都带有内置功能,可以在字符串中搜索所有出现的给定子字符串,然后用另一个替换。我不知道有什么语言可以将此概念推广为(不一定是连续的)子序列。因此,这就是您面临的挑战。 输入将包含三个字符串A,B和C,其中B和C保证长度相同。如果B出现为子序列,A则应替换为C。这是一个简单的示例: A: abcdefghijklmnopqrstuvwxyz B: ghost C: 12345 可以这样处理: abcdefghijklmnopqrstuvwxyz || | || abcdef12ijklmn3pqr45uvwxyz 如果有几种查找子B序列的方法,则应贪婪地替换最左边的子序列: A: abcdeedcba B: ada C: BOB Result: BbcOeedcbB and NOT: BbcdeeOcbB 如果B可以在多个不相交的地方找到,则同样适用: A: abcdeedcbaabcde B: ed C: 12 Result: abcd1e2cbaabcde and NOT: abcd112cbaabc2e (or similar) 当B没有出现时A,您应该输出A不变。 规则 如上所述,采取三个串A,B和C作为输入和替换的最左边的发生B在作为子A带C,如果有的话。 您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行参数或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。 您可以按照在答案中指定的任何一致顺序选择三个字符串。您可以假设B且C具有相同的长度。所有字符串将仅包含字母数字字符。 适用标准代码高尔夫球规则。 测试用例 每个测试用例是四行:A,B,C随后的结果。 abcdefghijklmnopqrstuvwxyz ghost …

24
说你所见
“请说一说”或“说您看到的内容”序列是一系列数字,每个数字都描述了最后一个数字。 1 11 (one one) 21 (two ones) 1211 (one two, one one) 111221 (one one, one two, two ones) 312211 (three ones, two twos, one one) 等等... https://oeis.org/A005150 无论如何,这是一个常规的代码挑战(以最少的字节数获胜),使程序需要两个参数,即初始数和迭代次数。例如,如果您插入“ 1”和“ 2”,则结果将是“ 21”。如果您插入“ 2”和“ 4”,则结果将是“ 132112”。玩得开心!

2
将图像压缩为4 KiB预览
在这个挑战中,您将创建一个图像预览压缩算法。目的是将任意图像文件减少为4 KiB预览图像,该图像可用于快速识别带宽非常小的图像。 您必须编写两个程序(或一个组合程序):压缩程序和解压缩程序。两者都必须将文件或标准输入作为输入,并输出到文件或标准输出。压缩器必须接受选择的主流无损图像格式(例如PNG,BMP,PPM)的一个图像,并输出最多4096字节的文件。解压缩器必须接受压缩器生成的任何文件,并输出与输入尽可能接近的图像。请注意,编码器/解码器没有源代码大小限制,因此您可以发挥算法的创造力。 限制条件: 别作弊'。您的程序可能不会使用隐藏的输入,在Internet上存储数据等。也禁止您包含仅与评分图像集有关的功能/数据。 对于库/工具/内置程序,允许您使用常规图像处理操作(缩放,模糊,色彩空间变换等),但不能使用图像解码/编码/压缩操作(压缩器输入和解压缩器输出除外)。也不允许进行一般的压缩/解压缩。打算针对此挑战实施自己的压缩。 解压缩器输出的图像的尺寸必须与提供给压缩器的原始文件的尺寸完全匹配。您可以假定任一方向的图像尺寸均不超过2 16。 您的压缩器必须在5分钟以内的普通家用PC上运行,而解压缩器必须在10秒以内运行以下集合中的任何映像。 计分 为了帮助快速验证和视觉比较,请在压缩后使用您的答案附上测试语料库的无损相册。 您的压缩器将使用以下图像集进行测试: 您可以在此处以zip文件下载所有图像。 您的分数将是所有图像上压缩器的平均结构相似性指数。我们将使用开源dssim来应对这一挑战。它可以很容易地从源代码构建,或者,如果您在Ubuntu上,它也具有PPA。如果您自己给答案打分,则是首选方法,但是如果您不知道如何构建C应用程序并且不运行Debian / Ubuntu,则可以让其他人为您打分。dssim期望输入/输出为PNG,因此,如果以其他格式输出,请先将输出转换为PNG。 为了使评分更加轻松,这是一个快速帮助Python脚本,用法python score.py corpus_dir compressed_dir: import glob, sys, os, subprocess scores = [] for img in sorted(os.listdir(sys.argv[1])): ref, preview = (os.path.join(sys.argv[i], img) for i in (1, 2)) sys.stdout.write("Comparing {} to {}... ".format(ref, preview)) out = …

24
RATS序列
您的任务是生成RATS序列的第n个项,其中n是输入。RATS序列也称为反向先添加后排序序列。也可以在以下位置找到此序列:http : //oeis.org/A004000。 测试用例: 0 > 1 1 > 2 2 > 4 3 > 8 4 > 16 5 > 77 6 > 145 7 > 668 例如,5的输出为77,因为16 + 61 =77。此后,对77进行排序。 提交时间最短者获胜。这是我的第一个挑战,所以我希望这不是重复的东西。

27
三个输入整数的差
实现一个函数diff,将三个整数x,y和z作为输入。它应该返回是否从另一个中减去这些数字中的一个得出第三个数字。 Test cases: diff(5, 3, 2) yields True because 5 - 3 = 2 diff(2, 3, 5) yields True because 5 - 3 = 2 diff(2, 5, 3) yields True because 5 - 3 = 2 diff(-2, 3, 5) yields True because 3 - 5 is -2 diff(-5, -3, -2) …

3
救命!我的计算器坏了!(将整数表达式转换为计算器按键)
介绍 救命!我不小心将TI-84计算器掉到了窗外(不要问怎么做),它坏了。我明天要进行数学测试,唯一能找到的计算器就是这些按钮: 7 8 9 + 4 5 6 - 1 2 3 * 0 = / 我的数学测试是关于评估表达式的复习测试。我需要一个程序来接受诸如的表达式1+(5*4)/7,并将其转换为在备用计算器上求解所需的击键。(如果您想知道,这确实发生在我身上)。 挑战 鉴于含有非空输入串仅字符0-9,(,),+,-,*,和/,输出以空间分隔的字符串的键击(例如1 + 3 / 3 =)。输出末尾必须始终有一个等号。不允许出现标准漏洞。 例子: 输入:1+(5*4)/7,输出:5 * 4 / 7 + 1 = 输入:6*(2/3),输出:2 / 3 * 6 = 输入:(7-3)/2,输出:7 - 3 / 2 = 为了使这个挑战更容易: 您可能假定输入具有一系列与其关联的击键,不需要清除计算器(这1-(7*3)是无效的,因为它需要您查找7 * 3然后清除计算器才能进行1 …

30
数数乡亲!
介绍 听起来可能很奇怪,但从计数1到n包含在内,我们还没有一个挑战。 这不是同一回事。那是一个(封闭的)没有充分解释的挑战。 这不是同一回事。那就是无限期地递增计数。 挑战 编写一个程序或函数来打印从1到的每个整数n。 规则 你可以得到n任何方式。 您可以假设n它将始终是一个正整数。 您可以n输入任何基数,但应始终以十进制输出。 输出必须用以外的任何字符(或模式)分隔0123456789。允许使用非十进制的前导或尾随字符(例如,当使用数组时,例如[1, 2, 3, 4, 5, 6])。 标准漏洞被拒绝。 我们希望找到每种语言中最短的方法,而不是最短的语言,因此我将不接受任何答案。 您必须在此编辑后更新您的答案,在上次编辑之前发布的答案必须符合有关标准漏洞的更改规则(我不想否认这些漏洞,但是我不想让社区怒吼,所以我否认了)。 您可以使用任何约会后的语言版本(或其他语言)。您不能使用仅用于此挑战的任何语言或语言版本。 奖金 20% 您的程序必须至少能够计数18446744073709551615(2^64-1)。例如,如果新数据类型是支持大整数的唯一方法,则必须构造它。如果您的语言没有任何方法可以支持最大2 ^ 64-1的大整数,则必须支持该特定语言的上限。 编辑:我已将限制从2^64更改2^64-1为允许更多答案。 编辑:我使2 ^ 64-1规则成为奖励,因为对此挑战没有太大兴趣。如果您的答案支持2 ^ 64-1,则现在可以对其进行编辑以包括奖金。另外,如果答案较短,则可以发布不支持该答案的答案。

1
命名非环状碳链
(我不是化学家!我可能在某些方面写错了,我正在写我在高中学到的东西) 碳原子具有特殊的属性:它们可以与其他4个原子键合(不是很特殊),即使在长链中也保持稳定,这是非常独特的。因为它们可以通过许多不同的方式链接和组合,所以我们需要某种命名约定来命名它们。 这是我们可以制造的最小分子: CH4 叫做甲烷。它仅包含一个碳原子和4个氢原子。下一个是: CH3 - CH3 这称为乙烷。它由2个碳原子和6个氢原子组成。 接下来的两个是: CH3 - CH2 - CH3 CH3 - CH2 - CH2 - CH3 它们是丙烷和丁烷。问题始于具有4个碳原子的链,因为它可以用2种不同的方式构建。上面显示了一个,另一个是: CH3 - CH - CH3 | CH3 显然这与另一个不同。原子数和键数不同。当然,仅仅折叠结合物并旋转分子不会使它变得与众不同!所以这: CH3 - CH2 - CH2 - CH3 和这个: CH3 - CH2 | CH3 - CH2 是相同的(如果您从事图论,您可以说两个分子之间存在同构;它们是相同的)。从现在开始,我将不再写氢原子,因为氢原子对于这一挑战不是必需的。 当您讨厌有机化学并且要命名的碳原子很多时,您决定编写一个程序来为您完成此任务。您的硬盘驱动器上没有太多空间,因此程序必须尽可能小。 挑战 编写一个程序,将多行文本作为输入(碳链)并输出碳链的名称。输入将仅包含空格,大写的“ …

9
联锁支架
编写一个程序或函数,该程序需要一个八个字节的字符串,其中包含()[]{}<>以任何方式排列的每个字符之一,从而使四个相应的括号类型匹配。例如,]<([){}>输入无效,因为方括号不匹配(尽管所有其他方括号都匹配)。 打印或返回从0到的整数,该整数6表示四种括号类型的六种可能的配对中有多少对是互锁的。如果一种类型的支架恰好出现在另一种类型的支架之间,则认为支架类型对是互锁的。所以([)]和[(])互锁但是()[],[](),([]),和[()]不是。 以字节为单位的最短代码获胜。 输入/输出示例 ()[]{}<> : 0 ([{<>}]) : 0 <>{[]}() : 0 {<>([])} : 0 <(>)[{}] : 1 <[({)}]> : 1 [{<}]>() : 2 {<>([}]) : 2 <{(>})[] : 3 [(]<){>} : 3 <([>{)}] : 4 (<{[>})] : 4 (<[{)>}] : 5 <{[(>})] : 5 [{<(]}>) : 6 (<{[)>}] …

17
莫兹金数
第n个Motzkin数是从(0,0)到(n,0)的路径数,其中每个步骤的形式为(1,-1),(1,0)或(1,1),以及路径永远不会低于y = 0。 这是上述链接中n = 1、2、3、4的这些路径的说明: 所需序列为OEIS A001006。OEIS具有该序列的其他一些特征。 您将得到一个正整数n作为输入。您应该输出第n个Motzkin编号。 以下是莫兹金数1到10: 1, 2, 4, 9, 21, 51, 127, 323, 835, 2188 允许所有标准输入和输出方法。有标准漏洞。 这是代码高尔夫。最少的字节数获胜。

1
魔术:聚会高尔夫
魔术:聚会是一种交易纸牌游戏,除其他事项外,玩家玩代表生物的卡,然后可以攻击另一位玩家,或通过阻挡来防御另一位玩家的攻击。 在此代码高尔夫挑战赛中,您的程序将代替魔术玩家来决定如何在战斗中封锁。 每个生物都有两个相关属性:力量和韧性。生物的力量是战斗中所能造成的伤害,其韧性是摧毁它所必需的伤害。功效始终至少为0,韧性始终至少为1。 在Magic战斗中,轮到该玩家的玩家宣布其一些生物要攻击对手。然后,另一个被称为防御方的玩家可以将其生物指定为阻挡者。一个生物每次战斗只能阻挡一个生物,但是多个生物可以全部阻挡同一个生物。 宣布阻止者后,攻击者将为每个被阻止的攻击生物决定该生物对阻止它的生物所造成的伤害(等于其力量)的分配方式。 然后,造成损害。每个生物造成的伤害等于其力量。如前所述,被阻挡的攻击生物造成伤害。畅通无阻的攻击生物对防御牌手造成伤害。阻挡生物对其阻挡的生物造成伤害。属于防御者的未被阻挡的生物不会造成伤害。(不需要阻止生物。) 最后,任何受到等于或大于其韧性的伤害的生物都会被摧毁,并从战场上移出。小于生物韧性的任何伤害均无效。 这是此过程的示例: 具有力量P和韧性T的生物表示为 P/T Attacking: 2/2, 3/3 Defending player's creatures: 1/4, 1/1, 0/1 Defending player declares blockers: 1/4 and 1/1 block 2/2, 0/1 does not block. Attacking player distributes damage: 2/2 deals 1 damage to 1/4 and 1 damage to 1/1 Damage is dealt: …

17
在SE帖子上显示前5条评论分数
Stack Exchange脚本通过在站点上的投票数来确定最初在站点主页上看到的关于问题或答案的五个评论。将显示投票数最高的五个评论。您的任务是重新创建此行为。 编写完整的程序或函数,通过STDIN,命令行参数或函数参数输入,然后打印或返回前五个注释分数。输入将是一个整数数组,代表某个帖子的评论中的投票数。例如,输入 0, 2, 5, 4, 0, 1, 0 表示第一个评论没有投票,第二个评论有2票,第三个评论有5票,第四个有4票,依此类推。评论分数的顺序在输出中应该保持不变。 如果输入内容包含五个或更少的评论分数,则输出内容应只包含给定的分数。如果两个或更多评论分数相同,则应显示第一个分数。您可以假设输入数组将至少包含一个评论分数。 输出中的数字应易于区分(因​​此情况1的02541无效)。否则对输出格式没有限制;数字可以用空格或换行符分隔,也可以采用列表格式,等等。 测试用例: [0, 2, 5, 4, 0, 1, 0] -> [0, 2, 5, 4, 1] [2, 1, 1, 5, 3, 6] -> [2, 1, 5, 3, 6] [0, 4, 5] -> [0, 4, 5] [1, 1, 5, 1, …

30
实施“ TAC”:从文件反向打印行
在小猫问题和在U&L看到有关sed魔术的问题之间,如何实施tac? 目的 实现一个程序,该程序将反转并打印文件中的行。 输入值 作为名称或通过标准输入提供的文件 输出量 线颠倒了,以标准输出。 计分 源代码字节。
30 code-golf  string 

7
我可以将所有的电线和适配器绑在一起吗?
假设有一天,您正在翻阅一大盒未使用的计算机线和适配器(USB到USB mini,VGA到DVI等)。到处都有缠结的电线,使情况变得一团糟,您想知道是否可以通过将所有电线绑成一长串然后将其卷起来来简化事情。 问题是,是否可以像这样将所有电线和适配器连接成一条长线?显然并非总是可能的,例如,如果您只有两条完全不同的插头的电线,则它们无法连接在一起。但是,如果您有第三条可以同时连接到它们的电线,则可以将所有电线捆扎在一起。 您不必担心全绳线末端的插头类型。他们不需要互相插入就可以形成一个循环。您只想知道是否可以制作全绳缆绳,如果可以,如何做。 挑战 编写一个包含多行字符串的程序或函数,其中每行都描述您拥有的一根电线。电线由一个或多个破折号(-)组成,两端均带有插头。插头始终是8个字符之一()[]{}<>。 因此,以下是一些有效的方法: >-> (--[ }-{ <-----] (---) 但是这些不是: --> (-- )-- [{ --- 连接电线时,只能将支架类型完全相同的插头连接在一起。 因此,以下是一些有效的电线连接: ...---((---... ...---))---... ...---]]---... ...---{{---... ...---<<---... 这些是无效的: ...---()---... ...---)(---... ...---{]---... ...---{[---... ...---><---... ...--->)---... 如果输入中的所有软线都可以重新排列并连接成一长串,则将其输出到一行上的stdout(带有可选的尾随换行符)。如果有多种解决方案,则可以选择其中一种进行输出。如果无法制作单条链,则不输出任何内容(或输出带有可选尾随换行符的空字符串)。 例如,如果输入是 [--> {---] >----{ 输出可能是 [-->>----{{---] 所有的电线都缠绕在一起。 但是如果输入是 [--> {---] 电源线无法连接,因此没有输出。 请注意,电线可以尽可能多地翻转以进行连接。例如[-->,<--]并且实际上是同一根电线,因为它们可以进行相同类型的连接。某些输出可能取决于翻转输入线。 例如 (-[ }--] 可能有输出 (-[[--{ …
30 code-golf  string 

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.