Questions tagged «combinatorics»

对于涉及组合学的挑战。

19
生成所有子列表分区
给定一个非空的整数列表,输出列表的每个可能分区,其中每个分区都是一个非空子列表。 因此,对于列表[1, 2, 3, 4],结果为: [[1, 2, 3, 4]] [[1, 2, 3], [4]] [[1, 2], [3, 4]] [[1, 2], [3], [4]] [[1], [2, 3, 4]] [[1], [2, 3], [4]] [[1], [2], [3, 4]] [[1], [2], [3], [4]] 列表在输出中的顺序无关紧要,因此[[1, 2, 3, 4]]可以是第一个,最后一个或任何位置。元素的顺序必须保留。 这是代码高尔夫球,所以最短的答案会获胜。 相关:对列表进行分区!

7
总和直到平方
给定任意整数x> 0和任意基数y> 3。 将x的所有数字加起来(如果写在设置的基数中)。 将此乘以最高位数(始终为base -1)。 重复直到该值是 (y - 1) ^ 2 搜索的是迭代次数和步骤数。 范例1: x= 739 y= 7 searched: (7 - 1) ^ 2 = 36 based: (b7)2104 sum: (dec)7 mul: (dec)42 based: (b7)60 sum: (dec)6 mul: (dec)36 2 steps needed -> answer is [2, 739, 42, 36] or [739, …

8
画一个phi三角形
澄清:基本上,你需要这个 欧拉的totient函数的名称为phi。 让我们尝试计算phi(8) 首先,向后列出所有数字8,且不包括0或以下 8 7 6 5 4 3 2 1 现在找出哪些数字与8不共享因数(1不计数),并#在其位置放置a 。 8 # 6 # 4 # 2 # 删除数字。 # # # # - 现在执行此操作,但是将输出串成三角形 9 88 777 6666 55555 444444 3333333 22222222 111111111 --------- 123456789 # 排除非要素共享数 9 8# 7## 6#66 5#### 4#4#4# 3##3##3 2#2#2#2# …

2
数树
甲树是一个连接,无向图,没有周期。您的任务是计算给定数量的顶点中有多少棵不同的树。 如果两棵树不是同构的,则认为它们是不同的。如果两个图的各自顶点可以以如下方式配对,则两个图是同构的:当且仅当与另一个图中的那些顶点配对的顶点之间存在边时,一个图中的两个顶点之间才存在边。有关更完整的描述,请参见上面的链接。 要查看大小为1到6的所有不同树的外观,请在此处查看。 您要输出的序列是OEIS上的A000055。 限制:您的解决方案必须在几分钟或更短的时间内才能在输入上运行6。这并不是要消除指数时间算法,而是要消除双指数时间算法,例如对所有边缘集的强行强制。 输入:任何非负整数。 输入可以通过任何标准方式进行,包括STDIN,命令行参数,功能输入等。 输出:顶点数量与输入数量相同的不同树的数量。 输出可以通过任何标准方式进行,包括STDOUT,函数返回等。 示例: 0, 1, 2, 3, 4, 5, 6, 7应返回1, 1, 1, 1, 2, 3, 6, 11。 评分:按字节编码高尔夫。愿最短的代码获胜! 禁止出现标准漏洞。

6
最大串联产品
给出了一个整数列表p1,...,pk(不一定是不同的),其中每个值的范围都在1到9之间(含1和9)。仅使用一次每个p1,...,pk,我们就可以形成数字的级联,以获得一个新的数字列表;然后,我们输出此新列表的产品。目的是通过选择最佳的数字级联来最大化此乘积。 例如,我们得到以下列表:2 3 2(用空格分隔)。我们可以形成以下串联: 2 3 2(这些串联的乘积是12) 23 2(商品是46) 32 2(商品是64) 22 3(商品是66) 因为我们可以形成的最大乘积是66,所以我们将其输出。 规则: 必须至少有一个乘法(即,您不能只连接所有数字并输出)。 除乘法或插入括号等外,不能使用任何其他运算符。 假定给定的整数列表由空格分隔,并且所有整数的值都在1到9之间。 最短的代码(以字节为单位)获胜! 测试用例: 输入:1 2 3; 输出:(63即21*3) 输入:2 5 9; 输出:468(52*9) 输入:1 2 3 4; 输出:1312(41*32)

3
重访Matrix属性X(或X的Joy)
这一挑战部分是算法挑战,部分是优化挑战,部分仅仅是最快的代码挑战。 AT矩阵由其第一行r和第一列完全指定c。矩阵的每个剩余元素只是该元素在对角线上方和左侧的一个副本。那是M[i,j] = M[i-1,j-1]。我们将允许非正方形的T矩阵。但是,我们始终假定行数不超过列数。例如,考虑下面的3×5 T矩阵。 10111 11011 11101 如果矩阵包含两个具有相同索引(向量)和不同索引的非空列,则该矩阵具有属性X。一列或多列的向量和只是其列的逐元素求和。那是包含x元素的两列或更多列的总和,每列是包含元素的另一列x。一列的总和等于列本身。 上面的矩阵平凡地具有属性X,因为第一列和最后一列相同。单位矩阵从不具有属性X。 如果我们只删除上面矩阵的最后一列,那么我们将得到一个不具有属性X且得分为4/3的示例。 1011 1101 1110 任务 任务是编写代码以找到得分最高的T矩阵,该矩阵具有二进制条目,并且不具有属性X。为清楚起见,具有二进制条目的矩阵具有其每个条目均为0或1的属性。 得分了 您的分数将是数字列除以最佳得分矩阵中的行数。 决胜局 如果两个答案得分相同,则第一个提交者获胜。 在(极不可能)的事件中,如果有人找到获得无限分的方法,则将接受这种解决方案的第一个有效证明。在更不可能的情况下,您可以找到有限矩阵的最优性证明,我当然也会获奖。 暗示 查找没有属性X的最高得分矩阵的所有答案在此处均有效,但不是最佳答案。有T个不具有属性X的矩阵,它们不是循环的。 例如,有一个7 x 12 T矩阵,没有属性X,但没有这样的循环矩阵。 21/11将击败当前和之前挑战带来的所有答案。 语言和图书馆 您可以使用任何具有免费编译器/解释器/等的语言。适用于Linux以及任何可免费用于Linux的库。 奖励得分大于2的第一个答案将立即获得200点赏金奖励。Ton Hospel现在已经做到了! 现任排行榜 C ++。Ton Hospel得分31/15 Java。彼得·泰勒(Peter Taylor)得分36/19 哈斯克尔。亚历山大·布雷特得分14/8

1
生成Davenport-Schinzel序列
背景 甲Davenport-Schinzel序列具有两个正整数参数d和n。我们将通过给定参数来表示所有Davenport-Schinzel序列的集合DS(d,n)。 考虑自然数的所有序列1到n,包容性,满足: 序列中没有两个连续的数字相同。 没有长度大于的子序列(不一定是连续的)d,它在两个不同的数字之间交替。 让L表示这样一个序列的最大长度(给定d和n)。然后,DS(d,n)是所有具有length的此类序列的集合L。 一些示例可能会有所帮助。让d = 4,n = 3。具有这些约束的最长序列可能具有L = 8。因此,以下成员是DS(4,3): [1, 2, 1, 3, 1, 3, 2, 3] 没有连续的相同数字,并且存在交替的length子序列4,但没有更长的子序列: 1 2 1 2 1 2 1 2 1 3 1 3 1 3 1 3 2 3 2 3 2 3 2 3 1 3 1 3 …

2
可达的蛇方向数
这个挑战与Snake游戏无关。 想象一条通过画一条水平线形成的2D蛇n。在其身体的整数点处,这条蛇可以将其身体旋转90度。如果我们将蛇的前面定义为最左端,则旋转将移动蛇的后部,而前部将保持原位。通过反复旋转,它可以制成许多不同的蛇形体。 规则 蛇的身体的一部分不能与另一部分重叠。 蛇的身体任何部分之间都不得重叠,必须达到最终方向。在此问题中,触摸的两点被视为重叠。 我认为蛇及其反面是相同的形状。 任务 直到旋转,平移和镜像对称,总共可以制造出多少种蛇形体? 蛇体部分旋转的示例。想象一下n=10,蛇处于直线的起始方向。现在,将点4逆时针旋转90度。我们拿到的蛇从 4以10垂直趴(该蛇的尾巴)和蛇从0到4水平放置。蛇现在的身体成一个直角。 这里有一些感谢MartinBüttner的例子。 我们从水平蛇开始。 现在我们从位置4旋转。 在此方向旋转之后,我们结束了。 现在让我们考虑另一条蛇的这种取向。 现在我们可以看到非法移动,该移动在旋转过程中会引起重叠。 得分了 您的分数是n我的计算机在不到一分钟的时间内可以解决该问题的最高分。 当旋转发生时,它将随蛇一起移动一半。我们确实要担心在旋转过程中旋转的任何部分是否会与蛇的一部分重叠。为简单起见,我们可以假定蛇的宽度为零。您只能在蛇形的特定点上沿逆时针方向最多旋转90度。因为,您永远无法将蛇完全折成两段,因为那样会导致在同一方向上的同一点发生两次旋转。 无法制作的形状 不能制作的形状的一个简单例子是大写字母T。一个更复杂的版本是 (感谢Harald Hanche-Olsen的例子) 在此示例中,所有相邻的水平线和垂直线都相距1。因此,没有从这个位置采取法律行动,并且由于问题是可逆的,因此没有办法从起始位置到达那里。 语言和图书馆 您可以使用任何具有免费编译器/解释器/等的语言。适用于Linux以及任何可免费用于Linux的库。 我的机器 时间将在我的机器上运行。这是在AMD FX-8350八核处理器上的标准ubuntu安装。这也意味着我需要能够运行您的代码。因此,请仅使用易于使用的免费软件,并请提供有关如何编译和运行代码的完整说明。

10
斐波那契多米诺骨牌
有经典的组合的结果,一个办法瓦数2*n由带1*2多米诺骨牌是第n 个 Fibonacci数。您的目标是打印给定的所有拼贴n,并用虚线和垂直线绘制,例如以下8个拼贴n=5: |———— |———— ——|—— ——|—— |||—— |||—— ————| ————| ||——| ||——| |——|| |——|| ——||| ——||| ||||| ||||| 您将提供一个程序或命名函数n作为输入并打印所需的输出。最少的字节数获胜。 输入值 通过STDIN或功能输入n之间的数字1(10含)。 输出量 打印2*n水平绘制的每个可能的多米诺骨牌瓷砖。平铺可以以任何顺序进行,但每个平铺应恰好出现一次。它们必须用空白行分隔。 垂直多米诺骨牌由两个垂直条(|)组成,水平多米诺骨牌由两个破折号(—)组成。您可以使用连字符(-)代替破折号以保持ASCII。 只要打印输出看起来相同,您就可以对空格进行任何操作。

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 …

6
Chess960位置生成器
语境 Chess960(或Fischer Random Chess)是前世界象棋冠军Bobby Fischer发明和倡导的国际象棋变体,于1996年6月19日在阿根廷布宜诺斯艾利斯公开宣布。它采用与标准国际象棋相同的棋盘和棋子;但是,这些棋子在棋手本位上的起始位置是随机的 规则 与标准国际象棋一样,白色棋子排在第二位 所有剩余的白色棋子随机放置在第一等级 主教必须放在相反颜色的正方形上 国王必须放在车厢之间的正方形上。 黑棋子的棋子与白棋子的棋子相同且相对。 来自:http : //en.wikipedia.org/wiki/Chess960 对于所有想发布答案的人... 您必须制作一个Chess960位置生成器,它能够按照上述规则随机生成960个位置中的一个(它必须能够输出960中的任何一个,不接受对一个位置进行硬编码!),并且您只需要输出白色等级一张。 输出示例: rkrbnnbq 哪里: 国王 女王 b主教 n骑士 鲁克 这将是代码高尔夫,而决胜局将是投票。

26
数学组合
编写一个程序,输入如下内容: n,k 然后计算: 然后打印结果。 数值示例: 输入: 5,2 内部计算: 打印输出: 10 我想看到一个超过65个字符的python解决方案的答案,但是显然所有语言都欢迎。 这是我的解决方案: n,k=input();f=lambda x:+(x<2)or x*f(x-1);print f(n)/(f(k)*f(n-k)) 编辑: 我承认这个问题来自codegolf网站的数学组合难题。我知道我的回答似乎无法在此问题上取得很大进展,但是这个难题的领袖们已经解决了将近一半的字符。 当前按语言分类的最低字符数为: Perl:35 红宝石:36 的Python:39 PHP的:62

5
拓扑总数
对于给定的DAG(有向无环图),其每个拓扑排序都是所有顶点的排列,其中,对于DAG 中的每个边(u,v),在排列中,u出现在v之前。 您的任务是计算给定DAG的拓扑种类总数。 规则 您可以使用任何格式来表示图,例如邻接矩阵,邻接列表或边列表,只要您不对编码进行有用的计算。如果有用,您也可以在输入中包含诸如顶点数或顶点列表之类的东西。 您可以假设输入中的图形始终是DAG(没有任何循环)。 理论上,您的程序应该可以进行任何输入。但是,如果它溢出您语言中的基本整数类型,它可能会失败。 顶点名称可以是任何类型的任何连续值。例如:以0或1开头的数字。(当然,仅当您不使用该数字存储代码时)。 这是代码高尔夫球。最短的代码获胜。 例 这是相同的输入,但格式不同。您的程序不必全部接受。顶点始终是从0开始的整数。 Adjacency list: [ [1 2 3 5] [2 4] [] [2] [] [3] ] Adjacency matrix: [ [0 1 1 1 0 1] [0 0 1 0 1 0] [0 0 0 0 0 0] [0 0 1 0 …

3
任意随机(速度版)
给定integer n,计算n范围1..n^2(含)范围内的一组随机唯一整数,以使该集合的总和等于n^2 在这种情况下,随机是指有效输出之间的一致随机。给定的每个有效输出n必须有统一的机会被生成。 例如,n=3应该有三分之一的机会的各个输出6, 1, 2,3, 5, 1或4, 3, 2。由于这是一个集合,所以顺序无关紧要,4, 3, 2等同于3, 2, 4 计分 赢家是可以n在60秒内计算出最高分数的程序。 注意:为防止可能的部分硬编码,所有条目必须小于4000字节 测试中 所有代码都将在我的本地Windows 10计算机上运行(Razer Blade 15、16GB RAM,Intel i7-8750H 6核,4.1GHz,GTX 1060,以防您滥用GPU),因此请提供详细说明以在以下位置运行代码我的机器。 根据要求,条目可以通过Debian在WSL上运行,也可以在Xubuntu虚拟机上运行(两者都与上述相同) 提交将连续运行50次,最终得分将是全部50个结果的平均值。

22
列表本身的n次的笛卡尔积
当给定一个值列表和一个正整数时n,您的代码应输出该列表的笛卡尔乘积及其n时间。 例如,使用伪代码,您的函数可能类似于: for x1 in list: for x2 in list: for x3 in list: ... for xn in list: print x1, x2, x3, ... , xn 例: repeated_cart([1,2,3], 3) 1 1 1 1 1 2 1 1 3 1 2 1 1 2 2 1 2 3 1 3 1 …

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.