Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

134
Views
Codwars: Array to single value +1

Given an array of integers of any length, return an array that has 1 added to the value represented by the array.

the array can't be empty only non-negative, single digit integers are allowed

Return nil (or your language's equivalent) for invalid inputs.

Examples For example the array [2, 3, 9] equals 239, adding one would return the array [2, 4, 0].

My code so far:

function upArray(arr){
let i = parseInt(arr.join('')) + 1;
  
 return arr.some(e => typeof e !== 'number' || e < 0) ?
    null : i
   .toString()
   .split('')
   .map(e => parseInt(e));
};

It seems to pass most basic test however fails with larger inputs. Where have I gone wrong?

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Just like you have converted the array into a number, you have to convert the number back into an array.

function upArray(arr){
let i = parseInt(arr.join('')) + 1;
  
 return i.toString().split('').map(x => parseInt(x));
};

console.log(upArray([2,3,9]));

about 4 years ago · Juan Pablo Isaza Report

0

Your code won't work if the array length is greater than 100k...

Number type of javascript or any language is not enough big to handle it.

It's better if we calculate the last element with 1. If result is larger than nice ( < 10 ), we continue to calculate next element with 1 and assign current value to 0. If result is smaller or equal 9, just assign the result to current and exit loop.

Then we print the final array as result:

pseudo code:

for i from: n-1:0
result = arr[i] + 1;
if(result < 10) :
arr[i] = result;
exit loop;// no need to continue calculate
else:
arr[i] = 0;
endif;
endfor;

You can join final array as string.

about 4 years ago · Juan Pablo Isaza Report

0

Here's probably the fastest solution (performance wise) - also there's no need to deal with BigInt, NaN, or Infinity:

function upArray(arr) {
    if (!isInputIsNonEmptyArray(arr)) {
        return null;
    }

    const isNumber = num =>  typeof num === 'number';
    const isIntSingleDigit = num => Number.isInteger(num) && num >= 0 && num <10;

    let resultArr = [];
    let i = arr.length;
    let num;
    while (i-- > 0) {
        num = arr[i];
        if (!isNumber(num) || !isIntSingleDigit(num)) {
            return null;
        }
        
        if (num === 9) {
            resultArr[i] = 0;
            if (i === 0) { //means we're in the msb/left most digit, so we need to insert 1 to the left
                resultArr.unshift(1);
                break; //you can leave it out really, as the next check in the while will fail anyway
            }  
        }
        else {
            resultArr[i] = num + 1; //No more + 1 should be made, just check for validity 
            //of the rest of the input and copy to the result arr
            while (--i > -1) {
                num = arr[i];
                if (!isNumber(num) || !isIntSingleDigit(num)) {
                    return null;
                }
                resultArr[i] = arr[i];
            }
            break;
        }
    }

    return resultArr;

    function isInputIsNonEmptyArray(arr) {
        return Array.isArray(arr) && arr.length > 0;
    }
}

If the input arg is not an array or an empty array, or if you encounter invalid element during the main while loop you return null.

In the main while loop you go from the right most element (lsd), and add 1 to it (or insert 0 if the number is 9) up the the left most digit.

If a number which is less than 9 is incremented, no need to increment any more (this is the while loop in the else clause).

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!