Estoy devolviendo nulo con este código, sin embargo, no puedo ver por qué/dónde esto va mal. (Puede deberse a la función de ordenación ya que obtuve esto de un fragmento bien votado sobre cómo ordenar una matriz). Me importa más la comprensión que la respuesta correcta.
Tarea que estoy tratando de lograr:
Ratiorg recibió estatuas de diferentes tamaños como regalo de CodeMaster para su cumpleaños, cada estatua tenía un tamaño entero no negativo. Como le gusta hacer las cosas perfectas, quiere ordenarlas de menor a mayor para que cada estatua sea más grande que la anterior exactamente en 1. Es posible que necesite estatuas adicionales para poder lograrlo. Ayúdalo a calcular el número mínimo de estatuas adicionales necesarias.
Ejemplo
Para
statues = [6, 2, 3, 8], la salida debe sersolution(statues) = 3.Ratiorg necesita estatuas de los tamaños 4, 5 y 7.
Mi código y pensamiento:
function solution(statues) { let total = 0; statues.sort(function(a, b) { //From what I understand this should sort the array numerically return a - b; }); for (let i = 1; i < statues.length; i++) { //iterate through the array comparing the index to the one before it if (statues[i + 1] != (statues[i] + 1)) { //if there is a diff between index of more than 1 it will add the diff total += statues[i + 1] - statues[i]; //to the total variable } } return total; } const result = solution([6, 2, 3, 8]); console.log(result);Gracias a las personas que comentaron y me ayudaron a ver que había algunos errores en mi lógica: ahora cambié la declaración if para comparar un índice que comienza en 1 con el índice detrás, es decir, el índice 1 en comparación con el índice 0. Además de eso, hay hubo un problema con la siguiente línea total += statues[i] - statues[i-1]; Reemplacé eso con un bucle for para que cuente hasta el número en lugar de una simple resta.
function solution(statues) { //[6, 2, 3, 8] --- 2,3,6,8 --- 3,6 7-2, let total = 0; statues.sort(function(a, b) { return a - b; }); for(let i =1; i<statues.length; i++){ if(statues[i] != (statues[i-1]+1) ){ //total += statues[i] - statues[i-1]; for(let j = statues[i-1]; j<statues[i]-1; j++){ total += 1; } } } return total; }