Python ( 128 137 136)
Accidenti a te, itertools.permutations
per avere un nome così lungo!
Soluzione di forza bruta. Sono sorpreso che non sia il più breve: ma immagino itertools
rovina la soluzione.
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)
Golf (uscita brutta):
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 (bella uscita) (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 il modulo itertools e chiamandolo i
x=map(int,input().split())
: separa l'input per spazi, quindi trasforma gli elementi degli elenchi risultanti in numeri interi ( 2 3 -5
-> [2, 3, -5]
)
set ( sorted(j)
per a in range (1, len (x) +1) per j in i.permutations (x, a) se sum (j) == 0):
restituisce un elenco di tutti i sottoinsiemi in x
, ordinati, in cui la somma è 0, quindi ottiene solo gli elementi univoci
( set(...)
)
The graves (`) around sorted(j)
è la scorciatoia di Python per repr(sorted(j))
. Il motivo per cui questo è qui è perché gli insiemi in Python non possono gestire gli elenchi, quindi la cosa migliore è usare stringhe con un elenco come testo.
3 3 -3 -3
?