Questions tagged «fastest-code»

最快的代码挑战的赢家取决于提交的运行时性能。为了公平起见,所有提交的文件都应在同一台计算机上进行基准测试,这通常意味着所有提交的文件都必须由挑战主机进行测试。要通过渐近时间复杂度进行评分,请改用[fastest-algorithm]。

3
在尽可能短的时间内找到该数字难题的所有解决方案
历史 我的公司每周向公司内的每个人发送时事通讯。这些新闻通讯中包括一个谜语,并向公司中第一个向上一周的谜语发送电子邮件/提供解决方案的人大喊大叫。对于科技公司来说,这些谜语大多数都不是小事,而且平淡无奇,但是几个月前,有一个引起了我的注意。 原始谜语: 鉴于以下形状: 您具有从1到16的自然数。将它们全部适合此形状,以使所有连续的行和连续的列总计为29。 例如,以下是该难题的一种解决方案(这是我提交给时事通讯的“规范”解决方案): 但是,在解决此问题的过程中,我发现了一些相当有趣的信息: 解决方案远远不止一种。实际上,有9,368解决方案。 如果将规则集扩展为仅要求行和列彼此相等,而不必等于29,则会得到33,608个解决方案: 4,440个解决方案,总计27个。 7,400个解决方案,总计28个。 9,368个解决方案,总计29个。 6,096个解决方案,总计30个。 5,104个解决方案,总计31个。 1,200个解决方案,总计32个。 因此,我和我的同事们(尽管大多数情况下只是我的经理,因为他是我之外唯一拥有“通用”编程技能的人)开始了一个挑战,这个挑战持续了一个月的大部分时间-我们还有其他实际工作,我们必须承担的相关义务—尝试编写一个程序,以最快的方式找到每个解决方案。 原始统计 我编写的用于解决该问题的第一个程序只是反复检查随机解,并在找到解时停止运行。如果您已经对这个问题进行了数学分析,那么您可能已经知道这不应该起作用。但是以某种方式我很幸运,该程序只花了一分钟时间就找到了一个解决方案(我在上面发布了一个解决方案)。重复运行该程序通常要花费10到20分钟,因此显然这不是严格解决问题的方法。 我切换到了“递归解决方案”,该解决方案遍历了难题的每个可能排列,并通过消除未加总和而一次丢弃了很多解决方案。IE,如果我正在比较的第一行/列已经不相等,那么我可以立即停止检查该分支,因为知道拼图中没有其他排列会改变这一点。 使用这种算法,我获得了第一个“正确”的成功:该程序可以在大约5分钟内生成并吐出所有33,608个解决方案。 我的经理采用了另一种方法:根据我的工作,得知唯一可能的解决方案的总和为27、28、29、30、31或32,他编写了一个多线程解决方案,仅检查那些特定值的可能总和。他设法使程序仅在2分钟内运行。所以我又重复了一次。我对所有可能的3/4位和进行了哈希处理(在程序开始时;在总运行时中进行了计数),并使用行的“部分和”来基于先前完成的行查找剩余值,而不是测试所有剩余值,并将时间减少到72秒。然后,使用一些多线程逻辑,我将其缩短到40秒。我的经理将程序带回家,对程序的运行方式进行了一些优化,并将其降低到12秒。我对行和列的评估重新排序, 一个月后,我们中每个人获得程序最快的是我的经理0.15秒,我的0.33秒。最后,我声称我的程序更快,因为我经理的程序虽然找到了所有解决方案,但并未将它们打印到文本文件中。如果他在代码中添加了该逻辑,则通常需要花费0.4-0.5秒以上的时间。 我们既然允许我们内部的个人挑战生存,当然,问题依然存在:可这一计划进行得更快? 这就是我要对你们提出的挑战。 您的挑战 我们根据“ 29之和”规则放宽的参数改为“所有行/列的总和相等”,我也将为你们设置该规则。因此,面临的挑战是:编写一个程序,以在尽可能短的时间内找到(并打印)此难题的所有解决方案。我将为提交的解决方案设置一个上限:如果该程序在相对不错的计算机(小于8岁)上花费10秒钟以上,则可能太慢而无法计算。 另外,我还有一些难题的奖励: 您能否概括该解决方案,使其适用于任何16个数字集,而不仅是int[1,16]?时间分数将根据原始提示号集进行评估,但会通过此代码路径传递。(-10%) 您是否可以用能很好地处理和解决重复编号的方式编写代码?这并不像看起来那样简单!“视觉上相同”的解决方案在结果集中应该是唯一的。(-5%) 你能处理负数吗?(-5%) 您也可以尝试生成处理浮点数的解决方案,但是,如果完全失败,请不要感到震惊。如果您确实找到了一个可靠的解决方案,那可能值得大笔奖励! 出于所有目的和目的,“轮换”被视为唯一的解决方案。因此,只是一个不同解决方案的轮换解决方案将被视为自己的解决方案。 我在计算机上使用的IDE是Java和C ++。我可以接受其他语言的答案,但您可能还需要提供一个链接,以获取可以为您的代码轻松设置运行时环境的位置。

