Função - Localiza S...
 
Notifications
Clear all

Função - Localiza Sequência combinatória

7 Posts
2 Usuários
3 Reactions
238 Visualizações
(@ruymds)
Posts: 10
Eminent Member
Topic starter
 

Olá Pessoal,

Possuo um projeto que busca fazer o desdobramenteo de um conjunto de dados numéricos (dezenas combinatórias da loteria lotofácil), e essa parte está tudo certo.A planilha faz o desdobramento corretamente das 25 dezenas em um rol de 17 para 15 o qual gera 136 combinações. 

 

Meu desejo atual é fazer que essa combinações ao ser geradas (136) sejam também confrontadas com o rol das 3.268.760 combinações possíveis, e retorne qual é o posicionamento delas no CSN (Número sequencial de combinação).

Segue o código já realizado no Gdrive devida a dimensão do mesmo.

 

https://drive.google.com/file/d/1L_tMAvlaMYuk9oNEw7eDr0MuQt0Bpxi6/view?usp=drive_link

 

Obrigado.

Este tópico foi modificado 3 semanas atrás by ruymds
 
Postado : 20/09/2025 5:59 pm
(@osvaldomp)
Posts: 917
Prominent Member
 

Veja se lhe atende.

Sub ProcuraCSN()
Dim k As Long, v As Long, x As Long, m As Long, strD As String
Application.ScreenUpdating = False
AddZero
With Sheets("PLan3")
If .[R2] <> "" Then .Range("R2", .Cells(Rows.Count, "R").End(3)) = ""
m = 2
For k = 2 To 137
strD = Join(Application.Index(.Cells(k, 1).Resize(, 15).Value, 1, 0), " ")
DoEvents
For x = 2 To 11 Step 3
For v = m To 268761 - 731240 * (x < 11)
If strD = Trim(Sheets("CSN").Cells(v, x)) Then
.Cells(k, 18) = Sheets("CSN").Cells(v, x).Offset(, -1).Value
m = v + 1
GoTo próxK
End If
Next v
Next x
próxK:
Next k
End With
Complemento
End Sub
'processa as combinações não encontradas pelo código ProcuraCSN
Sub Complemento()
Dim r As Range, v As Long, x As Long, m As Long, strD As String
With Sheets("PLan3")
m = 2
Do While Application.CountA(.[R2:R137]) < 136
For Each r In .[R2:R137].SpecialCells(4)
strD = Join(Application.Index(.Cells(r.Row, 1).Resize(, 15).Value, 1, 0), " ")
DoEvents
For x = 2 To 11 Step 3
For v = m To 268761 - 731240 * (x < 11)
If strD = Trim(Sheets("CSN").Cells(v, x)) Then
r.Value = Sheets("CSN").Cells(v, x).Offset(, -1).Value
m = v + 1
GoTo próxr
End If
Next v
Next x
próxr:
If r.Value = "" Then m = 2
Next r
Loop
End With
End Sub
'adiciona zero no início dos díitos únicos na planilha Plan3
Sub AddZero()
Dim r As Range
For Each r In Sheets("Plan3").[A2:I137]
If Len(r.Value) = 1 Then
r.NumberFormat = "@"
r.Value = 0 & r.Value
End If
Next r
End Sub

Execute apenas o primeiro código, pois os outros dois serão "chamados" por ele.

Osvaldo

 
Postado : 23/09/2025 1:46 pm
ruymds reacted
(@ruymds)
Posts: 10
Eminent Member
Topic starter
 

Osvaldo, fiz as implementações no projeto conforme indicado e está funcionado geniosamente. 

Dim Tempo As Double

Tempo = Now()

MsgBox ("A macro rodou em " &amp; Now() - Tempo)

Fiz a inserção de um marcador temporal da macro, e em média o resultado do código para percorrer as 136 combinações e validar os csn pela matriz dos mais de 3milhões de combinações é de 8minutos.

