Questions tagged «set-partitions»

对于与将集合细分为较小的不相交集合有关的挑战。这还包括对有序集合(如列表)和非离散集(如间隔)的细分。挑战应仔细定义所使用的分区概念。

4
将网格拆分为网格
介绍 有一个小村庄,只有几栋房子和空旷的田野。当地官僚希望将村庄分成很多部分,以便每个地块都包含一所房子,并且地块的边界形成一个漂亮的直线网格。您的任务是确定是否可行。 任务 您的输入是一个矩形的二维位数组;1代表房屋,0代表空字段。它的大小将至少为1×1,并且将至少包含1个1。您可以采用任何合理格式的输入(嵌套的整数列表,字符串列表,多行字符串等)。 您的程序将确定是否可以使用水平和垂直直线将数组划分为多个网格单元,以便每个网格单元仅包含一个1。网格单元可能具有不同的大小和形状,尽管它们始终是矩形。这些线必须从阵列的一条边缘延伸到另一条边缘。 例如,以下是数组的有效划分: 00|0010|01|1 01|0000|00|0 --+----+--+- 00|0000|00|1 01|0010|01|0 --+----+--+- 01|1000|10|1 而以下划分是无效的,因为存在没有1或多个1的网格单元: 00|0010|01|1 --+----+--+- 01|0000|00|0 00|0000|00|1 01|0010|01|0 --+----+--+- 00|1000|10|1 如果存在有效的除法,则应输出真实值,否则输出虚假值。 规则和计分 您可以编写完整的程序或函数。最低字节数获胜。 测试用例 [[1]] -> True [[0,1],[1,0]] -> True [[1,1],[1,0]] -> False [[1,0,1],[0,1,0]] -> True [[1,0],[0,1],[0,1]] -> True [[1,0,0],[0,0,1],[0,1,1]] -> True [[1,1,1],[1,1,1],[1,1,1]] -> True [[1,0,1],[0,1,0],[1,0,0]] -> True [[1,0,0],[1,0,0],[0,1,1]] …

1
解决网格图
该七巧板是由七个形状制成的夹层拼图:五种不同大小的三角形,平行四边形和正方形。给定形状,目标是使用所有零件且不重叠来重新创建形状。显然,有无数种方法可以将这组零件排列在平面上。一个有趣的子集是 网格七巧板 我们可以得出“标准”七巧板方成由细分更大的方形网格成16个个小方格。网格七巧板只是由七巧板块组成的形状,因此,这些块的所有顶点都在网格点上。 这些是我们在此挑战中要考虑的七巧板难题,因为它们可能比更一般的难题更容易处理。 附带说明:1942年,中国数学家熊传雄和王付特拉证明了只有13个凸七巧板。他们首先表明,可以将问题简化为网格七巧板,然后使用一些组合和几何参数。这些都是这13个: 挑战 给定可解决的网格七巧板,将网格七巧板的解剖输出为七个七巧板。 IO 七巧板以黑白图像形式给出(形状为黑色,背景为白色),两边的倍数均为50px。网格的宽度正好为50px。网格线平行于图像的侧面。 编辑:图像可以接受为输入,并以任何方便的光栅图像格式(如PNG,TIFF,PBM等)作为输出返回,但是可以将其表示为二进制2d数组或字符串或矩阵。 输出应再次具有相同的大小,并应再次具有相同的形状,但每个部件具有不同的颜色,或者用白线分隔所有部件。值得注意的是,非矩形四边形可以翻转。 块边界上的像素不必完全与形状上的像素匹配,如果存在锯齿效果或其他模糊现象,也可以。 输入和输出示例: 例子: 可能的解决方案:

4
矩形差
在此挑战中,您将获得两个重叠的矩形,并且需要计算通过从另一个中删除一个而创建的矩形。 例如,如果您从黑色矩形中删除红色矩形: 您最终得到以下两个矩形集之一: 您还需要处理以下内容: 更明确地说: 您将输入两个矩形A和B的坐标。 您需要输出覆盖A的所有区域而没有B的最少的非重叠矩形。允许任何可能的覆盖 直角坐标作为4个整数传递。您可以将它们传递为两对(代表两个角点),也可以作为4个整数的元组/列表传递。您的输入和输出必须保持一致。 A和B不一定会重叠或接触,并且各自的面积至少为1 测试用例: [(0 0) (5 5)] [(3 4) (8 7)] -> [(0 0) (5 4)] [(0 4) (3 5)] # or [(0 0) (3 5)] [(3 0) (5 4)] [(2 4) (10 11)] [(5 5) (6 6)] -> [(2 4) (10 5)] …

