首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(RGS 5/5)计算固定大小的所有集分区的集合

(RGS 5/5)计算固定大小的所有集分区的集合
EN

Code Golf用户
提问于 2020-03-11 08:06:34
回答 9查看 1.2K关注 0票数 20

任务

给定一组n唯一元素和一组多个正数的l,它们相加成n,找出将这些唯一元素划分为不相交集的所有方法,这些集合的大小由l元素给定。

(多集是允许重复元素的集合)

这里的要点是,我们将输出中的所有内容作为集合,所以顺序在任何地方都不重要。

如果您检查下面的一些测试用例,这可能更容易理解。

输入

加为l的正整数的多集n。注意,l中的元素可能会重复出现。这可能是

  • 列表l = [1, 1, 2, 2, 3]
  • 函数f(1, 1, 2, 2, 3)的参数
  • 或任何其他合理的表示多集的方法。

您可以假定l的表示是有序的。

您还可以使用n不同整数的列表/集/集合,或者根据l中的元素之和生成它。如果生成它,则可以对要分区的集合使用任何n不同的整数,但其余的代码应该适用于任何一组n整数。您使用的集合必须在您的回答中指定。建议包括:

  • 0[0, 1, ..., n-1]开头的范围
  • 1[1, 2, ..., n]开头的范围

输出

集合可以在给定大小的集合中拆分的不同方式。您的输出应该是明确的。

参考实现

您可以找到一个这里的vanilla python参考实现你可以在网上试一试

测试用例

当列表加到n时,我使用的是set D45。在TIO链接中,该列表显式地给出了我的函数。

->之后,每一行表示一种分割集合的可能方法。

代码语言:javascript
复制
[1, 1, 1, 1, 1, 1, 1, 1] -> [
    [[0], [1], [2], [3], [4], [5], [6], [7]]
]

[3] -> [
    [[0, 1, 2]]
]

[1, 2] -> [
    [[0], [1, 2]]
    [[1], [0, 2]]
    [[2], [0, 1]]
]

[2, 2] -> [
    [[0, 1], [2, 3]]
    [[0, 2], [1, 3]]
    [[0, 3], [1, 2]]
]

[1, 1, 2] -> [
    [[0], [1], [2, 3]]
    [[0], [2], [1, 3]]
    [[0], [3], [1, 2]]
    [[1], [2], [0, 3]]
    [[1], [3], [0, 2]]
    [[2], [3], [0, 1]]
]

[1, 2, 2] -> [
    [[0], [1, 2], [3, 4]]
    [[0], [1, 3], [2, 4]]
    [[0], [1, 4], [2, 3]]
    [[1], [0, 2], [3, 4]]
    [[1], [0, 3], [2, 4]]
    [[1], [0, 4], [2, 3]]
    [[2], [0, 1], [3, 4]]
    [[2], [0, 3], [1, 4]]
    [[2], [0, 4], [1, 3]]
    [[3], [0, 1], [2, 4]]
    [[3], [0, 2], [1, 4]]
    [[3], [0, 4], [1, 2]]
    [[4], [0, 1], [2, 3]]
    [[4], [0, 2], [1, 3]]
    [[4], [0, 3], [1, 2]]
]

[2, 2, 2] -> [
    [[0, 1], [2, 3], [4, 5]]
    [[0, 1], [2, 4], [3, 5]]
    [[0, 1], [2, 5], [3, 4]]
    [[0, 2], [1, 3], [4, 5]]
    [[0, 2], [1, 4], [3, 5]]
    [[0, 2], [1, 5], [3, 4]]
    [[0, 3], [1, 2], [4, 5]]
    [[0, 3], [1, 4], [2, 5]]
    [[0, 3], [1, 5], [2, 4]]
    [[0, 4], [1, 2], [3, 5]]
    [[0, 4], [1, 3], [2, 5]]
    [[0, 4], [1, 5], [2, 3]]
    [[0, 5], [1, 2], [3, 4]]
    [[0, 5], [1, 3], [2, 4]]
    [[0, 5], [1, 4], [2, 3]]
]

