Dada una cadena como "esta es una búsqueda con espacios", quiero devolver todas las permutaciones de esa cadena donde los espacios se reemplazan con un guión. Por ejemplo, este es el resultado que quiero:
["esta-es-una-busqueda-con-espacios"]
["esto-es-una-busqueda-con", "espacios"]
["esto", "es-una-búsqueda-con-espacios"]
["esto-es", "una-búsqueda-con-espacios"]
["esto-es-una-búsqueda", "con-espacios"]
["esto-es-un", "buscar-con-espacios"]
...y así.
Puedo hacer la mitad de esto, pero el problema es que coincide con ["consulta1-consulta2", "consulta3"] pero no al revés como ["consulta1", "consulta2-consulta3"].
Este es mi código actual:
const sliced = query.split(/ +/g) let permutations = [] for (let i = 1; i <= sliced.length; i++) { let permuteArr = [] for (let j = 0; j < sliced.length; j+=i) { permuteArr.push(sliced.slice(j, j+i).join("-")) } permutations.push(permuteArr) }Gracias por ayudarme.
Aquí hay un generador recursivo que produce las combinaciones:
function permutations(query) { function* iterRecur(sliced) { if (sliced.length == 1) return yield sliced; for (const result of iterRecur(sliced.slice(1))) { yield [sliced[0] + "-" + result[0], ...result.slice(1)]; yield [sliced[0], ...result]; } } const sliced = query.split(/ +/g); return [...iterRecur(sliced)]; } console.log(permutations("this is a test"));