Tarea
Dada una lista de enteros delimitados por espacios como entrada, genera todos los subconjuntos únicos no vacíos de estos números que cada subconjunto suma a 0.
Caso de prueba
Entrada: 8 −7 5 −3 −2
Salida:-3 -2 5
Criterio ganador
Este es el código de golf , por lo que gana el código más corto en bytes.
3 3 -3 -3
?Respuestas:
GolfScript, 41 caracteres
Si no le importa el formato de salida específico, puede acortar el código a 33 caracteres.
Ejemplo (ver en línea ):
fuente
Brachylog (2), 9 caracteres
Pruébalo en línea!
fuente
Python, 119 caracteres
Enumera todos los 2 ^ n subconjuntos de forma recursiva y verifica cada uno.
fuente
Python, 120
Soy un personaje peor que la solución de Keith. Pero ... esto está muy cerca de no publicar. Una de mis características favoritas de code-golf es cuán diferentes pueden ser las soluciones de longitud similar.
fuente
Python (
128 137136)¡Maldita sea
itertools.permutations
, por tener un nombre tan largo!Solución de fuerza bruta. Me sorprende que no sea el más corto: pero creo que
itertools
arruina la solución.Sin golf:
Golfed (salida fea):
Golfed (salida bonita) (183):
import itertools as i
: importando el módulo itertools y llamándoloi
x=map(int,input().split())
: separa la entrada por espacios, luego convierte los elementos de las listas resultantes en enteros (2 3 -5
->[2, 3, -5]
)set (
sorted(j)
para a en rango (1, len (x) +1) para j en i.permutations (x, a) if sum (j) == 0):Devuelve una lista de todos los subconjuntos en
x
, ordenados, donde la suma es 0, y luego obtiene solo los elementos únicos(
set(...)
)Las tumbas (`) alrededor
sorted(j)
son la abreviatura de Pythonrepr(sorted(j))
. La razón por la que esto está aquí es porque los conjuntos en Python no pueden manejar listas, por lo que la siguiente mejor opción es usar cadenas con una lista como texto.fuente
split()
hace una lista de cadenas, pero luego está llamandosum
a los subconjuntos de esa división.from itertools import*
repr()
C # - 384 caracteres
OK, la programación de estilo funcional en C # no es tan corta , ¡pero me encanta ! (Usando solo una enumeración de fuerza bruta, nada mejor).
Formateado y comentado para mayor legibilidad:
fuente
SWI-Prolog 84
Esta versión imprime la lista, en lugar de tratar de encontrar un enlace apropiado para un término en un predicado.
Método de entrada
Para el registro, esta es la versión que encuentra un enlace para satisfacer el predicado:
Método de entrada
La revisión anterior contiene una solución incompleta que no logró eliminar el conjunto vacío.
fuente
Mathematica
62 5738Código
Entrada introduce como números enteros en una matriz,
x
.Salida
Explicación
x[[1, 1]]
convierte la entrada en una lista de enteros.Subsets
genera todos los subconjuntos de los enteros.Select....Tr@# == 0
da todos los subconjuntos que tienen un total igual a 0.Grid
formatea los subconjuntos seleccionados como enteros separados por espacios.fuente
Jalea , 6 bytes
Pruébalo en línea!
Solo por completo. Al igual que Brachylog, Jelly también es posterior al desafío, pero por ahora, los idiomas más nuevos compiten normalmente.
fuente
05AB1E , 5 bytes
Pruébalo en línea!
Si la entrada debe estar delimitada por espacios,
#
el único cambio requerido es anteponer esta respuesta.fuente
J,
57535149 caracteresUso:
fuente
(<@":@(#~0=+/)@#"1 _~2#:@i.@^#)
salva 4 personajes.Stax , 8 bytes CP437
¡Ejecute y depure en línea!
Explicación
Utiliza la versión desempaquetada (9 bytes) para explicar.
fuente
Given a list of space-delimited integers as input
; Sin embargo, está tomando una lista como entrada.J , 34 bytes
Pruébalo en línea!
cómo
".
convierte la entrada en una lista. luego:fuente
Perl 6 , 51 bytes
Pruébalo en línea!
Devuelve una lista de bolsas únicas que suman 0. Una bolsa es un conjunto ponderado.
Explicación:
fuente
Ruby, 110 bytes
Agregará el enlace TIO más tarde.
Toma datos de stdin como una lista de números, p. Ej.
8 −7 5 −3 −2
Cómo funciona: Convierte la entrada en una matriz de números. Obtiene todas las permutaciones de las longitudes de 1 a la longitud de la matriz. Los agrega a la matriz de salida si suman 0. Produce la matriz sin duplicados.
Salida para la entrada de muestra:
[[-3, -2, 5]]
fuente