Questions tagged «optimization»

对于那些侧重于优化其他标签未涵盖的方面的挑战。

7
一维跳跃阵列迷宫
受我们启发,我们跳塔,并且与2D Maze Minus 1D相关 介绍 您的任务是找到遵循指定规则的最短路径,以摆脱阵列迷宫。 挑战 具有n个元素的一维数组a可以看作是由n个点组成的迷宫,其中索引k的点与k + a [ k ]和k - a [ k ]的点以单向方式连接。换句话说,可以向前或向后跳恰好一个 [ ķ从与索引点]步骤ķ。索引超出数组范围的点被视为迷宫之外。 为了说明这一点,请考虑以下数组, [0,8,5,9,4,1,1,1,2,1,2] 如果我们现在位于第5个元素,则由于元素为4,我们可以将第4步向前跳到第9个元素,或者将第4个步向后跳到第一个元素。如果执行后者,我们将以元素0结束,这表明不可能进一步移动。如果执行前者,由于第9个元素为2,因此我们可以选择跳到第11个元素,它又是2,然后我们可以再次跳至“第13个元素”,这超出了阵列,并认为是迷宫的出口。 因此,如果我们从中间的元素开始,一种摆脱迷宫的方法是向后跳1步,向前4步,向前2步,再次向前2步,这可以表示为array [-1,4,2,2]。另外,您也可以使用数组来表示它,该数组[4,8,10,12]记录所有中间点和最终点的从零开始的索引(也可以从1开始的索引),也可以只是符号[-1,1,1,1]。 从低折射率端逃脱迷宫也可以。 使用第一种表示法并从同一元素开始[1,1,1,2,2]也是一种解决方案,但由于不是5步而是4步,所以它不是最佳的。 该任务是找出最短路径以走出阵列迷宫并输出该路径。如果有多个最佳路径,则可以输出其中的任何一个或全部。如果没有解决方案,则应输出从有效路径中可以辨别的,由您选择的虚假值(完全不产生任何输出也是可以的)。 为了简单起见,数组中的元素数始终是奇数,我们总是从中间的元素开始。 测试用例 测试用例说明了各种形式的输出,但是您不限于这些。 Input Output [0,8,5,9,4,1,1,1,2,1,2] [-1,4,2,2] [2,3,7,1,2,0,2,8,9] [2,9] (or [2,-5] or [[2,9],[2,-5]]) [0,1,2,2,3,4,4,4,3,2,2,3,0] [1,-1,1,1] [0,1,2,2,4,4,6,6,6,6,6,4,2,1,2,2,0] [] 眼镜 您可以编写函数或完整程序。 该数组仅包含非负整数。 您可以通过任何标准格式进行输入和输出,但是请在您的答案中指定使用的是哪种格式。 这是代码高尔夫球,赢得的最低字节数。 …

14
我们跳塔
任务 给定一个非负整数数组a,请确定从数组0处“跳出”数组所需的向右跳转的最小次数,从位置0开始,或者如果不可能,则返回零/空值。 从索引的跳转i定义为最多将数组索引增加a[i]。 甲跳跃外面是一个跳转,其中从跳转结果的索引i是外的边界为阵列,所以对于基于1的索引i>length(a),以及用于基于0的索引,i>=length(a)。 例子1 考虑Array = [4,0,2,0,2,0]: Array[0] = 4 -> You can jump 4 field Array[1] = 0 -> You can jump 0 field Array[2] = 2 -> You can jump 2 field Array[3] = 0 -> You can jump 0 field Array[4] = 2 -> You can …

