维恩图单元
给定的多组,例如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}} …