Home > Mobile >  latest elements in array not found? codewars kata
latest elements in array not found? codewars kata

Time:12-28

I'm solving the following kata:

Given an input of an array of digits, return the array with each digit incremented by its position in the array: the first digit will be incremented by 1, the second digit by 2, etc. Make sure to start counting your positions from 1 (and not 0).

Your result can only contain single digit numbers, so if adding a digit with it's position gives you a multiple-digit number, only the last digit of the number should be returned.

Notes: return an empty array if your array is empty arrays will only contain numbers so don't worry about checking that Examples

[1, 2, 3]  -->  [2, 4, 6]   #  [1 1, 2 2, 3 3]

[4, 6, 9, 1, 3]  -->  [5, 8, 2, 5, 8]  #  [4 1, 6 2, 9 3, 1 4, 3 5]
                                       #  9 3 = 12  -->  2

My code:

const incrementer = (arr) => {
    if (arr === []) {
        return []
    }
    let newArr = []
    for (let i = 0; i <= arr.length; i  ) {
        let result = arr[i]   (i   1)
        newArr.push(result)
        if (newArr[i] > 9 ) {
            let singleDigit = Number(newArr[i].toString().split('')[1])
            newArr.push(singleDigit)
        }
    }
    const filteredArr = newArr.filter(el => el >= 0 && el <= 9)
    return filteredArr
}

I can't seem to pass the latest test case, which is the following:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 9, 8]), [2, 4, 6, 8, 0, 2, 4, 6, 8, 9, 0, 1, 2, 2]

I keep getting back the whole correct array up until the second 0, after which the other numbers, 1,2,2 are missing from the solution. What am I doing wrong?

CodePudding user response:

... so if adding a digit with it's position gives you a multiple-digit number, only the last digit of the number should be returned. So if the number is 12, it expects only 2 to be added to the array.

So your code should be:

if (newArr[i] > 9)
{
    newArr[i] = newArr[i] % 10;   // remainder of newArr[i] / 10
}

const incrementer = (arr) => {
    if (arr.length === 0) {   // CHANGE HERE
        return [];
    }
    let newArr = []
    for (let i = 0; i <= arr.length; i  ) {
        let result = arr[i]   (i   1)
        newArr.push(result)
        if (newArr[i] > 9 ) {
            newArr[i] = newArr[i] % 10;   // CHANGE HERE
        }
    }
    const filteredArr = newArr.filter(el => el >= 0 && el <= 9)
    return filteredArr
}

console.log(incrementer([2, 4, 6, 8, 0, 2, 4, 6, 8, 9, 0, 1, 2, 2]));
console.log(incrementer([1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 9, 8]));

CodePudding user response:

Please see below code.

const incrementer = arr => {
  if (arr === []) {
    return [];
  }
  let newArr = [];
  for (let i = 0; i < arr.length; i  ) {
    let result = arr[i]   (i   1);
    // newArr.push(result);
    if (result > 9) {
      let singleDigit = Number(result.toString().split("")[1]);
      newArr.push(singleDigit);
    } else {
      newArr.push(result);
    }
  }
  // const filteredArr = newArr.filter(el => el >= 0 && el <= 9);
  return newArr;
};


console.log(incrementer([1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 9, 8]))

CodePudding user response:

const incrementer = (arr) => {
    if (arr === []) {
        return []
    }
    return arr.map((number, index) => (n   i   1) % 10);
}

Doing the needed additions in (n i 1) and % 10 operation will get the last digit.

  • Related