Con trăn ( 128 137 136)
Mẹ kiếp itertools.permutations
, vì đã có một cái tên dài như vậy!
Giải pháp vũ lực. Tôi ngạc nhiên nó không phải là ngắn nhất: nhưng tôi đoánitertools
hỏng giải pháp.
Ung dung:
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)
Golfed (đầu ra xấu xí):
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)
Golfed (đầu ra khá) (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
: nhập mô-đun itertools và gọi nó i
x=map(int,input().split())
: tách biệt đầu vào theo khoảng trắng, sau đó biến các mục của danh sách kết quả thành số nguyên ( 2 3 -5
-> [2, 3, -5]
)
set ( sorted(j)
cho a trong phạm vi (1, len (x) +1) cho j trong i.permutations (x, a) if sum (j) == 0):
Trả về danh sách tất cả các tập hợp con trong x
, được sắp xếp, trong đó tổng là 0 và sau đó chỉ nhận được các mục duy nhất
( set(...)
)
Các ngôi mộ (`) xung quanh sorted(j)
là tốc ký Python repr(sorted(j))
. Lý do tại sao điều này là ở đây vì các bộ trong Python không thể xử lý danh sách, vì vậy điều tốt nhất tiếp theo là sử dụng các chuỗi có danh sách làm văn bản.
3 3 -3 -3
?