dois Posted December 30, 2020 Share Posted December 30, 2020 Olá à todos, Crio este Tópico para não continuar poluindo o Tópico origem. Como tenho comentado, estou gigantescamente atarefado, assim minha disponibilidade é pouquíssima. Então, infelizmente, não terei como detalhar conforme o desejado. Mas vamos seguindo conforme o que for possível. Um abraço. 1 Quote Link to comment Share on other sites More sharing options...
dois Posted December 30, 2020 Author Share Posted December 30, 2020 Propositalmente o Título não esclarece SE é uma Afirmação ou Indagação, Então inicio respondendo: Literalmente pode ajudar ou atrapalhar, Logo: SE o estudo estiver ajudando procuro avançar tentando encontrar algo favorável SE o estudo estiver atrapalhando coloco no #ModoPause 1 Quote Link to comment Share on other sites More sharing options...
dois Posted December 30, 2020 Author Share Posted December 30, 2020 O que é relevante que já postei num outro Tópico: Postagem 1: Tenho um Projeto-base para aplicações estruturadas em CSN e que poderia ser utilizado na solução desta sua necessidade. É um Projeto-base porque em algum momento é necessário converter o CSN nas suas correspondentes Dezenas. Postagem 2: Métodos pelo CSN também tenho, conforme já comentei e para tentar colaborar vou estender só o suficiente a não desvirtuar o Tópico: Por exemplo: Um dos meus futuros Projetos pretende tentar viabilizar criação de Matrizes pelo CSN... porque acredito que o Tempo de Processamento seja bem menor e também haverá alguma dificuldade menor no Tratamento de Quantidade de Linhas/Combinações, que como a base será o Índice/CSN também posso utilizar Ponteiro. Evidentemente que não será somente EXCEL/VBA pelas limitações que sabemos, Então continuo estudando (na verdade parei nesta pandemia) PYTHON e SGDB. Postagem 3: Resumidamente, digo, que a princípio será criação de MATRIZ pelo CSN e não pelas Dezenas. (1) Matriz, Diagrama de Venn, IMSP, continuam sendo minha #ZonaDeConforto (2) Matriz é somente o Termo, pois as que me interessam não são do tipo C(n,p), são do tipo v, k, t, m e outras Variáveis (3) Os itens 1 e 2 me fizeram criar um Termo próprio que atualmente chamo de Matriz Condicionada (4) A Lógica que será aplicada, resumidamente, utilizará Arrays, Índices e Ponteiros, mas haverá casos de PRÉ-FILTRAGEM em BD. (5) Concluindo, a vantagem de usar CSN da Combinação aos invés das suas respectivas Dezenas é que não é necessário a conferência tradicional de pontuação/acertos, mas apenas a Quantidade de Índices. Por Exemplo, na LOTOFÁCIL, ao invés de conferir a pontuação de determinadas 15 Dezenas, apenas confiro seu respectivo CSN. Lembrando que este é apenas um esclarecimento resumido, pois para o entendimento do Todo, tenho que detalhar muito mais e inclusive Diagrama de Venn. 1 1 Quote Link to comment Share on other sites More sharing options...
dois Posted December 30, 2020 Author Share Posted December 30, 2020 Também já fiz alguns exercícios e Palpites em: 1 Quote Link to comment Share on other sites More sharing options...
dois Posted December 30, 2020 Author Share Posted December 30, 2020 O Projeto-base já mencionado, atualmente, é o terceiro na minha lista de prioridades. Considerando que CSN é o índice da Combinação, temos: A partir de determinada Combinação pode-se calcular seu respectivo índice A partir de determinado CSN pode-se calcular sua respectiva Combinação Para o item 1 temos Planilhas disponíveis aqui na área de downloads do forum e para o item 2 temos a Tabela no wikipedia. Desta forma temos tudo via Fórmulas; No caso do EXCEL, sem obrigatoriedade de Macro (apenas tome cuidado com a LOTOMANIA). 1 Quote Link to comment Share on other sites More sharing options...
Friaça Posted December 30, 2020 Share Posted December 30, 2020 Opa... Vou acompanhar esse tópico. Quem sabe consigo pescar algo...kkk. Muito bom @dois....vamos correr atrás dos 15 pontos, porque esse ano sai.....lol.... 2 Quote Link to comment Share on other sites More sharing options...
dois Posted December 30, 2020 Author Share Posted December 30, 2020 Agora, Friaça disse: Opa... Vou acompanhar esse tópico. Quem sabe consigo pescar algo...kkk. Muito bom @dois....vamos correr atrás dos 15 pontos, porque esse ano sai.....lol.... Eu tinha um Planejamento, mas sabiamente optei por sair do aluguel, Então, aproveitei uma oportunidade e comprei meu modesto e amado apartamento o qual também agradeço sempre ao nosso Bom, Perfeito e Misericordioso DEUS, no nome Santo de Cristo JESUS e a consolação do Espírito Santo. No Planejamento reformulado, começar a pensar em 15 pontos somente na próxima fase que está prevista para daqui a 3 anos; Evidentemente que a Esperança existe, mas caso ocorra será uma "çorte" gigantesca. 2 Quote Link to comment Share on other sites More sharing options...
Omesmo Posted December 30, 2020 Share Posted December 30, 2020 29 minutos atrás, dois disse: A partir de determinado CSN pode-se calcular sua respectiva Combinação Para o item 1 temos Planilhas disponíveis aqui na área de downloads do forum e para o item 2 temos a Tabela no wikipedia. Desta forma temos tudo via Fórmulas; No caso do EXCEL, sem obrigatoriedade de Macro (apenas tome cuidado com a LOTOMANIA). de inicio eu tinha feito uma macro para converter de csn para combinação , mas apresentava inconsistencia para algumas combinações, vi outras macros por aí mas apresentaram o mesmo problema ou pior , depois larguei de lado se souber de alguma que de a combinação certinha posta aí 2 Quote Link to comment Share on other sites More sharing options...
dois Posted December 30, 2020 Author Share Posted December 30, 2020 56 minutos atrás, Omesmo disse: de inicio eu tinha feito uma macro para converter de csn para combinação , mas apresentava inconsistencia para algumas combinações, vi outras macros por aí mas apresentaram o mesmo problema ou pior , depois larguei de lado se souber de alguma que de a combinação certinha posta aí Irmão e Mestre, como eu disse acima, no wikipedia tem a Tabela para converter de CSN para Combinação através de Fórmulas, ou seja, sem necessidade de Macro ou rotina de Força-Bruta. Tenho o link aqui em algum lugar, mas preciso procurar. Por favor tenta pesquisar no wikipedia (em Português e em Inglês), salvo engano, no EXCEL usa a função índice(). 1 Quote Link to comment Share on other sites More sharing options...
dois Posted December 30, 2020 Author Share Posted December 30, 2020 (edited) 1 hora atrás, Omesmo disse: de inicio eu tinha feito uma macro para converter de csn para combinação , mas apresentava inconsistencia para algumas combinações, vi outras macros por aí mas apresentaram o mesmo problema ou pior , depois larguei de lado se souber de alguma que de a combinação certinha posta aí 1 hora atrás, dois disse: Irmão e Mestre, como eu disse acima, no wikipedia tem a Tabela para converter de CSN para Combinação através de Fórmulas, ou seja, sem necessidade de Macro ou rotina de Força-Bruta. Tenho o link aqui em algum lugar, mas preciso procurar. Por favor tenta pesquisar no wikipedia (em Português e em Inglês), salvo engano, no EXCEL usa a função índice(). Encontrei o link e realmente é no site Inglês: https://en.wikipedia.org/wiki/Combinatorial_number_system#National_Lottery_example_in_Excel PS: no EXCEL usa a função índice() Edited December 30, 2020 by dois no EXCEL usa a função índice() 1 Quote Link to comment Share on other sites More sharing options...
Omesmo Posted December 30, 2020 Share Posted December 30, 2020 4 minutos atrás, dois disse: Irmão e Mestre, como eu disse acima, no wikipedia tem a Tabela para converter de CSN para Combinação através de Fórmulas, ou seja, sem necessidade de Macro ou rotina de Força-Bruta. Tenho o link aqui em algum lugar, mas preciso procurar. Por favor tenta pesquisar no wikipedia (em Português e em Inglês), salvo engano, no EXCEL usa a função indireto(). pensei que vc tinha uma macro, já vi essa da formula foi justamente por ela que montei a macro oq fica bem rapido achar as combinações, mas como falei parece que em certos csn o final fica errado, por força bruta fica muito pesado para calcular Quote Link to comment Share on other sites More sharing options...
dois Posted December 30, 2020 Author Share Posted December 30, 2020 Agora, Omesmo disse: pensei que vc tinha uma macro, já vi essa da formula foi justamente por ela que montei a macro oq fica bem rapido achar as combinações, mas como falei parece que em certos csn o final fica errado, por força bruta fica muito pesado para calcular Isto me interessa muito. SE puder postar aqui exemplos de erro agradeço e já começo a analisar prometendo te dar retorno. No pouco que comecei a estudar notei 2 cuidados: (1) Arredondamento (2) A Modalidade LOTOMANIA provavelmente não seja possível de maneira direta, devido ao limite do EXCEL de 15 Dígitos para dados Tipo Número (Vale lembrar que o EXCEL tem limitações, por Exemplo, dados Tipo String tem limitação de 32.767) Quanto a Força-bruta também procuro estudar formas de FILTRAR durante a execução do processamento... Por Exemplo, agora mesmo a Macro acabou de me #Avisar que melhorou um processamento e vou postar no respectivo Tópico sobre o assunto. Quote Link to comment Share on other sites More sharing options...
Friaça Posted December 30, 2020 Share Posted December 30, 2020 Trabalhar com CSN é de cada um. Cada um enxerga uma figura diferente quando se olha para uma nuvem. Um dos problemas mínimos é ter que transformar as combinações de 15 em 7 dígitos e depois retornar para os 15 novamente. As vezes isso acaba confundindo a mente. No modo de pensar, até o momento estou preferindo trabalhar com os 7 dígitos em vez dos 15. Só ainda estou procurando as linhas com melhor desempenho. Estou criando um filtro de qualquer ordem no CSN baseado no sorteio passado, parece promissor com uma boa redução. 2 Quote Link to comment Share on other sites More sharing options...
dois Posted December 30, 2020 Author Share Posted December 30, 2020 Agora, Friaça disse: Trabalhar com CSN é de cada um. Cada um enxerga uma figura diferente quando se olha para uma nuvem. Um dos problemas mínimos é ter que transformar as combinações de 15 em 7 dígitos e depois retornar para os 15 novamente. As vezes isso acaba confundindo a mente. No modo de pensar, até o momento estou preferindo trabalhar com os 7 dígitos em vez dos 15. Só ainda estou procurando as linhas com melhor desempenho. Estou criando um filtro de qualquer ordem no CSN baseado no sorteio passado, parece promissor com uma boa redução. Parceiro, agora preciso postar uma Matriz de Melhor Desempenho... Fique aqui que em seguida te respondo. Quote Link to comment Share on other sites More sharing options...
dois Posted December 30, 2020 Author Share Posted December 30, 2020 Agora, dois disse: Quanto a Força-bruta também procuro estudar formas de FILTRAR durante a execução do processamento... Por Exemplo, agora mesmo a Macro acabou de me #Avisar que melhorou um processamento e vou postar no respectivo Tópico sobre o assunto. Eis o link: 1 Quote Link to comment Share on other sites More sharing options...
Friaça Posted December 30, 2020 Share Posted December 30, 2020 Já tinha visto seu estudo sobre isso, mas ainda não entendi. O que quer dizer.... Após 123.982 processamentos do anterior que restavam *Fechar 26 dos 2117 Concursos já realizados, agora melhorou e restam *Fechar 25 dos 2119 Concursos já realizados. Quote Link to comment Share on other sites More sharing options...
dois Posted December 30, 2020 Author Share Posted December 30, 2020 Agora, Friaça disse: Questão (1) Trabalhar com CSN é de cada um. Cada um enxerga uma figura diferente quando se olha para uma nuvem. Questão (2) Um dos problemas mínimos é ter que transformar as combinações de 15 em 7 dígitos e depois retornar para os 15 novamente. As vezes isso acaba confundindo a mente. Questão (3) No modo de pensar, até o momento estou preferindo trabalhar com os 7 dígitos em vez dos 15. Só ainda estou procurando as linhas com melhor desempenho. Estou criando um filtro de qualquer ordem no CSN baseado no sorteio passado, parece promissor com uma boa redução. Questão (1) Concordo com sua opinião e Exemplo. Questão (2) Por isso mencionei Projeto-base, que talvez somente executará rotinas referentes a Conversão. Já quanto aos 7 Dígitos, matematicamente, na minha opinião o 1º Dígito provoca alguma Interferência nos demais, pois são 4 possibilidades e chegando até 10 nos demais 6 Dígitos. Questão (3) Nos poucos exercícios que fiz ocorreu o que já mencionei, Então nos próximos vou considerar também estudos de Delta. Quanto a Linhas de Melhor Desempenho considero um trabalho gigantesco que retorna muitas Combinações para um fechamento HISTÓRICO tradicional, por isso vou estudar pelo CSN sendo apenas o índice de Array... Quote Link to comment Share on other sites More sharing options...
Omesmo Posted December 30, 2020 Share Posted December 30, 2020 36 minutos atrás, dois disse: Isto me interessa muito. SE puder postar aqui exemplos de erro agradeço e já começo a analisar prometendo te dar retorno. No pouco que comecei a estudar notei 2 cuidados: (1) Arredondamento (2) A Modalidade LOTOMANIA provavelmente não seja possível de maneira direta, devido ao limite do EXCEL de 15 Dígitos para dados Tipo Número (Vale lembrar que o EXCEL tem limitações, por Exemplo, dados Tipo String tem limitação de 32.767) Quanto a Força-bruta também procuro estudar formas de FILTRAR durante a execução do processamento... Por Exemplo, agora mesmo a Macro acabou de me #Avisar que melhorou um processamento e vou postar no respectivo Tópico sobre o assunto. a que eu tinha montado tenho que procurar tempão que larguei de lado, estava usando o de força bruta que modifiquei uma que peguei aqui mesmo no forum já que era para poucos csn Spoiler Public Function CsN_To_Combina_LF(xCSN) Dim xContador As Double Dim DZ, dz1, dz2, dz3, dz4, dz5, dz6, dz7, dz8, dz9, dz10, dz11, dz12, dz13, dz14, dz15 As Integer Dim xJogoEncontrado As String ''''' xContador = 1 dz1 = 1 dz2 = 2 dz3 = 3 dz4 = 4 dz5 = 5 dz6 = 6 dz7 = 7 dz8 = 8 dz9 = 9 dz10 = 10 dz11 = 11 dz12 = 12 dz13 = 13 dz14 = 14 dz15 = 15 ''''' vai preencher Do While xContador <= 3268760 If xContador = xCSN Then xJogoEncontrado = "" xJogoEncontrado = xJogoEncontrado & dz1 & "," xJogoEncontrado = xJogoEncontrado & dz2 & "," xJogoEncontrado = xJogoEncontrado & dz3 & "," xJogoEncontrado = xJogoEncontrado & dz4 & "," xJogoEncontrado = xJogoEncontrado & dz5 & "," xJogoEncontrado = xJogoEncontrado & dz6 & "," xJogoEncontrado = xJogoEncontrado & dz7 & "," xJogoEncontrado = xJogoEncontrado & dz8 & "," xJogoEncontrado = xJogoEncontrado & dz9 & "," xJogoEncontrado = xJogoEncontrado & dz10 & "," xJogoEncontrado = xJogoEncontrado & dz11 & "," xJogoEncontrado = xJogoEncontrado & dz12 & "," xJogoEncontrado = xJogoEncontrado & dz13 & "," xJogoEncontrado = xJogoEncontrado & dz14 & "," xJogoEncontrado = xJogoEncontrado & dz15 CsN_To_Combina_LF = xJogoEncontrado Exit Function xContador = 3268760 + 1 End If '''''' criar nova combinação dz15 = dz15 + 1 If dz15 = 26 Then dz14 = dz14 + 1 If dz14 = 25 Then dz13 = dz13 + 1 If dz13 = 24 Then dz12 = dz12 + 1 If dz12 = 23 Then dz11 = dz11 + 1 If dz11 = 22 Then dz10 = dz10 + 1 If dz10 = 21 Then dz9 = dz9 + 1 If dz9 = 20 Then dz8 = dz8 + 1 If dz8 = 19 Then dz7 = dz7 + 1 If dz7 = 18 Then dz6 = dz6 + 1 If dz6 = 17 Then dz5 = dz5 + 1 If dz5 = 16 Then dz4 = dz4 + 1 If dz4 = 15 Then dz3 = dz3 + 1 If dz3 = 14 Then dz2 = dz2 + 1 If dz2 = 13 Then dz1 = dz1 + 1 If dz1 = 12 Then xContador = 3268760 + 1 End If dz2 = dz1 + 1 End If dz3 = dz2 + 1 End If dz4 = dz3 + 1 End If dz5 = dz4 + 1 End If dz6 = dz5 + 1 End If dz7 = dz6 + 1 End If dz8 = dz7 + 1 End If dz9 = dz8 + 1 End If dz10 = dz9 + 1 End If dz11 = dz10 + 1 End If dz12 = dz11 + 1 End If dz13 = dz12 + 1 End If dz14 = dz13 + 1 End If dz15 = dz14 + 1 End If xContador = xContador + 1 Loop End Function sobre gerar e filtrar acho que tenho algo que peguei por aí Spoiler Function Combs4from6(bigArr, mx As Long) As Long Dim a1 As Long, a2 As Long, a3 As Long, a4 As Long, a5 As Long, a6 As Long Dim i As Long, j As Long Dim r As Long, x As Long ReDim arr(1 To 6) As Long ReDim bigArr(1 To 6, 1 To 1000) As Long For a1 = mx - (mx - 6) + 1 To mx arr(1) = arr(1) + 1 arr(2) = arr(1) For a2 = a1 - 1 To mx arr(2) = arr(2) + 1 arr(3) = arr(2) For a3 = a2 To mx arr(3) = arr(3) + 1 arr(4) = arr(3) For a4 = a3 To mx arr(4) = arr(4) + 1 arr(5) = arr(4) For a5 = a4 To mx arr(5) = arr(5) + 1 arr(6) = arr(5) For a6 = a5 To mx arr(6) = arr(6) + 1 r = r + 1 filterComb bigArr, arr, x Next Next Next Next Next Next For i = 1 To 6 arr(i) = mx - 6 + i Next filterComb bigArr, arr, x ReDim Preserve bigArr(1 To 6, 1 To x) Combs4from6 = x End Function Function filterComb(bigArr, arr() As Long, x As Long) As Boolean Dim b As Boolean Dim i As Long, j As Long, k As Long Dim f As Long On Error GoTo errH If x < 1 Then x = x + 1 For i = 1 To 6 bigArr(i, 1) = arr(i) Next filterComb = True Else For i = 1 To x f = 0 For j = 1 To 6 For k = 1 To 6 If bigArr(j, i) = arr(k) Then b = True Exit For End If Next If b Then f = f + 1 b = False If f = 3 Then ' garantia Exit Function End If End If If j - f > 6 - 3 Then 'acerto pretentido Exit For End If Next Next x = x + 1 For i = 1 To 6 999 bigArr(i, x) = arr(i) Next filterComb = True End If Exit Function errH: If Err.number = 9 And Erl = 999 Then 'need to resize the array ReDim Preserve bigArr(1 To 6, 1 To UBound(bigArr, 2) + 1000) Resume End If End Function Quote Link to comment Share on other sites More sharing options...
Omesmo Posted December 30, 2020 Share Posted December 30, 2020 csn 1961256 1 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1144066 1 2 13 14 15 16 17 18 19 20 21 22 23 24 25 646646 1 2 3 14 15 16 17 18 19 20 21 22 23 24 25 352716 1 2 3 4 15 16 17 18 19 20 21 22 23 24 25 184756 1 2 3 4 5 16 17 18 19 20 21 22 23 24 25 92378 1 2 3 4 5 6 17 18 19 20 21 22 23 24 25 43758 1 2 3 4 5 6 7 18 19 20 21 22 23 24 25 19448 1 2 3 4 5 6 7 8 19 20 21 22 23 24 25 8008 1 2 3 4 5 6 7 8 9 20 21 22 23 24 25 3003 1 2 3 4 5 6 7 8 9 10 21 22 23 24 25 1001 1 2 3 4 5 6 7 8 9 10 11 22 23 24 25 286 1 2 3 4 5 6 7 8 9 10 11 12 23 24 25 66 1 2 3 4 5 6 7 8 9 10 11 12 13 24 25 11 1 2 3 4 5 6 7 8 9 10 11 12 13 14 25 817190 1 2 4 6 7 8 9 10 11 15 16 17 20 22 25 497420 1 2 3 5 8 9 11 13 14 17 19 20 21 23 24 293930 1 2 3 4 7 8 10 12 13 15 16 17 19 22 24 167960 1 2 3 4 5 9 10 11 14 15 16 17 18 21 22 92378 1 2 3 4 5 6 17 18 19 20 21 22 23 24 25 48620 1 2 3 4 5 6 8 9 10 16 17 21 22 23 25 24310 1 2 3 4 5 6 7 9 10 16 17 21 22 23 25 11440 1 2 3 4 5 6 7 8 10 13 14 16 17 22 23 5005 1 2 3 4 5 6 7 8 9 11 21 22 23 24 25 2002 1 2 3 4 5 6 7 8 9 10 13 16 17 18 19 715 1 2 3 4 5 6 7 8 9 10 11 15 17 19 20 220 1 2 3 4 5 6 7 8 9 10 11 12 17 20 25 55 1 2 3 4 5 6 7 8 9 10 11 12 13 20 24 Quote Link to comment Share on other sites More sharing options...
dois Posted December 30, 2020 Author Share Posted December 30, 2020 Agora, Friaça disse: Já tinha visto seu estudo sobre isso, mas ainda não entendi. O que quer dizer.... Após 123.982 processamentos do anterior que restavam *Fechar 26 dos 2117 Concursos já realizados, agora melhorou e restam *Fechar 25 dos 2119 Concursos já realizados. Conforme está explicado lá no Tópico, criei uma rotina de Força-bruta que processa até encontrar uma Matriz Condicionada 25-15-11-15=30 de Melhor Desempenho, ou seja, uma Matriz HISTÓRICA. O Termo Matriz Condicionada significa que a Montagem das 30 Linhas/Combinações está Condicionada ao Método sudoku do @KSMG que gera 15 Linhas/Combinações horizontais e 15 verticais. Minha Esperança é que fosse rápido fechar todos os Concursos com 30 Linhas/Combinações, pois com o software do DixieJoe deve fechar em +-20 Linhas/Combinações, por isso fiz uma rotina apenas semi-automatizada que a cada Matriz Condicionada 25-15-11-15=30 de Melhor Desempenho, interrompe o processamento e me #Avisa. Desta forma eu salvo a Matriz atual e inicio um novo processamento... Então, atualmente, significa que no processamento atual foram conferidas 123.982 Matriz Condicionada 25-15-11-15=30 de Melhor Desempenho em 2117 Concursos, sendo que encontrou uma de apenas 25 Concursos não fechados dentre os 2117 Concursos analisados E permanece assim até o mais recente Concurso, o 2119. Agora, aproveitando o assunto CSN; Note que utilizando-se DEZENAS temos o seguinte cálculo das iterações: A = 30 Linhas/Combinações B = 15 Dezenas cada Linha/Combinação C = 2117 Concursos analisados D = 123.982 Processamentos A * B * C * D = 30 * 15 * 2117 * 123.982 = 118.111.452.300 Já o Projeto CSN pretende utilizar CSN como índice para ser o mais próximo possível de: A = 30 Linhas/Combinações B = 1 índice cada Linha/Combinação C = 2117 Concursos analisados D = 123.982 Processamentos A * B * C * D = 30 * 1 * 2117 * 123.982 = 7.874.096.820 Conclusão pretendida de reduzir para apenas 6,66667% (se possível, menos) e ainda encontrar outros FILTROS. 1 Quote Link to comment Share on other sites More sharing options...
dois Posted December 30, 2020 Author Share Posted December 30, 2020 Agora, Omesmo disse: a que eu tinha montado tenho que procurar tempão que larguei de lado, estava usando o de força bruta que modifiquei uma que peguei aqui mesmo no forum já que era para poucos csn Ocultar conteúdo Public Function CsN_To_Combina_LF(xCSN) Dim xContador As Double Dim DZ, dz1, dz2, dz3, dz4, dz5, dz6, dz7, dz8, dz9, dz10, dz11, dz12, dz13, dz14, dz15 As Integer Dim xJogoEncontrado As String ''''' xContador = 1 dz1 = 1 dz2 = 2 dz3 = 3 dz4 = 4 dz5 = 5 dz6 = 6 dz7 = 7 dz8 = 8 dz9 = 9 dz10 = 10 dz11 = 11 dz12 = 12 dz13 = 13 dz14 = 14 dz15 = 15 ''''' vai preencher Do While xContador <= 3268760 If xContador = xCSN Then xJogoEncontrado = "" xJogoEncontrado = xJogoEncontrado & dz1 & "," xJogoEncontrado = xJogoEncontrado & dz2 & "," xJogoEncontrado = xJogoEncontrado & dz3 & "," xJogoEncontrado = xJogoEncontrado & dz4 & "," xJogoEncontrado = xJogoEncontrado & dz5 & "," xJogoEncontrado = xJogoEncontrado & dz6 & "," xJogoEncontrado = xJogoEncontrado & dz7 & "," xJogoEncontrado = xJogoEncontrado & dz8 & "," xJogoEncontrado = xJogoEncontrado & dz9 & "," xJogoEncontrado = xJogoEncontrado & dz10 & "," xJogoEncontrado = xJogoEncontrado & dz11 & "," xJogoEncontrado = xJogoEncontrado & dz12 & "," xJogoEncontrado = xJogoEncontrado & dz13 & "," xJogoEncontrado = xJogoEncontrado & dz14 & "," xJogoEncontrado = xJogoEncontrado & dz15 CsN_To_Combina_LF = xJogoEncontrado Exit Function xContador = 3268760 + 1 End If '''''' criar nova combinação dz15 = dz15 + 1 If dz15 = 26 Then dz14 = dz14 + 1 If dz14 = 25 Then dz13 = dz13 + 1 If dz13 = 24 Then dz12 = dz12 + 1 If dz12 = 23 Then dz11 = dz11 + 1 If dz11 = 22 Then dz10 = dz10 + 1 If dz10 = 21 Then dz9 = dz9 + 1 If dz9 = 20 Then dz8 = dz8 + 1 If dz8 = 19 Then dz7 = dz7 + 1 If dz7 = 18 Then dz6 = dz6 + 1 If dz6 = 17 Then dz5 = dz5 + 1 If dz5 = 16 Then dz4 = dz4 + 1 If dz4 = 15 Then dz3 = dz3 + 1 If dz3 = 14 Then dz2 = dz2 + 1 If dz2 = 13 Then dz1 = dz1 + 1 If dz1 = 12 Then xContador = 3268760 + 1 End If dz2 = dz1 + 1 End If dz3 = dz2 + 1 End If dz4 = dz3 + 1 End If dz5 = dz4 + 1 End If dz6 = dz5 + 1 End If dz7 = dz6 + 1 End If dz8 = dz7 + 1 End If dz9 = dz8 + 1 End If dz10 = dz9 + 1 End If dz11 = dz10 + 1 End If dz12 = dz11 + 1 End If dz13 = dz12 + 1 End If dz14 = dz13 + 1 End If dz15 = dz14 + 1 End If xContador = xContador + 1 Loop End Function sobre gerar e filtrar acho que tenho algo que peguei por aí Ocultar conteúdo Function Combs4from6(bigArr, mx As Long) As Long Dim a1 As Long, a2 As Long, a3 As Long, a4 As Long, a5 As Long, a6 As Long Dim i As Long, j As Long Dim r As Long, x As Long ReDim arr(1 To 6) As Long ReDim bigArr(1 To 6, 1 To 1000) As Long For a1 = mx - (mx - 6) + 1 To mx arr(1) = arr(1) + 1 arr(2) = arr(1) For a2 = a1 - 1 To mx arr(2) = arr(2) + 1 arr(3) = arr(2) For a3 = a2 To mx arr(3) = arr(3) + 1 arr(4) = arr(3) For a4 = a3 To mx arr(4) = arr(4) + 1 arr(5) = arr(4) For a5 = a4 To mx arr(5) = arr(5) + 1 arr(6) = arr(5) For a6 = a5 To mx arr(6) = arr(6) + 1 r = r + 1 filterComb bigArr, arr, x Next Next Next Next Next Next For i = 1 To 6 arr(i) = mx - 6 + i Next filterComb bigArr, arr, x ReDim Preserve bigArr(1 To 6, 1 To x) Combs4from6 = x End Function Function filterComb(bigArr, arr() As Long, x As Long) As Boolean Dim b As Boolean Dim i As Long, j As Long, k As Long Dim f As Long On Error GoTo errH If x < 1 Then x = x + 1 For i = 1 To 6 bigArr(i, 1) = arr(i) Next filterComb = True Else For i = 1 To x f = 0 For j = 1 To 6 For k = 1 To 6 If bigArr(j, i) = arr(k) Then b = True Exit For End If Next If b Then f = f + 1 b = False If f = 3 Then ' garantia Exit Function End If End If If j - f > 6 - 3 Then 'acerto pretentido Exit For End If Next Next x = x + 1 For i = 1 To 6 999 bigArr(i, x) = arr(i) Next filterComb = True End If Exit Function errH: If Err.number = 9 And Erl = 999 Then 'need to resize the array ReDim Preserve bigArr(1 To 6, 1 To UBound(bigArr, 2) + 1000) Resume End If End Function São rotinas que funcionam, já utilizei a de Conversão, Entretanto procuro seguir seu conselho e crio as minhas também a partir delas. Por exemplo, na rotina de Conversão, Sabemos que For..Next é muito mais rápido e com a vantagem de dispensar os vários if auxiliares ao Do While..Loop Já na rotina de FILTRO, Nem faço ideia de como funciona, Então teria que analisar e testar para entender e opinar. Quote Link to comment Share on other sites More sharing options...
Omesmo Posted December 30, 2020 Share Posted December 30, 2020 12 minutos atrás, dois disse: Agora, aproveitando o assunto CSN; Note que utilizando-se DEZENAS temos o seguinte cálculo das iterações: A = 30 Linhas/Combinações B = 15 Dezenas cada Linha/Combinação C = 2117 Concursos analisados D = 123.982 Processamentos A * B * C * D = 30 * 15 * 2117 * 123.982 = 118.111.452.300 Já o Projeto CSN pretende utilizar CSN como índice para ser o mais próximo possível de: A = 30 Linhas/Combinações B = 1 índice cada Linha/Combinação C = 2117 Concursos analisados D = 123.982 Processamentos A * B * C * D = 30 * 1 * 2117 * 123.982 = 7.874.096.820 Conclusão pretendida de reduzir para apenas 6,66667% (se possível, menos) e ainda encontrar outros FILTROS. acho que nesse caso o melhor seria usar BITWISE converte as combinações em digito e compara e depois é só usar bitcount para ver os acertos , usando alguns artificios como o XOR pode facilitar a contagem Quote Link to comment Share on other sites More sharing options...
dois Posted December 30, 2020 Author Share Posted December 30, 2020 Agora, dois disse: Note que utilizando-se DEZENAS temos o seguinte cálculo das iterações: A = 30 Linhas/Combinações B = 15 Dezenas cada Linha/Combinação C = 2117 Concursos analisados D = 123.982 Processamentos A * B * C * D = 30 * 15 * 2117 * 123.982 = 118.111.452.300 Evidentemente que esse é o processamento tradicional, mas que na prática é uma verdadeira aberração de tão desnecessário que é, Então conforme mencionei, a rotina também FILTRA durante a execução do processamento... Quote Link to comment Share on other sites More sharing options...
Friaça Posted December 30, 2020 Share Posted December 30, 2020 18 minutos atrás, dois disse: Conforme está explicado lá no Tópico, criei uma rotina de Força-bruta que processa até encontrar uma Matriz Condicionada 25-15-11-15=30 de Melhor Desempenho, ou seja, uma Matriz HISTÓRICA. O Termo Matriz Condicionada significa que a Montagem das 30 Linhas/Combinações está Condicionada ao Método sudoku do @KSMG que gera 15 Linhas/Combinações horizontais e 15 verticais. Minha Esperança é que fosse rápido fechar todos os Concursos com 30 Linhas/Combinações, pois com o software do DixieJoe deve fechar em +-20 Linhas/Combinações, por isso fiz uma rotina apenas semi-automatizada que a cada Matriz Condicionada 25-15-11-15=30 de Melhor Desempenho, interrompe o processamento e me #Avisa. Desta forma eu salvo a Matriz atual e inicio um novo processamento... Então, atualmente, significa que no processamento atual foram conferidas 123.982 Matriz Condicionada 25-15-11-15=30 de Melhor Desempenho em 2117 Concursos, sendo que encontrou uma de apenas 25 Concursos não fechados dentre os 2117 Concursos analisados E permanece assim até o mais recente Concurso, o 2119. Agora, aproveitando o assunto CSN; Note que utilizando-se DEZENAS temos o seguinte cálculo das iterações: A = 30 Linhas/Combinações B = 15 Dezenas cada Linha/Combinação C = 2117 Concursos analisados D = 123.982 Processamentos A * B * C * D = 30 * 15 * 2117 * 123.982 = 118.111.452.300 Já o Projeto CSN pretende utilizar CSN como índice para ser o mais próximo possível de: A = 30 Linhas/Combinações B = 1 índice cada Linha/Combinação C = 2117 Concursos analisados D = 123.982 Processamentos A * B * C * D = 30 * 1 * 2117 * 123.982 = 7.874.096.820 Conclusão pretendida de reduzir para apenas 6,66667% (se possível, menos) e ainda encontrar outros FILTROS. Agora entendi....kkkkk. Estou vendo que as trocas de mensagens entre você e o @Omesmo já está ficando em outro patamar. Minhas ideias são muitas vagas e superficiais perto do entendimento de caros membros aqui. 1 Quote Link to comment Share on other sites More sharing options...
Omesmo Posted December 30, 2020 Share Posted December 30, 2020 1 minuto atrás, dois disse: Evidentemente que esse é o processamento tradicional, mas que na prática é uma verdadeira aberração de tão desnecessário que é, Então conforme mencionei, a rotina também FILTRA durante a execução do processamento... so, vc pode transformar os filtros em binarios tbm , fica muito mais rapido 1 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.