给定的多组,例如s1={2,3,7}
,s2={1,2,4,7,8}
和s3={4,7}
,一个维恩图可视每一组由闭合曲线和一套元件,其内部或曲线的周边之外,这取决于它们是否是该组或不的元件。因为所有集合元素在Venn图中仅出现一次,所以如果一个元素存在于多个集合中,则表示每个集合的曲线需要重叠。我们称这种重叠为维恩图的一个单元。
这种解释可能有点混乱,因此让我们看一个示例。
例
维恩图的集合s1
,s2
并且s3
看起来是这样的:
被(从顶部到底部看,从左到右)这个文氏图的细胞{1,8}
,{2}
,{7}
,{4}
,{3}
,{}
和{}
。
在实践中,一个人通常只遇到两个或三个集合的维恩图,因为四个或更多集合的维恩图的表示不是很清楚。但是它们确实存在,例如六组:CC BY-SA 3.0,https:
//commons.wikimedia.org/w/index.php?curid = 1472309
任务
给定一组以任何合理表示形式表示的非空正整数集,请返回输入集的维恩图的像元集。具体而言,不需要图形表示。
- 您可以编写完整的程序或函数。
- 您可能会返回与有空单元格(即,所有单元格的列表)一样多的空集,而不是仅返回一个空集(即,单元格的集合)。
- 输入的用于上述示例的一些合理的方式包括但不限于
{{2,3,7},{1,2,4,7,8},{4,7}}
,[[2,3,7],[1,2,4,7,8],[4,7]]
,"2,3,7;1,2,4,7,8;4,7"
或"2 3 7\n1 2 4 7 8\n4 7"
。如果不确定您选择的输入格式是否可接受,请随时在评论中提问。 - 如果可能,您的输出格式应与您的输入格式匹配。请注意,此规则要求您的格式能够明确显示空集。
- 这是code-golf,因此请尝试使用您选择的语言使用尽可能少的字节。为了鼓励每种语言而不是每种语言之间的竞争,我不会接受答案。
测试用例
以下是一些输入以及可能的输出:
input -> output
{{2,3,7},{1,2,4,7,8},{4,7}} -> {{1,8},{2},{7},{4},{3},{}} (or {{1,8},{2},{7},{4},{3},{},{}})
{{1,2,3},{4,5,6},{7,8,9}} -> {{1,2,3},{4,5,6},{7,8,9},{}}
{{}} -> {{}}
{{1,2,3},{1,2}} -> {{1,2},{3},{}}
{{4,3,8},{1,2,9,3},{14,7,8,5},{6,11,3,8},{10},{9,4,3,7,10}} -> {{6,11},{10},{4},{3},{8},{5,14},{1,2},{9},{7},{}}
{{2,3,4,7},{},{1,3,7,5,6},{2,3,7,5},{7,2,4,3,6},{1,4,5}} -> {{},{4},{2},{7,3},{1},{6},{5}}
{{1,2,3,4},{1,2,5,6},{1,3,5,7}} -> {{4},{3},{2},{1},{6},{5},{7}}
{{1,2,3},{4,5,6},{7,8,9},{},{},{},{}}
?