3
点和盒最快的播放器
面临的挑战是为经典的纸笔游戏“ 点和盒”编写求解器。您的代码应使用两个整数,m并将其n作为输入,指定板的大小。 从一个空的点网格开始,玩家轮流在两个未连接的相邻点之间添加一条水平或垂直线。一位完成1×1框第四边的玩家将获得一个积分,并转一圈。(通常通过将玩家的识别标记(例如首字母)放在框中来记录积分)。当无法放置更多行时,游戏结束。游戏的赢家是得分最高的玩家。 您可以假设n = mor n = m - 1和m至少为2。 挑战在于solve在一分钟内实现最大的点和盒游戏。一个游戏的规模很简单n*m。您的代码输出应为win,draw或者lose应该是假设两个玩家都发挥最佳状态的第一个玩家的结果。 您的代码必须可以使用易于安装和免费的工具在ubuntu上进行编译/运行。请报告您的分数,以及您在1分钟内可以在计算机上解决的最大问题。然后,我将在计算机上测试代码,并按顺序排列条目表。 在抢七的情况下,获胜者将是在一分钟内可以解决的最大尺寸板上最快的代码。 如果输出的代码不仅输赢,而且输出实际分数,那会更好。这样可以进行正确性检查。

5
快速触发计算
快速三角计算 您的任务是创建一个程序,该程序可以以度为单位计算角度的正弦,余弦和正切。 规则 没有内置的三角函数(如果您的语言有,则甚至不包括割线,割线和切线)。 您可以使用查找表,但它们的总大小不能超过3000个成员(对于所有三个操作的总和)。请使其从文件(例如trig.lookup)中读取表,以免它们混淆代码。 没有网络访问。 您必须按照以下说明正确舍入输出。不要使用地板或天花板。 您可以使用任何方法来计算值,例如连续分数,只要它对7个有效数字是正确的即可。 您的代码必须能够自行计时。从您的时间中排除文件I / O操作-因此只需对执行触发和任何舍入的函数计时。 我必须能够运行您的代码。请发布指向免费提供的编译器/解释器的链接,并提供编译/运行代码所需的说明(例如,传递给GCC的选项)。 有标准漏洞。 输入格式 从名为的文件中读取,trig.in除非您的语言不支持文件I / O。 角度在0到360之间(包括0和360)。 输入将包括与十位有效数字的角度(十进制数字),并用新行分隔。例如: 90.00000000 74.54390000 175.5000000 输出格式 对于提供的每个角度,必须在一行上将其正弦,余弦和切线输出为7个有效数字,并用空格隔开。使用“科学符号”,例如1.745329E-5用于tan 0.001或1.000000E+0用于sin 90。 用表示无穷或NaN n,例如的输出90.00000000应为1.000000 0.000000 n。 如果输入是由换行符分隔的三个角度,则您的输出应包括三条线,每条线包含正弦,余弦和切线。 您可能不会输出其他任何内容。 trig.out除非您的语言不支持文件I / O,否则输出到名为的文件。 计分 最快的代码。面临的挑战是编写一个程序,以尽快计算这三个值。最快的时间获胜。 每个人都会收到许多角度的相同测试输入。 时间将记录在我的机器上。 您的得分是在同一输入上进行三轮测试的平均值(您显然无法在两次测试之间保存任何内容)。 不包括编译时间。这个挑战更多地是关于所使用的方法,而不是语言。(如果有人能指出我如何排除诸如Java之类的语言的编译时间,我将不胜感激) 我的机器是Ubuntu 14.04安装。处理器的统计信息位于Pastebin上(通过运行获取cat /proc/cpuinfo)。 测试完毕后,我会在您的答案中编辑您的时间。

