ধরুন একটি বোমা আছে যা আপনি নিষ্ক্রিয় করতে যাচ্ছেন, এবং আপনার সময় ফুরিয়ে আসছে! আপনার n দৈর্ঘ্যের একটি বৃত্তাকার অ্যারে কোড আছে এবং একটি কী k আছে। এখন কোড ডিক্রিপ্ট করতে, আপনাকে অবশ্যই প্রতিটি নম্বর প্রতিস্থাপন করতে হবে। সমস্ত সংখ্যা একযোগে প্রতিস্থাপিত হয়. কিছু নিয়ম আছে -
-
k> 0 হলে ith সংখ্যাকে পরবর্তী k সংখ্যার যোগফল দিয়ে প্রতিস্থাপন করুন।
-
যদি k <0 হয় তাহলে ith সংখ্যাকে পূর্ববর্তী k সংখ্যার যোগফল দিয়ে প্রতিস্থাপন করুন।
-
k =0 হলে ith সংখ্যাকে 0 দিয়ে প্রতিস্থাপন করুন।
এখানে কোডটি বৃত্তাকার, তাই কোড[n-1]-এর পরবর্তী উপাদান হল কোড[0], এবং কোড[0]-এর আগের উপাদান হল কোড[n-1]। অবশেষে আমাদের ডিক্রিপ্ট করা কোড ফেরত দিতে হবে।
সুতরাং, যদি ইনপুট কোড =[8,2,3,5], k =3 এর মত হয়, তাহলে আউটপুট হবে [10, 16, 15, 13], কারণ, প্রতিটি কী-এর জন্য আমরা পরবর্তী তিনটি উপাদান যোগফল দিয়ে প্রতিস্থাপন করি। তাই কোড[0] হবে 10, কোড[1] হবে 16, কোড[2] হবে 15 এবং কোড[3] হবে 13।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব &mius;
-
ডিকোড :=একটি নতুন তালিকা
-
i এর জন্য 0 থেকে কোডের আকার - 1, করুন
-
যদি k> 0 হয়, তাহলে
-
যোগফল :=0
-
j :=i+1
-
m :=k
-
যখন m অ-শূন্য, কর
-
যোগফল :=যোগফল + কোড[জে মোড দৈর্ঘ্য কোড]
-
m :=m - 1
-
j :=j + 1
-
-
ডিকোডের শেষে যোগফল যোগ করুন
-
-
অন্যথায় যখন k 0 এর সমান হয়, তখন
-
ডিকোডের শেষে 0 ঢোকান
-
-
অন্যথায়,
-
যোগফল :=0
-
j :=i-1
-
m :=k
-
যখন m অ-শূন্য, কর
-
যোগফল :=যোগফল + কোড[জে মোড দৈর্ঘ্য কোড]
-
m :=m + 1
-
j :=j - 1
-
-
ডিকোডের শেষে যোগফল যোগ করুন
-
-
-
রিটার্ন ডিকোড
উদাহরণ (পাইথন)
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(code, k): decode = [] for i in range(len(code)): if k > 0: sum = 0 j = i+1 m = k while(m): sum+=code[j%len(code)] m-=1 j+=1 decode.append(sum) elif k == 0: decode.append(0) else: sum = 0 j = i-1 m = k while(m): sum+=code[j%len(code)] m+=1 j-=1 decode.append(sum) return decode code = [8,2,3,5] k = 3 print(solve(code, k))
ইনপুট
[8,2,3,5], 3
আউটপুট
[10, 16, 15, 13]