30
消失的元素
给定一个字符串S和一个索引列表X,S通过删除每个索引处的元素来进行修改,并将S结果作为的新值S。 例如,给定S = 'codegolf'和X = [1, 4, 4, 0, 2], 0 1 2 3 4 5 6 7 | c o d e g o l f | Remove 1 c d e g o l f | Remove 4 c d e g l f | Remove 4 c …
17 code-golf  string  array-manipulation  code-golf  string  ascii-art  code-golf  number  sequence  pi  code-golf  number  array-manipulation  code-golf  string  ascii-art  code-golf  math  number  game  code-golf  math  sequence  polynomials  recursion  code-golf  math  number  sequence  number-theory  code-golf  permutations  balanced-string  code-golf  string  ascii-art  integer  code-golf  decision-problem  hexagonal-grid  code-golf  ascii-art  kolmogorov-complexity  code-golf  number  code-golf  matrix  binary-matrix  code-golf  math  statistics  code-golf  string  polyglot  code-golf  random  lost  code-golf  date  path-finding  code-golf  string  code-golf  math  number  arithmetic  number-theory  code-golf  tetris  binary-matrix  code-golf  array-manipulation  sorting  code-golf  number  code-golf  array-manipulation  rubiks-cube  cubically  code-golf  grid  optimization  code-golf  math  function  code-golf  string  quine  code-golf  ascii-art  grid  code-golf  decision-problem  grid  simulation  code-golf  math  sequence  code-golf  path-finding  code-golf  ascii-art  grid  simulation  code-golf  number  whitespace  code-golf  sequence  code-golf  sequence  code-golf  sequence  integer  code-golf  math  game  code-golf  internet  stack-exchange-api  code-golf  sequence  code-golf  internet  stack-exchange-api  code-golf  math  factoring  code-challenge  sequence  polyglot  rosetta-stone  code-golf  string  browser  code-golf  date  code-golf  base-conversion  code-challenge  cops-and-robbers  hello-world  code-golf  cops-and-robbers  hello-world 

12
沙米尔的秘密分享
给定n(玩家数量),t(阈值)和s(秘密),输出n由Shamir的秘密共享算法生成的秘密。 算法 出于这一挑战的目的,将在GF(251)(size的有限域251,也称为整数mod 251)中进行计算。通常,将选择该字段,使其大小比的素数大得多n。为了简化挑战,字段大小将保持不变。251选择它是因为它是8位无符号整数可以表示的最大质数。 生成t-1(包括)范围内的随机整数[0, 250]。标明这些一个1通过一个T-1 。 构造一个t-1使用次多项式s为恒定值,并从步骤1中的功率的系数的随机整数x:F(X)= S + X *一个1 + X 2 * A 2 + ... + X 叔1 * a t-1。 (含)范围内(f(z) mod 251)每个输出。z[1, n] 参考实施 #!/usr/bin/env python from __future__ import print_function import random import sys # Shamir's Secret Sharing algorithm # Input is taken …
17 code-golf  number-theory  random  cryptography  polynomials  code-golf  number  code-golf  math  number  sequence  code-golf  quine  code-generation  code-golf  arithmetic  set-theory  code-golf  sequence  code-golf  code-golf  string  math  fastest-code  optimization  code-golf  code-golf  internet  stack-exchange-api  code-golf  array-manipulation  code-golf  string  internet  string  code-challenge  internet  test-battery  code-golf  math  pi  code-golf  arithmetic  primes  code-golf  array-manipulation  code-golf  string  code-golf  string  palindrome  code-golf  sequence  number-theory  fastest-algorithm  code-golf  math  number  base-conversion  code-golf  number-theory  sorting  subsequence  search  code-golf  permutations  code-challenge  popularity-contest  code-generation 