3
最长的非重复生命游戏序列
给定正整数N,请确定N x N网格上的起始模式,该模式在“人生博弈”规则下产生最长的非重复序列,并以固定模式(长度为1的循环)结束,并在圆环上播放。 目标不是最短的程序,而是最快的程序。 由于世界是有限的,您最终将最终陷入循环,从而重复一个已经访问过的状态。如果此循环的周期为1,则起始模式为有效候选者。 输出:起始模式和序列中唯一状态的总数(包括起始模式)。 现在,1x1圆环是特殊的,因为一个细胞可能被认为与自己相邻,但实际上,这没有问题,单个活细胞在两种情况下都只会死(拥挤或孤独)。因此,输入1产生一个长度为2的序列,该序列是一个存在的单元,然后永远死亡。 这个问题的动机是,它类似于忙碌的海狸函数,但由于我们的内存有限,因此它肯定不那么复杂。这也将是包含在OEIS中的一个很好的顺序。 对于N = 3,序列长度为3,左侧的任何图案都将到达完全黑色的3x3正方形,然后消失。(删除属于1周期一部分的所有模式)。

30
创建一个鹦鹉程序
给定输入,输出该输入,然后不断地换行。 输入将是仅由可打印的ASCII字符(0x20-0x7E)和换行符(0x0A)组成的字符串。 如果输入长度为0,则不断输出换行符。 这是代码高尔夫球,因此每种语言中最少的字节会获胜!
15 code-golf  string  sequence  combinatorics  fastest-code  number  code-challenge  restricted-source  rosetta-stone  code-golf  arithmetic  decision-problem  integer  factorial  code-golf  arithmetic  decision-problem  integer  bitwise  code-golf  kolmogorov-complexity  code-golf  tips  vim  code-golf  quine  code-generation  code-golf  string  restricted-source  code-golf  string  random  unicode  code-golf  audio  code-golf  ascii-art  code-golf  decision-problem  code-golf  puzzle-solver  code-golf  restricted-source  code-golf  kolmogorov-complexity  permutations  hexagonal-grid  code-golf  string  math  combinatorics  fastest-code  code-golf  restricted-source  code-golf  string  code-golf  arithmetic  code-golf  math  number  code-golf  string  decision-problem  balanced-string  code-golf  binary  code-golf  string  number  code-challenge  restricted-source  code-golf  ascii-art  printable-ascii  interactive  code-golf  string  ascii-art  code-challenge  restricted-source  source-layout  code-golf  arithmetic  tips  functional-programming  golfing-language  code-golf  binary  encryption 

