viernes, 3 de abril de 2020

JavaScript: diferencia simétrica

En este post, veremos una posible manera de programar en JavaScript un concepto matemático muy sencillo: la diferencia simétrica.

Definición: dados dos conjuntos A y B, la diferencia simétrica de A y B es el conjunto formado por los elementos que pertenecen a A ó B, pero no a los dos.

Veamos un ejemplo: si A={1,2,3} y B={1,3,4}, ¿cuál es la diferencia simétrica de A y B? El 1 pertenece a ambos conjuntos, así que queda descartado, y lo mismo ocurre con el 3. El 2 aparece sólo en A y el 4, en B. Por lo tanto, la diferencia simétrica es {2,4}.

¿Cómo podríamos automatizar esto usando JavaScript? En primer lugar, podemos empezar llamando a nuestra función "difSim" y a sus dos parámetros, los conjuntos, "conjA" y "conjB".

function difSim(conjA, conjB){
   ...
}

Antes de continuar, pensemos por un momento cómo va a ser nuestro algoritmo. Hay muchas maneras de hacerlo, pero una fácil podría ser la siguiente: creamos un nuevo conjunto "conjAB" que es la concatenación de conjA y conjB. A continuación, iteramos sobre este conjunto y vamos tomando sus elementos. Para cada uno de ellos, comprobamos si pertenece a conjA y no a conjB y viceversa. Si es así, y no lo hemos añadido todavía a la solución, lo hacemos. El código quedaría de esta forma:

function difSim(conjA, conjB){
   var conjAB=conjA.concat(conjB), sol=[], i, temp;
   var len = conjAB.length;

   for(i=0; i < len; i++){
      temp=conjAB[i];
      if(!sol.includes(temp) && (conjA.includes(temp) != conjB.includes(temp))){
         sol.push(temp);
      }
   }
   return sol;
}

Y con esto concluiría nuestro programa. Puedes comprobar su eficacia aquí mismo. Añade uno por uno, tantos elementos como quieras a cada uno de los conjuntos y haz click en el botón para calcular su diferencia simétrica.

   A={}
   B={}
 

No hay comentarios:

Publicar un comentario