मान लीजिए कि एक बम है जिसे आप निष्क्रिय करने जा रहे हैं, और आपका समय समाप्त हो रहा है! आपके पास n की लंबाई का एक गोलाकार सरणी कोड है और एक कुंजी k है। अब कोड को डिक्रिप्ट करने के लिए, आपको हर नंबर को बदलना होगा। सभी नंबरों को एक साथ बदल दिया जाता है। कुछ नियम हैं -
-
यदि k> 0 तो ith संख्या को अगले k संख्याओं के योग से बदल दें।
-
यदि k <0 है तो ith संख्या को पिछली k संख्याओं के योग से बदलें।
-
यदि k =0 है तो ith संख्या को 0 से बदलें।
यहां कोड गोलाकार है, इसलिए कोड का अगला तत्व [एन -1] कोड [0] है, और कोड का पिछला तत्व [0] कोड [एन -1] है। अंत में हमें डिक्रिप्टेड कोड वापस करना होगा।
इसलिए, यदि इनपुट कोड =[8,2,3,5], k =3 जैसा है, तो आउटपुट [10, 16, 15, 13] होगा, क्योंकि, प्रत्येक कुंजी के लिए हम अगले तीन तत्वों के योग के साथ प्रतिस्थापित करते हैं , तो कोड [0] 10 होगा, कोड [1] 16 होगा, कोड [2] 15 होगा और कोड [3] 13 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे &mius;
-
डिकोड:=एक नई सूची
-
मैं के लिए 0 से लेकर कोड के आकार -1 तक की सीमा में हूं, करें
-
अगर कश्मीर> 0, तो
-
योग :=0
-
जे:=मैं+1
-
मी:=के
-
जबकि एम गैर-शून्य है, करें
-
योग:=योग + कोड [j कोड की लंबाई मोड]
-
मी :=मी - 1
-
जे:=जे + 1
-
-
डिकोड के अंत में योग डालें
-
-
अन्यथा जब k, 0 के समान हो, तब
-
डिकोड के अंत में 0 डालें
-
-
अन्यथा,
-
योग :=0
-
जे:=i-1
-
मी:=के
-
जबकि एम गैर-शून्य है, करें
-
योग:=योग + कोड [j कोड की लंबाई मोड]
-
एम:=एम + 1
-
जे:=जे - 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]