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