Jump to content

FORMULA DE CSN PARA NÚMERO NO EXCEL


TAS

Recommended Posts

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 ?

 

 

 

 

  • Like 1
Link to comment
Share on other sites

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

  • Like 2
  • Thanks 1
Link to comment
Share on other sites

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í.

 

 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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!

 

:rolleyes:

Edited by TAS
  • Like 1
Link to comment
Share on other sites

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!

 

:rolleyes:

 

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

 

 

  • Like 2
Link to comment
Share on other sites

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.

  • Like 1
Link to comment
Share on other sites

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!

  • Like 1
Link to comment
Share on other sites

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!

Link to comment
Share on other sites

2 horas atrás, Wata disse:

8-)

...

 

 

 

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.

  • Like 1
Link to comment
Share on other sites

 

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.

 

  • Like 1
Link to comment
Share on other sites

  • 1 year later...
  • 5 months later...

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...