Este es un tema matemático bastante complejo pero muy interesante (conocido como "problema de cobertura" ),
Y me gustaría su ayuda para implementarlo.
Imagine un juego de lotería, donde cada boleto debe elegir 5 números aleatorios en un conjunto de 50 números (del 1 al 50).
Es bastante fácil saber la probabilidad de un boleto ganador, o la probabilidad de tener 1, 2, 3 o 4 números buenos.
También es bastante fácil "generar" todas las entradas que tienen 1, 2, 3, 4 números buenos.
Mi pregunta (y el desafío del código) está relacionada con esto, pero ligeramente diferente:
Quiero comprar algunos boletos de lotería (la menor cantidad posible), como que al menos uno de mis boletos tenga 3 números buenos.
Desafío
Su objetivo es implementar una solución genérica (como un programa o simplemente una función), como esta, en cualquier idioma:
// Input: 3 prameters
min_lottery_tickets(total_numbers_to_choose_from, how_many_numbers_to_choose, how_many_good_numbers_i_want)
Para el ejemplo anterior, solo habría que llamar:
min_lottery_tickets(50, 5, 3)
y el programa generará el conjunto más pequeño de boletos para lograr este objetivo.
Ejemplo:
min_lottery_tickets(10, 5, 2)
generaría 7 tickets, como esos:
1 2 3 4 5
5 6 7 8 9
10 1 2 6 7
10 3 4 8 9
3 4 6 7 8
1 2 3 8 9
1 4 9 5 10
porque tales boletos son suficientes para cubrir cualquier par de números del 1 al 10.
Salida
Texto, una línea por boleto, tabulaciones o espacios entre números
quién gana
El programa más eficiente gana (es decir, el programa que genera la menor cantidad de tickets para los parámetros anteriores):
min_lottery_tickets(50, 5, 3)
¡Gracias!
Respuestas:
Sé que no es óptimo , pero aquí está el código en node.js:
Algunos resultados de ejemplo:
otro:
otro:
fuente
min_lottery_tickets(10, 5, 2)
genera muchas más soluciones que los OP.