Python ( 128 137 136)
¡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:
import itertools
initial_set=map(int, input().split())
ans=[]
for length in range(1, len(x)+1):
for subset in itertools.permutations(initial_set, length):
if sum(subset)==0:
ans+=str(sorted(subset))
print set(ans)
Golfed (salida fea):
from itertools import*
x=map(int,input().split())
print set(`sorted(j)`for a in range(1,len(x)+1)for j in permutations(x,a)if sum(j)==0)
Golfed (salida bonita) (183):
from itertools import*
x=map(int,input().split())
print `set(`sorted(j)`[1:-1]for a in range(1,len(x)+1)for j in permutations(x,a)if sum(j)==0)`[5:-2].replace("'","\n").replace(",","")
import itertools as i
: importando el módulo itertools y llamándolo i
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 Python repr(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.
3 3 -3 -3
?