Questions tagged «code-challenge»

代码挑战赛是一种创造性的竞赛,可以用客观的获胜标准来解决编程难题,而其他得分标记(例如,代码高尔夫)则无法涵盖这些目标。

14
C中的Golfed + Fast排序
[ 最新更新:提供基准测试程序和初步结果,请参见下文] 所以我想用一个经典的应用程序来测试速度/复杂性的权衡:排序。 编写ANSI C函数,以递增顺序对浮点数数组进行排序。 您不能使用任何库,系统调用,多线程或内联ASM。 条目由两个部分组成:代码长度和性能。评分方式如下:条目将按长度(没有空格的#个字符的对数,因此可以保留一些格式)和性能(一个基准上的#秒的对数)进行排序,并且每个间隔[best,worst]线性归一化为[ 0,1]。一个程序的总分将是两个标准化分数的平均值。最低分获胜。每个用户一个条目。 必须(最终)进行排序(即输入数组必须在返回时包含排序的值),并且您必须使用以下签名,包括名称: void sort(float* v, int n) { } 要计算的字符:sort函数中的字符,包括的签名以及函数调用的其他函数(但不包括测试代码)。 程序必须处理任何数字值float和长度> = 0,最大2 ^ 20的数组。 我将sort其及其依赖项插入测试程序,然后在GCC上编译(没有高级选项)。我将一堆数组放入其中,验证结果和总运行时间的正确性。测试将在Ubuntu 13下的Intel Core i7 740QM(Clarksfield)上运行。 阵列长度将跨整个允许范围,短阵列的密度更高。值将是随机的,且具有粗尾分布(正负范围内)。重复的元素将包含在某些测试中。 该测试程序位于:https : //gist.github.com/anonymous/82386fa028f6534af263 它将提交导入为user.c。TEST_COUNT实际基准测试中的测试用例()数量为3000。请在问题评论中提供任何反馈。 截止日期:3周(2014年4月7日,格林尼治标准时间16:00)。我将在2周内发布基准测试。 最好在截止日期前发布,以免将代码泄露给竞争对手。 根据基准测试发布的初步结果: 以下是一些结果。最后一列以百分比形式显示分数,分数越高越好,将Johnny Cage放在第一位。比一部分算法慢几个数量级的算法是在部分测试中运行的,并且需要时间推断。qsort包含C自己的用于比较(强尼的速度更快!)。我将在结束时进行最终比较。

1
生成最少的彩票以拥有至少N个好数字
这是一个相当复杂但非常有趣的数学学科(称为“覆盖问题”), 我希望您能帮助您实施它。 想象一下一个彩票游戏,其中每张彩票必须从50个数字(从1到50)中选择5个随机数字。 很容易知道中奖的概率,或者拥有1、2、3或4个好数字的概率。 “生成”具有1、2、3、4个良好数字的所有票证也很容易。 我的问题(和代码挑战)与此有关,但略有不同: 我想买一些彩票(尽可能少的),例如我的至少一张彩票有3个好数字。 挑战 您的目标是以任何语言实现这样的通用解决方案(作为程序或只是函数): // Input: 3 prameters min_lottery_tickets(total_numbers_to_choose_from, how_many_numbers_to_choose, how_many_good_numbers_i_want) 对于上面的示例,只需调用: min_lottery_tickets(50, 5, 3) 该程序将生成最小的票证集合以实现此目标。 例: min_lottery_tickets(10, 5, 2) 将输出7张票,例如: 1 2 3 4 5 5 6 7 8 9 10 1 2 6 7 10 3 4 8 9 3 4 6 7 …

2
实施超级优化器进行添加
任务是编写可为位和找到小的逻辑公式的代码。 总体挑战是您的代码要找到最小的命题逻辑公式,以检查y二进制0/1变量的总和是否等于某个值x。让我们将变量称为x1,x2,x3,x4等。您的表达式应等于和。也就是说,当且仅当和等于x时,逻辑公式才应为真。 这是一个幼稚的方法。假设y = 15且x =5。选择所有3003种不同的方式来选择5个变量,并为每个变量创建一个新子句,其中包含这些变量的AND和其余变量的否定AND。您最终得到3003个子句,每个子句的长度恰好为15,总费用为45054。 例如,您的答案应该是可以粘贴到python中的那种逻辑表达式,以便我可以对其进行测试。如果两个人得到相同大小的表达式,则运行速度最快的代码将获胜。 您可以在解决方案中引入新变量。因此,在这种情况下,您的逻辑公式由y个二进制变量,x和一些新变量组成。当且仅当y变量的总和等于x时,整个公式才是可满足的。 首先,有些人可能想从y = 5变量加到x = 2开始。天真的方法将产生50的成本。 该代码应将两个值y和x作为输入,并输出公式及其大小作为输出。解决方案的成本只是其输出中变量的原始计数。所以(a or b) and (!a or c) 算作4只允许运营商and,or和not。 更新事实证明,至少在理论上,当x = 1时,有一个聪明的方法可以解决这个问题。

6
仅使用* 3和/ 2运算将1转换为任何正整数
通过从1开始并应用一系列操作可获得任何正整数,每个操作要么是“乘以3”,要么是“除以2,则舍弃任何余数”。 示例(用f表示* 3,用g表示/ 2): 4 = 1 *3 *3 /2 = 1 ffg 6 = 1 ffggf = 1 fffgg 21 = 1 fffgfgfgggf 编写一个具有以下行为的程序: 输入:通过stdin或硬编码的任何正整数。(如果是硬编码,则输入数字将从程序长度中排除。) 输出:一串f和g的字符串<input> = 1 <string>(例如示例中)。这样的反序字符串也是可以接受的。注意:输出仅包含f和g,或者为空。 当输入41时,获胜者是程序加输出字节最少的条目。

1
通过使用给定的数字和算术运算符列表生成数字
系统会为您提供数字列表L = [17, 5, 9, 17, 59, 14],一包运算符O = {+:7, -:3, *:5, /:1}和一个数字N = 569。 任务 输出一个方程式,该方程式L的左侧使用所有数字,而右侧使用仅数字N。如果不可能,则输出False。解决方案示例: 59*(17-5)-9*17+14 = 569 局限和澄清 您不能连接数字([13,37]不能用作1337) 只会出现自然数和零L。 顺序L无关紧要。 您必须使用中的所有数字L。 只有运营商+,-,*,/会出现O。 O可以拥有比您所需更多的运算符,但至少|L|-1运算符 您最多可以多次使用每个运算符,直到的值O。 其中的所有四个运算O都是标准的数学运算;特别/是具有精确分数的正态除法。 点数 点越少越好 代码的每个字符都给你一点 您必须提供易于阅读的非公开版本。 背景 一个类似的问题,有人问堆栈溢出。我认为这可能是一个有趣的代码高尔夫挑战。 计算复杂度 就像彼得·泰勒(Peter Taylor)在评论中说的那样,您可以使用以下方法求解子集和: 您有一个子集总和的实例(因此,有一组S和一个整数x) L:= S + [0,...,0](| S |乘以零),N:= x,O:= {+:| S | -1,*:| …

5
m3ph1st0s的编程难题3(C):“简易错误”
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Code Golf Stack Exchange 的主题。 4年前关闭。 这是我的C / C ++难题系列的第3个。万一您错过了前2个,则它们在这里:(1)m3ph1st0s的编程难题1(C ++) (2)m3ph1st0s的编程难题2(C ++):“辛苦!” 我必须说我的难题是100%原始的。如果没有,我将始终在案文中声明。我的第三个谜题分为以下两个部分: 拼图3.1 这一部分(3.1)并不是我的原始难题,它是从我前一段时间读过的一些互联网页面中收集的。我在这里以它为起点并为您热身。解决该问题,然后继续进行第二部分。 有人尝试打印“ +”号20次,并提出了以下程序: #include <stdio.h> int main() { int i; int n = 20; for( i = 0; i < n; i-- ) printf("+"); return 0; } 它没有达到预期结果的事实是显而易见的-该程序永无止境。修理它!简单?现在,通过更改“仅一个字符”来修复程序-当然不是空格字符!对于这一挑战,有3种解决方案。找到所有的三个。为了清楚起见:该程序必须输出20个“ +”号,并且必须快速结束。在就“快速”的含义批评我之前,我要说这最多意味着几秒钟(顺便说一下,这太多了,只是为了使它变得清晰起来)。 拼图3.2 编辑 前面曾指出,针对3.2.2难题的解决方案可能取决于编译器。为了消除对该主题的任何可能的讨论,当我会格外小心以免引起争议时,我将修改想法并在下一个难题中对其进行改进。但是,为了使这个难题继续下去,我将对3.2.2进行一些小的修改(该解决方案会更简单但更干净)。 当我第一次看到拼图时,我发现它很棒。我确实设法解决了这个问题,但没有立即解决,因为它需要仔细注意。如果您在这里,则意味着您也已解决它。如果您通过编写一个程序用所有可能的值替换所有可能的字符并测试每个解决方案来这样做,那么您将会迷失方向。努力工作的家伙。现在已更正了写20个“ …

1
模拟Minsky套准机(II)
这是“ 模拟Minsky注册机(I)”的扩展。我不会在此处重复所有描述,因此请先阅读该问题的描述。 (I)部分的语法尽可能简单,但程序时间较长。由于这是一个标准的高尔夫网站,我们宁愿有一个高尔夫语法,不是吗? 在较高的层次上,对原始语法的更改如下: 第一行的标签是可选的 空格是可选的,除非需要分隔两个相邻的标识符 可以内联状态。为确保无歧义的解析,如果减量运算的第一个状态是内联状态,则必须将其括在括号中。这意味着任何程序都可以打成一线。 例如,在原始测试用例中,我们有: b + = a,t = 0 init : t - init d0 d0 : a - d1 a0 d1 : b + d2 d2 : t + d0 a0 : t - a1 "Ok" a1 : a + a0 a=3 b=4 在高尔夫语法中,这可以简化为: …

2
通过模式分析解密
系统会为您提供一个加密的字符串,并使用非常简单的替换密码对其进行加密。 问题 您不知道密码是什么,但是您知道密码文本是英语,并且英语中最常见的字母是etaoinshrdlucmfwypvbgkqjxz。唯一允许的字符是大写字母和空格。您可以进行基本分析-从单个字母开始,但是可以迁移到更复杂的多字母分析-例如,U几乎总是跟随Q,并且只有某些字母可以连续出现两次。 例子 clear : SUBMARINE TO ATTACK THE DOVER WAREHOUSE AND PORT ON TUESDAY SUNRISE cipher: ZOQ DUPAEYSRYDSSDXVYSHEYNRBEUYLDUEHROZEYDANYKRUSYRAYSOEZNDMYZOAUPZE clear : THE QUICK BROWN FOX BEING QUITE FAST JUMPED OVER THE LAZY DOG QUITE NICELY cipher: TNAEPDHIGEMZQJLEVQBEMAHL EPDHTAEVXWTEODYUASEQKAZETNAERXFCESQ EPDHTAELHIARC clear : BUFFALO BUFFALO BUFFALO BUFFALO BUFFALO BUFFALO BUFFALO cipher: …

5
快速Topswops计算
从AZSPCS: 假设您有一个包含n张牌的卡组。每张卡包含一个从1到n的数字,并且每个数字恰好出现在一张卡上。您查看顶部卡上的数字-假设它是k-然后颠倒顶部k卡的顺序。您可以继续执行此过程-读取最高卡号,然后反转相应的卡数-直到最高卡为1。 编写最快的程序以计算给定卡座的冲销数量。请注意,如果您参加比赛,则不允许发布代码(因此,我不会发布代码)。

2
用神经网络找到多项式的最大根
挑战 找到最小的前馈神经网络,以便在给定具有整数项的任何3维输入向量,网络输出最大前馈神经网络(即,“最正”)的根多项式,其误差严格小于。(a,b,c)(a,b,c)(a,b,c)[−10,10][−10,10][-10,10]x3+ax2+bx+cx3+ax2+bx+cx^3+ax^2+bx+c0.10.10.1 可接纳性 在我之前的神经网络高尔夫挑战赛中,可接纳性的概念似乎有些局限,因此对于这一挑战,我们使用了更为宽松的前馈神经网络定义: 甲神经元是一个函数,其由向量所指定的权重,一个偏压和激活函数的方式如下:ν:Rn→Rν:Rn→R\nu\colon\mathbf{R}^n\to\mathbf{R}w∈Rnw∈Rnw\in\mathbf{R}^{n} b∈Rb∈Rb\in\mathbf{R} f:R→Rf:R→Rf\colon\mathbf{R}\to\mathbf{R} ν(x):=f(w⊤x+b),x∈Rn.ν(x):=f(w⊤x+b),x∈Rn. \nu(x) := f(w^\top x+b), \qquad x\in\mathbf{R}^n. 具有输入节点 的前馈神经网络是,可以根据序列个神经元,其中每个从并输出标量。鉴于一些指定的一组的输出节点,则所述神经网络的输出是向量。{1,…,n}{1,…,n}\{1,\ldots,n\}(x1,…,xn)∈Rn(x1,…,xn)∈Rn(x_1,\ldots,x_n)\in\mathbf{R}^n(νk)Nk=n+1(νk)k=n+1N(\nu_k)_{k=n+1}^Nνk:Rk−1→Rνk:Rk−1→R\nu_k\colon\mathbf{R}^{k-1}\to\mathbf{R}(x1,…,xk−1)(x1,…,xk−1)(x_1,\ldots,x_{k-1})xkxkx_kS⊆{1,…,N}S⊆{1,…,N}S\subseteq\{1,\ldots,N\}(xk)k∈S(xk)k∈S(x_k)_{k\in S} 由于可以针对任何给定任务调整激活功能,因此我们需要限制激活功能的类别,以使这一挑战变得有趣。允许以下激活功能: 身份。 f(t)=tf(t)=tf(t)=t ReLU。 f(t)=max(t,0)f(t)=max⁡(t,0)f(t)=\operatorname{max}(t,0) SoftPlus。 f(t)=ln(et+1)f(t)=ln⁡(et+1)f(t)=\ln(e^t+1) 乙状结肠。 f(t)=etet+1f(t)=etet+1f(t)=\frac{e^t}{e^t+1} 正弦曲线。 f(t)=sintf(t)=sin⁡tf(t)=\sin t 总体而言,可允许的神经网络由输入节点,神经元序列和输出节点指定,而每个神经元由权重,偏差和激活函数(由上表列出)指定。例如,以下神经网络是可以接受的,尽管它不能满足此挑战的性能目标: 输入节点: {1,2}{1,2}\{1,2\} 神经元: forνk(x1,…,xk−1):=xk−2+xk−1νk(x1,…,xk−1):=xk−2+xk−1\nu_k(x_1,\ldots,x_{k-1}):=x_{k-2}+x_{k-1}k∈{3,…,10}k∈{3,…,10}k\in\{3,\ldots,10\} 输出节点: {5,9,10}{5,9,10}\{5,9,10\} 该网络由8个神经元组成,每个神经元具有零偏倚和身份激活。换句话说,该网络计算由和生成的广义斐波纳契数列,然后以该顺序输出该数列的第5,第9和第10个数。x1x1x_1x2x2x_2 计分 给定的实数与十进制扩展,让是最小的非负整数为其中,并且让是最小的非负整数为其中是整数。然后我们说是精密的。xxxp(x)p(x)p(x)ppp10−p⋅|x|&lt;110−p⋅|x|&lt;110^{-p}\cdot |x|<1q(x)q(x)q(x)qqq10q⋅x10q⋅x10^q \cdot xp(x)+q(x)p(x)+q(x)p(x)+q(x)xxx 例如,的精度为,而的精度为。x=1.001x=1.001x=1.001444x=0x=0x=0000 您的分数是神经网络中权重和偏差的精度之和。 (例如,上面的示例得分为16。) 验证 虽然可以用三次公式来表示根,但是最大的根也许最容易通过数值手段获得。继@ XNOR的建议下,我计算出的最大根整数的每一次选择,并且结果可以在这里找到。此文本文件的每一行都是形式。例如,第一行报告的最大根大约为。a,b,c∈[−10,10]a,b,c∈[−10,10]a,b,c\in[-10,10]a,b,c,rootx3−10x2−10x−10x3−10x2−10x−10x^3-10x^2-10x-1010.9924714044544910.9924714044544910.99247140445449 编辑:如果多项式具有多个根,我发布的原始文件将出错。当前版本应该没有此类错误。

1
自显示图像[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 11个月前关闭。 背景 有自解压.ZIP文件。通常,它们具有扩展名.EXE(并通过执行文件将其提取),但是将其重命名为时.ZIP,您可以使用一些ZIP提取软件来打开文件。 (这是可能的,因为.EXE文件需要特定的标头,而.ZIP文件则需要特定的预告片,因此可以构建同时具有.EXE标头和.ZIP预告片的文件。) 你的任务: 创建一个程序来创建“自显示”图像文件: 程序应以一些64x64图像(至少应支持4种颜色)作为输入,并以一些“组合”文件作为输出 程序的输出文件应由普通图像查看器识别为图像文件 当使用图像查看器打开输出文件时,应显示输入图像 对于任何操作系统或计算机类型,输出文件也应被识别为可执行文件。 (如果生成了用于不常见的操作系统或计算机的文件,那么如果存在开源PC仿真器,那就很好了。但是,这不是必需的。) 执行输出文件时,还应显示输入图像 很可能需要重命名文件(例如,从.PNG到.COM) 不需要程序及其输出文件在同一操作系统上运行;例如,该程序可以是Windows程序,并且可以在Commodore C64上执行输出文件。 获奖标准 产生最小输出文件的程序获胜 如果输出文件的大小根据输入图像而有所不同(例如,由于程序压缩了图像),则由程序创建的最大可能的输出文件代表了最多4色的64x64图像计数 顺便说说 在StackOverflow上阅读此问题时,我想到了以下编程难题。

2
重建丢失的RGB通道
看一下这些自然场景的照片,并从其中取出RGB通道之一: 来源(红色):https : //en.wikipedia.org/wiki/File : Altja_j%C3%B5gi_Lahemaal.jpg 来源(绿色):https : //commons.wikimedia.org/wiki/File : 2007_mather-lake_hg.jpg 来源(蓝色):https : //commons.wikimedia.org/wiki/File : Fox_01.jpg 即使没有其中一个通道,您也可以确定某些事物应该是什么颜色,或者如果丢失通道的重建准确无误,至少可以有个好主意。 例如,这是第一张添加了红色通道的图片,它只是随机噪声: 该图像显然不是红色通道的准确重建。这是因为自然照片通常不使用整个RGB光谱,而仅使用“看起来自然的颜色”的子集。同样,红色阴影将遵循与其他阴影相关的特定梯度。 您的任务是构建一个程序,该程序将拍摄已删除一个通道的照片,并尝试通过重建它认为丢失的通道来尽可能接近原始图像。 通过计算该通道的值在原始图像中的实际值的±15(含)以内的像素百分比,您的程序将在缺失通道与原始图像的通道匹配度上得分范围从0到255,如在标准的8位彩色通道中)。 可以在此处找到对您的程序进行评分的测试用例(9.04 MB压缩文件,6张图像)。目前,它仅包含上面的三个示例图像及其原始图像,但是一旦完成,我将在后面再添加一些图像来制作完整的套件。 每张图像都按比例缩小并裁剪为1024 x 768,因此它们在您的乐谱中的权重相同。可以预测给定公差内最多像素的程序将获胜。

8
快速过滤大文件
面临的挑战是快速过滤大型文件。 输入:每行具有三个以空格分隔的正整数。 输出:所有输入线A B,T满足以下任一标准。 存在的另一个输入线C,D,U其中D = A和0 &lt;= T - U &lt; 100。 存在的另一个输入线C,D,U其中B = C和0 &lt;= U - T &lt; 100。 要制作测试文件,请使用以下python脚本,该脚本也将用于测试。它将生成1.3G文件。您当然可以减少测试的次数。 import random nolines = 50000000 # 50 million for i in xrange(nolines): print random.randint(0,nolines-1), random.randint(0,nolines-1), random.randint(0,nolines-1) 规则。当我在计算机上使用上述脚本在输入文件上测试时,最快的代码胜出。截止日期为首次输入正确时间后的一周。 我的机器时间将在我的机器上运行。这是在AMD FX-8350八核处理器上安装的标准8GB RAM ubuntu。这也意味着我需要能够运行您的代码。 一些相关的计时信息 在每次测试之前更新了计时以运行以下命令。 sync &amp;&amp; sudo bash …

22
删除元音时不要使用太多不同的字符
挑战在于从STDIN的字符串中删除元音(a,e,i,o,u)(是的,我知道,很简单)。您可以期望您的程序不会在中运行任何参数argv。 例: This program will remove VOWELS. So we can now speak without them. 更改为: Ths prgrm wll rmv VWLS. S w cn nw spk wtht thm. 有一个陷阱。根据不同字节的数量来决定获奖项目。例如a ab具有三个不同的字节(a,b和空间)。如果两个或多个条目将具有相同数量的不同字节,则对这些条目的字节数进行回退。

1
Tatamibari求解器
背景 Tatamibari是由Nikoli设计的逻辑难题。 Tatamibari拼图游戏在带有三种不同符号的矩形网格上播放:+,-。和|。求解器必须根据以下规则将网格划分为矩形或正方形区域: 每个分区中必须只包含一个符号。 一个+符号必须包含在一个正方形。 甲|符号必须被包含在具有比宽度更大的高度的矩形。 甲-符号必须被包含在具有比高度较大的宽度的矩形。 四个片段可能永远不会共享相同的角落。(这是日本榻榻米瓷砖通常的放置方式。) 以下是一个示例难题,并提供了解决方案: 任务 解决给定的Tatamibari难题。 输入输出 输入是一个2D网格,代表给定的Tatamibari拼图。每个单元包含四个字符之一:+,-,|,和您所选择的字符来表示一个非线索细胞。在测试用例中,使用星号*。 您可以选择任何合适的输出格式,这些输出格式可以明确表示Tatamibari拼图的任何有效解决方案。这包括但不限于:(如有疑问,请在评论中提问。) 4元组的列表,其中每个元组包括矩形的顶部索引,左侧索引,宽度和高度(或任何等效表示形式) 与输入形状相同的数字网格,其中每个数字代表一个矩形 坐标集列表,每个坐标集包括矩形中单元格的所有坐标 如果难题有多个解决方案,则可以输出任意数量(一个或多个)的有效解决方案。输入保证至少有一个解决方案。 测试用例 Puzzle: |-* *+| *-* Solution: 122 134 554 ===== Puzzle: +*** **|* *+** ***- Solution: 1122 1122 3322 3344 ====== Puzzle: |*+*+ ***** ****- ***+| +**** Solution: 12233 12233 44444 55667 …

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.