13
精致分区
考虑一个整数数组: [1, 0, 9, 1, 3, 8] 有很多方法可以将该列表划分为连续的子列表。这是三个: A: [[1, 0, 9], [1, 3, 8]] B: [[1], [0, 9], [1, 3], [8]] C: [[1, 0], [9, 1], [3, 8]] 我们将调用一个分区Ÿ另一个分区的和改进X,如果X可以从以下地址获得ÿ通过加入一些子列表的重新走到一起。 所以,B是的改进A:如果我们前两个和最后两个子列表加入到一起,我们得到A。但是,C是不是的改进A:我们不得不分手的9和1以恢复A从它。同样,任何分区本身都是琐碎的改进。 请注意,我们不允许在任何时候重新排列任何子列表或元素。 挑战 鉴于两个分区(整数列表的列表)X,并Y,确定是否Y是一个细化X。 您可以假设分区将仅包含从0到的整数9(含)。您不能假定X和Y是同一列表的分区(如果不是,则它们也不是彼此的优化)。X和/或Y可能为空,但永远不会包含空子列表。 您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行自变量或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。 输入可以采用任何方便的字符串或列表格式。由于元素只能是一位整数,因此您可以选择在子列表中省略定界符,但请确保前导0s是可能的。您可以选择采取X和Y顺序相反。 输出应该是truthy如果Y是的细化X和falsy否则。 您的代码必须能够在一台合理的台式机上在一秒钟内解决以下每个测试用例。(这仅仅是为了避免简单的暴力解决方案而进行的健全性检查。) 这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。 测试用例 每个测试用例都单独显示,写成X Y。我正在使用GolfScript / CJam样式的数组表示法来节省一些水平空间: 真相: [] [] [[0]] [[0]] …

1
数一下ASCII hamantaschen!
今天是普im节(Purim),一种习俗是散发出带有馅料的三角形饼干hamantaschen(单数:hamantasch)。另一种习惯是大量饮酒。 我不是最完美的面包师。。。我有很多不规则尺寸的hamantaschen可供分发,还有很多朋友可以给他们!如果我给您发送了一张我的饼干的照片,您能告诉我我有多少个大小和馅料吗?但是因为是普im节,而且我太醉了,无法阅读太多代码,所以它必须尽可能地小。 定义 尺寸 hamantasch可以是任何大小。最小的hamantasch是1号,看起来像这样: /\ -- -- \/ 有时,多个hamantaschen可能会重叠。以下形状算作两个hamantaschen(一个尺寸1,一个尺寸2): /\ /\ \ ---- 一些hamantaschen 充满了。这将通过用字符填充内部的所有空白来表示。请注意,尺寸1的hamantaschen不能填充。 我们将根据馅料和大小来命名 hamantaschen。让我们使用格式<filling> <size>,如果没有填充,- <size>可以使用空格代替-,但markdown并不是这样)。 这是一个. 2,一个. 4和一个- 3: /\ /./\ ---- /./ \ \../ /./ \ \/ -------- 这些是@ 3,a . 2和a - 4: /\ / /\ /\ / /@@\ /..\ / /@@@@\ ---- …

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

