সমস্যা বিবরণ
একটি সংখ্যার লিস্ট এবং একটি টার্গেট যোগফল দেওয়া আছে। লিস্ট থেকে তিনটি উপাদান (ট্রিপলেট) বের করতে হবে যাদের যোগফল টার্গেটের সমান। একাধিক ট্রিপলেট থাকতে পারে।
পদ্ধতি ১: রেঞ্জ এবং টেম্পরারি ভেরিয়েবল (ট্রাডিশনল)
তিনটি নেস্টেড লুপ দিয়ে সব ট্রিপলেট চেক করুন।
def SumTriplets(listA, sum):
trpltcnt = 0
res = []
for i in range(len(listA) - 1):
s = set()
tmp = []
tmp.append(listA[i])
current_sum = sum - listA[i]
for j in range(i + 1, len(listA)):
if (current_sum - listA[j]) in s:
trpltcnt += 1
tmp.append(listA[j])
tmp.append(current_sum - listA[j])
res.append(tuple(tmp))
tmp.pop(2)
tmp.pop(1)
s.add(listA[j])
return res
listA = [11,12,13,14,15,16,17,18,19,20]
print("Required triplets:", SumTriplets(listA, 40))
# [(11, 15, 14), (11, 16, 13), (11, 17, 12), (12, 15, 13)]
পদ্ধতি ২: itertools.combinations() এবং filter() ব্যবহার
combinations(listA, 3) দিয়ে সব ট্রিপলেট বানান, filter দিয়ে যোগফল মিলে যাওয়া গুলো রাখুন।
from itertools import combinations
listA = [11,12,13,14,15,16,17,18,19,20]
def fsum(val):
return sum(val) == 40
res = list(filter(fsum, list(combinations(listA, 3))))
print("Required triplets:", res)
# [(11, 12, 17), (11, 13, 16), (11, 14, 15), (12, 13, 15)]