Questions tagged «combinatorics»

对于涉及组合学的挑战。

1
最少的磁盘写入可对多个文件进行碎片整理
介绍 磁盘是一个线性容器,其块0通过索引size-1。 文件是该文件使用的块索引的命名列表。 示例文件系统表示如下: 15 ALPHA=3,5 BETA=11,10,7 “磁盘有15个块,文件ALPHA的第一个块是索引3处的磁盘块。” 磁盘映射可以这样绘制: Block Index 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 Contents | | | |A0 | |A1 | |B2 | | |B1 |B0 | | | | 当磁盘中的所有文件连续存储时,该磁盘将被视为已碎片整理。 你的目标: 发出最短的合法移动序列,以对给定的磁盘进行碎片整理。 法律行动 移动包含三部分信息:文件名,要移动的文件中的块的索引以及要移动到的磁盘块的索引。 例如 ALPHA:1>4 …

15
g o l f a t 2
有时将笛卡尔坐标转换(x,y)为极坐标确实很费力(r,phi)。虽然你可以计算r = sqrt(x^2+y^2)很容易,你经常计算时的角度需要的情况下有些区别phi,因为arcsin,arccos以及arctan和所有其他三角函数有一个共同域,每个只有跨越半个圆。 在许多语言中,都有用于将直角坐标转换为极坐标的内置atan2函数,或者至少具有给定的(x,y)计算角度的函数phi。 任务 你的任务是写一个程序/功能采用两个(浮点,但不能同时为零)笛卡尔坐标(x,y),并输出对应的极角phi,其中phi必须处于度,弧度或等级(与等级余平均gradians其是1 /整圆的400),以您较方便的为准。 角度是在正方向上测量的,对于,我们有零角度(1,0)。 细节 您不得使用内置插件是计算角度phi给出两个坐标,其中包括atan2,rect2polar,argOfComplexNumber和类似的功能。但是,您可以使用通常的三角函数及其反函数,它们只需一个参数。任何单位符号都是可选的。 半径r必须为非负数,并且phi必须在范围内[-360°, 360°](无论输出270°还是,都无关紧要-90°)。 例子 Input Output (1,1) 45° (0,3) 90° (-1,1) 135° (-5,0) 180° (-2,-2) 225° (0,-1.5) 270° (4,-5) 308.66°
18 code-golf  math  geometry  trigonometry  code-golf  number-theory  fibonacci  code-golf  math  sequence  fibonacci  code-golf  string  code-golf  math  graphical-output  geometry  code-golf  string  code-golf  math  geometry  code-golf  math  bitwise  number  popularity-contest  graphical-output  image-processing  fractal  code-golf  number-theory  code-golf  date  multi-threading  code-golf  math  code-golf  math  number  sequence  code-golf  math  number  sequence  arithmetic  code-golf  decision-problem  logic-gates  code-golf  decision-problem  balanced-string  code-golf  math  arithmetic  combinatorics  code-golf  expression-building  code-golf  physics  code-golf  abstract-algebra  code-golf  number  arithmetic  integer  code-golf  ascii-art  number  code-golf  number-theory  primes  code-golf  arithmetic  grid  code-golf  code-golf  sequence  code-golf  kolmogorov-complexity  compression  code-golf  math  number  arithmetic  array-manipulation  code-golf  primes  hexagonal-grid  complex-numbers  code-golf  number  counting  code-golf  math  number  arithmetic 