8
整数三角形和整数中位数
考虑一个三角形ABC,其中每边的长度均为整数(整数三角形)。限定一个中位的ABC是从一个顶点到相对的边的中点的线段。在下图中,红线段代表中位数。请注意,任何给定的三角形都有三个中值。 令n为某个正整数。多少个边长小于或等于n的非退化整数三角形至少有一个整数中位数? 挑战 编写一个程序,以计算给定最大边长n时具有至少一个整数中位数的整数三角形的数量。边长的顺序无关紧要,即<6,6,5>表示与<5,6,6>相同的三角形,并且应仅计数一次。排除退化的三角形,例如<1,2,3>。 计分 您的程序可以在您的机器上在60秒内为您的程序生成最大三角形数的n。得分最高的程序将获胜。我的机器是Sony Vaio SVF14A16CLB,Intel Core i5、8GB RAM。 例子 令T(N)为输入N的程序。 T(1) = 0 T(6) = 1 T(20) = 27 T(22) = 34 请注意,T(1)= T(2)= T(3)= T(4)= T(5)= 0,因为没有积分边的组合会产生积分中位数。但是,一旦达到6,我们可以看到三角形<5,5,6>的中位数之一为4,因此T(6)= 1。 还要注意,T(22)是出现重复计数的第一个值:三角形<16,18,22>的中位数为13和17(以及2sqrt(85))。 计算中位数 三角形的中位数可以通过以下公式计算: Current top score: Sp3000 - 7000 points - C

5
BrainF中最快的排序***
在已经实施的BrainF ***快速排序,我意识到这可能不是那么快。在BF中,普通语言中的O(1)操作(如数组索引)要长得多。当您在图灵tarpit中进行编码时,构成有效排序的大多数规则都可以扔掉。 因此,实现“有史以来最快的BrainF ***排序例程”是一项挑战。我将使用下面的解释器为所有条目计时。解释器使用带未签名字符的16K磁带。超出限制时,磁带和单元都将缠绕。读取EOF会将0放入当前单元格。测量的时间包括解析源文件的时间和处理所有输入文件的时间。最快的代码胜出。 测试向量将是一组用于测试排序边缘情况的Ascii文件,包括 已经排序的列表:“已排序” !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 反向排序列表:“反向” ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"! 由多个唯一值的许多副本组成的文件:“ onlynine” ibbkninbkrauickabcufrfckbfikfbbakninfaafafbikuccbariauaibiraacbfkfnbbibknkbfankbbunfruarrnrrrbrniaanfbruiicbuiniakuuiubbknanncbuanbcbcfifuiffbcbckikkfcufkkbbakankffikkkbnfnbncbacbfnaauurfrncuckkrfnufkribnfbcfbkbcrkriukncfrcnuirccbbcuaaifiannarcrnfrbarbiuk 完全随机的ascii文件:“随机” 'fQ`0R0gssT)70O>tP[2{9' 0.HMyTjW7-!SyJQ3]gsccR'UDrnOEK~ca 'KnqrgA3i4dRR8g.'JbjR;D67sVOPllHe,&VG"HDY_'Wi"ra?n.5nWrQ6Mac;&}~T_AepeUk{:Fwl%0`FI8#h]J/Cty-;qluRwk|S U$^|mI|D0\^- csLp~`VM;cPgIT\m\(jOdRQu#a,aGI?TeyY^*"][E-/S"KdWEQ,P<)$:e[_.`V0:fpI zL"GMhao$C4?*x 1..255范围内的随机文件:“全范围” öè—@œ™S±ü¼ÓuǯŠf΀n‚ZÊ,ˆÖÄCítÚDý^öhfF†¬I÷xxÖ÷GààuÈ©ÈÑdàu.y×€ôã…ìcÑ–:*‰˜IP¥©9Ä¢¬]Š\3*\®ªZP!YFõ®ÊÖžáîÓ¹PŸ—wNì/S=Ìœ'g°Ì²¬½ÕQ¹ÀpbWÓ³ »y »ïløó„9k–ƒ~ÕfnšÂt|Srvì^%ÛÀâû¯WWDs‰sç2e£+PÆ@½ã”^$f˜¦Kí•òâ¨÷ žøÇÖ¼$NƒRMÉE‹G´QO¨©l¬k¦Ó 每个输入文件最多具有255个字节。 这是口译员。它是为控制台模式Windows编写的,但应该易于移植:只需替换read_time()并sysTime_to_ms()使用特定于平台的等效项即可。 用法: bftime program.bf infile1 [infile2 ...] #include <windows.h> #include <stdio.h> #define MS_PER_SEC 1000.0f #define MAXSIZE (0x4000) #define MAXMASK (MAXSIZE-1) typedef __int64 sysTime_t; typedef unsigned …

