Questions tagged «optimization»

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


3
解决手推车问题
哲学家们一直在思考台车问题。不幸的是,还没有人解决过这个问题。幸运的是,作为程序员,我们可以使用计算机为我们解决问题! 输入值 您的程序将输入一个(有限的)有向图(最多有一个从x到的边y,对于任何x和而言y),并带有一个指定的节点,并且在每个边上附加一个非负整数(表示与该轨道相关的人数) 。另外,每个节点至少具有一个出口边缘。 手推车从指定的节点开始。每次转弯时,如果手推车在节点处x,那么功利主义者就会选择一条边(x,y)。那个边缘的人死了,手推车现在处于边缘y。这个过程将永远持续下去。 请注意,人只能死一次,因此,如果边缘(x,y)将n人绑在其上,而手推车经过它们,例如,滑过100次,它仍然只会导致n死亡。 输出量 功利主义者以使死亡人数最小化的方式做出选择(这是有限的,因为只有有限的人)。您的程序将输出该号码。 输入格式 您可以按照自己喜欢的任何合理方式获取输入图。例如,您可以将其作为矩阵,并将指定的节点计为标记为0的节点。或者可以使用x1,y1,n1;x2,y2,n2;...。例如0,a,0;a,b,5;a,c,1;b,b,0;c,c,0,代表标准手推车问题(末尾带有循环)。 测试用例 0,a,0;a,b,5;a,c,1;b,b,0;c,c,0 -> 1(从0到a,从a到c(杀死一个人),然后继续将手推车从c循环到c)。 0,0,1;0,a,5;a,a,0 -> 1(保持从0到0,永远超过1个人), 0,a,5;0,b,1;a,a,1;b,b,6 -> 6(0-> a-> a-> a-> a-> ...(请注意,转到b的贪婪解是不正确的)) 0,a,1;0,b,5;a,b,1;b,a,1 -> 3(0-> a-> b-> a-> b-> ...) 0,a,1;0,b,1;a,a,0;b,b,0 -> 1(请注意,功利主义者可能采取两种不同的选择,即两者都只会杀死一个人) 这是代码高尔夫球,所以最短的答案会成功!祝好运。 注意:不会出现恶性循环,并且禁止多轨漂移。同样,尽管我更喜欢从阿西莫夫的三个定律来考虑这个问题,彼得·泰勒在沙盒中指出,这个问题在数学上等同于找到权重最低的rho(使循环返回自身的路径) 。

2
去让它满天星斗
在本竞赛中,您必须编写一个程序,该程序接受黑白像素图像,然后尝试对其进行更改,以使白色形状形成星形域,并尽可能减少更改。 允许的更改是将白色像素变成黑色,将黑色像素变成白色。 输出必须再次包含相同的图像,但是这次所有更改都带有,并且标有a /中心。从白色变为黑色的像素必须以蓝色显示,从黑色变为白色的像素必须以黄色显示,并且至少一个中心像素必须以红色显示。(完全的颜色由您决定。)程序必须输出指定的图像以及所做的更改总数。 定义 星域 当(且仅当)存在(至少)一个中心像素时,图像的白色像素集才代表星域。的中心像素是能够由被conneced白色像素中的一个直线到所有其他白色像素的,使得线仅横穿白色像素。(因此中心像素不一定是唯一的。) 两个像素之间的直线 给定两个像素(开始和结束,在下图中均为红色),两个像素之间的直线由所有像素组成,这些像素接触从第一个像素的中心开始的(下图中的数学黄色)线像素到最后一个像素的中心。如果一个像素仅碰到一个角就不会接触该线,所以要使一个像素属于该像素线,(数学上的黄色)线必须以不为零的长度穿过所讨论的像素。(如果它仅碰触拐角点,则视为长度为零)。请考虑以下示例: 例 对于给定的示例,第一个图像应表示示例测试用例“输入”,而其他两个图像则表示两个有效的可能输出: 黄色区域(以前为黑色)也计入“白色”域,而蓝色区域(以前为白色)计入域外的“黑色”部分,红色点每次都代表一个可能的中心像素。 测试用例 以下测试用例是png,每个大小为256 x 256像素。 计分 请使用以下测试用例运行程序,并在答案中包括输出(图像/更改数量)。我将为每个测试用例排行榜。您的分数将是排行榜中每个排名的总和-分数越低越好。有标准漏洞。不允许程序识别那些测试用例并为其运行特殊情况。(不允许为每个测试用例预先计算并保存最佳中心像素。)该程序应适用于任何图像。 排行榜 Name | Score | 1 - rk | 2 - rk | 3 - rk | 4 - rk | 5 - rk | 5 - rk | Total Changes ------------+-------+------------+------------+------------+------------+------------+------------+-------------- …

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, …

