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;
}
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