Putting It All Together es-419 Explainer

Explicación de Juntando todo

Objetivo de este acertijo: Buscar la subsecuencia más larga del string de un arreglo.

Tutorial de la solución: El esquema general para resolver este acertijo es esto:

  1. Crea un mapa de string
  2. Crea un nuevo arreglo para almacenar subsecuencias válidas
  3. Cicla por todos los strings en el arreglo (dictionary)
  4. Verifica si cada string es una subsecuencia válida
  5. Si lo es, agrégalo al nuevo arreglo que creaste
  6. Por último, usa la función longestWord() para devolver la subsecuencia válida más larga del nuevo arreglo

La creación del mapa es simple porque ya creaste una función para él: mapString(). Almacena el resultado en una nueva variable; puedes llamarla map.

La creación de un nuevo arreglo para almacenar cualquier coincidencia es similar: let listOfSubsequences = []. Esto puede permanecer vacío, porque lo llenaremos hasta 1 a la vez dentro del ciclo.

Un for of loop funcionará bien para verificar cada uno de los strings en el arreglo: for (let word of dictionary) {...}

La función isSubsequence() del acertijo anterior es útil ahora. Necesita 2 argumentos: un string y un object de map, luego devolverá si el string es una subsecuencia de ese object de map (o bien, el string al que representa el mapa). Dado que la función devuelve true o false, tiene sentido usarlo como una prueba en una if statement.

Si la prueba es verdadera, entonces word es una subsecuencia, y se debe agregar al arreglo listOfSubsequences. Eso se puede hacer usando el método .push().

A medida que el for loop continúa, agregará todas las subsecuencias válidas a listOfSubsequences. Una vez que tengamos esa lista, solo debemos devolver la subsecuencia más larga. Afortunadamente, creamos una función para eso: longestWord(). Después del ciclo, agrega return longestWord(listOfSubsequences).
Código adicional (código oculto que se ejecuta antes del código del acertijo):

let _longestWord = (words) => {
  let longestWord = '';
  for (let word of words) {
    if (word.length > longestWord.length) {
      longestWord = word;
    }
  }
  return longestWord;
};

let _createStringMap = (string) => {
  let stringMap = {};
  for (let i = 0; i < string.length; i++) {
    let letter = string[i];
    if (stringMap[letter]) {
      stringMap[letter].push(i);
    } else {
      stringMap[letter] = [i];
    }
  }
  return stringMap;
};

let _findNextIndex = (mappedIndices, nextUsableIndex) => {
  for (let index of mappedIndices) {
    if (index >= nextUsableIndex) {
      return index + 1;
    }
  }
  return false;
};

let _isSubsequence = (dictionaryWord, map) => {
  let nextUsableIndex = 0;
  for (let letter of dictionaryWord) {
    if (map[letter]) {
      nextUsableIndex = _findNextIndex(map[letter], nextUsableIndex);
      if (nextUsableIndex) {
      } else {
        return false;
      }
    } else {
      return false;
    }
  }
  return true;
};



defineModule(
    'subsequence.functions',
    {
        longestWord: _longestWord,
        mapString: _createStringMap, 
        findNextIndex: _findNextIndex,
        isSubsequence: _isSubsequence
    }
);

defineModule(
    'subsequence.words',
    {
        dictionary: ['art','vascular','avast','javas','vat'],
        stringSequence: 'javascript'
    }
);
10 Likes

hola soy nuevo y necesito ayuda ya intente todo lo que se me ocurre y no logro completar bien el problema por favor alguien me prodria ayudar

1 Like

Aquí la respuesta, me maté la verdad, difícil!

18 Likes

Lo hice igual que tu y no me funciona :c

1 Like

Por fin lo pude resolver…

Uploading: JuntandoTodo.png…

Este código me funcionó bien

9 Likes

No olvides verificar las librerías.

2 Likes

¿Pudiste solucionarlo? A mi tampoco me funciona

Hola, tiene solucion este puzzle? yo no he podido resolverlo, lo he intentado todo

1 Like

Tampoco me funcionaba pero remplacé Dictionary por WordList y me funcionó, espero que les sirva.

1 Like

si señor, este era el problema, mucha novatada.

1 Like

Esta difícil. Chicos no se desanimen!

1 Like

no todos los héroes llevan capa, :slight_smile:

1 Like

LA SOLUCIÓN AL PROBLEMA ESPERO LES SIRVA…

2 Likes

Ayuda,alguien encuentra el error?

1 Like


Mi solución

Hola. no jueguen ya complete el acertijo pero aún me quedan dudas, tuve que usar el tutorial.
al analizarlo lo comprendo pero no logro resolverlo sin el tutorial.
¿creen que me tengo que regresar para comprenderlo mejor, o es normal?
¡ayuda!

1 Like

:cold_sweat: repito los tutoriales de youtube van muy atrasados ¡AYUDA!

Gracias por el aporte!

Es mejor repasar, yo tampoco comprendo el flujo de datos del todo.
Completa el aprendizaje con la App Enki, es mucho más didáctica que ésta, está disponible en inglés.
Además, te recomiendo el curso de freecodecamp en JavaScript disponible en español en Youtube

1 Like

Ya probaste con los tutoriales de Jhon Mircha en YouTube? Son muy didácticos!