Python ( 128137 136)
Maldito, itertools.permutations
por ter um nome tão longo!
Solução de força bruta. Estou surpreso que não seja o mais curto: mas achoitertools
estraga a solução.
Ungolfed:
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)
Golfe (saída feia):
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)
Golfe (saída 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 o módulo itertools e chamando-o i
x=map(int,input().split())
: separa a entrada por espaços e transforma os itens das listas resultantes em números inteiros ( 2 3 -5
-> [2, 3, -5]
)
set ( sorted(j)
para um no intervalo (1, len (x) +1) para j em i.permutations (x, a) if sum (j) == 0):
Retorna uma lista de todos os subconjuntos em x
, classificados, onde a soma é 0 e, em seguida, obtém apenas os itens exclusivos
( set(...)
)
Os túmulos (`) ao redor sorted(j)
são uma abreviação para Python repr(sorted(j))
. A razão pela qual isso está aqui é porque os conjuntos no Python não podem manipular listas, então a próxima melhor coisa é usar cadeias com uma lista como texto.
3 3 -3 -3
?