Escriba una función que devuelva todo el código de barras que se puede crear en una matriz cuando M debe ser una secuencia par de números naturales del 1 al N y la longitud debe ser M.*
condición
function test (N, M) { };las salidas deben ir como a continuación
const salida1 = prueba(2, 1); consola.log(salida1); // --> [1, 2]
const salida2 = prueba(3, 2); consola.log(salida2); // --> [12, 13, 21, 23, 31, 32]
const salida3 = prueba(3, 3); consola.log(salida3); // --> [123, 132, 213, 231, 312, 321]
He intentado resolver esto durante horas, pero todavía no puedo conseguirlo. ... Es difícil incluso empezar. Agradecería que me ayudaran a resolver el código.
prueba esto
const test = (n, m) => { if(m > n){ return [] } const numbers = Array(n).fill(1).map((n, i) => (n + i).toString()) const loop = (arr, res, elements) => { if (elements === 0) { return res.join('') } return arr.flatMap((a, i) => loop(arr.filter(b => b !== a), [...res, a], elements - 1)) } return loop(numbers, [], m) } console.log(test(1, 1)) console.log(test(2, 1)) console.log(test(3, 2)) console.log(test(5, 3))Explicación
primero hay una verificación para asegurarse de que m es menor que n porque en ese caso no hay combinación posible
Internamente, esta función utiliza un loop de función recursivo para calcular todas las combinaciones posibles de longitud m
los argumentos son
al principio, la función de bucle se llama con numbers como matriz, matriz vacía como res y m como número de elementos
Primero verifica si los elements son cero (condición de salida)
Luego, toma el arr y haz un flatMap sobre él.
Foreach elemento llama a la función de loop recursivamente con argumento
ejemplo (2, 2)
primer bucle de ejecución (['1', '2'], [], 2)
elementos > 0
bucle(['2'], ['1'], 1)
bucle(['1'], ['2'], 1)