1
你能超越比尔·盖茨吗?
煎饼分类是一个数学问题的通俗术语,即当可以将抹刀插入堆叠中的任意点并用来翻转其上方的所有煎饼时,按大小顺序对无序的煎饼堆叠进行分类的数学问题。煎饼数P(n)是n个煎饼所需的最小翻转次数。1个 1979年,年轻的比尔·盖茨(Bill Gates)和克里斯托斯(Christos Papadimitriou)撰写了一篇论文,证明P(n)=(5n + 5)/ 3的上限。2 我认为可以肯定的是,盖茨(和/或帕帕第米特里奥)编写了一个程序,使用他们开发的算法(可能晚于1979年)执行煎饼分类。由于盖茨是一位熟练的程序员,因此他们可能会尽可能地尝试编写此代码,但是源代码的大小尚未公开(AFAIK)。 挑战: 创建一个执行煎饼分类的函数/程序,最大翻转次数不超过盖茨和帕帕第米特里乌找到的界限。3您可以选择是要列表递增还是递减,只要它是一致的即可。 您可以假设n <50。因此,您必须将翻转次数限制为(一些随机选择的n值): n P(n) 38 65 49 83 50 85 输出应该是每次翻转之前刮刀的位置。输出可能是零索引或一个索引,您可以选择从顶部还是底部进行计数。 附加规则: 运行时必须是确定性的 没有固定的时间限制,但是您必须能够提供包含50个元素的列表的输出 测试清单: 我无法提供最困难的列表(如果是的话,我会写一篇论文,而不是挑战),所以我将提供一些随机数字列表,您可以在这些数字上测试函数/程序。如果事实证明这些列表“容易”,我可能会添加其他人。 9, 63, 62, 75, 45, 78, 59, 75, 69, 3, 28, 94, 51, 10, 45, 93, 97, 80, 72, 36, 80, 88, 30, 93, …

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, …

13
斐波那契产品
您可以将大于0的数字分解为正Fibonacci数字的唯一和。在这个问题中,我们通过重复减去最大可能的正斐波那契数来做到这一点。例如: 1 = 1 2 = 2 3 = 3 4 = 3 + 1 12 = 8 + 3 + 1 13 = 13 100 = 89 + 8 + 3 现在,我将斐波那契乘积称为与上面相同的列表,但加法运算被乘积代替。例如,f(100) = 89 * 8 * 3 = 2136。 编写一个给定正整数n的程序或函数,该函数将返回该数字的斐波那契乘积。 测试用例: 1: 1 2: 2 3: 3 4: …
13 code-golf  math  sequence  fibonacci  code-golf  word  code-golf  cipher  code-golf  string  math  subsequence  code-golf  regular-expression  code-golf  brainfuck  assembly  machine-code  x86-family  code-golf  math  factorial  code-golf  math  geometry  code-golf  math  arithmetic  array-manipulation  math  number  optimization  stack  metagolf  code-golf  tips  assembly  code-golf  tips  lisp  code-golf  number-theory  path-finding  code-golf  number  sequence  generation  code-golf  math  geometry  code-golf  grid  permutations  code-golf  code-golf  graphical-output  geometry  fractal  knot-theory  code-golf  math  arithmetic  code-golf  interpreter  balanced-string  stack  brain-flak  code-golf  math  set-theory  code-golf  math  array-manipulation  code-golf  code-golf  string  natural-language  code-golf  code-golf  math  linear-algebra  matrix  code-golf  string  encode 

