Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

135
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda