Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

193
Vistas
Permutación usando recursividad en Javascript

A través de YouTube, aprendí a obtener una salida multidimensional de permutaciones usando recursividad, es decir, anagramas con el paso de una matriz de letras como argumento (es decir, ['a', 'b', 'c']) pero ¿está ahí? ¿una forma de modificar el código para pasar una cadena en lugar de 'abc' para obtener el resultado a continuación?

En [ 'abc', 'bac', bca', 'acb', 'cab', 'cba' ]

Este es mi código. ¿Hay alguna forma de modificar para obtener el resultado deseado, usando una cadena como argumento (es decir, 'abc')? Gracias, muy agradecido

 function anagrams(inputString){ if(inputString.length ===0) return [[]]; const stringArr = inputString; const firstEl = stringArr[0]; const restArr = stringArr.slice(1); const anagramWithoutFirst = anagrams(restArr); const masterArr = []; anagramWithoutFirst.forEach(anagram => { for (let i=0; i<=anagram.length; i++){ const anagramWithFirst = [...anagram.slice(0, i), firstEl, ...anagram.slice(i)] masterArr.push(anagramWithFirst) } }) return masterArr } console.log(anagrams(['a', 'b', 'c']))

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Esto se puede lograr utilizando una función de orden superior que toma la función original y devuelve una nueva función que divide el texto, llama a la función original y luego vuelve a unir el resultado.

 function anagrams(inputString){ if(inputString.length ===0) return [[]]; const stringArr = inputString; const firstEl = stringArr[0]; const restArr = stringArr.slice(1); const anagramWithoutFirst = anagrams(restArr); const masterArr = []; anagramWithoutFirst.forEach(anagram => { for (let i=0; i<=anagram.length; i++){ const anagramWithFirst = [...anagram.slice(0, i), firstEl, ...anagram.slice(i)] masterArr.push(anagramWithFirst) } }) return masterArr } function splitAndUnsplit(f) { return (str) => (f(str.split('')).map(xs => xs.join(''))) } console.log(splitAndUnsplit(anagrams)('abc')) console.log(anagrams(['a', 'b', 'c']))

Editar:

Para ampliar el gran comentario de @Scott Sauyet , necesitamos dos conjuntos de paréntesis ya que estamos llamando a dos funciones.

 function splitAndUnsplit(f) { return function(str){ const inputArr = str.split('') const outputArr = f(inputArr) const outputStr = outputArr.map(xs => xs.join(''))) return outputStr } }

El primer conjunto de paréntesis se usa para crear una función que aceptará y devolverá una cadena, y el segundo conjunto se requiere para llamar a esa función con un valor proporcionado

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda