Breve resumen sobre mi pregunta: estoy tratando de convertir una secuencia en una secuencia "condicional": la entrada es AN ARRAY hecho solo con verdadero y falso, lo que creo que lo hará más difícil de lo que sería si estuviera hecho de una secuencia de números. La idea es hacer que cuente una secuencia de "verdadero" y se rompa cuando la siguiente entrada sea "falso" y devuelva el conteo más grande.
// If the input is something like [true, true, ... true, true] // should return count => input.length // My issue is to make it break when it have a interruption ie // [true, true, true, false, true, true, false] // should return => the bigger sequence; with my code it returns 5 function sol(sequence) { let count = 0; for (let i = 0; i < sequence.length; i++) { if (sequence[i] == true) { if (sequence[i] == sequence[i+1]){ count++; } } } // I tried to add a break; but isn't worked like i wanted // for (let i = 0; i < sequence.length; i++) { // if (sequence[i] == true) { // if (sequence[i] == sequence[i+1]){ // count++; // } // if (sequence[i] != sequence[i+1]) { // break; // } // } // } // I need the counter has bigger (or equals) than 7 otherwise it return a "fail" if (count >= 7) { console.log(count) } else { console.log('failed') } }Después de algunas explicaciones en la publicación, aquí hay un resultado funcional:
function sol(sequence) { // Move the "+1" to low then when have no "true" will return 0. let count = 0; let largestSequence = 0; for (let i = 0; i < sequence.length; i++) { if (sequence[i] == true) { if (sequence[i] == sequence[i + 1]) { count++; } } else { if (largestSequence < count) { largestSequence = count + 1; count = 0; } } } return Math.max(largestSequence, count); }Y aquí está la respuesta final que superó todos mis ejemplos extraños. Gracias Gulam
let sequenceContinued = false; let count = 0; let sequences = []; for (let i = 0; i < array.length; i++) { const item = array[i]; if (item === false && sequenceContinued === true) { sequenceContinued = false; sequences.push(count); count = 0; continue; } if (item === true) { sequenceContinued = true; count++; } if (i === array.length - 1 && item === true) { sequences.push(count); } } const longestCount = sequences.length ? Math.max(...sequences) : 0; const array = [ true, false, false, false, true, true, false, true, true, true, false, true, true, true, true ]; let sequenceContinued = false; let count = 0; let sequences = []; for (let i = 0; i < array.length; i++) { const item = array[i]; if (item === false && sequenceContinued === true) { sequenceContinued = false; sequences.push(count); count = 0; continue; } if (item === true) { sequenceContinued = true; count++; } if (i === array.length - 1 && item === true) { sequences.push(count); } } const longestCount = sequences.length ? Math.max(...sequences) : 0; console.log(longestCount); function sol(sequence) { let count = 1; let largestSequence = 0; for (let i = 0; i < sequence.length; i++) { if (sequence[i] == true) { if (sequence[i] == sequence[i + 1]) { count++; } } else { if (largestSequence < count) { largestSequence = count; count = 1; } } } return Math.max(largestSequence, count); } var arr = [true, false, true, true, true, true, true]; var solution = sol(arr); console.log(solution);Puede crear una variable separada 'largestSequence' y cada vez que se encuentre un valor falso, almacenará el valor de recuento en la mayor secuencia.
Al final, se devuelve el máximo de las dos variables: secuencia más grande y recuento porque puede suceder que la secuencia más grande de verdaderos no termine con un falso como [verdadero, falso, verdadero, verdadero, verdadero, verdadero, verdadero].