15
将列表分为大小的块,但不计算不包含谓词的项目
动机:有时候列表中的某些项目不会计入您的总数。例如,按排计数飞机乘客,其中婴儿坐在父母的膝盖上。 挑战:编写一个程序将项目列表拆分为多个块。每个块(除了最后一个块)都具有相同的大小,其中size定义为通过谓词函数的项目数。 规则: 您的程序必须 项目清单 正整数块大小 谓词函数(获取一项,并返回true或false) 您必须返回输入列表,并将其分成多个部分 每个块都是项目列表 总体而言,这些物品必须保持相同的顺序,且没有杂物 每个块(可能是最后一个块除外)中通过谓词的项目数应与输入块大小匹配。 无法通过谓词的项目不应计入此大小 谓词失败的项目是 仍包含在输出块中 分配给最早的块,如果块“满”,但接下来的项是不通过谓词的项 因此,最终块可能不仅仅包含不符合谓词的项目 最终块的大小可能小于块大小,因为所有项目都已考虑在内。 非详尽示例: 最简单的示例是考虑1s和0s,其中谓词函数为x ==> x > 0。在这种情况下,sum每个块的都必须与块大小匹配。 项目:[],大小:2,谓词:x > 0-> []或[[]] 项目:[0, 0, 0, 0, 0, 0],大小:2,谓词:x > 0->[[0, 0, 0, 0, 0, 0]] 项目:[0, 1, 1, 0],大小:2,谓词:x > 0->[[0, 1, 1, 0]] 项目:[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 

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 …

7
数字的排序词法分区
挑战非常简单:给定一个数字,将其数字拆分为一个较小数字的数组,以使结果数字不变。要注意的是,您必须将其拆分为最大数组长度。 困惑? 您可以通过STDIN(或最接近的替代方法),命令行参数或函数参数以任何方便,明确的输入格式为您提供正整数。 您必须将数字的十进制数字划分为连续的,不相交的组。 这些数字组代表的数字数组应排序(按通常的,不递减的顺序),而无需重新排列组。 如果存在多个这样的分区,则必须将输入划分为尽可能多的数字。如果是平局,则返回一个这样的结果。 您可以将数组输出到STDOUT(或最接近的替代品)或作为函数返回值。如果是STDOUT(或最接近的替代产品),则应以任何方便,明确的列表格式打印阵列。 分割数不应包含前导零。因此,例如1002003,不能将其打印为[1, 002, 003]或[1, 2, 3],并且唯一有效的答案是[100, 2003]。 测试用例: 123456 -> [1, 2, 3, 4, 5, 6] 345823 -> [3, 4, 5, 8, 23] 12345678901234567890 -> [1, 2, 3, 4, 5, 6, 7, 8, 90, 123, 456, 7890] 102 -> [102] 302 -> [302] 324142 …

10
划分水流图
在Palantir Technologies的采访中,这是互联网上的一个挑战。 一组农民有一些海拔数据,我们将帮助他们了解降雨如何流过他们的农田。我们将土地表示为高度的二维数组,并根据水流向山下的思想使用以下模型: 如果一个单元格的四个相邻单元格都具有更高的高度,我们称此单元格为汇;水在水槽中积聚。否则,水将流到最低高度的相邻单元格。如果某个单元格不是接收器,则可以假定它具有唯一的最低邻居,并且该邻居将比该单元格低。 直接或间接排入同一水槽的细胞被称为同一盆的一部分。 您面临的挑战是将地图分成多个盆地。特别是,在给定高程图的情况下,您的代码应将地图划分为盆地,并按降序输出盆地的大小。 假设高程图是正方形的。输入将从以一个整数S(表示地图的高度(和宽度))开始。接下来的S行将分别包含地图的一行,每行都有S个整数-行中S个单元格的高程。一些农民土地面积较小,例如以下示例,而有些农民土地面积较大。但是,在任何情况下农民都不会拥有大于S = 5000的土地。 您的代码应按降序输出以空格分隔的盆地尺寸列表。(忽略尾随空格。) 下面是一些示例。 输入: 3 1 5 2 2 4 7 3 6 9 输出: 7 2 标有A和B的盆地为: A A B A A B A A A 输入: 1 10 输出: 1 在这种情况下,只有一个盆地。 输入: 5 1 0 2 5 8 2 3 …

7
多少个分区仅包含完美正方形?
给定一个非负整数或一列数字,请通过将可能有前导零的平方数级联来确定以几种方式形成数字。 例子 input -> output # explanation 164 -> 2 # [16, 4], [1, 64] 101 -> 2 # [1, 01], [1, 0, 1] 100 -> 3 # [100], [1, 00], [1, 0, 0] 1 -> 1 # [1] 0 -> 1 # [0] 164900 -> 9 # [1, 64, …

2
划分为增加的子序列
规格 这个挑战很容易说明:您的输入是一个非负整数的非空数组,您的任务是将其划分为尽可能少的递增子序列。更正式地讲,如果输入数组是A,则输出是一个数组数组B,使得: 每个阵列B形成A不相交(不一定是连续的)子序列的分区。在归纳法上,这意味着要么B是包含的单例数组,要么是的A第一个元素B是的子序列,A其余部分形成的分区,A并且删除了该子序列。 B(不一定严格)增加每个数组。 中的数组数量B最少。 输入和输出都可以采用您语言的本机数组格式。请注意,可能有几个正确的输出。 例 考虑输入数组A = [1,2,1,2,5,4,7,1]。一种可能的输出是B = [[1],[1,2,4,7],[1,2,5]]。从此图可以明显看出分区条件: A 1 2 1 2 5 4 7 1 B[0] 1 B[1] 1 2 4 7 B[2] 1 2 5 同样,每个数组都在B增加。最后,A由于不能分为两个递增的子序列,因此的长度B也很短。因此,这是有效的输出。 规则和计分 您可以编写函数或完整程序。最低字节数获胜,并且不允许出现标准漏洞。没有时间限制,但是您应该在提交所有测试用例之前对解决方案进行评估。 测试用例 仅显示一个可能的输出,但可能有多个有效选项。特别地,结果中数组的顺序无关紧要(但每个单独的数组应按递增顺序排列)。 [0] -> [[0]] [3,5,8] -> [[3,5,8]] [2,2,2,2] -> [[2,2,2,2]] [1154,1012,976,845] -> [[845],[976],[1012],[1154]] [6,32,1,2,34,8] …

1
将比萨切成相同的切片
在我完全阅读它之前,这就是我认为的问题。 一群有经验的高尔夫球手走进第十九叮咬比萨店,点了一个披萨。它呈不规则形状,由单位正方形组成。您的任务是帮助他们将其切成相同的切片。也就是说,切片必须具有完全相同的形状和大小。它们可以旋转,但不能翻转/镜像。例如,如果它们是俄罗斯方块,它们必须是同一种,则不能同时使用L片和J片。 输入值 在第一行中将为您提供组中的人数(总是2到10之间的整数,包括2和10),然后是矩形的矩阵,由''(空格)和'#'字符组成,代表披萨。所有“#”字符都通过其边缘连接。“#”字符的数量保证为人数的倍数。 输出量 您应该打印相同的矩阵,每个'#'字符替换为从0到n-1的数字(n是人数)。每个数字应标记一个切片。切片形状必须通过正方形边缘连接。切片编号不需要按任何特定顺序进行。如果有多种切比萨饼的方法,那么任何一种都是可以接受的。 如果无法按照要求切比萨饼,则应打印字符串“ No pizza for you!”。代替。 计分 这是代码高尔夫。您的分数将是程序中的字节数。字符将通过其UTF-8编码进行计数。最低分获胜。 例子 输入: 3 # ### #### # 输出: 0 100 1122 2 输入: 4 ### # # ### 输出: 001 2 1 233 输入: 2 # # ###### 输出: No pizza for you! 输入: 5 # #### …

23
计算列表中集合的出现次数
给定一个非空的字符串集和一个字符串列表,请找出该字符串集在列表中出现的次数,即可以使用列表中的项创建该字符串集的次数。列表中的每个元素只能使用一次。 提示:集合是唯一项的无序列表。 默认输入/输出规则适用。 不允许外部库。编译器/解释器标准库是可以的。这是代码高尔夫,因此最短的解决方案很重要。 测试用例: ["apple", "banana"], ["apple", "pear", "apple", "banana", "banana"] => 2 ["apple", "banana"], ["apple", "pear", "apple", "banana", "apple"] => 1 ["apple", "banana", "pear"], ["apple", "banana", "kiwi", "apple"] => 0 ["coconut"], [] => 0 编辑:删除了一个句子,指出输入参数是在本地范围内定义的。这与上面链接的默认IO规则相矛盾。

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.