6
行列式优化挑战
考虑所有条目均为0或1的30 x 30 Toeplitz矩阵。此难题是查找具有最大行列式的矩阵的简单优化难题。 输入无 输出一个30 x 30 Toeplitz矩阵及其所有行列式,其所有条目均为0或1。 得分输出矩阵的行列式。如果两个人得分相同,则第一个答案将获胜。 到目前为止的领先作品 尼克·阿尔杰(Nick Alger)在Matlab中的65,455,857,159,975 (大约(10 ^ 13.8) 65,455,857,159,975在Python中由isaacg(大约10 ^ 13.8) 到2012年,在Mathematica中达到39,994,961,721,988(约10 ^ 13.6) Flounderer在R中的39,788,537,400,052 (大约10 ^ 13.6) Vioz-在Python中获得的8,363,855,075,832(大约10 ^ 12.9) 朱莉娅(Julia)的6,984,314,690,903,由Alex A.(大约10 ^ 12.8) 恼人的其他限制2015年7月16日 如果可能的话,请使用任意或高精度算法来计算最终输出行列式,以便我们可以确定它到底是什么(它应该始终是整数)。在python中,这应该会有所帮助。

1
俄罗斯方块七巧板
介绍 七巧板是经典的难题,涉及将积木排列/装配成各种形状。来自中文七巧板-字面意思是“七个技巧板”。让我们采用这个想法,并使用七个Tetrominos块填充网格。 挑战 编写一个函数或程序,该函数或程序将网格坐标数组作为输入,并输出一个完整的10 x 20的网格,其中填充有俄罗斯方块,但指定坐标除外。 通过尝试保持片段分布均匀来优化您的分数。 标准 使用此坐标粘贴框完成任务。有五组坐标。随意修改写入坐标的格式,但不要修改值。 数据集#2无法解决-在这种情况下,只需输出填充了输入像元的网格(即X孔所在的位置)。 输入值 网格坐标表示网格中的“孔”。这些细胞不能包含Tetromino的任何部分。 网格坐标: (0,0), (1,0), (2,0), ... (9,0) (0,1), (1,1), (2,1), ... (9,1) . . . (0,19), (1,19), (2,19), ... (9,19) 使用您的编程语言选择的数组样式输入坐标。 用X或其他可打印的ASCII表示网格中的孔。 输出量 使用标准Tetris网格大小(宽10单元,高20单元),当且仅当使用Tetromino碎片可以完全完美地填充网格时,才打印解决方案网格。 用字母构造件I,O,L,J,T,Z,S如下: I I L J I OO L J T ZZ SS I OO LL …

3
Brainfuck中的按位运算符
您的任务是为以下每个二进制运算符创建一个Brainfuck程序。每个程序应从输入中获取一个或两个8位数字(A和B)并计算指定的运算: A XOR B A AND B A OR B A Shifted Left by 1 (circular shift) NOT A 您不必全部实施5。得分的计算方式为: #totalCharacters + {4000 * #problemsNotCompleted} 因此,有效分数是从零(最佳)到20,000(未完成)。 我不在乎您将结果存储在哪里,也不管您是否保留输入。假设8位单元以及仅在右侧需要的空单元数。 您可能会认为数字已经在最适合您的任何内存位置中,因此您无需担心IO操作。
13 code-golf  binary  brainfuck  code-golf  code-golf  ascii-art  random  code-golf  code-golf  code-challenge  sorting  code-golf  code-challenge  java  code-golf  statistics  code-golf  code-challenge  fastest-code  code-golf  math  code-golf  math  kolmogorov-complexity  code-golf  code-golf  array-manipulation  combinatorics  code-golf  kolmogorov-complexity  popularity-contest  underhanded  code-golf  math  floating-point  code-golf  interpreter  code-golf  music  code-golf  code-golf  cryptography  code-challenge  scrabble  code-golf  code-challenge  popularity-contest  quine  code-golf  quine  cryptography  code-golf  kolmogorov-complexity  code-golf  printable-ascii  code-golf  chess  code-golf  math  number-theory  code-challenge  c  code-golf  random  popularity-contest  hello-world  code-shuffleboard  code-golf  compression  grammars  code-golf  tips  code-golf  sequence  code-golf  string  code-challenge  sorting  permutations  code-golf  string  code-challenge  optimization  code-golf  interpreter  code-challenge  string  code-golf  math  number  fibonacci  string  compression  c#  code-golf  chemistry  popularity-contest  math  c  c++  java  code-golf  math  function  code-golf  complex-numbers  code-golf  geometry 

2
解释基普尔!
介绍 Kipple是Rune Berg于2003年3月发明的基于堆栈的深奥编程语言。 Kipple有27个堆栈,4个运算符和一个控制结构。 堆栈 堆栈被命名为a- z并包含32位带符号整数。还有一个特殊的堆栈,@使输出数字更加方便。当将数字压入时@,实际上将压入该数字的ASCII值。(例如,如果您将12推到@,它将推49,然后推50。@) i在执行程序之前,将输入压入输入堆栈。解释器将i在执行之前要求存储值。执行完成后,输出堆栈上的所有内容o都会弹出以ASCII字符形式输出。由于这是Kipple唯一的IO机制,因此无法与Kipple程序进行交互。 经营者 操作数可以是堆栈标识符或带符号的32位整数。 推送:>或< 语法:Operand>StackIndentifier或StackIndentifier<Operand Push运算符将操作数向左移并将其推入指定的堆栈。例如,12>a将值12推入stack a。a>b将从堆栈中弹出最高值a并将其推入堆栈b。弹出空堆栈总是返回0 a<b相当于b>a。a<b>c从弹出最高值,b并同时推入c和a。 加: + 句法: StackIndentifier+Operand Add运算符将堆栈上最顶层项目和操作数之和压入堆栈。如果操作数是堆栈,则从中弹出值。例如,如果堆栈的最高值为a1,a+2则将3压入堆栈。如果a为空,a+2则将2推入。如果堆叠的最值a和b是1和2,然后a+b将从栈中弹出的值2 b和3推入堆栈a。 减去: - 句法: StackIndentifier-Operand 减法运算符的工作方式与加法运算符完全相同,只是它减去而不是加法。 明确: ? 句法: StackIndentifier? 如果最上面的项目为0,则Clear运算符将清空堆栈。 解释器将忽略操作符旁边不存在的所有内容,因此以下程序将起作用:a+2 this will be ignored c<i。但是,添加注释的正确方法是使用#字符。#执行前,a 和行尾字符之间的所有内容都将被删除。ASCII字符#10在Kipple中定义为行尾。 操作数可以由两个运算符共享,例如a>b c>b c?可以写为a>b<c?。 该程序1>a<2 a+a将导致a包含值[1 4](从下到上),而不是[1 3]。对于-操作员也是如此。 控制结构 Kipple中只有一种控制结构:循环。 句法: (StackIndentifier code …
12 code-golf  interpreter  code-golf  string  code-golf  math  string  code-golf  ascii-art  path-finding  code-golf  string  ascii-art  code-golf  interpreter  binary  logic-gates  logic  code-golf  ascii-art  code-golf  graph-theory  code-golf  string  code-golf  number  sorting  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
选择电影场景
介绍 最后,电影公司为您的电影筹集资金。他们给了您最大的预算,还设置了电影的放映时间。 现在,您可以开始进行预生产。您已经计划了一堆场景,但是并非所有场景都适合预算,因此电影的拍摄时间也会太长。您知道每个场景的重要性。您的目标是选择场景,使电影不会太贵,太长而平庸。 输入值 您得到了,running time并且budget工作室已经批准: [25, 10] 您具有的场景列表包括running time,costs以及importance每个场景的: [ [5, 2, 4], [7, 1, 3] ] 如果阵列不适合您,请选择另一种最适合您的输入格式。时间以分钟为单位。预算和成本以数百万随机货币计。重要性在到的范围内[1–9]。所有数字均为整数。 输出量 在以下情况下,输出要包括在影片中的场景列表: 的总和importance最大。 费用不超过预算。 长度在允许的运行时间的±5分钟范围内。 场景的顺序无关紧要,不需要保留。 您可以输出数字列表或数组。您的输出可以具有从零开始或从一开始的索引: [0,2,5] – 0, 2, 5 – 0 2 5 [1,3,6] – 1, 3, 6 – 1 3 6 可能有多种解决方案适用于任何给定的输入。您只需要找到一个。 约束条件 场景不能缩短,也不能便宜。 每个场景只能包含一次。 要求 您的程序必须在电影的实际长度之内完成。 …

2
抢劫
介绍 经过漫长的战斗,您在一场谜语竞赛中击败了狮身人面像。狮身人面像对您的技巧印象深刻,希望为您提供与您的机灵相称的奖励,并将一条神奇的羊皮纸条分成八个盒子,每个盒子中都包含一个数字,以实现它们的存在。 狮身人面像说:“减少羊皮纸,使盒子重叠,这些盒子将通过加法或乘法合并。当剩下一个盒子时,它的价值将是用金币作为奖励。” 任务 您必须编写一个程序或函数,该程序或函数将一个列表/数组/八个自然数作为输入,并返回/打印通过一系列“折痕”操作可获得的最大奖励。 机械学 “折痕”操作是在某些单元格上执行的,操作者为+或*作为操作者。使用运算符将​​列表的前n个单元格折叠起来并与其目标单元格合并。合并操作中未消耗的任何单元均保持不变。 这是使用n = 3个单元格进行折痕的示例: 使用任何一种加法,将导致以下结果: 或乘法,将导致以下结果: 注意:为简单起见,不允许使用少于1个单元格的折痕,也不允许具有大于或等于列表长度的单元格的折痕。但是,列表的单元格数量可以增加一半以上。 可以将8个单元格的列表加5,从而产生一个新的长度为5的列表: [0,1,2,3,4,5,6,7]使用+操作员会给5个单元格增加一个[9,9,9,1,0]。 计分 标准代码高尔夫规则-产生正确输出且获胜字节数最少的代码。 奖励:如果您的代码还返回/打印了导致最大奖励的折痕操作序列,请将分数乘以0.8。输出示例如下: crease 5 + crease 2 * crease 2 + crease 1 * 例子 使用以下输入和结果测试您的代码,格式为input - maximum reward: [0, 1, 2, 3, 4, 5, 6, 7] - 7560 [0, 9, 0, 3, 2, …

1
有效迷宫数
给定一个WxH网格,有多少种可能的迷宫? 您对迷宫的了解: 网格正好是H正方形,W正方形是正方形。 共有三种类型的正方形:“开始”,“完成”和“空”。迷宫必须正好包含1个开始点和1个结束点,所有剩余的方块均为空。 整个迷宫周围都有墙壁。 除非违反以下规则,否则墙可以存在于任意两个正方形之间的边缘上: 从开始方块到完成方块必须存在一条路径。 因此,给定两个数字W和H,您必须返回一个数字,代表可能的正方形/墙壁配置的数目。您保证W*H > 1 例如,2x2迷宫具有完全100不同的可能配置。 这是一个代码高尔夫球,所以最短的答案是成功的!

1
通过整数操作实现IEEE 754 64位二进制浮点数
(我暂时将问题标记为“ C”,但是如果您知道另一种支持联合的语言,则也可以使用它。) 您的任务是+ - * /为以下结构构建四个标准数学运算符: union intfloat{ double f; uint8_t h[8]; uint16_t i[4]; uint32_t j[2]; uint64_t k; intfloat(double g){f = g;} intfloat(){k = 0;} } 这样操作本身就只能操纵或访问整数部分(因此也不能在操作过程中的任何时候都与double进行比较),并且结果是完全相同的(对于非数字结果,例如,功能上是等效的NaN)好像相应的数学运算已直接应用于double。 您可以选择要操作的整数部分,甚至可以在不同的运算符之间使用不同的整数部分。(尽管我不确定您是否要这样做,您也可以选择从联合中的任何字段中删除“未签名”。) 您的分数是四个运算符中每个字符的代码长度总和。最低分获胜。 对于不熟悉IEEE 754规范的我们来说,这是一篇有关Wikipedia的文章。 编辑: 03-06 08:47在intfloat结构中添加了构造函数。您可以使用它们进行测试,而不必手动设置double /etc。

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.