Questions tagged «combinatorics»

对于涉及组合学的挑战。

2
计算OEIS A005434
任务是尽快计算OEIS A005434。 考虑一个S长度为string 的二进制字符串n。从索引1,我们可以确定是否完全S[1..i+1]匹配从到的顺序。例如,S[n-i..n]i0n-1 S = 01010 给 [Y, N, Y, N, Y]. 这是因为0matchs 0,01不匹配10,010matchs 010,0101不匹配1010 并最终01010匹配自身。 定义f(n)为Ys和Ns在2^n不同S长度的所有可能位字符串上迭代时得到的不同数组的数目n。 观察者会注意到这个问题是我最近另一个问题的一个简单的变体。但是,我希望巧妙的技巧可以使这一过程变得更快,更容易。 任务 为了增加n开头1,应该输出代码n, f(n)。 示例答案 对于n = 1..24,正确的答案是: 1, 2, 3, 4, 6, 8, 10, 13, 17, 21, 27, 30, 37, 47, 57, 62, 75, 87, 102, 116, 135, 155, 180, 194 …

1
滚来看看各个方面!
假设您有20面骰子。您开始滚动该骰子,并且必须滚动数十次才能最终滚动所有20个值。您想知道,我有多少卷才能有50%的机会看到全部20个值?n在滚动所有n面之前,我需要滚动几卷双面模具? 经过研究,您发现存在一个公式,用于计算滚动后所有值滚动的机会。nr P(r, n) = n! * S(r, n) / n**r 其中S(a, b)表示第二种斯特林数,是将一组n个对象(每个滚动)划分为k个非空子集(每侧)的方式的数量。 您还可以找到OEIS序列,我们称之为R(n),对应于最小的r,其中P(r, n)至少50%。面临的挑战是n尽可能快地计算此序列的th项。 挑战 给定一个n,找到最小的 r,其中P(r, n)大于或等于0.5或50%。 从理论上讲,您的代码应将任何非负整数n作为输入,但是我们将仅在范围内测试您的代码1 <= n <= 1000000。 对于进球,我们将采取运行所需的总时间R(n)上的投入1过10000。 我们将通过R(n)在输出中运行我们的版本来检查您的解决方案是否正确,以查看是否P(your_output, n) >= 0.5和P(your_output - 1, n) < 0.5,即您的输出实际上r是给定输出的最小值n。 您可以S(a, b)在解决方案中使用任何定义。Wikipedia有几个定义可能会对您有所帮助。 您可以在解决方案中使用内置函数,包括那些可以计算S(a, b)甚至P(r, n)直接计算的函数。 R(n)尽管这两个都不是硬性限制,但您最多可以对1000个值和一百万个斯特林数进行硬编码,并且如果可以说服您提高或降低它们,则可以更改。 你并不需要检查每一个可能的r之间n和r我们要找的,但你需要找到最小的r,不是任何r地方P(r, n) >= 0.5。 您的程序必须使用Windows 10上可自由运行的语言。 用于测试您的解决方案的计算机的规格为i7 4790k, 8 GB …