2
寻找僵局
寻找僵局 对多线程应用程序进行编程时,必须格外小心,以避免在访问共享资源时死锁各个线程。一个死锁发生时线程试图访问要锁定在另一个线程在同一时间,其他线程试图访问由第一锁定的资源的资源。这是简单的情况,但是如果资源链较长,则可能变得更加复杂。 挑战 您应该编写一个程序或函数,以在每个线程访问的资源列表中检测可能的死锁情况。这是代码高尔夫球,因此最短答案以字节为单位。 每个线程是同时启动的,但是之后它们可以按交错的任意组合运行。如果有2个线程,每个4个动作,它可以作为运行(其中,每个数字是具有该ID采取的线程的动作)1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,2,1,2,1,2,1,2,1,1,2,2,2,2,1,1,或任何其它可能的组合。 输入值 您将通过STDIN,函数参数或最接近的替代方法接收字符串列表。每个字符串将采用格式+a -b。该字符串中的每个字符串都表示线程对资源的locking(+)/ unlocking(-)。每个线程之间将有一个---分隔符。确保线程不会尝试锁定已锁定的资源,并且所有线程将在退出前显式解锁其锁定的所有资源。下面是一个示例来演示: +a # Lock resource a +b # Lock resource b -a # Unlock resource a -b # Unlock resource b --- # Thread separator +b # Lock resource b -b # Unlock resource b 输出量 如果输入不包含任何可能的死锁,则输出为假,如果输入包含可能的死锁情况,则输出为假。例如: true false 1 0 都是有效的输出,但是任何明确定义为“真/假”的内容都可以接受。 …

2
计数多带
多条带是符合以下规则的多氨基酸的子集: 每块由1个或多个单元组成 没有一个单元可以有两个以上的邻居 电池不应围成一个洞 当自由多胺基不是另一个(可以拾取和翻转)的刚性转换(平移,旋转,反射或滑行反射)时,它们是不同的。平移,旋转,反射或滑动以反映自由多米诺骨牌不会改变其形状(Wikipedia) 例如,有30个免费的七边形带(长度为7的多带)。这些都是14x15的网格。 图片来源:Miroslav Vicher 目标 编写一个程序/函数,将正整数n作为输入并枚举不同的自由多n带。 n = 1-> 1(一个正方形) n = 2-> 1(只有一个可能的由2个正方形组成的2折带) n = 3-> 2(一个由3个正方形连接成一条直线,另一个为L形) n = 4-> 3(一个直线,一个L形和一个Z形) 。。。 测试用例: n polystrips 1 1 2 1 3 2 4 3 5 7 6 13 7 30 8 64 9 150 10 338 …

