Dados vários conjuntos, por exemplo s1={2,3,7}
, s2={1,2,4,7,8}
e s3={4,7}
, um diagrama de Venn visualiza cada conjunto por uma curva fechada e por elementos do conjunto que estão dentro ou fora do perímetro da curva, dependendo de serem ou não elementos do conjunto. Como todos os elementos do conjunto aparecem apenas uma vez no digrama de Venn, as curvas que representam cada conjunto precisam se sobrepor se um elemento estiver presente em mais de um conjunto. Chamamos cada uma dessas células sobrepostas a uma célula do diagrama de Venn.
Essa explicação pode ser um pouco confusa, então vamos dar uma olhada em um exemplo.
Exemplo
Um diagrama de Venn para conjuntos s1
, s2
e s3
poderia ser assim:
As células deste diagrama de Venn são (lidas de cima para baixo, da esquerda para a direita) {1,8}
, {2}
, {7}
, {4}
, {3}
, {}
e {}
.
Na prática, geralmente encontramos apenas diagramas de Venn de dois ou três conjuntos, porque a representação dos diagramas de Venn de quatro ou mais conjuntos não é muito clara. Entretanto, eles existem, por exemplo, para seis conjuntos:
CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=1472309
A tarefa
Dado um conjunto não vazio de conjuntos de números inteiros positivos em qualquer representação razoável, retorne o conjunto de células do diagrama de Venn dos conjuntos de entrada. Especificamente, nenhuma representação gráfica é necessária.
- Você pode escrever um programa completo ou uma função.
- Você pode retornar quantos conjuntos vazios houver células vazias (ou seja, uma lista de todas as células) em vez de apenas um conjunto vazio (ou seja, o conjunto de células).
- Algumas maneiras razoáveis de entrada para o exemplo acima incluem, mas não estão limitados a
{{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"
ou"2 3 7\n1 2 4 7 8\n4 7"
. Em caso de dúvida se o formato de entrada escolhido é aceitável, não hesite em perguntar em um comentário. - Seu formato de saída deve corresponder ao seu formato de entrada, se possível. Observe que esta regra exige que seu formato seja capaz de exibir conjuntos vazios sem ambiguidade.
- Isso é código-golfe , então tente usar o mínimo de bytes possível no idioma de sua escolha. Para incentivar a competição por idioma e não entre idiomas, não aceitarei uma resposta.
Casos de teste
Aqui estão algumas entradas, além de possíveis saídas:
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},{},{},{},{}}
?