З урахуванням декількох наборів, наприклад 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},{},{},{},{}}
?