Giả sử có quả bom cần giải giáp, thời gian đang cạn kiệt! Ta có mảng vòng tròn code độ dài n và khóa k. Để giải mã, phải thay thế mọi số đồng thời. Quy tắc:
- Nếu
k > 0: thay số thứibằng tổngksố tiếp theo - Nếu
k < 0: thay số thứibằng tổng|k|số trước đó - Nếu
k = 0: thay số thứibằng 0
Mảng là vòng tròn: phần tử sau code[n-1] là code[0], phần tử trước code[0] là code[n-1]. Trả về mã đã giải mã.
Ví dụ: code = [8,2,3,5], k = 3, kết quả [10, 16, 15, 13].
Giải thuật
decode := []- Với mỗi
itừ 0 đếnlen(code)-1:- Nếu
k > 0: cộngkphần tử saui(modn) - Nếu
k == 0: thêm 0 - Nếu
k < 0: cộng|k|phần tử trướci(modn)
- Nếu
- Trả về
decode
Ví dụ (Python)
def solve(code, k):
decode = []
n = len(code)
for i in range(n):
if k > 0:
total = 0
j = i + 1
m = k
while m:
total += code[j % n]
m -= 1
j += 1
decode.append(total)
elif k == 0:
decode.append(0)
else:
total = 0
j = i - 1
m = k
while m:
total += code[j % n]
m += 1
j -= 1
decode.append(total)
return decode
code = [8, 2, 3, 5]
k = 3
print(solve(code, k))
Input
[8,2,3,5], 3
Output
[10, 16, 15, 13]