12
寻找近似相关
考虑一个S长度为string 的二进制字符串n。从索引中1,我们可以计算出海明距离之间S[1..i+1],并S[n-i..n]为所有i从订单0到n-1。等长的两个字符串之间的汉明距离是相应符号不同的位置数。例如, S = 01010 给 [0, 2, 0, 4, 0]. 这是因为0matchs 0,01具有汉明距离2到10,010matches 010,0101具有汉明距离4到1010 最后01010匹配自己。 但是,我们仅对汉明距离最大为1的输出感兴趣。因此,在此任务中,我们将报告Y汉明距离是否最多为1,N否则为否。因此,在上面的示例中,我们将获得 [Y, N, Y, N, Y] 定义f(n)为Ys和Ns在2^n不同S长度的所有可能位字符串上迭代时得到的不同数组的数目n。 任务 为了增加n开头1,应该输出代码f(n)。 示例答案 对于n = 1..24,正确的答案是: 1, 1, 2, 4, 6, 8, 14, 18, 27, 36, 52, 65, 93, 113, 150, 188, 241, 279, 377, 427, 540, 632, …


12
所有人都说……
目标给定不包含字符[或的文本输入],请执行以下操作: 对于Amen具有至少一个大写字母的每个实例(因此,所有Amen不包含的实例amen),都输出相同的名称Amen(保留大写)。 对于/all the people said[?: ]/i(这是一个正则表达式)的每个实例,还输出Amen(任何情况都可以)。 在每个输出之后,您可以选择任何常量分隔符,例如换行符,空格或什么都不做。 这是一个代码高尔夫球,因此以字节为单位的最短程序获胜。 IO范例 Input: I said AMEN! AMEN, PEOPLE! Output: AMENAMEN ; any separator is fine, I choose none. Input: amen amen amen amen Output: ; nothing Input: ; empty Output: ; nothing Input: *blah blah blah* And all the people said? Output: …

7
找到每个尺寸Toeplitz矩阵的最大行列式
对于固定的n,请考虑条目为0或1 的n×n Toeplitz矩阵。目的是在所有此类Toeplitz矩阵上找到最大行列式。 任务 对于n从1到更高的每个,输出在所有n×n Toeplitz矩阵上的最大行列式,其条目为0或1。每个输出n应该有一个最大行列式的输出,并且有一个达到它的示例矩阵。 得分了 您的分数是n您的代码在我的计算机上2分钟内获得的最高分。为了澄清一点,您的代码总共可以运行2分钟,而不是每个2分钟n。 抢领带 如果两个条目获得相同的n分数,那么获胜的条目将是n在我的机器上最短时间内获得最高得分的条目。如果两个最佳作品在此标准上也相等,那么获胜者将是第一个提交的答案。 语言和图书馆 您可以使用任何喜欢的免费语言和库。我必须能够运行您的代码,因此请尽可能提供有关如何在Linux中运行/编译代码的完整说明。 我的机器时间将在我的机器上运行。这是在AMD FX-8350八核处理器上的标准ubuntu安装。这也意味着我需要能够运行您的代码。 小答案 对于n = 1..10,输出应为1,1,2,3,5,9,32,56,125,315 此顺序不在OEIS中,因此获胜作品也可以在那里提出新的作品。 到目前为止的条目 n=10 n=11由Vioz在Python中 n=9由Tyilo在C中 n=12由Legendre in J n=10由Tensibai在R中 n=14由SteelRaven在C ++中 n=14由RetoKoradi在C ++中

