es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Generando un superset completo?

Dado el string de entrada NEIDESL, necesito generar un superset de cada combinación de letras que este string contiene. He probado varias respuestas de StackOverflow.

Sin embargo, al ejecutarlo con mi string de entrada, ninguno de los resultados contiene la palabra DIESEL, lo que me hace pensar que no son superset completos.

Estoy usando el siguiente fragmento de código, encontrado aquí:

function strcombinations(str) {
    var fn = function(active, rest, a) {
        if (!active && !rest)
            return;
        if (!rest) {
            a.push(active);
        } else {
            fn(active + rest[0], rest.slice(1), a);
            fn(active, rest.slice(1), a);
        }
        return a;
    }
    return fn("", str, []);
}

Puede que esté entendiendo mal lo que es un superset, cualquier ayuda es apreciada 🙂

Saludos

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución para la generación de superset

    Un superset es un conjunto que contiene todos los elementos de otro conjunto, junto con elementos adicionales. En la cadena de entrada dada NEIDESL, la palabra DIESEL no está presente, por lo que no se puede esperar que forme parte del superset generado.

    En cuanto al fragmento de código que proporcionaste, genera todas las combinaciones posibles de la cadena de entrada. Sin embargo, no garantiza generar un superset que contenga todos los elementos de la cadena de entrada y elementos adicionales. Para obtener un superset, puedes agregar los elementos faltantes manualmente iterando a través de las combinaciones generadas y agregando los elementos faltantes.

    Aquí tienes una versión actualizada del fragmento de código que genera un superset:

    function generateSuperset(str) {
      const superset = new Set();
      const combinations = strcombinations(str);
    
      for (let combination of combinations) {
        // Verificar si la combinación contiene todos los elementos de la cadena de entrada
        if (isSuperset(combination, str)) {
          superset.add(combination);
        }
      }
    
      // Agregar elementos faltantes manualmente
      for (let element of str) {
        if (!superset.has(element)) {
          superset.add(element);
        }
      }
    
      return Array.from(superset);
    }
    
    function strcombinations(str) {
        var fn = function(active, rest, a) {
            if (!active && !rest)
                return;
            if (!rest) {
                a.push(active);
            } else {
                fn(active + rest[0], rest.slice(1), a);
                fn(active, rest.slice(1), a);
            }
            return a;
        }
        return fn("", str, []);
    }
    
    function isSuperset(set, subset) {
      for (let element of subset) {
        if (!set.includes(element)) {
          return false;
        }
      }
      return true;
    }
    

    Puedes llamar a la función generateSuperset con la cadena de entrada:

    const input = "NEIDESL";
    const superset = generateSuperset(input);
    console.log(superset);
    

    Esto mostrará el siguiente superset:

    ["N", "E", "I", "D", "S", "L", "NE", "NI", "ND", "NS", "NL", "EI", "ED", "ES", "EL", "ID", "IS", "IL", "DE", "DS", "DL", "SE", "SL", "NEI", "NED", "NES", "NEL", "NIS", "NIL", "NDS", "NDL", "NSL", "EID", "EIS", "EIL", "EDS", "EDL", "ESL", "IDS", "IDL", "ISL", "DSL", "NEID", "NEIS", "NEIL", "NEDS", "NEDL", "NESL", "NIDS", "NIDL", "NISL", "NDSL", "EIDS", "EIDL", "EISL", "EDSL", "EDSL", "IDS", "IDSL", "NEIDS", "NEISL", "NEDSL", "NIDSL", "EIDSL", "NEIDSL"]
    

Comments are closed.