Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

158
Views
¿Cómo elijo datos aleatorios de una matriz y me aseguro de que se seleccione un mínimo de ciertos datos de esa matriz sin afectar la probabilidad?

Estoy seleccionando al azar 20 bicicletas de una variedad más grande de bicicletas y luego estoy creando una nueva variedad con esas bicicletas seleccionadas. Me gustaría asegurarme de que al menos 2 de las bicicletas seleccionadas al azar en esa nueva matriz sean de color rojo. Más de 2 pueden ser rojos, pero como mínimo 2 deberían serlo. ¿Cómo se logra esto mientras se hace justo para todas las bicicletas seleccionadas al azar?

Algún código de ejemplo:

 const bikes = [ { type: 'bmx', color: 'red' }, { type: 'mountain', color: 'blue' }, { type: 'bmx', color: 'yellow' }, { type: 'mountain', color: 'black' }, { type: 'bmx', color: 'red' }, { type: 'bmx', color: 'purple' } ...more bikes ] const getRandomBikes = () => { const randomBikes = [] //random select 20 bikes for(let i = 0; i < 20; i++) { randomBikes.push(bikes[Math.floor(Math.random() * bikes.length)]) } return randomBikes } getRandomBikes()

Muy simple para devolver una matriz aleatoria. Pero ahora, ¿cómo me aseguraría de que la matriz aleatoria de bicicletas contenga al menos dos bicicletas con color: 'red' sin afectar la probabilidad de que se seleccionen todas las bicicletas? Presumiblemente, estaría ejecutando getRandomBikes() hasta que la matriz devuelta cumpliera con los requisitos, pero digamos que mi matriz de bikes tiene 10000 , eso puede llevar una eternidad antes de que se cumpla el requisito. ¿Cómo me aseguro de que al menos dos bicicletas rojas terminen en la matriz de bicicletas seleccionada al azar?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Mientras itera, puede contar la cantidad de bicicletas requeridas de un color específico restante y, si es igual a la cantidad de elementos que quedan por elegir, elija solo de las bicicletas con el color correcto.

 const bikes = [ { type: 'bmx', color: 'red' }, { type: 'mountain', color: 'blue' }, { type: 'bmx', color: 'yellow' }, { type: 'mountain', color: 'black' }, { type: 'bmx', color: 'red' }, { type: 'bmx', color: 'purple' } ]; const getRandomBikes = (requiredRed, totalPicks) => { const chosenBikes = []; const reds = bikes.filter(({ color }) => color === 'red'); for(let i = 0; i < totalPicks; i++) { const redsSoFar = chosenBikes.reduce((a, b) => a + (b.color === 'red'), 0); const picksRemaining = totalPicks - i; const mustChooseRed = requiredRed - redsSoFar === picksRemaining; chosenBikes.push( mustChooseRed ? reds[Math.floor(Math.random() * reds.length)] : bikes[Math.floor(Math.random() * bikes.length)] ); } return chosenBikes; } console.log(getRandomBikes(2, 3));

O con menos complejidad

 const bikes = [ { type: 'bmx', color: 'red' }, { type: 'mountain', color: 'blue' }, { type: 'bmx', color: 'yellow' }, { type: 'mountain', color: 'black' }, { type: 'bmx', color: 'red' }, { type: 'bmx', color: 'purple' } ]; const getRandomBikes = (requiredRed, totalPicks) => { const chosenBikes = []; const reds = bikes.filter(({ color }) => color === 'red'); let redsSoFar = 0; for(let i = 0; i < totalPicks; i++) { const picksRemaining = totalPicks - i; const mustChooseRed = requiredRed - redsSoFar === picksRemaining; const chosenBike = mustChooseRed ? reds[Math.floor(Math.random() * reds.length)] : bikes[Math.floor(Math.random() * bikes.length)] if (chosenBike.color === 'red') redsSoFar++; chosenBikes.push(chosenBike); } return chosenBikes; } console.log(getRandomBikes(2, 3));

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!