4
贪婪地划分重复的组合列表
首先,一些定义: 给定n和k,考虑多重集的排序列表,对于每个多重集,我们从中选择带有重复的k数字{0, 1, ..., n-1}。 例如,对于n=5和k=3,我们有: [(0,0,0),(0,0,1),(0,0,2),(0,0,3),(0,0,4),(0,1,1),( 0,1,2),(0,1,3),(0,1,4),(0,2,2),(0,2,3),(0,2,4),(0, 3、3),(0、3、4),(0、4、4),(1、1、1),(1、1、2),(1、1、3),(1、1, 4),(1、2、2),(1、2、3),(1、2、4),(1、3、3),(1、3、4),(1、4、4) ,(2、2、2),(2、2、3),(2、2、4),(2、3、3),(2、3、4),(2、4、4),( 3,3,3),(3,3,4),(3,4,4),(4,4,4)] 甲部分是与所有多集的在部分的交集的大小是至少属性多集的列表k-1。也就是说,我们将所有多重集都一次相交(使用多重集相交)。例如,[(1, 2, 2), (1, 2, 3), (1, 2, 4)]是一个零件,因为其交点的大小为2,但[(1, 1, 3),(1, 2, 3),(1, 2, 4)]不是,因为它的交点的大小为1。 任务 您的代码应带有两个参数n和k。然后,它应该按排序的顺序贪婪地遍历这些多集并输出列表的各个部分。对于这种情况n=5, k=3,正确的分区是: (0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 0, 4) (0, 1, 1), (0, 1, …

7
构造雅可比矩阵
取未知向量,并应用一些通用的微分函数。的雅可比然后通过矩阵给出,使得: 例如,假设m=3和n=2。然后(使用基于0的索引) 雅可比f然后 这个挑战的目标是打印这个雅可比矩阵。 输入值 你的程序/功能应该采取作为输入两个正整数m和n,其代表的部件的数目f和u分别。输入可以来自任何所需的来源(stdio,功能参数等)。您可以指定接收顺序,对于输入的答案必须一致(请在答案中指定)。 输出量 代表雅可比矩阵的东西。此表示形式必须明确拼出Jacobian矩阵的所有元素,但是每个术语的确切形式都是实现定义的,只要明确区分什么以及关于什么进行区分,并且每个条目均以逻辑顺序输出。用于表示矩阵的示例可接受形式: 列表列表,其中外部列表​​的每个条目都对应于雅可比行的一行,内部列表的每个条目都对应于雅可比行的列。 字符串或文本输出,其中每行是Jacobian行,每行中由定界符分隔的条目对应于jacobian的列。 矩阵的一些图形/视觉表示。示例:使用MatrixForm命令时Mathematica显示的内容 其他每个条目都已存储在内存中并且可以查询的密集矩阵对象(即,您不能使用生成器对象)。例如,Mathematica如何在内部表示Matrix对象 条目格式示例: 形式为的字符串d f_i/d u_j,其中i和j是整数。例如:d f_1/d u_2。请注意,d和f_1或之间的这些空格x_2是可选的。此外,下划线也是可选的。 形式为d f_i(u_1,...,u_n)/d u_j或的字符串d f_i(u)/d u_j。也就是说,功能组件的输入参数f_i是可选的,并且可以明确地拼写出来或以紧凑形式保留。 格式化的图形输出。例如:计算表达式时Mathematica会打印什么D[f_1[u_,u_2,...,u_n],u_1] 您可以选择起始索引u和目标索引f(请在答案中指定)。输出可以是任何所需的接收器(stdio,返回值,输出参数等)。 测试用例 以下测试用例使用约定m,n。索引显示为从0开始。 1,1 [[d f0/d u0]] 2,1 [[d f0/d u0], [d f1/d u0]] 2 2 [[d f0/d u0, d f0/d u1], [d f1/d u0, d …

3
取得电话号码的方法
鉴于第一个数字的输入,第二个数字(均为正整数,零已排除),确定有多少种方法可以使第二列全国第一,使用以下操作:+1,+2和*3。简单地从左到右应用操作。 例子: 输入:1 2。输出:1。即,您只能2这样做+1,所以是一种方法。 输入:1 3。输出:3。也就是说,你可以得到由要么做3 +2或+1+1,或*3 输入:1 4。输出:4。 输入:2 6。输出:6。 输入:2 7。输出:9。 输入:1 10。输出:84。 如果没有办法,例如100 100或100 80,输出为0。 您也可以将输入作为数组或带有任何方便分隔符的字符串。 最短的解决方案获胜。

2
井字游戏,尽可能快地交叉
根据卢克的要求和彼得·泰勒(Peter Taylor)对此挑战的补充。 介绍 每个人都知道游戏井字游戏,但是在这个挑战中,我们将介绍一些小技巧。我们将只使用十字架。连续放置三个十字架的第一个人输了。一个有趣的事实是,有人输掉前最大的十字架数量等于6: X X - X - X - X X 这意味着对于3 x 3的面板,最大数量为6。因此,对于N = 3,我们需要输出6。 另一个示例,对于N = 4或4 x 4板: X X - X X X - X - - - - X X - X 这是一个最佳解决方案,您可以看到最大的十字架数量等于9。12 x 12板的最佳解决方案是: X - X - X - X X …

13
生成替换组合
列出所有的与大小的替换(或它们的组合与重复)的组合ķ从一组Ñ元件。 带替换的组合是一个无序的多集,其中的每个元素也都在n个元素的集合中。注意: 它是无序的。因此,不应再打印先前打印的具有不同顺序的集。 这是一个多集。同一元素可以(但不是必须)出现多次。这是替换组合与普通组合之间的唯一区别。 该集合应恰好具有k个元素。 替代地,它也是包含k次n个元素中的每一个的多集的大小为k的子集。 输入应该是n和k,其中元素是前n个正整数或非负整数,或者是n个元素和k,可以假设n个元素彼此不同。 输出应该是所有组合的列表,并用给定集合中的大小k替换。您可以按任何顺序打印它们及其每个元素。 您不能使用内置替换生成组合的内置函数。但是您可以使用内建函数来生成常规组合,排列,元组等。 这是代码高尔夫,最短的代码胜利。 例 Input: 4 2 Output: [0 0] [0 1] [0 2] [0 3] [1 1] [1 2] [1 3] [2 2] [2 3] [3 3]

4
重排不等式
背景 该排序不等式是基于重排数的不平等。如果我有两个长度相同的数字列表,则x 0,x 1,x 2 ... x n-1和y 0,y 1,y 2 ... y n-1相同长度,其中I允许重新排列列表中的数字,最大化和x 0 y 0 + x 1 y 1 + x 2 y 2 + ... + x n-1 y n-1的一种方法是对2个列表进行排序非递减顺序。 在此处阅读Wikipedia文章。 任务 您将编写一个从STDIN接受输入的程序,或者接受2个数字(长度相同)的数组(或相关容器)的函数。 假设您编写了一个接受两个数组(a和b)的函数,您将找到重新排列第二个数组(b)中的数字以最大化的方法: a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+...+a[n-1]*b[n-1] 在这种情况下,如果阵列b为[1 0,2 1,2 2,3 3,3 4 ](指数为清楚起见), [1 0,2 1,2 2,3 …

4
棋盘上的棋子太多
给定一个整数2n,找到在2n x 2n的棋盘上可以排列2n ^ 2个黑色棋子和2n ^ 2个白色棋子的可能方式的数量,这样就不会有其他棋子攻击对方。 黑色的棋子只能攻击白色的棋子,反之亦然。 遵循通常的棋牌进攻规则,即白色棋子在对角线前面立即攻击正方形,而黑色棋子在对角线后立即攻击正方形(如白色观察者所见)。 所有旋转,反射算作不同的。 可以在120秒内输出2n最大值的所有可能配置的程序将获胜。(尽管欢迎所有程序) 例如,爱丽丝的程序可以在120秒内处理n = 16,而鲍勃的程序可以在同一时间内处理n = 20。鲍勃赢了。 平台:Linux 2.7GHz @ 4 CPU

3
超音波多米诺瓷砖
任务 编写一个程序,从STDIN或作为命令行参数读取三个整数m,n,打印出所有可能的矩形为m×n且由2×1和1×2 Domino组成的平铺,最后打印有效平铺的数量。 单个平铺的多米诺骨牌必须用两个破折号(-)表示2×1,用两个竖线(|)表示1×2的多米诺骨牌。每个平铺(包括最后一个平铺)都必须紧跟换行符。 出于评分目的,您还必须接受来自STDIN的标志或作为命令行参数的标志,该标志使您的程序仅打印有效拼贴的数量,而不打印拼贴本身。 您的程序不得超过1024个字节。它必须适用于所有输入,使得m×n≤64。 (灵感来自于打印所有4x6矩形的多米诺骨牌。) 例 $ sdt 4 2 ---- ---- ||-- ||-- |--| |--| --|| --|| |||| |||| 5 $ sdt 4 2 scoring 5 计分 您的分数取决于设置了标志的输入8 8的程序执行时间。 为了使此代码成为最快的代码,而不是最快的计算机挑战,我将在自己的计算机上运行所有提交的文件(英特尔酷睿i7-3770、16 GiB PC3-12800 RAM)以确定官方成绩。 请留下有关如何编译和/或执行代码的详细说明。如果您需要使用特定版本的语言的编译器/解释器,请对此声明。 如果发生以下情况,我保留不对提交内容进行评分的权利: 我的操作系统(Fedora 21,64位)没有免费的(如在啤酒中)编译器/解释器。 尽管我们竭尽全力,但是您的代码无法正常工作和/或在我的计算机上产生不正确的输出。 编译或执行需要一个多小时。 您的代码或唯一可用的编译器/解释器包含对的系统调用rm -rf ~或同样令人讨厌的东西。 排行榜 我对所有提交进行了重新评分,以10,000次迭代进行编译,并以100至10,000次迭代执行(取决于代码的速度),并在循环中运行编译和执行(取决于代码的速度)并计算平均值。 结果是: User Compiler …

3
计算匹配任何一组掩码的平衡二进制字符串
一个二进制字符串是只包含绘制字符的字符串01。甲平衡二进制串是包含完全一样多一个二进制串0 S作为1秒。 您会得到一个正整数n和任意数量的掩码,每个掩码的长度为2n个字符,并且仅包含从012绘制的字符。如果二进制字符串和掩码的长度相同,并且在掩码没有2的每个位置上的字符都相同,则匹配该字符串。例如掩模011022比赛的二进制串011000,011001,011010,011011。 给定n和掩码作为输入(用换行符分隔),您必须输出与一个或多个掩码匹配的不同平衡二进制字符串的数量。 例子 输入值 3 111222 000112 122020 122210 102120 推理 唯一匹配111222的平衡二进制字符串是111000。 唯一匹配000112的平衡二进制字符串是000111。 匹配122020的平衡二进制字符串为111000(已计数),110010和101010。 匹配122210的平衡二进制串是110010(已经计数),101010(已经计数)和100110。 匹配的平衡二进制字符串102120是101100和100110(已计数)。 所以输出应该是 6 输入值 10 22222222222222222222 推理 有20个选择10个长度为20的平衡二进制字符串。 输出量 184756 优胜者 获胜者将是计算比赛输入最快的人,当然会像对待其他输入一样对待它。(我使用确定的代码来获得明确的获胜者,并避免出现不同的输入将给不同的获胜者的情况。如果您想找到一种找到最快代码的更好方法,请告诉我。) 比赛输入 http://pastebin.com/2Dg7gbfV

6
枚举具有n个节点的所有二叉树
给定一个整数n,用n个内部节点枚举所有可能的完整二叉树。(完整的二叉树在每个内部节点上恰好有2个子节点)。树结构应作为树的预遍历输出,其中1表示内部节点,0表示外部节点(空)。 以下是前n个示例: 0: 0 1: 100 2: 11000 10100 3: 1110000 1101000 1100100 1011000 1010100 这是一场代码高尔夫,奖金最少的人物。这些树应该每行输出到stdout。该程序应从命令行或标准输入中读取n。

7
高尔夫代码:弗雷序列(I)
挑战 在此任务中,您将得到一个整数N(小于10 ^ 5),输出N阶的Farey序列。 输入N在单行中给出,输入由EOF终止。 输入项 4 3 1 2 输出量 F4 = {0/1, 1/4, 1/3, 1/2, 2/3, 3/4, 1/1} F3 = {0/1, 1/3, 1/2, 2/3, 1/1} F1 = {0/1, 1/1} F2 = {0/1, 1/2, 1/1} 约束条件 输入数量不会超过10 ^ 6个值 您可以使用任何选择的语言 最短的解决方案获胜!
10 code-golf  math  code-golf  math  code-golf  number  number-theory  code-golf  math  arithmetic  repeated-transformation  code-golf  geometry  popularity-contest  code-golf  code-golf  tips  haskell  math  fastest-algorithm  code-golf  combinatorics  code-golf  math  polynomials  rational-numbers  code-golf  code-golf  popularity-contest  javascript  code-golf  kolmogorov-complexity  code-golf  code-golf  math  combinatorics  permutations  code-challenge  restricted-source  random  array-manipulation  code-challenge  generation  code-golf  code-golf  ascii-art  arithmetic  division  code-challenge  number  code-golf  math  number  binary  code-golf  ascii-art  code-golf  interpreter  stack  code-golf  internet  networking  code-golf  math  code-golf  ascii-art  code-golf  math  sequence  code-golf  hello-world  restricted-source  code-golf  ascii-art  code-golf  geometry  code-golf  kolmogorov-complexity  pi  code-golf  math  combinatorics  permutations  code-golf  math  code-challenge  ascii-art  code-golf  string  code-golf  quine  code-golf  math  floating-point  golfscript  code-golf  string  code-golf  sliding-puzzle  code-challenge  arithmetic  code-golf  math  code-golf  geometry  optimized-output 

1
计算真正独特的数组
这是对创建唯一集合的Count数组的跟踪。最大的区别是唯一性的定义。 考虑A长度数组n。该数组仅包含正整数。例如A = (1,1,2,2)。让我们将定义f(A)为的所有非空连续子数组之和的集合A。在这种情况下f(A) = {1,2,3,4,5,6}。产生步骤f(A) 如下: 的子阵列A是(1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2)。它们各自的总和为1,1,2,2,2,3,4,4,5,6。因此,您从此列表中获得的集合是{1,2,3,4,5,6}。 如果没有其他相同长度的数组,则我们将数组称为A 唯一数组,除了反向数组。作为示例,但是没有其他长度数组会产生相同的和集。Bf(A) = f(B)Af((1,2,3)) = f((3,2,1)) = {1,2,3,5,6}3 任务 任务,对于给定n和s是计算该长度的独特阵列的数量。您可以假设s介于1和之间9。您只需要对元素为给定整数s或的数组进行计数s+1。例如,如果s=1您要计数的数组仅包含1和2。但是,唯一性的定义是针对相同长度的任何其他数组。举一个具体的例子[1, 2, 2, 2]是不是因为它提供了一组相同的款项的独特[1, 1, 2, 3]。 您应该计算数组的倒数以及数组本身(当然,只要数组不是回文)。 例子 s = 1,n = 2,3,4,5,6,7,8,9的答案是: 4, 3, 3, 4, 4, 5, 5, 6 对于s = …

12
可能有不同的组合
问题 给定一个值n,想象一下在(2,0)的参考(0,0)中刻出的山地景观。斜坡之间不会有空白,山也不会下降到x轴以下。要解决的问题是:给定n(定义景观的大小)和峰的数量k(k始终小于或等于n),那么有k个峰的山峰有多少种组合? 输入项 n代表景观的宽度,k代表峰的数量。 输出量 仅可能的组合数量。 例 给定n = 3和k = 2,答案是3个组合。 仅举一个直观的例子,它们是: /\ /\ /\/\ /\/ \ / \/\ / \ 是使用6(3 * 2)个位置和2个峰的3种组合。 编辑:-更多示例- n k result 2 1 1 4 1 1 4 3 6 5 2 10 获奖条件 标准 代码高尔夫球规则适用。以字节为单位的最短提交获胜。

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.