Defuse the Bomb

EasyArraySliding Window

Solution

export function decrypt(code: number[], k: number): number[] {
  if (k === 0) {
    return new Array(code.length).fill(0);
  }
 
  const sum = (arr: number[]) => arr.reduce((acc, curr) => acc + curr, 0);
  const getValue = (arr: number[], i: number) => arr[(i + arr.length) % arr.length];
 
  let prevValue = sum(0 < k ? code.slice(1, k + 1) : code.slice(k));
  const result: number[] = [prevValue];
  for (let i = 1; i < code.length; i++) {
    if (0 < k) {
      prevValue += getValue(code, i + k) - getValue(code, i);
    } else {
      prevValue += getValue(code, i - 1) - getValue(code, i + k - 1);
    }
    result.push(prevValue);
  }
  return result;
}