Há alguma outra implementação que poderia estar sendo inserida para que esse tempo diminua, por exemplo?

O meu agradecimento pelo auxílio.

 

 
Postado : 24/09/2025 11:17 pm
(@osvaldomp)
Posts: 917
Prominent Member
 

Olá, Ruy.
O tempo de execução de 8 minutos me parece razoável, pois a busca é feita em 3 milhões+ de registros. Aqui na minha máquina, uma HP, idade 12 anos, executa em 12 minutos.

Eu utilizei o método "Join", pois me pareceu adequado para este caso de busca. Talvez com a utilização de "Arrays" ao invés, se consiga alguma redução, porém o código ficará mais extenso e trabalhoso, e a redução do tempo de execução, se houver, acredito que não será relevante. 

Curiosidade: qual é a utilidade/finalidade de se identificar o registro (CSN) que corresponde a um certo palpite?

Osvaldo

 
Postado : 25/09/2025 7:51 am
ruymds reacted
(@ruymds)
Posts: 10
Eminent Member
Topic starter
 

Osvaldo, meus agradecimentos pelo comentário e análise global.

Sobre sua indagaçao da finalidade da utilização do registro do CSN, sou um entusiasta em estatística e procuro mapear o comportamento dos sorteios lotéricos mais precisamente lotofácil e mega sena.

Hoje temos um sistema gratuito (Cologa) que projeta, conforme os sorteios diários, o posicionamento daquele sorteio do dia. Esse meu projeto é analisar os desdobramentos de 17 dezenas, buscando os CSN de 15 dezenas com o rol daqueles que já foram sorteados, e evidenciar quais posicionamentos estão mais concentrados.

Hoje facilmente, evidenciamos que a combinação 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 com CSN 1 - estatisticamente falando, possúi o mesmo peso das outras 3.268.759 de possibilidades, contudo, vislumbramos o comportamento, que as combinações que mais saem estão rol de CSN entre 800.002 a 2.026.274.

Abraço.

 
Postado : 25/09/2025 8:47 pm
(@osvaldomp)
Posts: 917
Prominent Member
 

" ... as combinações que mais saem estão rol de CSN entre 800.002 a 2.026.274."

Segue um comentário sobre esse enquadramento: se você executar o código ProcuraCSN mas não executar o código Complemento (para isso, no código ProcuraCSN, coloque um apóstrofo antes do comando Complemento --> 'Complemento), verá que alguns palpites (cerca de 10 ou 12) ficarão sem o CSN.

Isso se deve ao seguinte: na elaboração do código eu impus que cada palpite seja buscado a partir da combinação seguinte à combinação antes encontrada. Exemplo: se o palpite número 58 foi encontrado na combinação 689.099, portanto, CSN=689.099, então o palpite seguinte (59) será buscado a partir da combinação 689.100. Essa estratégia evita que cada palpite busque CSNs já encontradas. Nesse exemplo acima evita-se que código processe 689.099 combinações. 

Essa estratégia foi adotada com a premissa de que a montagem das combinações e a montagem dos palpitem seguem exatamente sequências iguais. O que não é verdade apenas para os 10 ou 12 já citados. E para buscar esses 10 ou 12 foi que elaborei o código Complemento, cujo tempo de execução é baixo, visto que ele processa somente as células vazias na coluna R, que são os CSNs não encontrados pelo código ProcuraCSN .

Esse comentário foi para dizer que o CSN de cada palpite depende da sequência da montagem das dezenas tanto das 3 milhões+ de combinações quanto dos 136 palpites, caso isso seja relevante para as suas estatísticas.

abraço.

 

Osvaldo

 
Postado : 26/09/2025 8:39 am
ruymds reacted
(@ruymds)
Posts: 10
Eminent Member
Topic starter
 

Obrigado Osvaldo pela observação. Abraço!

 
Postado : 02/10/2025 10:15 pm