Python ( 128 137 136)
Verdammt, dass du itertools.permutations
so einen langen Namen hast !
Brute-Force-Lösung. Ich bin überrascht, dass es nicht die kürzeste ist, aber ich vermute, dass sie itertools
die Lösung ruiniert.
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 (hässliche Leistung):
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 (ziemlich gute Leistung) (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
: Importieren des itertools-Moduls und Aufrufen i
x=map(int,input().split())
: trennt die Eingabe durch Leerzeichen und wandelt dann die Elemente der resultierenden Listen in Ganzzahlen um (2 3 -5
-> [2, 3, -5]
)
set ( sorted(j)
für a in range (1, len (x) +1) für j in i.permutations (x, a), wenn summe (j) == 0):
Gibt eine Liste aller Teilmengen in x
sortiert zurück, wobei die Summe ist 0 und erhält dann nur die eindeutigen Elemente
( set(...)
)
Bei den Gräbern (`) handelt es sich um die sorted(j)
Abkürzung für Python repr(sorted(j))
. Der Grund dafür ist, dass Sets in Python keine Listen verarbeiten können. Daher ist es am besten, Zeichenfolgen mit einer Liste als Text zu verwenden.
3 3 -3 -3
?