[1, 2, 3] -> [
    [[0], [1, 2], [3, 4, 5]]
    [[0], [1, 3], [2, 4, 5]]
    [[0], [1, 4], [2, 3, 5]]
    [[0], [1, 5], [2, 3, 4]]
    [[0], [2, 3], [1, 4, 5]]
    [[0], [2, 4], [1, 3, 5]]
    [[0], [2, 5], [1, 3, 4]]
    [[0], [3, 4], [1, 2, 5]]
    [[0], [3, 5], [1, 2, 4]]
    [[0], [4, 5], [1, 2, 3]]
    [[1], [0, 2], [3, 4, 5]]
    [[1], [0, 3], [2, 4, 5]]
    [[1], [0, 4], [2, 3, 5]]
    [[1], [0, 5], [2, 3, 4]]
    [[1], [2, 3], [0, 4, 5]]
    [[1], [2, 4], [0, 3, 5]]
    [[1], [2, 5], [0, 3, 4]]
    [[1], [3, 4], [0, 2, 5]]
    [[1], [3, 5], [0, 2, 4]]
    [[1], [4, 5], [0, 2, 3]]
    [[2], [0, 1], [3, 4, 5]]
    [[2], [0, 3], [1, 4, 5]]
    [[2], [0, 4], [1, 3, 5]]
    [[2], [0, 5], [1, 3, 4]]
    [[2], [1, 3], [0, 4, 5]]
    [[2], [1, 4], [0, 3, 5]]
    [[2], [1, 5], [0, 3, 4]]
    [[2], [3, 4], [0, 1, 5]]
    [[2], [3, 5], [0, 1, 4]]
    [[2], [4, 5], [0, 1, 3]]
    [[3], [0, 1], [2, 4, 5]]
    [[3], [0, 2], [1, 4, 5]]
    [[3], [0, 4], [1, 2, 5]]
    [[3], [0, 5], [1, 2, 4]]
    [[3], [1, 2], [0, 4, 5]]
    [[3], [1, 4], [0, 2, 5]]
    [[3], [1, 5], [0, 2, 4]]
    [[3], [2, 4], [0, 1, 5]]
    [[3], [2, 5], [0, 1, 4]]
    [[3], [4, 5], [0, 1, 2]]
    [[4], [0, 1], [2, 3, 5]]
    [[4], [0, 2], [1, 3, 5]]
    [[4], [0, 3], [1, 2, 5]]
    [[4], [0, 5], [1, 2, 3]]
    [[4], [1, 2], [0, 3, 5]]
    [[4], [1, 3], [0, 2, 5]]
    [[4], [1, 5], [0, 2, 3]]
    [[4], [2, 3], [0, 1, 5]]
    [[4], [2, 5], [0, 1, 3]]
    [[4], [3, 5], [0, 1, 2]]
    [[5], [0, 1], [2, 3, 4]]
    [[5], [0, 2], [1, 3, 4]]
    [[5], [0, 3], [1, 2, 4]]
    [[5], [0, 4], [1, 2, 3]]
    [[5], [1, 2], [0, 3, 4]]
    [[5], [1, 3], [0, 2, 4]]
    [[5], [1, 4], [0, 2, 3]]
    [[5], [2, 3], [0, 1, 4]]
    [[5], [2, 4], [0, 1, 3]]
    [[5], [3, 4], [0, 1, 2]]
]

[1, 1, 4] -> [
    [[0], [1], [2, 3, 4, 5]]
    [[0], [2], [1, 3, 4, 5]]
    [[0], [3], [1, 2, 4, 5]]
    [[0], [4], [1, 2, 3, 5]]
    [[0], [5], [1, 2, 3, 4]]
    [[1], [2], [0, 3, 4, 5]]
    [[1], [3], [0, 2, 4, 5]]
    [[1], [4], [0, 2, 3, 5]]
    [[1], [5], [0, 2, 3, 4]]
    [[2], [3], [0, 1, 4, 5]]
    [[2], [4], [0, 1, 3, 5]]
    [[2], [5], [0, 1, 3, 4]]
    [[3], [4], [0, 1, 2, 5]]
    [[3], [5], [0, 1, 2, 4]]
    [[4], [5], [0, 1, 2, 3]]
]

这是RGS高尔夫表演的第五个也是最后的挑战。如果你想参加比赛,你有96个小时的时间提交你的合格答案。记住,在奖品中还有300个声誉!(见规则6)

此外,根据链接元员额规则第4节,第三项挑战的“受限语言”只有大锤J数学,因此以这些语言提交的作品没有资格获得最终奖。但他们仍然可以被张贴!!

最终奖

如果你想被认为是最终的奖品,在你对这个挑战的答案的末尾,请添加一个链接到你想要被考虑为你的最终分数的合格的提交,以及那些答案得到的分数!这样,我就能更容易地了解所有的事情了。谢谢!

这仍然是一个常规的密码-高尔夫挑战,所以享受吧!

EN

回答 9

Code Golf用户

发布于 2020-03-11 13:56:35

05AB1E,9字节

代码语言:javascript
复制
œεI£€{{}ê

在网上试试!

代码语言:javascript
复制
œ           # permutations of the [0, ..., n-1] input
 ε     }    # for each permutation:
  I£        #  cut it in parts of lengths given by the second input
    €{      #  sort each part
      {     #  sort the list of parts
        ê   # sort and uniquify the list of lists of parts
票数 5
EN

Code Golf用户

发布于 2020-03-11 12:24:21

Wolfram语言(数学),63字节

使用范围

代码语言:javascript
复制
Union[Sort/@(Sort/@#~TakeList~a&/@Permutations@Range@Tr[a=#])]&

在网上试试!

票数 3
EN

Code Golf用户

发布于 2020-03-11 19:05:12

果冻,12字节

代码语言:javascript
复制
œcŒpFQƑ$ƇṢ€Q

在网上试试!

一个以n整数列表为左参数,集合长度列表为右的二进链接。返回列表列表。

感谢@KevinCruijssen在我最初的回答中指出了一个遗漏。

以前提交的RGS:

  1. 果冻12字节
  2. 英国广播公司基本V92字节
  3. 果冻37字节
  4. R 128字节
  5. 果冻12字节(这篇文章)

Total: 281个字节

票数 3
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/200861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档