Python ( 128 137 136)
Merde itertools.permutations, pour avoir un nom si long!
Solution de force brute. Je suis surpris que ce ne soit pas le plus court: mais je suppose que cela itertoolsgâche la solution.
Non 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)
Golfé (sortie moche):
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)
Golfé (jolie sortie) (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: importer le module itertools et l'appeler i
x=map(int,input().split()): sépare l'entrée par des espaces, puis transforme les éléments des listes résultantes en entiers ( 2 3 -5-> [2, 3, -5])
set ( sorted(j)for a in range (1, len (x) +1) for j in i.permutations (x, a) if sum (j) == 0):
Renvoie une liste de tous les sous-ensembles x, triés, où la somme est 0, puis obtient uniquement les éléments uniques
( set(...))
Les tombes (`) autour sorted(j)sont un raccourci en Python pour repr(sorted(j)). La raison pour laquelle ceci est ici est que les ensembles en Python ne peuvent pas gérer les listes, donc la meilleure chose à faire est d'utiliser des chaînes avec une liste comme texte.
3 3 -3 -3?