1
将方形网格划分为相等面积的部分
此挑战基于以下难题:给您一个nby n网格,其中带有n标记的单元格。您的工作是将网格划分为多个n部分,其中每个部分均由精确的n单元格组成,每个单元格仅包含一个标记的单元格。 例 这是左边的难题,右边是其(唯一)解决方案: 挑战 您会n以任何合理的格式获得一组零索引的坐标。 [(0,0), (0,3), (1,0), (1,1), (2,2)] 您的工作是编写一个返回任何有效分区(同样,以任何合理的格式)的程序。 [ [(0,0), (0,1), (0,2), (1,2), (1,3)], [(0,3), (0,4), (1,4), (2,4), (3,4)], [(1,0), (2,0), (3,0), (4,0), (4,1)], [(1,1), (2,1), (3,1), (3,2), (4,2)], [(2,2), (2,3), (3,3), (4,3), (4,4)] ] 如果难题没有解决方案,程序应通过抛出错误或返回空解决方案来表明这一点。 输入/输出示例 [(0,0)] => [[(0,0)]] [(0,0), (1,1)] => [ [(0,0), (1,0)], …

8
共轭排列
大小为n的排列是对前n个正整数的重新排序。(意味着每个整数出现一次且恰好出现一次)。排列可以像更改大小为n的项列表的顺序的函数一样对待。例如 (4 1 2 3) ["a", "b", "c", "d"] = ["d", "a", "b", "c"] 因此,排列可以像函数一样构成。 (4 1 2 3)(2 1 3 4) = (4 2 1 3) 这带来了许多有趣的属性。今天,我们专注于共轭。如果存在置换g和g -1(也为n),则置换y和x(均为n)是共轭的。 x = gyg-1 和GG -1等于身份置换(第一Ñ以正确的顺序编号)。 您的任务是通过标准输入法获取大小相同的两个排列,然后确定它们是否为共轭形式。您应该输出两个一致值之一,如果它们是共轭,则输出一个,如果不是,则另一个。 这是代码高尔夫球,因此答案将以字节计分,而字节越少越好。 关于共轭置换,有许多定理可供您使用,祝您好运和高尔夫愉快。 您可以将输入作为表示上述排列的值的有序容器(1-n或0-n),也可以作为接受有序容器并执行排列的函数。如果选择采用函数,则应将其作为参数,而不要使用预定义的名称。 测试用例 (1) (1) -> True (1 2) (2 1) -> False (2 …

10
枚举带约束的所有可能的整数网格
问题 考虑非负整数的3×3正方形网格。对于每一行i,整数的总和设置为r_i。同样,对于每一列j,该列中的整数总和设置为c_j。 任务是编写代码,以在给定行和列总和约束的情况下枚举所有可能的不同整数分配给网格。您的代码应该一次输出一个分配。 输入项 您的代码应使用3个非负整数指定行约束,并使用3个非负整数指定列约束。您可以假设它们是有效的,即,总和或行约束等于列约束之和。您的代码可以通过任何方便的方式执行此操作。 输出量 您的代码应以您选择的任何人类可读格式输出其计算的不同2D网格。当然,越漂亮越好。输出中不得包含重复的网格。 例 如果所有行和列约束都完全相同1,则只有6不同的可能性。对于第一行,您可以1在前三列中的任何一列中输入a,对于第二行,现在有2替代方法,最后一行现在完全由前两行确定。网格中的其他所有内容都应设置为0。 说输入是2 1 0针对行还是1 1 1针对列。使用APL的可爱输出格式,可能的整数网格为: ┌─────┬─────┬─────┐ │0 1 1│1 0 1│1 1 0│ │1 0 0│0 1 0│0 0 1│ │0 0 0│0 0 0│0 0 0│ └─────┴─────┴─────┘ 现在说输入是1 2 3行和3 2 1列的。可能的整数网格为: ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │0 0 1│0 0 1│0 0 1│0 …

25
一个简单的模式
输入: 您选择的输入格式中的两位数字(我们称它们为m和n)和两个字符(我们称其为a和b)。 输出: 对于演练,请假装m=2, n=5, a='a', b='b'。 您的输出将是根据四个输入构建的字符串。让我们result用value 调用字符串""。首先,连击a到result m时间,所以串连a到result 2倍。result现在等于aa。其次,连击b到result m时间,所以串连b到result 2倍。result现在等于aabb。最后,如果结果已经比更长n,请截断result它,使其具有length n。否则,继续交替使用m的长度运行a,并b直到result有长度n。最终result是aabba,它有长度5。 测试用例: Input: m = 2, n = 4, a = A, b = B Output: AABB Input: m = 3, n = 8, a = A, b = B Output: AAABBBAA Input: m = 4, n …
17 code-golf  string  code-golf  arithmetic  code-golf  string  array-manipulation  rubiks-cube  code-golf  math  number  code-golf  tips  bash  code-golf  ascii-art  music  code-golf  arithmetic  code-golf  math  number  arithmetic  integer  code-golf  number  array-manipulation  code-golf  geometry  grid  set-partitions  code-golf  math  number  code-golf  combinatorics  code-golf  regular-expression  code-golf  permutations  code-golf  ascii-art  code-golf  number  array-manipulation  matrix  code-golf  kolmogorov-complexity  compile-time  cops-and-robbers  polyglot  cops-and-robbers  polyglot  code-golf  string  code-golf  string  ascii-art  matrix  animation  code-golf  ascii-art  code-golf  string  balanced-string  code-golf  integer  integer-partitions  expression-building 

1
德州扑克还是德州扑克?
您的朋友在最后一刻邀请您参加一场高风险的扑克游戏,作为计算机科学家,您决定利用自己的技能在游戏中取得优势。给定2 cards(您的手)和0, 3, 4 or 5 cards(已发牌),您的任务将必须决定,您能得到的最佳手牌是什么。如果将所有7张卡都作为参数给出,答案很明确。如果给予较少,问题将变得更加复杂。但是,这还不足以为您提供所需的优势,您还必须从其余的牌中计算出最好的一手牌,以了解对手的实力。 Hold'em刷新器 如果您不了解Hold'em,则游戏中的每个玩家都以2张牌作为其“手牌”开始。在3个“回合”的过程中,所有其他玩家之间共享了额外的卡。第一轮,显示3张牌。第二张,另外一张,第三张显示最终的牌。先给出的两张牌代表您的手,而后者则表示连续转弯给出的0、3、4或5张牌。 可能的数字: [2,3,4,5,6,7,8,9,T(10),J,Q,K,A] 可能的西装: [S,C,H,D] 全甲板: [2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS, # Spades. 2C,3C,4C,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC, # Clubs. 2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH, # Hearts. 2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD] # Diamonds. 手牌排名: 1:Royal Flush (A-K-Q-J-10, all from the same suit). 2:Straight Flush (Sequential cards, all from the same suit). 3:Four-of-a-Kind (Self explanatory). 4:Full House (3-of-a-kind …

15
计算欧拉数
的欧拉数 A(n, m)是排列的数量[1, 2, ..., n]精确地在其中m元件是比以前的元件大。这些也称为上升。例如,如果,则为n = 33!= 6个排列[1, 2, 3] 1 2 3 < < 2 elements are greater than the previous 1 3 2 < > 1 ... 2 1 3 > < 1 ... 2 3 1 < > 1 ... 3 1 2 > < 1 …

13
逆排列索引
介绍 具有n个元素的列表的字典排列可以从0到n编号!-1.例如3!= 6个置换(1,2,3)将是(1,2,3),(1,3,2),(2,1,3),(2,3,1),(3,1,2),(3,2,1)。 将排列应用于列表时,其元素的排列顺序与排列中的数字相同。例如,将置换(2,3,1)应用于l = (a,b,c)yield (l[2],l[3],l[1]) = (b,c,a)。 排列的逆定义为颠倒此操作的排列,即应用排列,然后其逆(反之亦然)不会修改数组。例如,(2,3,1)is 的逆(3,1,2),因为将其应用于(b,c,a)yields (a,b,c)。 同样,应用于排列本身的排列的逆值会产生整数1… n。例如,应用(3,1,2)到(2,3,1)产率(1,2,3)。 现在,我们将函数revind(x)定义为索引为x的排列的逆排列的索引。(如果您有兴趣,这是A056019。) 由于与指数置换我只修改了最后ķ列表中的项目当且仅当 0≤ 我 < ķ!,我们可以添加任意数量的元素到列表的开始,而不会影响revind(我)。因此,列表的长度不影响结果。 挑战 您的任务是实现revind(x)。您将编写一个完整的程序或函数,以单个非负整数x作为输入/参数,并以单个非负整数输出/返回结果。 输入和输出可以是0索引或1索引,但是它们之间必须保持一致。 禁止按索引生成排列,返回排列的索引或找到逆排列的内建函数。(允许生成所有排列或下一个排列的构建体。) 适用标准代码高尔夫球规则。 例子 下面的示例是0索引的。 Input Output 0 0 1 1 2 2 3 4 4 3 5 5 6 6 13 10 42 51 100 41 1000 …
17 code-golf  combinatorics  permutations  code-golf  image-processing  brainfuck  encode  steganography  code-golf  ascii-art  code-golf  ascii-art  kolmogorov-complexity  code-golf  ascii-art  fibonacci  code-golf  string  code-golf  sorting  popularity-contest  statistics  code-golf  ascii-art  kolmogorov-complexity  code-golf  code-golf  ascii-art  tic-tac-toe  code-golf  string  code-challenge  classification  test-battery  binary-matrix  code-golf  math  arithmetic  code-golf  ascii-art  random  code-golf  string  code-golf  number  binary  bitwise  code-golf  number  arithmetic  code-golf  math  ascii-art  code-golf  string  ascii-art  code-golf  string  ascii-art  code-golf  string  code-golf  counting  code-golf  number  binary  bitwise  decision-problem  code-golf  array-manipulation  code-golf  tips  brain-flak  code-challenge  quine  source-layout  code-generation  code-golf  linear-algebra  matrix  abstract-algebra  binary-matrix  code-golf  string  palindrome  code-golf  puzzle-solver  sudoku  code-golf  ascii-art  code-golf  graphical-output  internet  code-golf  ascii-art  kolmogorov-complexity  code-golf  math  code-golf  clock 

5
巧克力数字
给定一个mby by nChocolate棒,将m,n输出将其分成mn1乘1 的方式数(每次中断发生在网格线上)。 顺序很重要。碎片也很明显,因此1 x 3巧克力棒两端的两个碎片是不相等的。 例如,对于2 x 2块,我们有: _ _ _ _ _ _ _ _ |_‖_| -> |‗| |_| -> |_| |‗| -> |_| |_| |_‖_| |_| |_| _ |_| _ _ |_| |_| |_| _ _ _ _ _ _ _ _ |_‖_| -> |_| |‗| …

9
数喷泉
甲喷泉位于行硬币的布置,使得各硬币触摸两个硬币行中在它下面,或者是底行中,并且底部的行连接。这是一个21硬币喷泉: 您的挑战是计算给定数量的硬币可以制造多少个不同的喷泉。 您将得到一个正整数作为输入 n。您必须输出n存在的不同-coin喷泉的数量。 标准I / O规则,禁止标准漏洞。解决方案应该能够n = 10在一分钟内计算出来。 所需的输出n = 1 ... 10: 1, 1, 2, 3, 5, 9, 15, 26, 45, 78 该序列为OEIS A005169。 这是代码高尔夫。最少的字节数获胜。

6
枚举N维向量
给定正整数k > 1和非负整数i,生成非负整数的k-tuple(或- k维向量)。对于每一个k,从ℕ到ℕ地图ķ,必须是双射。也就是说,每个输入i应产生一个不同的元组,并且每个可能的元组必须由某个输入产生i。 您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行参数或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。 您可以对输出使用任何方便,明确的平面列表格式。 您的解决方案不应施加任何人为限制k,i但您可以假定它们适合您语言的本机整数大小。至少,您必须支持最大为的值255,即使您的本机整数大小也要小于该值。 对于any 1 < k < 32,您的代码应该会在几秒钟内产生一个结果(当然,如果您的答案由于先前的规则而不能支持那么大,则会相应地调整限制)。这应该是没有问题的:它可能解决这一难题,使得它的作品多达2 128在几秒钟,但上限是存在的,以避免回答这实际上从迭代来找到结果。i < 231i0i 请在您的答案中包括对所选映射的描述,以及为什么该映射是双射的(这不需要是正式证明)。 这是代码高尔夫球,最短的答案(以字节为单位)获胜。 相关挑战 从非负数生成一对整数 输出所有有理数的列表

7
查找无和分区
执行摘要 给定input k,找到整数分区,1将其划分n为无k和子集,以n在10分钟内找到最大的子集。 背景:舒尔数 一组A是免费的总和,如果其自我总结A + A = { x + y | x, y in A}有没有相同的元素吧。 对于每个正整数,k都有一个最大的整数S(k),以便{1, 2, ..., S(k)}可以将集合划分为无k和子集。该编号称为第k 个 Schur编号(OEIS A045652)。 例如,S(2) = 4。我们可以将分区{1, 2, 3, 4}为{1, 4}, {2, 3},这是唯一的分区,分为两个无和子集,但是现在不能在这5两个部分中添加。 挑战 编写一个执行以下操作的确定性程序: 以正整数k作为输入 将当前的Unix时间戳写入stdout 按照当前的Unix时间戳,将每个序列的划分为1to 的一系列划分n为无k和子集,以进行递增n。 获胜者将是在n输入后10分钟内在我的计算机上打印最大分区的程序5。纽带将以最快的时间断开,以找到最大的n,平均3次运行的分区:这就是为什么输出应包含时间戳的原因。 重要细节: 我有Ubuntu Precise,因此如果不支持您的语言,我将无法评分。 我有一个Intel Core2 Quad CPU,所以如果您要使用多线程,那么使用4个以上的线程是没有意义的。 如果您希望我使用任何特定的编译器标志或实现,请在您的答案中清楚记录。 您不应对代码进行特殊处理以处理输入5。 您无需输出发现的所有改进。例如,对于输入,2您只能输出的分区n …

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.