Python ( 128 137 136)
Черт возьми itertools.permutations
, за такое длинное имя!
Решение грубой силы. Я удивлен, что это не самое короткое: но я думаю, itertools
разрушает решение.
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)
Гольф (безобразный выход):
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)
Гольф (симпатичный выход) (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
: импорт модуля itertools и вызов его i
x=map(int,input().split())
: разделяет ввод пробелами, а затем превращает элементы результирующих списков в целые числа ( 2 3 -5
-> [2, 3, -5]
)
set ( sorted(j)
для диапазона in (1, len (x) +1) для j в i.permutations (x, a) if sum (j) == 0):
возвращает список всех подмножеств в x
отсортированном виде, где сумма 0, а затем получает только уникальные предметы
( set(...)
)
Могилы (`) вокруг sorted(j)
- это сокращение от Python repr(sorted(j))
. Причина этого заключается в том, что наборы в Python не могут обрабатывать списки, поэтому следующая лучшая вещь - это использовать строки со списком в качестве текста.
3 3 -3 -3
?