2
最快的python代码,可在此游戏中找到一组获胜的单词
这是一组针对儿童的活动卡片中的文字游戏。规则下方是使用/ usr / share / dict / words查找最佳三元组的代码。我认为这是一个有趣的优化问题,想知道人们是否可以找到改进的地方。 规则 从下面的每组中选择一个字母。 使用所选字母(和其他字母)选择一个单词。 得分。 所选集合中的每个字母都会获得该集合中显示的数字(包括重复项)。 AEIOU 数0 其他所有字母均为-2 重复两次以上的步骤1-3(不要在步骤1中重复使用字母)。 最终分数是三个单词分数的总和。 套装 (设置1分1分,设置2分2分,依此类推) LTN RDS GBM 热电联产 FWV YKJ QXZ 码: from itertools import permutations import numpy as np points = {'LTN' : 1, 'RDS' : 2, 'GBM' : 3, 'CHP' : 4, …

4
最快近似公约数
总览 在此挑战中,您将获得两个数字,这两个数字的偏移量都比中等大小数字的倍数大。您必须输出一个中等大小的数字,该数字几乎是两个数字的除数,除了很小的偏移量。 涉及的数字大小将由难度参数来参数化l。您的目标是l在1分钟内最大可能地解决问题。 设定 在给定的问题中,将有一个秘密数字,p它将是一个随机l^2(l*l)位数字。将有两个乘数,q1, q2这将是随机l^3位数,并且将有两个偏移量r1, r2,这将是随机l位数。 程序的输入为x1, x2,定义为: x1 = p * q1 + r1 x2 = p * q2 + r2 这是一个用Python生成测试用例的程序: from random import randrange from sys import argv l = int(argv[1]) def randbits(bits): return randrange(2 ** (bits - 1), 2 ** bits) p = randbits(l ** …

2
计算有多少距离序列与所有其他距离序列
等长的两个字符串之间的汉明距离是相应符号不同的位置数。 让P是长度为二进制串n和T是长度为二进制字符串2n-1。我们可以按从左到右的顺序计算到每个长度子字符串n之间的汉明距离,并将它们放入数组(或列表)中。PnT 汉明距离序列示例 让P = 101和T = 01100。从这对中得到的汉明距离的顺序为2,2,1。 亲密关系的定义 现在让我们考虑两个这样的汉明距离序列。说x = (0, 2, 2, 3, 0)和y = (2, 1, 4, 4, 2)作为例子。我们说是x,如果y是close,y <= x <= 2*y或者是x <= y <= 2*x。这里,标量乘法和不等式是按元素进行的。也就是说,对于两个序列A和B,A <= B iff A[i] <= B[i]为所有指数i。 注意,汉明距离序列通过这种比较方式形成了偏序。换句话说,许多序列对既不大于也不等于也不小于或等于彼此。例如(1,2)和(2,1)。 因此,使用上面的示例,(0, 2, 2, 3, 0) <= 2*(2, 1, 4, 4, 2) = (4, …

1
读一读填字游戏!
与此问题类似,但这是填字游戏的变体! 而不是每个网格正方形只有一个字母,您可以拥有一个或两个。 输入: 2D数组,或任何以您的语言工作的数组。 您可以假设输入有效 任何数组大小都必须有效 输出: 所有单词的数组 上下 所有单词都必须连接在一起,即以不间断的单词链链接(如果不返回false) 单词必须至少是两个网格正方形,而不是字母 例: [["", "wo", "r", "k"], [ "", "r", "", ""], [ "he", "l", "lo", ""], [ "", "d", "ad", ""]] 返回值: ["work", "world", "hello", "load", "dad"] 例: [["he", "ll", "o"], [ "", "", ""], [ "wo", "r", "ld"]] 返回值: …

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.