Esse é um assunto de matemática bastante complexo, mas muito interessante (conhecido como "problema de cobertura" ),
E eu gostaria da sua ajuda para implementá-lo.
Imagine um jogo de loteria, em que cada bilhete deve escolher 5 números aleatórios em um conjunto de 50 números (de 1 a 50).
É muito fácil saber a probabilidade de um bilhete premiado ou a probabilidade de ter 1, 2, 3 ou 4 números bons.
Também é muito fácil "gerar" todos os tickets com 1, 2, 3, 4 números bons.
Minha pergunta (e desafio de código) está relacionada a isso, mas um pouco diferente:
Quero comprar alguns bilhetes de loteria (o menor número possível), como pelo menos um dos meus bilhetes tem 3 números bons.
Desafio
Seu objetivo é implementar uma solução genérica (como um programa ou apenas uma função), como esta, em qualquer idioma:
// Input: 3 prameters
min_lottery_tickets(total_numbers_to_choose_from, how_many_numbers_to_choose, how_many_good_numbers_i_want)
Para o exemplo acima, basta chamar:
min_lottery_tickets(50, 5, 3)
e o programa gerará o menor conjunto de ingressos para jogar para atingir esse objetivo.
Exemplo:
min_lottery_tickets(10, 5, 2)
produziria 7 tickets, como os seguintes:
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 esses ingressos são suficientes para cobrir qualquer par de números de 1 a 10.
Resultado
Texto, uma linha por ticket, tabulações ou espaços entre números
quem ganha
O programa mais eficiente vence (ou seja, o programa que gera o menor número de tickets para os parâmetros acima):
min_lottery_tickets(50, 5, 3)
Obrigado!