¿Cómo puedo determinar cuándo los primeros números X de una matriz están en orden Y el último elemento en 0? es decir, la matriz es
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0Actualmente tengo esto, pero depende de que la matriz sea siempre la misma, lo cual no es muy flexible.
const sorted = (array) => { const solved = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0] return (JSON.stringify(array) == JSON.stringify(solved)) }Primero defina una función genérica para verificar que un segmento de una matriz esté ordenado, luego defina una segunda función que use la primera para ver que los primeros valores están ordenados y agregue una verificación para el valor final:
function isSegmentSorted(array, start=0, end=array.length) { for (let i = start + 1; i < end; i++) { if (array[i - 1] > array[i]) return false; } return true; } function isSortedWithExtraZero(array) { return array.at(-1) === 0 && isSegmentSorted(array, 0, array.length - 1); } var array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0]; console.log(isSortedWithExtraZero(array));Podrías hacer algo tan simple como esto:
const checkArray = (arr) => { if(arr[arr.length-1] != 0){ return false; } const nums = arr.slice(0, arr.length - 1); const sortedArr = [...nums].sort((a, b) => a - b); for (let i = 0; i < nums.length; i++) { if(nums[i] != sortedArr[i]){ return false; } } return true; } console.log(checkArray([1,2,3,0])); // true console.log(checkArray([1,2,3,4])); // false console.log(checkArray([1,3,2,0])); // falseBásicamente los pasos son:
Al final, devuelve verdadero solo si se verifican todas las condiciones.
Esto es lo suficientemente genérico como para que, si en el futuro desea cambiar el tipo de ordenación, simplemente pueda actuar sobre la función de sort (por ejemplo, si desea que sea descendente).
Podemos usar every las funciones para eso. Con !idx excluimos el primer índice 0, luego verificamos si idx es menor que la longitud de su matriz. Si es así, verifique si está ordenado, de lo contrario verifique que sea igual a cero.
const solutions = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0]; const sorted = solutions.every((val, idx, arr) => !idx || (idx < solutions.length - 1 ? arr[idx - 1] <= val : val === 0) ); console.log(sorted);