Estou desenvolvendo uma aplicação para loterias e escrevi uma função para desdobramento de dezenas. Ela recebe um array()
contendo N dezenas e as desdobra em todas as combinações possíveis.
Por exemplo, para o array:
$ dezenas = array('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17');
Utilizo a função gera_apostas_a()
:
/****************************** * Função geradora "A" ******************************/ $ resultado = array(); $ combinacao = array(); // Quantas dezenas serão geradas por aposta $ dez_por_apostas = 16; // Total de dezenas em $ dezenas $ total_dez_escolhidas = count($ dezenas); function gera_apostas_a($ inicio, $ dez_por_apostas, $ aposta, $ total_dez_escolhidas) { global $ resultado, $ combinacao; if ($ dez_por_apostas == 0) { array_push($ resultado, $ combinacao); } else { for ($ i = $ inicio; $ i <= $ total_dez_escolhidas - $ dez_por_apostas; ++$ i) { array_push($ combinacao, $ aposta[$ i]); gera_apostas_a($ i + 1, $ dez_por_apostas - 1, $ aposta, $ total_dez_escolhidas); array_pop($ combinacao); } } } gera_apostas_a(0, $ dez_por_apostas, $ dezenas, $ total_dez_escolhidas); // Só para deixar mais claro, apostas desdobradas estão armazenadas em $ resultado var_dump($ resultado);
Serão geradas 17 apostas de 16 números, cada. Até aqui tudo ok, funcionando perfeitamente.
O que estou tentando fazer é que, cada jogo anterior, seja desdobrado em jogos de 15 dezenas, cada e tentei dessa forma:
/****************************** * Função geradora "B" ******************************/ $ resultado_i = array(); $ combinacao_i = array(); // Quantas dezenas serão geradas por aposta $ dez_por_apostas_i = 15; // Total de dezenas por aposta que foi gerada em gera_apostas_a() $ total_dez_escolhidas_i = 16; function gera_apostas_b($ inicio_i, $ dez_por_apostas_i, $ aposta_i, $ total_dez_escolhidas_i) { global $ resultado_i, $ combinacao_i; if ($ dez_por_apostas_i == 0) { array_push($ resultado_i, $ combinacao_i); } else { for ($ j = $ inicio_i; $ j <= $ total_dez_escolhidas_i - $ dez_por_apostas_i; ++$ j) { array_push($ combinacao_i, $ aposta_i[$ j]); gera_apostas_b($ j + 1, $ dez_por_apostas_i - 1, $ aposta_i, $ total_dez_escolhidas_i); array_pop($ combinacao_i); } } } $ ar_gerados_total = array(); foreach ($ resultado as $ rlt) { $ ar_gerados = array(); foreach ($ rlt as $ rlts) { array_push($ ar_gerados, $ rlts); } array_push($ ar_gerados_total, $ ar_gerados); } foreach($ ar_gerados_total as $ ar_apostas) { asort($ ar_apostas); gera_apostas_b(0, 15, $ ar_apostas, 16); foreach ($ resultado_i as $ ar_apostas) { foreach ($ ar_apostas as $ ar_dezenas) { echo sprintf("%02d", $ ar_dezenas) . " "; } echo PHP_EOL; } }
Com isso estou obtendo um total de 2448 jogos de 15 dezenas mas, desse montante, 2312 estão vindo repetidos.
Onde estou viajando aqui?