Back to all solutions
#1652 - Defuse the Bomb
Problem Description
You have a bomb to defuse, and your time is running out! Your informer will provide you with a circular array code of length of n and a key k.
To decrypt the code, you must replace every number. All the numbers are replaced simultaneously.
- If k > 0, replace the ith number with the sum of the next k numbers.
- If k < 0, replace the ith number with the sum of the previous k numbers.
- If k == 0, replace the ith number with 0.
As code is circular, the next element of code[n-1] is code[0], and the previous element of code[0] is code[n-1].
Given the circular array code and an integer key k, return the decrypted code to defuse the bomb!
Solution
/**
* @param {number[]} code
* @param {number} k
* @return {number[]}
*/
var decrypt = function(code, k) {
const n = code.length;
const result = new Array(n).fill(0);
if (k === 0) return result;
const isPositive = k > 0;
const steps = Math.abs(k);
for (let i = 0; i < n; i++) {
let sum = 0;
for (let j = 1; j <= steps; j++) {
const index = isPositive ? (i + j) % n : (i - j + n) % n;
sum += code[index];
}
result[i] = sum;
}
return result;
};