TAS Posted November 26, 2018 Share Posted November 26, 2018 To procurando e será que alguém tem uma formula ou saiba como fazer a formula para transformar um CSN da lotofacil para número (Combinação) ? EXEMPLO: CSN = 1657251 Preciso de uma formula que transforme o número acima na sequencia abaixo; 1, 3, 4, 5, 6, 11, 14, 15, 17, 18, 19, 21, 22, 23, 25 Preciso da formula em excel mesmo, não quero usar programa, alguém sabe algo ? 1 Quote Link to comment Share on other sites More sharing options...
bitwizardry Posted November 28, 2018 Share Posted November 28, 2018 A fórmula em sí, é essa: 3 Quote Link to comment Share on other sites More sharing options...
DixieJoe Posted November 28, 2018 Share Posted November 28, 2018 @TAS Se quiser um programa em Delphi, tenho pronto aqui. Mas o CSN que passou acima, no meu programa dá outra combinação, rsrsrs No meu programa , a combinação que passou deu o CSN 1235319. Qual será que está certo? 2 Quote Link to comment Share on other sites More sharing options...
DixieJoe Posted November 28, 2018 Share Posted November 28, 2018 Em 26/11/2018 at 16:39, TAS disse: To procurando e será que alguém tem uma formula ou saiba como fazer a formula para transformar um CSN da lotofacil para número (Combinação) ? EXEMPLO: CSN = 1657251 Preciso de uma formula que transforme o número acima na sequencia abaixo; 1, 3, 4, 5, 6, 11, 14, 15, 17, 18, 19, 21, 22, 23, 25 Preciso da formula em excel mesmo, não quero usar programa, alguém sabe algo ? TAS, Encontrei isso em VBA. Pode ser usado no Excel, acredito. Espero que ajude Option Explicit Function Index2Combination( _ ByVal N As Long, ByVal K As Long, ByVal CNO As Variant) As String ' ' by Dr Memory (MathImagics) May 2004 ' ' N = # of values (balls) ' K = # selected to combine ' CNO = index number of combination to return ' 1 <= CNO <= Combinations(N, K) < 75 x 10^27 ' '============================================= Dim NC, V, cCount ' Variants (Decimal) Dim Wheel As Long, W As Long, Combo As String NC = Combinations(N, K) If CNO < 1 Or CNO > NC Then Exit Function Wheel = 1 cCount = CDec(0) ' running count of combinations For W = 1 To K - 1 Do V = Combinations(N - Wheel, K - W) ' how many till next value? If V = 0 Then Exit Do If cCount + V >= CNO Then Exit Do cCount = cCount + V Wheel = Wheel + 1 Loop If W = 1 Then Combo = Wheel Else Combo = Combo & ", " & Wheel Wheel = Wheel + 1 Next Index2Combination = Combo & ", " & Wheel + (CNO - cCount - 1) End Function Function Combination2Index(ByVal N As Long, ByVal K As Long, Combn As String) As Variant ' ' by Dr Memory (MathImagics) May 2004 ' ' N = # of values (balls) ' K = # selected to combine ' Combn= list of values, e.g. "2, 7, 9, 23, 40, 45" ' must be in ascending order '============================================= ReDim token(K) As String token = Split(Combn, ",") If UBound(token) <> K - 1 Then Exit Function Dim NC, wcount, Wheel() As Long, W As Long Dim V As Long, msg As String ReDim Wheel(K) Combination2Index = CDec(0) For W = 1 To K Wheel(W) = Val(token(W - 1)) If Wheel(W) <= Wheel(W - 1) Then Exit Function If Wheel(W) > N Then Exit Function Next For W = 1 To K - 1 For V = Wheel(W - 1) + 1 To Wheel(W) - 1 Combination2Index = Combination2Index + Combinations(N - V, K - W) - 1 Next Next Combination2Index = Combination2Index + Wheel(K) - K + 1 End Function 2 1 Quote Link to comment Share on other sites More sharing options...
Joh2010 Posted November 28, 2018 Share Posted November 28, 2018 @TAS https://en.wikipedia.org/wiki/Combinatorial_number_system#National_Lottery_example_in_Excel 2 Quote Link to comment Share on other sites More sharing options...
TAS Posted November 28, 2018 Author Share Posted November 28, 2018 9 horas atrás, bitwizardry disse: A fórmula em sí, é essa: O código é limpo e modelado de forma bem clara, mas talvez falte algo aí, tenho quase certeza, estou estudando! Obrigado! Quote Link to comment Share on other sites More sharing options...
TAS Posted November 28, 2018 Author Share Posted November 28, 2018 6 horas atrás, DixieJoe disse: @TAS Se quiser um programa em Delphi, tenho pronto aqui. Mas o CSN que passou acima, no meu programa dá outra combinação, rsrsrs No meu programa , a combinação que passou deu o CSN 1235319. Qual será que está certo? Joe, quero fazer no excel mesmo, o que vai me facilitar para o que pretendo montar, você tá certo a serie; 165725, gera 1, 4, 5, 6, 7, 8, 10, 11, 14, 16, 17, 18, 19, 20, 23 Na pressa para postar, acho que errei, pois estava fazendo aqui testes, mas agora está corrigido, mas se a sua sequencia não for essa o seu está errado, com certeza, mas nesse caso fui eu que errei mesmo, desculpa aí. Quote Link to comment Share on other sites More sharing options...
TAS Posted November 28, 2018 Author Share Posted November 28, 2018 6 horas atrás, DixieJoe disse: TAS, Encontrei isso em VBA. Pode ser usado no Excel, acredito. Espero que ajude Option Explicit Function Index2Combination( _ ByVal N As Long, ByVal K As Long, ByVal CNO As Variant) As String ' ' by Dr Memory (MathImagics) May 2004 ' ' N = # of values (balls) ' K = # selected to combine ' CNO = index number of combination to return ' 1 <= CNO <= Combinations(N, K) < 75 x 10^27 ' '============================================= Dim NC, V, cCount ' Variants (Decimal) Dim Wheel As Long, W As Long, Combo As String NC = Combinations(N, K) If CNO < 1 Or CNO > NC Then Exit Function Wheel = 1 cCount = CDec(0) ' running count of combinations For W = 1 To K - 1 Do V = Combinations(N - Wheel, K - W) ' how many till next value? If V = 0 Then Exit Do If cCount + V >= CNO Then Exit Do cCount = cCount + V Wheel = Wheel + 1 Loop If W = 1 Then Combo = Wheel Else Combo = Combo & ", " & Wheel Wheel = Wheel + 1 Next Index2Combination = Combo & ", " & Wheel + (CNO - cCount - 1) End Function Function Combination2Index(ByVal N As Long, ByVal K As Long, Combn As String) As Variant ' ' by Dr Memory (MathImagics) May 2004 ' ' N = # of values (balls) ' K = # selected to combine ' Combn= list of values, e.g. "2, 7, 9, 23, 40, 45" ' must be in ascending order '============================================= ReDim token(K) As String token = Split(Combn, ",") If UBound(token) <> K - 1 Then Exit Function Dim NC, wcount, Wheel() As Long, W As Long Dim V As Long, msg As String ReDim Wheel(K) Combination2Index = CDec(0) For W = 1 To K Wheel(W) = Val(token(W - 1)) If Wheel(W) <= Wheel(W - 1) Then Exit Function If Wheel(W) > N Then Exit Function Next For W = 1 To K - 1 For V = Wheel(W - 1) + 1 To Wheel(W) - 1 Combination2Index = Combination2Index + Combinations(N - V, K - W) - 1 Next Next Combination2Index = Combination2Index + Wheel(K) - K + 1 End Function Joe, vou testar obrigado. Quote Link to comment Share on other sites More sharing options...
TAS Posted November 28, 2018 Author Share Posted November 28, 2018 4 horas atrás, Joh2010 disse: @TAShttps://en.wikipedia.org/wiki/Combinatorial_number_system#National_Lottery_example_in_Excel Muito bom Joh, obrigado. Quote Link to comment Share on other sites More sharing options...
TAS Posted November 28, 2018 Author Share Posted November 28, 2018 (edited) Pessoal obrigado mesmo, me ajudaram e me estimularam a seguir na caminhada...... Vou fazer tudo isso no Excel, agora começo a programar isso, a matemática envolvida é mais fácil entender do que o VBA, tenho boa noção matemática de sistemas de graus X, e assuntos ligados a matrizes do ponto de vista matemático. Vou de Excel porque é dinâmico para muitas coisas, exemplo em muitos programas, você não consegue sequer pintar uma linha (É claro que programas não são feitos para isso), mas no Excel isso é uma piada! e isso me ajuda nos jogos. Comecei a estudar isso por bobeira mesmo, gerei um CSN, e pensei vou jogar, aí pensei de novo, imagina só, não vou jogar não, seria muita sorte premiar......o jogo pegou 11 pontos, queria jogar multiplicando um único jogo, é claro que é apenas um teste só. então agora estou curioso! Edited November 28, 2018 by TAS 1 Quote Link to comment Share on other sites More sharing options...
Wata Posted November 28, 2018 Share Posted November 28, 2018 ... 3 1 Quote Link to comment Share on other sites More sharing options...
DixieJoe Posted November 28, 2018 Share Posted November 28, 2018 @Wata Excelente, Wata! Obrigado 1 Quote Link to comment Share on other sites More sharing options...
Sphgf Posted November 28, 2018 Share Posted November 28, 2018 1 hora atrás, TAS disse: Pessoal obrigado mesmo, me ajudaram e me estimularam a seguir na caminhada...... Vou fazer tudo isso no Excel, agora começo a programar isso, a matemática envolvida é mais fácil entender do que o VBA, tenho boa noção matemática de sistemas de graus X, e assuntos ligados a matrizes do ponto de vista matemático. Vou de Excel porque é dinâmico para muitas coisas, exemplo em muitos programas, você não consegue sequer pintar uma linha (É claro que programas não são feitos para isso), mas no Excel isso é uma piada! e isso me ajuda nos jogos. Comecei a estudar isso por bobeira mesmo, gerei um CSN, e pensei vou jogar, aí pensei de novo, imagina só, não vou jogar não, seria muita sorte premiar......o jogo pegou 11 pontos, queria jogar multiplicando um único jogo, é claro que é apenas um teste só. então agora estou curioso! Só por sugestão, ok.. Tente gerar uma fórmula via csn que irá CALCULAR* (não serve outra coisa !!) a próxima combinação contendo N repetidos e depois o próximo com os mesmos N repetidos, sem ser via bruta force ou linearmente gerando todas as combinações. Se conseguir expanda pra Lotomania, vai gerar fechamentos otimizados pois irá calcular as combinações, daí saiu do avançado e foi ao expert !! saudações, Sphgf 2 Quote Link to comment Share on other sites More sharing options...
bitwizardry Posted November 28, 2018 Share Posted November 28, 2018 2 horas atrás, TAS disse: O código é limpo e modelado de forma bem clara, mas talvez falte algo aí, tenho quase certeza, estou estudando! TAS, não falta nada. Temos duas variáveis como input: K e M. K é o "tamanho" da combinação, no caso da Lotofácil, 15. M é o CSN propriamente dito. Lembrando que o csn e a combinação são sempre indexados por zero, ou seja: CSN = 0 = 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 E mais um detalhe, esse código realiza a conversão Colexcográfica. Para ordem Lexicográfica, o código é completamente diferente. Existem pelo menos 7 formas de se ordenar/gerar combinações: Lex, Colex, Revolving-Door, Gray-Code, entre outras formas exóticas. 1 Quote Link to comment Share on other sites More sharing options...
TAS Posted November 28, 2018 Author Share Posted November 28, 2018 1 hora atrás, Sphgf disse: Só por sugestão, ok.. Tente gerar uma fórmula via csn que irá CALCULAR* (não serve outra coisa !!) a próxima combinação contendo N repetidos e depois o próximo com os mesmos N repetidos, sem ser via bruta force ou linearmente gerando todas as combinações. Se conseguir expanda pra Lotomania, vai gerar fechamentos otimizados pois irá calcular as combinações, daí saiu do avançado e foi ao expert !! saudações, Sphgf Sim obrigado ! Vou aos poucos, tentar evoluir, já já passo um teste para hoje! 1 Quote Link to comment Share on other sites More sharing options...
TAS Posted November 28, 2018 Author Share Posted November 28, 2018 57 minutos atrás, bitwizardry disse: TAS, não falta nada. Temos duas variáveis como input: K e M. K é o "tamanho" da combinação, no caso da Lotofácil, 15. M é o CSN propriamente dito. Lembrando que o csn e a combinação são sempre indexados por zero, ou seja: CSN = 0 = 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 E mais um detalhe, esse código realiza a conversão Colexcográfica. Para ordem Lexicográfica, o código é completamente diferente. Existem pelo menos 7 formas de se ordenar/gerar combinações: Lex, Colex, Revolving-Door, Gray-Code, entre outras formas exóticas. Bit, esse é um algoritmo genérico, que deve realizar uma não classificação. Logo, deve haver algum para classificação. L, é também uma variável. Assim como o contador I. Por fim concordamos pois as várias maneiras de "ordenar", citadas por você diferem, se uso lexicográfica, não posso usar código Co-Lexicográfico, pedido do tópico, mas te agradeço sim pela participação. Aqui tudo vale! Quote Link to comment Share on other sites More sharing options...
TAS Posted November 28, 2018 Author Share Posted November 28, 2018 2 horas atrás, Wata disse: ... Parabéns pelo criador do código, que contribui sobremaneira, e pela sua adaptação, para meu objetivo, é necessário incrementar módulos de geração direto, pois o que esse código faz e bem é CONVERTER, desde que já se tenha o CSN. 1 Quote Link to comment Share on other sites More sharing options...
TAS Posted November 28, 2018 Author Share Posted November 28, 2018 Vou testar aqui qual a eficiência de uma geração para o concurso 1743; 2 3 6 9 11 12 13 14 15 16 18 19 20 21 22 Usando apenas um único palpite; Agora vou aceitar a sugestão do Sp, e testar a eficiência com algum nível de restrição ainda a ser estudado e devidamente calibrado. Usando apenas um único palpite; 2 3 4 6 7 9 10 12 13 18 19 20 21 22 23 Assim será possível confrontar se o nível de restrição pode ser útil ou não. 1 Quote Link to comment Share on other sites More sharing options...
Marcelofarias Posted June 1, 2020 Share Posted June 1, 2020 @Wata BOM DIA VC TEM PARA MEGA SENA POSSA ME DISPONABILISA DESDE JA AGRADEÇO FICA COM DEUS Quote Link to comment Share on other sites More sharing options...
Wata Posted June 2, 2020 Share Posted June 2, 2020 10 horas atrás, Marcelofarias disse: @Wata BOM DIA VC TEM PARA MEGA SENA POSSA ME DISPONABILISA DESDE JA AGRADEÇO FICA COM DEUS ... 3 1 Quote Link to comment Share on other sites More sharing options...
Marcelofarias Posted June 2, 2020 Share Posted June 2, 2020 OBRIGADO MANO @Wata FICA COM DEUS. 1 Quote Link to comment Share on other sites More sharing options...
ANDRELCC Posted November 10, 2020 Share Posted November 10, 2020 teria csn do dia de sorte? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.