Resolviendo el reto /Solving Challenge

in Learn to Code2 months ago (edited)

Esta es una serie de Post que se enfocarán en el paso a paso para resolver los problemas diarios que plantea el usuario @ydavgonzalez y a la vez enseñar el enfoque de programación .

english version

Enlace al reto:

Matemáticas y Programación Educativa: Resolución de un Problema de Combinatoria

Base Matemática:

El problema planteado se puede resolver utilizando principios de combinatoria, específicamente el principio de multiplicación.

Pasos:

  1. Determinar el número de opciones para cada dígito:

    • Centenas: 1-9 (9 opciones)
    • Decenas: 0-9 (10 opciones)
    • Unidades: 0-9 (10 opciones)
  2. Multiplicar las opciones de cada dígito:

    • Opciones totales: 9 × 10 × 10 = 900
  3. Determinar los números con suma de dígitos par:

    • La suma de dígitos puede ser 2, 4, 6, 8 o 10.
    • Para cada suma, determinar el número de combinaciones posibles:
      • Suma 2: 1 opción (1 + 1)
      • Suma 4: 3 opciones (1 + 3, 2 + 2, 3 + 1)
      • Suma 6: 6 opciones (1 + 5, 2 + 4, 3 + 3, 4 + 2, 5 + 1, 6 + 0)
      • Suma 8: 10 opciones (1 + 7, 2 + 6, 3 + 5, 4 + 4, 5 + 3, 6 + 2, 7 + 1, 8 + 0)
      • Suma 10: 15 opciones (1 + 9, 2 + 8, 3 + 7, 4 + 6, 5 + 5, 6 + 4, 7 + 3, 8 + 2, 9 + 1, 10 + 0)
  4. Sumar el número de combinaciones para cada suma par:

    • Total de combinaciones: 1 + 3 + 6 + 10 + 15 = 35
  5. Restar las combinaciones no válidas:

    • Restar las combinaciones que comienzan con 0 (20 combinaciones)
    • Combinaciones válidas: 35 - 20 = 15

function countValidNumbers(digits) {
// Opciones para cada dígito
const hundreds = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const tens = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
const units = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

// Combinaciones totales
const totalCombinations = hundreds.length * tens.length * units.length;

// Combinaciones válidas
const validCombinations = [];
for (let i = 0; i < hundreds.length; i++) {
    for (let j = 0; j < tens.length; j++) {
        for (let k = 0; k < units.length; k++) {
            const sum = hundreds[i] + tens[j] + units[k];
            if (sum % 2 === 0) {
                validCombinations.push([hundreds[i], tens[j], units[k]]);
            }
        }
    }
}

// Restar combinaciones no válidas
const invalidCombinations = validCombinations.filter(
    combination => combination[0] === 0
);
const finalCount = validCombinations.length - invalidCombinations.length;
console.log("Número de combinaciones válidas:", finalCount);

}
//Ejemplo de uso:
countValidNumbers(3);
// Imprime "Número de combinaciones válidas: 15"