При наличии нескольких наборов, например s1={2,3,7}
, s2={1,2,4,7,8}
и s3={4,7}
, диаграмма Венна визуализирует каждый набор с помощью замкнутой кривой и элементов набора, которые находятся внутри или за пределами периметра кривой, в зависимости от того, являются ли они элементом набора или нет. Поскольку все элементы набора появляются только один раз на биграмме Венна, кривые, представляющие каждый набор, должны перекрываться, если элемент присутствует в более чем одном наборе. Мы называем каждое такое перекрытие ячейкой диаграммы Венна.
Это объяснение может быть немного запутанным, поэтому давайте посмотрим на пример.
пример
Венна диаграмма для множеств 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"
. Если вы сомневаетесь, приемлем ли выбранный вами формат ввода, не стесняйтесь спрашивать в комментарии. - Ваш выходной формат должен соответствовать вашему входному формату, если это возможно. Обратите внимание, что это правило требует, чтобы ваш формат имел возможность однозначно отображать пустые наборы.
- Это код-гольф , поэтому старайтесь использовать как можно меньше байтов на выбранном вами языке. Чтобы поощрять конкуренцию за язык, а не между языками, я не приму ответ.
Тестовые случаи
Вот некоторые входы вместе с возможными выходами:
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},{},{},{},{}}
?