{}
Es el conjunto vacío. Puede usar ()
o []
si lo desea.
No vamos a definir rigurosamente "conjunto", pero todos los conjuntos satisfacen las siguientes propiedades:
Los conjuntos siguen la estructura matemática habitual. Aquí hay algunos puntos importantes:
- Los conjuntos no están ordenados.
- Ningún conjunto se contiene a sí mismo.
- Los elementos están en un conjunto o no, esto es booleano. Por lo tanto, los elementos del conjunto no pueden tener multiplicidades (es decir, un elemento no puede estar en un conjunto varias veces).
- Los elementos de un conjunto también son conjuntos y
{}
es el único elemento primitivo.
Tarea
Escriba un programa / función que determine si dos conjuntos son iguales.
Entrada
Dos conjuntos válidos a través de stdin o argumento de función. El formato de entrada está suelto dentro de lo razonable.
Algunas entradas válidas son:
{} {{}}
{{},{{}}} {{{{{},{{}}}}}}
{{},{{},{{}}}} {{{},{{}}},{{{{{},{{}}}}}}}
Entradas inválidas:
{{} {} Brackets will always be balanced.
{{},{}} {} Set contains the same element twice
Salida
Un valor verdadero si las entradas son iguales, de lo contrario, falso.
Casos de prueba
Su envío debe responder correctamente para todas las entradas válidas, no solo para los casos de prueba. Estos pueden actualizarse en cualquier momento.
Verdad:
{} {}
{{},{{}}} {{{}},{}}
{{},{{},{{{}},{}}}} {{{{},{{}}},{}},{}}
Falsy
{} {{}}
{{},{{},{{{}},{}}}} {{{{}}},{},{{}}}
{{},{{}},{{{}}},{{},{{}}}} {}
Puntuación
Reglas Adicionales
Se ha agregado una regla adicional que prohíbe completamente los tipos iterables no ordenados. Son demasiado comunes y trivializan demasiado este desafío. Siéntase libre de dejar respuestas que violen esto en su lugar, solo indique que se hicieron antes del cambio de regla.
==
en Julia, 2 bytes;frozenset.__eq__
en Python, 16 bytes; etc.).See the comments for an explanation.
Por favor no hagas esto. Los comentarios son volátiles y desaparecen muy fácilmente, por lo que el sutff importante entra en el cuerpo del mensajeRespuestas:
CJam, 11 bytes
Pruébalo aquí.
CJam, 13 bytes
Pruébalo aquí.
fuente
Jalea , 6 bytes
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
Brachylog , 8 bytes
Esto espera corchetes en entrada y salida.
Por ejemplo:
Explicación
fuente
Pyth, 9 bytes
Formato de entrada: use en
[]
lugar de{}
.Banco de pruebas
fuente
Mathematica, 16 bytes
Una función sin nombre que espera una lista que contenga ambos conjuntos, por ej.
Usamos
//@
(MapAll
) para ordenar los conjuntos en cada nivel y luego afirmar que los resultados son iguales.fuente
JavaScript (ES6), 42 bytes
Acepta entrada usando
[]
s egf([[],[[]]],[[[]],[]])
. Funciona convirtiendo las matrices en cadenas y luego clasificándolas de adentro hacia afuera.0
y1
se utilizan porque son más cortos que'['
y']'
, así por ejemplo,g([[[]],[]])
es001,00111
lo que representa[[],[[]]]
.fuente
0+
ahí?0+
y+1
todo lo que obtendría son comas.f=
, no lo incluí en el conteo de bytes y soy demasiado vago para editar la publicación solo por eso.Python 2, 49 bytes
Por ejemplo, llamando a la función anónima
g
:fuente
g([[],[[],[]],[[],[[]]],[[]],[[[]]]], [[[],[]],[[[]],[]],[[]],[[[]]],[]])
vuelveFalse
, pero los conjuntos son iguales. Eso debería solucionarse mediante mapeo antes de ordenar.Prólogo (SWI) , 37 bytes
Pruébalo en línea!
Toma la entrada como listas anidadas, es decir, con corchetes en lugar de llaves. Originalmente, esto era
X+Y:-sort(X,M),sort(Y,N),maplist(+,M,N).
, pero luego intenté traducir la respuesta Brachylog v1 de Fatalize y resultó 3 bytes más corto.En realidad, puede manejar llaves en lugar de 23 bytes más:
Prólogo (SWI) , 60 bytes
Pruébalo en línea!
*
aquí convierte unX=Y;
término de llave (no vacío, por lo tanto ) en su lado derecho a una lista de los elementos del término y luego lo ordena a su lado izquierdo.Dado que ambos argumentos ya
+
están pasando*
, poner unsort
in*
ahorra 7 bytes sobre el uso depermutation
in+
.Y finalmente, aquí hay una versión que maneja las listas de entrada que posiblemente tengan elementos duplicados, que es lo que me inspiró a escribir una solución en Prolog para comenzar:
Prólogo (SWI) , 57 bytes
Pruébalo en línea!
Esencialmente,
X/Y
declara que X es un subconjunto de Y, al declarar que para cada elemento de X, hay un elemento igual de Y, por loX/Y,Y/X
que declara que X e Y son conjuntos iguales.fuente
APL (NARS2000), 4 bytes
⍦
es el operador multiset, que modifica las funciones para tratar sus argumentos como conjuntos en lugar de listas,≡
es la función de equivalencia, que devuelve un valor booleano que indica si los argumentos son completamente equivalentes en valor y formaCon respecto a la regla adicional: tenga en cuenta que esta respuesta no utiliza ningún tipo de datos de conjunto desordenado, sino solo listas normales (que pueden contener múltiples elementos idénticos). Simplemente los trata como conjuntos.
El recuento de bytes es 4 porque NARS2000 usa UCS-2 exclusivamente.
fuente
Julia,
363532 bytesLa entrada es una matriz anidada, ya sea la
{}
sintaxis (en desuso) oAny[]
.Pruébalo en línea!
fuente
SETL, 1 byte
Toma conjuntos como argumentos izquierdo y derecho.
Tenga en cuenta que esto NO cumple con la regla agregada que prohíbe tipos de datos de conjuntos desordenados.
fuente
Brachylog v2, 3 bytes
Pruébalo en línea!
Toma un conjunto a través de la variable de entrada y el otro conjunto a través de la variable de salida. Tiene éxito si los conjuntos son iguales y falla si no lo son.
Al igual que mi respuesta principal de Prolog, una traducción de la respuesta Brachylog v1 de Fatalize (que creo que se podría resumir
p:0a
).fuente
𝔼𝕊𝕄𝕚𝕟, 7 caracteres / 9 bytes
Try it here (ES6 browsers only).
Explicación
fuente
Haskell, 77 bytes
fuente
==
y<
no están definidos de manera predeterminada para las listas?)S
como una lista (incluidaL
) deS
es. Haskell no tiene un tipo incorporado que pueda representar listas de listas de listas de ...Perl 6 , 55 bytes
Toma entrada con
[]
.Pruébalo en línea!
fuente
$^
sintaxis en su lugar, y no creo que la[]
entrada funcione, ya que todo,[[]],[[[]]],[[[[]]]]
etc. evalúa[]
Wolfram Language (Mathematica) , 20 bytes
Pruébalo en línea!
Función pura que toma cada conjunto como argumento.
fuente