Пітон ( 128 137 136)
Чорт за тобою, itertools.permutations
за те, що маєш таке довге ім’я!
Рішення грубої сили. Я здивований, що це не найкоротше: але, мабуть, itertools
руйнує рішення.
Безголівки:
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)
для діапазону (1, len (x) +1) для j в i.permutations (x, a) якщо sum (j) == 0):
Повертає список усіх підмножин у x
, відсортований, де сума дорівнює 0, а потім отримує лише унікальні елементи
(set(...)
)
Могили (`) навколо sorted(j)
є скороченням Python для repr(sorted(j))
. Причина цього тут полягає в тому, що набори в Python не можуть обробляти списки, тому наступне найкраще - використовувати рядки зі списком як текст.
3 3 -3 -3
?