Eg: 'abba' and 'baab' are equal 'abba' and 'bbaa' are equal 'abba' and 'abbba' are NOT equal 'abba' and 'abca' are NOT equalTienes que escribir una función que encuentre todos los anagramas de cada palabra contenida en una oración de una lista con palabras (IMPORTANTE: las palabras de la oración están separadas solo por espacios).
Se le darán 2 entradas: una oración y una matriz con palabras. DEBE devolver una matriz de todos los anagramas o una matriz vacía si no hay ninguno.
Nota:
solution como la función principal /* your code here */ const sort = (word) => word.split('').sort().join(''); function anagrams(word, words) { let token = sort(word); return words.filter((w) => sort(w) === token); } console.log(anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada'])); } // test your solution solution('dvvd pddp', ['ddvv', 'dvcd', 'vvdd', 'pdpd']) // ['ddvv', 'vvdd', 'pddp'] solution('laser space', ['lazing', 'lazy', 'lacer']) // [] solution('We will eat tenderising meat at Rivera with no regally plate because there is none', ['administration', 'ingredients', 'admit', 'beat', 'arrive', 'blood', 'door', 'each', 'on', 'economic', 'gallery', 'edge', 'three', 'drop']) // ['ingredients', 'arrive', 'on', 'gallery', 'three'] ```¿Cómo debo probar exactamente mis soluciones?
Haz una función que ordene las letras de una palabra (en minúsculas) y devuelva ese anagrama ordenado.
Use esa función para crear todas las palabras ordenadas a partir de la frase de entrada y convertirla en un conjunto.
Finalmente, itere la matriz de anagramas y, para cada una de esas palabras, vea si la versión ordenada está en el conjunto. Si es así, debería estar en el resultado.
¿Cómo debo probar exactamente mis soluciones?
Use los ejemplos de entrada/salida que se dan en el desafío del código.
Ejecute su función de solution con esas entradas y verifique que el valor devuelto sea el esperado. Mira cómo se hace a continuación:
function solution(phrase, anagrams) { const sortWord = word => [...word.toLowerCase()].sort().join(""); let words = new Set(phrase.match(/\S+/g).map(sortWord)); return anagrams.filter(anagram => words.has(sortWord(anagram))); } // tests const tests = [ { input: ['dvvd pddp', ['ddvv', 'dvcd', 'vvdd', 'pdpd']], expected: ['ddvv', 'vvdd', 'pdpd'] }, { input: ['laser space', ['lazing', 'lazy', 'lacer']], expected: [] }, { input: ['We will eat tenderising meat at Rivera with no regally plate because there is none', ['administration', 'ingredients', 'admit', 'beat', 'arrive', 'blood', 'door', 'each', 'on', 'economic', 'gallery', 'edge', 'three', 'drop']], expected: ['ingredients', 'arrive', 'on', 'gallery', 'three'] } ]; for (let { input, expected } of tests) { let output = solution(...input); if (JSON.stringify(output) !== JSON.stringify(expected)) { throw "got " + JSON.stringify(output) + ", but expected " + JSON.stringify(expected); } } console.log("all tests passed");