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 itertools
gâ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
?