4
实际上是整数Metagolf
背景 实际上(Seriously的后继者)是我在2015年11月创建的基于堆栈的命令式高尔夫球语言。像许多其他高尔夫球语言一样,它具有一字节的命令,这些命令根据堆栈的内容执行不同的功能。它的特色之一是数学-它具有多种基于数学的命令。但是,为了执行数学运算,您必须将(一个或多个)数字放在堆栈上。因为有许多不同的选项,所以以尽可能少的字节来推送特定值是很棘手的。在此挑战中,您将确切地做到这一点:用尽可能少的字节数表示“数字”(特别是整数)。 挑战 给定一个整数N作为输入,输出有效的“实际”代码,导致N被压入堆栈。 输入将在32位有符号二进制补码整数(即包含在内的整数[-2147483648, 2147483647])范围内。 结果必须是整数(不是浮点数,字符串,列表或函数),并且必须在堆栈的顶部。 您可能不对堆栈的内容做任何假设(例如堆栈是否为空)。堆栈上的任何现有值都不得修改或重新排列。 实际上,在我撰写此挑战时,我使用了最新的提交。如果我进行了错误修复或性能增强(或任何其他不删除或更改允许的命令功能的较小更改),则将更新此版本。 您的解决方案必须至少与平凡的解决方案一样好(:在输入之前加上数字数值)。 您的分数将是平凡解的长度之和减去用于选择1000个32位带符号二进制补码整数(用于评分)的输出长度的总和,可以在下面找到。我保留在必要时随时更改得分整数的权利(例如针对测试用例进行优化或测试用例不够彻底)。 解决方案必须在30秒内为每个输入输出有效答案。定时将在标准的免费Cloud9工作区上完成。 指令 为简单起见,(当前)208个命令中仅可以使用141,并且那些与数字运算无关的141的许多重载已被删除。以下是允许的命令列表(格式为<hex code> (<symbol>): <descriptions of functions based on stack values and types>: 0B (♂): take the next command and map it over the top of the stack (for example, ♂A is equivalent to `A`M) 1F (▼): pop …

2
打台球
在此代码高尔夫球中,您将必须确定在落入口袋中之前恰好击中n个垫子的最短击球的方向。 台球桌是具有以下特征的6口袋台球桌: 尺寸可变(a x b) 无摩擦:球将永远滚动直到落入口袋 口袋和球的大小几乎为零。这意味着仅当球具有相同的位置时,球才会落在口袋中。 球在开始时放置在左下角的孔中(但不会掉进去) 创建一个完整的程序或函数,该函数将表的尺寸(a,b)和要击中n个垫子的数量作为输入,并返回以最短路径度数精确击中n个垫子然后落入口袋的角度。 一 > 0 b > 0 0 <= n <10000000 0 < alpha <90(以度为单位)精度:至少10 ^ -6 例子 : 在a = 2,b = 1,n = 1的情况下,存在三种可能的路径:下图为(1)(2)(3)。数字(1)最短,因此输出应为atan(2)= 63.43494882292201度 对于该解决方案一个 = 2,b = 1,Ñ = 4是ATAN(4/3)= 53.13010235415598度 测试样品: a = 2, b = 1, …

4
奇异硬币带来的优化挑战
您有n硬币,每个硬币的重量为-1或1。每个硬币都标有从0到的标记,n-1以便您可以区分硬币。您也有一个(魔术)称重设备。在第一轮时,您可以在称重设备上放置任意数量的硬币,该设备可以测量负重和正重,它会准确告诉您它们的重量。 但是,称重设备确实有些奇怪。如果您x_1, x_2, ..., x_j是第一次将硬币放置在设备上,则下次必须将硬币(x_1+1), (x_2+1) , ..., (x_j+1)放置在秤上,但您当然不能放置数量大于的硬币n-1。不仅如此,对于每个新称重,您还可以选择是否还要将硬币0放在秤上。 在此规则下,能始终准确告诉您哪些硬币的重量为1,哪些硬币的重量为-1的最小称量数是多少? 显然,您可以只0在第一轮中将硬币放在设备上,然后才需要精确n称重即可解决问题。 语言和图书馆 您可以使用自己喜欢的任何语言或库(不是针对此挑战而设计的)。但是,我希望能够在可能的情况下对您的代码进行测试,因此,如果您可以提供有关如何在Ubuntu中运行代码的明确说明,将不胜感激。 得分了 对于给定n的分数n,最坏情况下需要除以所需的称量数。因此,分数越高越好。这个难题没有任何输入,但您的目标是找到一个n可以获得最高分的游戏。 如果有平局,则第一个答案将获胜。在极不可能的情况下,有人找到了获得无限分的方法,该人立即获胜。 任务 您的任务只是编写得分最高的代码。您的代码必须既聪明地选择n,又要为此优化权重数n。 领先的作品 4/3 7/5在Python中由Sarge Borsch Java / 26/14的作者Peter Taylor

6
旅行推销员
给您一个列表或向量或其他任何东西,一堆3元组或其他任何东西,其中前两个是字符串,第三个是一个数字。字符串是城市,数字是它们之间的距离。元组中城市的顺序是任意的(即,先到先后都没关系),因为每种方式的距离相同。另外,每对连接的城市都有一个元组。并非所有城市都可以连接。而且,距离始终为正(不是0)。您不需要检查这些条件,可以假设输入格式正确。您的工作是按循环顺序返回城市,这样,如果您从任何一个城市开始,然后按顺序返回同一城市,则城市之间的总距离将最小(确切地说,总之情况。)您可以假设存在解决方案。例如,假设您被授予 [("New York", "Detroit", 2.2), ("New York", "Dillsburg", 3.7), ("Hong Kong", "Dillsburg", 4), ("Hong Kong", "Detroit", 4), ("Dillsburg", "Detroit", 9000.1), ("New York", "Hong Kong", 9000.01)] 您可以输出以下任何内容(但只需要输出一个): ["Detroit","Hong Kong","Dillsburg","New York"] ["Hong Kong","Dillsburg","New York","Detroit"] ["Dillsburg","New York","Detroit","Hong Kong"] ["New York","Detroit","Hong Kong","Dillsburg"] ["Dillsburg","Hong Kong","Detroit","New York"] ["New York","Dillsburg","Hong Kong","Detroit"] ["Detroit","New York","Dillsburg","Hong Kong"] ["Hong Kong","Detroit","New York","Dillsburg"] …

2
压缩Befunge程序
Befunge是一种二维深奥的编程语言。基本思想是将(一个字符)命令放置在二维网格上。控制流遍历网格,执行传递过来的命令,并在命中箭头(>^<v)时更改方向。命令是基于堆栈的;看到这个清单。另请参见http://esolangs.org/wiki/Befunge。 提供Befunge-98的规格。 问题 编写一个程序,将Befunge程序转换为更紧凑的表示形式。例如,以下程序打印0: > 0 v > @ . ^ < 在这种情况下,可以通过删除空格行来压缩它而无需更改程序的行为,从而得到 >0v >@. ^ < 更复杂的转换可以旋转或镜像命令序列,并消除不必要的控制流命令以压缩程序。例如,使用此程序: >12345v 6 v....7< . . . @ 您可能会将程序的结尾塞进洞里: >12345v >...@ 6 ^....7< 对于第一个示例,最紧凑的程序是 >0.@ 您可以使用任何转换,只要输出程序给出的结果相同即可。 输入程序 输入程序是有效的Befunge-98程序。 您可以假设输入程序是确定性的。也就是说,它不使用读取外部状态的命令:用户输入命令&和~,随机化器?以及自修改代码命令p和g。 您可以假设输入程序终止。 计分 这不是代码高尔夫,而是编写执行代码高尔夫的程序的问题。 输入是一组测试用例(满足上述输入限制的Befunge程序)。总分是测试案例的总分。 每个测试用例的得分 分数是输出程序中非空单元格的凸包的面积,其中每个单元格都视为一个正方形,其四个角为笛卡尔平面中的晶格点。例如, > v @ < 获得9.5分。 如果您的程序在特定输入上没有在合理的时间和内存中终止,则得分为输入程序的得分。(这是因为您可以简单地添加一个限时包装程序,如果您的程序没有及时终止,则该包装程序将不变地输出输入程序。) 如果用您的程序处理后,测试用例程序具有不同的结果(或无法终止),则分数为输入程序的分数加100分的罚款。

14
变相的排列
给定一个nnn维向量vvv与真正的条目,找到最接近的置换ppp的(1,2,...,n)(1,2,...,n)(1,2,...,n)相对于所述l1l1l_1 -distance。 细节 如果是更方便,你可以使用置换(0,1,...,n−1)(0,1,...,n−1)(0,1,...,n-1)代替。如果存在多个最接近的排列,则可以输出任何一个或全部替换。 两个向量u ,v之间的l1l1l_1距离定义为d (u ,v )= ∑ i | u i − v i | 。u,vu,vu,vd(u,v)=∑i|ui−vi|.d(u,v)=∑i|ui−vi|.d(u,v) = \sum_i \vert u_i-v_i\vert. 如果需要,可以假定输入仅由整数组成。 例子 [0.5 1] -> [1 2], [2 1] c*[1 1 ... 1] -> any permutation [1 4 2 6 2] -> [1 4 3 5 2], …

1
优化一维键盘上的滑动
这是具有自定义评分系统的代码挑战,评分最低者获胜。 介绍 许多智能手机允许通过在2D虚拟键盘上滑动手指来输入文本。该技术通常与预测算法结合,该预测算法输出从最可能到最不可能排序的猜词列表。 在这个挑战中: 我们将在仅限于26个字母的子集的一维键盘上滑动。 不会有预测算法:我们希望每个单词都通过其“滑动顺序”来唯一标识。 我们希望对键盘进行优化,以使给定单词列表的移动总数最小化。 一维扫动 以下是按字母顺序排序的一维键盘,其中包含所有字母: ABCDEFGHIJKLMNOPQRSTUVWXYZ 注意:如果您是通过手机浏览的,则可能显示在多行上。请认为它是单行。 要在这样的键盘上输入单词“ GOLF ”,我们将: 开始于 G 向右滑动至 O 向左滑动 F 因为L位于O和之间F,所以我们只是继续刷卡而不停在那。 因此,此键盘上的“ GOLF ” 滑动顺序为GOF。 更普遍: 始终包含首字母和尾字母。 当且仅当紧随其后需要换向时,才包括其他字母。 重复字母必须与单个字母一样对待。例如,在上面的键盘上: “ LOOP ”将被编码为LP(不停止O) “ GOOFY ”将被编码为GOFY(O之所以包含在内,是因为那里的方向发生了变化-并不是因为它被加倍了) 键盘优化 让我们考虑以下单词列表:[' PROGRAMMING ',' PUZZLES ',' AND ',' CODE ',' GOLF ']。 我们需要16个不同的字母来键入这些单词,因此我们只需要一个16个字母的键盘即可。以下是-再次-按字典顺序排序: ACDEFGILMNOPRSUZ 使用此键盘,单词将以这种方式编码: …

4
在高维格子状图中找到最大的独立集合
对于给定的正整数n,请考虑所有长度为二进制的字符串2n-1。对于给定的字符串S,令其L为一个长度数组,n其中包含1每个长度n为的子字符串中s 的数量S。例如,如果n=3和S = 01010再L=[1,2,1]。我们称L的计数数组S。 我们说两个字符串S1和S2相同长度的比赛,如果他们各自的计数阵列L1和L2具有这样的性质L1[i] <= 2*L2[i],并L2[i] <= 2*L1[i]为所有i。 任务 为了n从开始增加n=1,任务是找到最大的字符串集的大小,每个字符串的长度,2n-1以便没有两个字符串匹配。 您的代码应为的每个值输出一个数字n。 得分了 您的分数是最高n的,没有人为您的任何答案发布更高的正确答案。显然,如果您拥有所有最佳答案,那么您将获得n您发布的最高分数。但是,即使您的答案不是最佳选择,如果没有其他人能打败它,您仍然可以获得分数。 示例答案 因为n=1,2,3,4我得到2,4,10,16。 语言和图书馆 您可以使用任何喜欢的语言和库。在可行的情况下,能够运行您的代码将是一件好事,因此,请尽可能提供有关如何在Linux中运行/编译代码的完整说明。 领先的作品 5由MartinBüttner在Mathematica中撰写 6由Reto Koradi用C ++编写。值是2, 4, 10, 16, 31, 47, 75, 111, 164, 232, 328, 445, 606, 814, 1086。已知前5个是最佳的。 7由Peter Taylor在Java中撰写。值是 2, 4, 10, 16, 31, 47, 76, 111, 166, 235。 9由joriki用Java编写。值是2, …

4
构建最小线索数独解算器
我试图说明这个问题,但提出了更为客观的解决标准。 您的任务是构建一个程序或函数,该程序或函数采用S您选择的格式的已解决的Sudoku网格,并尝试生成具有S唯一解决方案的尽可能少线索的问题网格。(S只要解决方案证明是唯一的,什么方法是唯一的解决方案,包括蛮力都没有关系。) 通过在此文件中找到的一组100,000个解决方案网格中运行该程序,可以对您的程序进行评分(下载7.82 MB),并将解决方案产生的所有100,000个问题网格中的线索总数相加。 上面测试文件中的Sudoku解决方案从左到右,然后从上到下,以81个字符的字符串表示。将测试文件中的输入转换为可用解决方案所需的代码不会计入解决方案的字节数。 就像在我的Flood Paint挑战中一样,您的程序实际上必须为所有100,000个难题产生有效的输出,才能将其视为有效的解决方案。在所有100,000个测试案例中,输出总线索最少的程序是赢家,而较短的代码打破了平局。 当前记分牌: 2,361,024 -Nutki,C 2,580,210 -es1024,PHP 6,000,000 -CarpetPython,Python 2 720万-Joe Z.,Python

3
协和的困境
背景 该旅行商问题(TSP)要求在最短的电路访问城市的指定集合。出于这个问题的目的,城市将是平面中的点,城市之间的距离将是通常的欧几里得距离(四舍五入到最接近的整数)。赛道必须“往返”,这意味着它必须返回出发城市。 在协和TSP求解器可以解决旅行推销员问题的情况下,准确和速度远远超过人们所期望的。例如,协和飞机能够精确地求解85,900点实例,其中的一部分如下所示: 但是,即使对于协和飞机,某些TSP实例也会花费太长时间。例如,没有人能够解决基于Mona Lisa的100,000点实例。(如果您能解决的话,将提供1,000美元的奖金!) Concorde 可作为源代码或可执行文件下载。默认情况下,它使用内置的线性程序(LP)求解器QSopt,但它也可以使用更好的LP求解器,例如CPLEX。 挑战 您可以生成花费最少五分钟的 Concorde的最小TSP实例是什么? 您可以编写一个程序来输出实例,或使用您想要的任何其他方法。 计分 实例中的点越少越好。关系将被实例的文件大小破坏(请参见下文)。 标准化 不同的计算机运行得更快或更慢,因此我们将Concorde的NEOS服务器用作运行时的衡量标准。您可以采用以下简单的2维坐标形式提交点列表: #cities x_0 y_0 x_1 y_1 . . . x_n-1 y_n-1 NEOS上应使用的设置为“协和数据(xy-list文件,L2规范)”,“算法:协和(QSopt)”和“随机种子:固定”。 基准线 在1889点的情况下rl1889.tsp,从TSPLIB以“总的运行时间:871.18(秒)”,这是超过五分钟。看起来像这样:

1
用神经网络排序
以前的神经网络高尔夫挑战(这个和那个)启发了我提出一个新的挑战: 挑战 找到最小的前馈神经网络,以便在给定具有整数条目的任何4维输入向量(a ,b ,c ,d)(一种,b,C,d)(a,b,c,d),网络输出的坐标方向误差严格小于。[ - 10 ,10 ][-10,10][-10,10]排序(a,b,c,d)分类(一种,b,C,d)\textrm{sort}(a,b,c,d)0.50.50.5 可接纳性 为了应对这一挑战,将前馈神经网络定义为层的组成。的层的功能,其由矩阵指定的权重,一个矢量的偏见,以及一个激活函数并在坐标方向上应用:左:右ñ→ R米大号:[Rñ→[R米L\colon\mathbf{R}^n\to\mathbf{R}^m甲∈ řm × n一种∈[R米×ñA\in\mathbf{R}^{m\times n}b ∈ ř米b∈[R米b\in\mathbf{R}^m F:R → RF:[R→[Rf\colon\mathbf{R}\to\mathbf{R} L (x ):= f(A x + b ),X ∈ řñ。大号(X):=F(一种X+b),X∈[Rñ。 L(x) := f(Ax+b), \qquad x\in\mathbf{R}^n. 由于可以针对任何给定任务调整激活功能,因此我们需要限制激活功能的类别,以使这一挑战变得有趣。允许以下激活功能: 身份。 F(t )= tF(Ť)=Ťf(t)=t ReLU。 F(t )= 最大值(t ,0 )F(Ť)=最大值⁡(Ť,0)f(t)=\operatorname{max}(t,0) Softplus。 F(t …

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.