Cómo contar de manera óptima cuántos pares es posible formar a partir de una matriz de cadenas de texto en JavaScript

En los últimos días, tuve que responder un par de preguntas técnicas para un trabajo que me pareció interesante. El problema era una herramienta que debería formar las parejas para los duelos de un torneo de ajedrez, sabiendo que el orden de los oponentes en una pareja no importa. El ejemplo es el siguiente, debes suponer que tienes una matriz con 4 elementos individuales:

["A", "B", "C", "D"]

El objetivo del ejercicio es determinar cuántas (o qué) combinaciones posibles puedes formar con esos elementos sin repetirlos, ya que es una característica que puede ser necesaria al calcular cuántas coincidencias posibles puedes construir para un juego como el ajedrez, por ejemplo, AC es el igual que CA, por lo que sería una única coincidencia. La siguiente imagen representa las posibles combinaciones que puede construir con la matriz dada:

Possible Pairs from array of strings JavaScript

En este caso, el número de posibles pares con 4 elementos es 6. Eso es todo lo que necesitamos calcular, solo el número de posibles pares a partir de un solo entero. Entonces, la idea sería crear una función que devuelva ese número como:

// Should output: 6
console.log(count(4));

Habiendo dicho eso, ¡comencemos!

Implementación

La lógica para resolver este problema es realmente simple (y será más simple en el código):

  1. Repita el número de elementos excepto el último. Por ejemplo, con 4 elementos, el primer ciclo debería repetirse solo 3 veces. En este caso, el índice de iteración comienza en 0.
  2. Dentro del primer ciclo, otro ciclo iterará sobre el número de elementos nuevamente, sin embargo, ignorará todos los elementos cuyo índice sea menor que el índice de iteración del primer ciclo más uno. Dentro de este ciclo, debería poder construir el posible par con ambos índices o agregar un número a un contador que agregue el nuevo par posible.

En caso de que necesite cuáles son los pares que se pueden formar usando la lógica mencionada, el siguiente fragmento de código debería funcionar:

function buildPossiblePairsFromArray(array)
{
    let results = [];
    
    for (let i = 0; i < array.length - 1; i++) {
        for (let j = i + 1; j < array.length; j++) {
            results.push(`${array[i]}${array[j]}`);
        }
    }

    return results;
}


// Devuelve: ["AB", "AC", "AD", "BC", "BD", "CD"]
buildPossiblePairsFromArray(["A", "B", "C", "D"]);

Sin embargo, si al igual que yo, solo necesitas la cantidad de combinaciones posibles, entonces el siguiente fragmento también debería funcionar:

function count(n){
    let results = 0;

    for (let i = 0; i < n - 1; i++) {
        for (let j = i + 1; j < n; j++) {
            results++;
        }
    }

    return results;
}

// Deberia devolver: 6
count(4);

// Deberia devolver: 45
count(10);

// Deberia devolver: 199990000
count(20000);

Que te diviertas ❤️!

Esto podria interesarte

Conviertete en un programador más sociable