{}
é o conjunto vazio. Você pode usar ()
ou []
se você escolher.
Não vamos definir rigorosamente "conjunto", mas todos os conjuntos atendem às seguintes propriedades:
Os conjuntos seguem a estrutura matemática usual. Aqui estão alguns pontos importantes:
- Os conjuntos não são pedidos.
- Nenhum conjunto contém a si próprio.
- Os elementos estão em um conjunto ou não, isso é booleano. Portanto, os elementos do conjunto não podem ter multiplicidades (ou seja, um elemento não pode estar em um conjunto várias vezes).
- Os elementos de um conjunto também são conjuntos e
{}
são o único elemento primitivo.
Tarefa
Escreva um programa / função que determine se dois conjuntos são iguais.
Entrada
Dois conjuntos válidos via stdin ou argumento de função. O formato de entrada está solto dentro do motivo.
Algumas entradas válidas são:
{} {{}}
{{},{{}}} {{{{{},{{}}}}}}
{{},{{},{{}}}} {{{},{{}}},{{{{{},{{}}}}}}}
Entradas inválidas:
{{} {} Brackets will always be balanced.
{{},{}} {} Set contains the same element twice
Resultado
Um valor verdadeiro se as entradas forem iguais, caso contrário, falsificar.
Casos de teste
Seu envio deve responder corretamente para todas as entradas válidas, não apenas para os casos de teste. Estes podem ser atualizados a qualquer momento.
Verdade:
{} {}
{{},{{}}} {{{}},{}}
{{},{{},{{{}},{}}}} {{{{},{{}}},{}},{}}
Falsy:
{} {{}}
{{},{{},{{{}},{}}}} {{{{}}},{},{{}}}
{{},{{}},{{{}}},{{},{{}}}} {}
Pontuação
Regras adicionais
Uma regra adicional foi adicionada banindo tipos iteráveis não ordenados por completo. Eles são muito comuns e banalizam demais esse desafio. Sinta-se à vontade para deixar respostas que violem isso. Coloque uma indicação de que foram feitas antes da alteração da regra.
==
em Julia, 2 bytes;frozenset.__eq__
em Python, 16 bytes; etc.).See the comments for an explanation.
Por favor, não faça isso. Comentários são voláteis e vão embora com muita facilidade, sutff tão importante vai no post corpoRespostas:
CJam, 11 bytes
Experimente aqui.
CJam, 13 bytes
Experimente aqui.
fonte
Gelatina , 6 bytes
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
Braquilog , 8 bytes
Isso espera colchetes na entrada e na saída.
Por exemplo:
Explicação
fonte
Pitão, 9 bytes
Formato de entrada: use em
[]
vez de{}
.Suíte de teste
fonte
Mathematica, 16 bytes
Uma função sem nome que espera uma lista contendo os dois conjuntos, por exemplo
Usamos
//@
(MapAll
) para classificar os conjuntos em todos os níveis e depois afirmar que os resultados são iguais.fonte
JavaScript (ES6), 42 bytes
Aceita entrada usando
[]
s pf([[],[[]]],[[[]],[]])
. Funciona convertendo as matrizes em seqüências de caracteres e classificando-as de dentro para fora.0
e1
são usados porque são mais curtos que'['
e']'
, por exemplo,g([[[]],[]])
é o001,00111
que representa[[],[[]]]
.fonte
0+
aí?0+
e+1
tudo o que eu conseguiria são vírgulas.f=
, não o incluí na contagem de bytes e estou com preguiça de editar a publicação apenas para isso.Python 2, 49 bytes
Por exemplo, chamando a função anônima
g
:fonte
g([[],[[],[]],[[],[[]]],[[]],[[[]]]], [[[],[]],[[[]],[]],[[]],[[[]]],[]])
retornaFalse
, mas os conjuntos são iguais. Isso deve ser corrigido pelo mapeamento antes da classificação.Prolog (SWI) , 37 bytes
Experimente online!
Recebe entradas como listas aninhadas, ou seja, com colchetes em vez de chaves. Originalmente era
X+Y:-sort(X,M),sort(Y,N),maplist(+,M,N).
, mas tentei traduzir a resposta Brachylog v1 do Fatalize e ele ficou 3 bytes mais curto.Na verdade, ele pode lidar com chaves, por mais 23 bytes:
Prolog (SWI) , 60 bytes
Experimente online!
*
aqui converte umX=Y;
termo (não vazio, portanto o ) entre parênteses no lado direito em uma lista dos elementos do termo e os classifica para o lado esquerdo.Desde ambos os argumentos para
+
está passando*
já, colocando umsort
em*
conserva 7 bytes sobre o usopermutation
em+
.E, finalmente, aqui está uma versão que lida com as listas de entrada, possivelmente com elementos duplicados, e foi isso que me inspirou a escrever uma solução no Prolog para começar:
Prolog (SWI) , 57 bytes
Experimente online!
Essencialmente,
X/Y
declara que X é um subconjunto de Y, declarando que, para cada elemento de X, existe um elemento igual de Y, portantoX/Y,Y/X
declara que X e Y são conjuntos iguais.fonte
APL (NARS2000), 4 bytes
⍦
é o operador multiset, que modifica funções para tratar seus argumentos como conjuntos em vez de listas.≡
É a função de equivalência, que retorna um Booleano indicando se os argumentos são completamente equivalentes em valor e formaEm relação à regra adicional: Observe que esta resposta não usa nenhum tipo de dados definido não ordenado, mas apenas listas normais (que podem conter vários elementos idênticos). Apenas os trata como conjuntos.
A contagem de bytes é 4 porque o NARS2000 usa exclusivamente o UCS-2.
fonte
Julia,
363532 bytesA entrada é uma matriz aninhada, seja a
{}
sintaxe (obsoleta) ouAny[]
.Experimente online!
fonte
SETL, 1 byte
Toma conjuntos como argumentos à esquerda e à direita.
Observe que isso NÃO adere à regra adicionada que proíbe tipos de dados definidos não ordenados.
fonte
Brachylog v2, 3 bytes
Experimente online!
Leva um conjunto através da variável de entrada e o outro conjunto através da variável de saída. É bem-sucedido se os conjuntos forem iguais e falhar se não forem.
Como a minha resposta principal do Prolog, uma tradução da resposta Brachylog v1 da Fatalize (que eu acho que poderia ser aplicada
p:0a
?).fonte
, 7 caracteres / 9 bytes
Try it here (ES6 browsers only).
Explicação
fonte
Haskell, 77 bytes
fonte
==
e<
não definido por padrão para listas?)S
como umaL
lista deS
es. Haskell não tem um tipo interno que possa representar listas de listas de listas de…Perl 6 , 55 bytes
Recebe entrada com
[]
.Experimente online!
fonte
$^
sintaxe, e eu não acho que a[]
entrada funcione, já que todos os outros são[[]],[[[]]],[[[[]]]]
avaliados como[]
Língua Wolfram (Mathematica) , 20 bytes
Experimente online!
Função pura que leva cada conjunto como argumento.
fonte