Jump to content

Pedido: Algoritmo, pseudo código ou código fonte


Carlos Martins

Recommended Posts

Guest Zangado
6 horas atrás, bitwizardry disse:

edcronos2,

 

Operações boleanas em assembly funcionam da mesma forma para variáveis 32 e 64 bits. A sintaxe é a mesma.

 

Exemplo:

 

int a;

int b;

int c;

 

mov eax, a

mov ebx b

and eax, ebx

mov c, eax

 

se "a" ,"b" e "c" fossem variáveis x64, ficaria assim...

 

__int64 a;

__int64 b;

__int64 c;

 

mov rax, a

mov rbx b

and rax, rbx

mov c, rax

 

e a variável "c" conteria o resultado do AND entre "a" e "b", só muda o registrador;

 

No caso de variáveis 128 bits, tbm é possível, mas a coisa fica mais complicada pois vc teria que passar um pointer do seu array de 8 bytes para dentro de um registrador SIMD, e outro pointer para outro,

Se sua variável for "signed" é um comando, se for "unsigned" é outro, e a sintaxe é meio assustadora.

 

obrigado, deve dar para me virar com isso

 

me diga se é possivel isso?

__int64 a;
__int64 b;
__int64 c;
int Count;

asm {
 mov rax, a
 mov rbx b
  and rax, rbx
  mov c, rax
    popcnt Count , rax
}

pelo que reparei o resultado vai para o registrador que guarda o primeiro valor a ser trabalhado e não em um registrador a parte oq impossibilita reutilizar os valores guardados nos registradores para outras operações 

mas seria possivel algo como?

mov rax, a

mov rbx , b

 

And rax, rbx

mov  c , rax

popcnt eax, rax

 

mov rax, a

Or rax, rbx

mov  d , rax

popcnt ebx, rax

 

add eax, ebx

mov count , eax

 

para deixar mais rapido o processo talvez aplicar diretamente um loop em cima de uma array já com os dados a ser trabalhados e com saida para outro array 

esse tipo de implementação em funções torna todo o processo com filtros e outras coisas bem mais rapidos

 

bem só ficar especulando não leva a nada , 

 

 

@Jimmy Durão desculpa ser por aqui, mas é para vc ver o pq 

seria bom uma categoria de programação voltada a loteria, tipo, "Algorismos, códigos e dicas"

, isso para não misturar já que é uma parte importante e de base e atinge varias linguagens e até o excel na parte de vba 

ao contrario da loteria diretamente, pequenas dicas nesse lado pode ser de grande valia para quem está implementando algo seja um filtro ou um simples conferidor 

 

 

Link to comment
Share on other sites

bitwizardry,

 

Obrigado pelas explicações.

 

O Delphi não tem uma classe para SETS como no C++. 

 

As funções que tenho, eu mesmo fiz usando um tipo SET no Delphi.

 

Faço tudo nas minhas funções (gerar, conferir, contar, etc.).

 

Até estou satisfeito com as funções. Com exceção da função de contar que pode ser melhorada em muito, com certeza.

Vou fazer um "esforço" neste final de ano para aprender a  usar suas dicas com Assembly para melhorar a contagem.

 

A único coisa que eu ainda fico em dúvida é quanto a "dividir" um SET de 100 bits (transformando-o em 2 UInt64 ou Int64). Sei fazer a separação. Minha dúvida é quanto a eficiência, claro.

Depois de separados em 2 Int64, posso contar cada Int64 em separado, usando suas dicas de Assembly com POPCOUNT e somando as 2 quantidades. Acho que vai ser por ai... Mesmo que não seja muito eficiente, deve ser mais rápido do que a forma que eu uso hoje que é VARRER um SET, procurando todos os bits setados e incrementado uma variável de Contagem. Tempo igual (demorado, se comparado com Assembly) para qualquer contagem. Seja de 1 bit em 100 ou de 20 bits em 100.

 

 

De novo, muito obrigado pelas dicas até aqui.

 

Assim que tiver algo pronto, te informo os resultados.

 

----------

 

Curiosidade: você trabalha (programando) com Assembly?

 

dixiejoelottolex

gmail

com

Link to comment
Share on other sites

  • 2 weeks later...
Em 12/20/2017 at 09:56, DixieJoe disse:

bitwizardry,

 

Obrigado pelas explicações.

 

O Delphi não tem uma classe para SETS como no C++. 

 

As funções que tenho, eu mesmo fiz usando um tipo SET no Delphi.

 

Faço tudo nas minhas funções (gerar, conferir, contar, etc.).

 

Até estou satisfeito com as funções. Com exceção da função de contar que pode ser melhorada em muito, com certeza.

Vou fazer um "esforço" neste final de ano para aprender a  usar suas dicas com Assembly para melhorar a contagem.

 

A único coisa que eu ainda fico em dúvida é quanto a "dividir" um SET de 100 bits (transformando-o em 2 UInt64 ou Int64). Sei fazer a separação. Minha dúvida é quanto a eficiência, claro.

Depois de separados em 2 Int64, posso contar cada Int64 em separado, usando suas dicas de Assembly com POPCOUNT e somando as 2 quantidades. Acho que vai ser por ai... Mesmo que não seja muito eficiente, deve ser mais rápido do que a forma que eu uso hoje que é VARRER um SET, procurando todos os bits setados e incrementado uma variável de Contagem. Tempo igual (demorado, se comparado com Assembly) para qualquer contagem. Seja de 1 bit em 100 ou de 20 bits em 100.

 

 

De novo, muito obrigado pelas dicas até aqui.

 

Assim que tiver algo pronto, te informo os resultados.

 

----------

 

Curiosidade: você trabalha (programando) com Assembly?

 

dixiejoelottolex

gmail

com

 

DixieJoe, o esforço computacional gasto na varredura do SET tranformado-os em 2 UInt64s, somado aos popcounts, será praticamente igual ou maior do que a contagem que você já está realizando, por um motivo muito simples:  você precisará loopar os SETS de qualquer forma em ambos os casos. Faça uma simulação com 10 milhões de contagens, meça o tempo gasto de cada procedimento e você mesmo constatará o que estou dizendo.

 

A vantagem do algorítmo do Uros (que na verdade não foi criado por ele) é que o tempo gasto é proporcional ao números de bits a serem contatos, quanto menos bits, mais rápido. A instrução popcnt (até onde eu testei) gasta o mesmo tempo independentemente da quantidade a ser contada, o que é uma vantagem quando o processador suporta essa tecnologia, mas... do ponto de vista prático/real, estamos falando de alguns poucos milisegundos.

 

E respondendo sua pergunta, não trabalho com assembly, aprendi o pouco que sei via tutoriais pela net.

 

 

Link to comment
Share on other sites

  • 3 weeks later...
Em 04/11/2017 at 16:24, oiregor disse:

@Bruno Cintra funciona!!!!!!

montando / adaptando para dupla sena, onde já faço a seleção das dezenas escolhidas e os filtros que estão acima...

sem muita mexida nos filtros... mas ativando funções para uso de algumas dezenas e não a geração completa da loteria...

MUITO OBRIGADO!

fala ai blz,vc só mexe com vba,é que estou com um programa aqui achado na internet feito justbasic,faz estatistica par/impar,final digitos,decadas e somas e gera conjuntos por concursos anteriores,estou tentanto passar para vba,tlves poderia me ajudar,o programa é do autor Ashley Taylor 2008,ele deixou o codigo fonte completo eu ja mudei para megasena,o programa é até 49 numeros.olha imagem do programa 

https://drive.google.com/open?id=1LvAaPNBX7vH8qyZcLcImUFJyFeOBvoIi

 

  • Like 1
Link to comment
Share on other sites

Oi pessoal,

 

Estou com o seguinte problema, uso o Cologa, o qual acho maravilhoso (interface, etc), mas, infelizmente, o mesmo é muito lento, de modo que torna mesmo impossível eu conseguir finalizar minhas combinações. Exemplo: ontem à noite rodei as combinações totais para a Megasena (considerando uma fixa), daí apliquei um filtro e o programa está rodando desde então (há mais de 17 horas), com nem 50% concluído. A questão é que preciso rodar essa combinação com trocentos filtros desse tipo, uma a uma, para compilar todos os resultados (ou seja, cada combinação, considerando um número fixo, eu precisaria passar por 1500 filtros a cada vez - tipo 5 milhões de combinações e um filtro, novamente essas mesmas 5 milhões de combinações, referentes à mesma dezena fixa, e outro filtro, e assim por diante, até passar cada uma delas por cerca de 1500 filtros e, daí, partir para à outra série de combinações com outra dezena e a série de 1500 filtros, e assim sucessivamente, até completar as 60 dezenas). Nesse ritmo,  se eu testar essa combinação com cada um de 1500 filtros,  eu levaria, no mínimo, 1500 dias para cada filtro e isso considerando uma única dezena, ou unidade, fixa. Levando em conta que na Mega são 60 números, eu levaria 1500 dias x 60 números. Considerando, ainda, que no Cologa eu posso abrir umas 10 abas para cada uma dessas abas  trabalhar individualmente, e ao mesmo tempo, então, eu levaria aproximadamente 1500 dias x 60 números / 10, o que daria uns 25 anos! Ou seja, alguém saberia dizer como tornar o Cologa mais rápido no processamento??! Ou alguém teria alguma alternativa, algum software alternativo mais que pudesse ler as informações do Cologa (meus filtros estão todos no Cologa)?? Se alguém puder me ajudar nisso, e eu conseguir um resultado positivo, eu prometo que eu não esquecerei da Caloi...

 

Link to comment
Share on other sites

@Giovana Tambem tenho o mesmo problema que o seu, meu computador eh um dual core, então eu nem tento usar esse programa para testes mais robustos. Talvez pra quem tem dinheiro para comprar um core i7 ele seja razoável. Acho que quem o criou nao tem interesse em deixa-lo mais rápido. SE alguem te passar um programa com um pouco mais de rapidez poste ai pfv. Grato. 

Link to comment
Share on other sites

Guest websilva
33 minutos atrás, joh_joh2010 disse:

@Giovana Tambem tenho o mesmo problema que o seu, meu computador eh um dual core, então eu nem tento usar esse programa para testes mais robustos. Talvez pra quem tem dinheiro para comprar um core i7 ele seja razoável. Acho que quem o criou nao tem interesse em deixa-lo mais rápido. SE alguem te passar um programa com um pouco mais de rapidez poste ai pfv. Grato. 

A limitação ocorrerá em qualquer hardware em função da quantidade de cálculos e comparações que o procedimento requer.
Dependendo do conhecimento prévio em matemática e programação (qualquer que seja a linguagem, preferencialmente de baixo nível), é possível criar algorítimos mais otimizados, que aceleram o processo, transformando horas ou dias em minutos ou segundos.

Uma sugestão: jogos de loteria são combinações de números, ou seja, conjuntos e como tais, podem ser representados em forma matricial (matrizes), de forma que operações com matrizes, como o cálculo de determinantes, por exemplo, mudam radicalmente o cenário exposto.

Utilizo um i3 com 4Mb RAM em um notebook Dell com distro Linux Slackware otimizado e em modo texto, e a performance atende adequadamente ao que se deseja. 

Link to comment
Share on other sites

Guest websilva

Em tempo: operações com matrizes, não vão, de forma mágica, apresentar as dezenas que serão sorteadas no próximo concurso, porém, permitem utilizar filtros que se executados da forma empírica (como a exposta em alguns algorítimos neste post), tornam o processamento inviável.

Link to comment
Share on other sites

Giovana,

 

Só conhecendo melhor o tipo de filtro que você quer usar para ver se podemos ajudar.

 

Exemplos;

 

Filtros do tipo QTE dezenas ACEITAS dos Primos (você tem a relação dos Primos da Loteria) e com MIN=4 e MAX=7 para a Lotofacil, por exemplo

demoram muito pouco para serem executados se a rotina de filtragem for adequada. Imagino que o Cologa faça dessa forma (eu não uso o Cologa para trabalhar com Filtros).

 

Uso meu próprio programa e, só a título de exemplo, esse filtro ai, passado em todas as 3,2 milhões de combinações da LF demora 40 segundos porque deixa muitos jogos. O tempo não é o de filtragem mas de gravação da minha linguagem de programação.

 

Se você for usar filtros do tipo Filtro de Grupo no Cologa, fica mais rápido no meu programa. Eu consigo ler um arquivo de filtros do tipo Filtro de Grupo do Cologa.

 

----

 

Estou à disposiçao para avaliar com você como agilizar seus filtros. Realmente, estou achando muito tempo.

 

Apesar que, para a Megasena pode demorar mesmo pela quantidade envolvida.

 

Um segredo dos filtros que aprendi ao longo de anos usando filtros:

 

Tente colocar primeiro no seu arquivo de filtros, aqueles filtros que mais tiram jogos. Isso parece óbvio, mas faz uma diferença enorme na hora de avaliar o tempo gasto na filtragem.

 

 

 

Link to comment
Share on other sites

5 minutos atrás, DixieJoe disse:

 

Filtros do tipo QTE dezenas ACEITAS dos Primos (você tem a relação dos Primos da Loteria) e com MIN=4 e MAX=7 para a Lotofacil, por exemplo

demoram muito pouco para serem executados se a rotina de filtragem for adequada.

Eu por exemplo, divido as 3 milhoes em 4 partes no excel, jogos um somar produto e uso o filtro do excel mesmo, em segundos ele filtra tudo , entao apenas copio o resultado para um txt ou para outra pasta de trabalho. Quem nao tem cao caça com gato. Agora quem trabalha com a mega e tem computador limitado ta frito mesmo. Eu mesmo n~~ao tenho tempo para esperar sete  oito horas para um programa fazer uma filtragem.

Link to comment
Share on other sites

1 hora atrás, websilva disse:

A limitação ocorrerá em qualquer hardware em função da quantidade de cálculos e comparações que o procedimento requer.
Dependendo do conhecimento prévio em matemática e programação (qualquer que seja a linguagem, preferencialmente de baixo nível), é possível criar algorítimos mais otimizados, que aceleram o processo, transformando horas ou dias em minutos ou segundos.

Uma sugestão: jogos de loteria são combinações de números, ou seja, conjuntos e como tais, podem ser representados em forma matricial (matrizes), de forma que operações com matrizes, como o cálculo de determinantes, por exemplo, mudam radicalmente o cenário exposto.

Utilizo um i3 com 4Mb RAM em um notebook Dell com distro Linux Slackware otimizado e em modo texto, e a performance atende adequadamente ao que se deseja. 

Olá @websilva valeu pela resposta

e essa parte eu entendo, só disse para a amiga que talvez não deva esperar que exista um trabalho em conjunto ou algum interesse em prol desse assunto, OU SEJA AS VEZES O PRÓPRIO CRIADOR DO PROGRAMA NÃO TEM INTERESSE EM AJUDA NESSES SENTIDO.

 

Até mesmo eu, tenho estudos que não posto pois acho que não encontrei "sintonia" suficiente para isso, às vezes até posto uns assuntos fracos, se estou errado? Talvez, mas ainda não rolou.

 

Eu por exemplo, quando meu computador não aguenta o tranco, vou numa das lan houses próximas da minha casa, como elas trabalham com jogos pesados têm computadores mais potentes. Mas reitero o que disse, quem tem computador fraco está em alta desvantagem ainda.

 

Link to comment
Share on other sites

1 hora atrás, websilva disse:

Em tempo: operações com matrizes, não vão, de forma mágica, apresentar as dezenas que serão sorteadas no próximo concurso, porém, permitem utilizar filtros que se executados da forma empírica (como a exposta em alguns algorítimos neste post), tornam o processamento inviável.

@websilva Vc conhece algum programa ou estudo que, usando resultados passados ou modelos e fórmulas matemáticas ou estatísticas pelo menos tentam isso? E que seja passível de interpretação (entendimento) da saída( ou sugestão)?

Link to comment
Share on other sites

Guest websilva
47 minutos atrás, DixieJoe disse:

websilva,

 

Poderia compartilhar conosco algum exemplo do que você chama de filtro de Matriz?

 

Não consegui entender sem ver um exemplo

Dado que cada uma 3.268.760 combinações pode ser representada por uma matriz de ordem 5,
{a11,a12,a13,...a55}
Cada matriz possui um Determinante, cujo emprego das propriedades, se adequadamente utilizadas, permitem selecionar rapidamente um determinado conjunto que atenda o requisito de seleção, (Primos, Fibonacci, etc).
A dica é usar Laplace na criação do script que fara o cálculo do Determinante de Ordem 5, por motivos óbvios. 

Link to comment
Share on other sites

Guest websilva
7 minutos atrás, joh_joh2010 disse:

Olá @websilva valeu pela resposta

e essa parte eu entendo, só disse para a amiga que talvez não deva esperar que exista um trabalho em conjunto ou algum interesse em prol desse assunto, OU SEJA AS VEZES O PRÓPRIO CRIADOR DO PROGRAMA NÃO TEM INTERESSE EM AJUDA NESSES SENTIDO.

 

Até mesmo eu, tenho estudos que não posto pois acho que não encontrei "sintonia" suficiente para isso, às vezes até posto uns assuntos fracos, se estou errado? Talvez, mas ainda não rolou.

 

Eu por exemplo, quando meu computador não aguenta o tranco, vou numa das lan houses próximas da minha casa, como elas trabalham com jogos pesados têm computadores mais potentes. Mas reitero o que disse, quem tem computador fraco está em alta desvantagem ainda.

 

Especificamente para cálculos de estatística, seleção e ou filtragem, um equipamento modesto é suficiente, o que de fato importa são dois fatores: o sistema operacional utilizado e a montagem do script de programação.
Utilizar um programa pronto, como o citado COLOGA, limita muito as opções, pois até onde sei, só roda em plataforma Microsoft.
Poste mais sobre seus estudos, quem sabe podemos acelerar ou desemperrar algum ponto interessante?

Link to comment
Share on other sites

Guest websilva
7 minutos atrás, joh_joh2010 disse:

@websilva Vc conhece algum programa ou estudo que, usando resultados passados ou modelos e fórmulas matemáticas ou estatísticas pelo menos tentam isso? E que seja passível de interpretação (entendimento) da saída( ou sugestão)?

Veja o post que respondi ao DixieJoe...

Link to comment
Share on other sites

32 minutos atrás, websilva disse:

Veja o post que respondi ao DixieJoe...

Vc fala das determinantes? 

Se for eu tenho um irmão que engenheiro e matemático, mas não o incomodo pq ele não tem tempo mesmo. Mas ele acabou de me dar uma aulinha aqui.Desde LaPlace Regra de Chió. Mas não entra na minha mente, deixa esse assunto para vcs, os grandes mesmo rs.

Mas obrigado pelo incentivo!

Link to comment
Share on other sites

Guest websilva
29 minutos atrás, joh_joh2010 disse:

Vc fala das determinantes? 

Se for eu tenho um irmão que engenheiro e matemático, mas não o incomodo pq ele não tem tempo mesmo. Mas ele acabou de me dar uma aulinha aqui.Desde LaPlace Regra de Chió. Mas não entra na minha mente, deixa esse assunto para vcs, os grandes mesmo rs.

Mas obrigado pelo incentivo!

Entendo...
Mas para outros membros do fórum que pretendam utilizar determinantes, neste caso a Regra de Chió não é aplicável, pois requer que o primeiro elemento da matriz seja 1.

Link to comment
Share on other sites

Websilva,

 

Vou revisar matrizes e determinantes para ver se se aplica (velocidade de processamento). Não consigo enxergar como, mas também há séculos não vejo esse tema. Mas, não estou entendendo a questão de " operações com matrizes, não vão, de forma mágica, apresentar as dezenas que serão sorteadas no próximo concurso," pois se estou aplicando os filtros, e os filtros se confirmarem adequados, as dezenas premiadas estarão no resultado da filtragem. 

Link to comment
Share on other sites

Guest websilva
18 minutos atrás, Giovana disse:

Websilva,

 

Vou revisar matrizes e determinantes para ver se se aplica (velocidade de processamento). Não consigo enxergar como, mas também há séculos não vejo esse tema. Mas, não estou entendendo a questão de " operações com matrizes, não vão, de forma mágica, apresentar as dezenas que serão sorteadas no próximo concurso," pois se estou aplicando os filtros, e os filtros se confirmarem adequados, as dezenas premiadas estarão no resultado da filtragem. 

Vou dar um exemplo prático...
C:18,15=816
São necessários 816 conjuntos de 15 elementos (volantes) para fechamento pleno, o que significa que se as 15 dezenas sorteadas estiverem entre as 18 jogadas, o prêmio máximo está garantido.
Isso não é teoria. É Combinação. 

Ocorre que 816 volantes custam R$1.632,00. um valor alto para a maioria dos apostadores e um risco também elevado, pois C:25,18=480.700 (total de combinações de 18 dezenas possíveis)

Utilizando as propriedades e operações com determinantes, é possível reduzir e filtrar drasticamente o número total de conjuntos de 15 elementos (volantes)  a serem submetidos a um ou mais filtros.

Como já postei noutro tópico, em apenas 6% dos sorteios já realizados, o determinante da matriz dos resultados foi igual a zero. 
 

Edited by websilva
Link to comment
Share on other sites

Guest websilva
1 minuto atrás, Giovana disse:

joh_joh2010,

 

Salvo engano, parece que o problema não é no computador, infelizmente. Mas se for no computador, gostaria de saber a montagem perfeita que deixasse  o cologa veloz.

 

Velocidade é fundamental! 

Quer minha sugestão?

Link to comment
Share on other sites

Guest websilva
1 minuto atrás, Giovana disse:

Claro!

Pense de maneira lógica...
Se você investe num equipamento mais robusto e consequentemente mais caro, não há nenhuma garantia de que o COLOGA, ou outro software irá ter um melhor desempenho e performance que justifique o custo.
...
Considere trocar de software, ou melhor ainda: monte seus próprios scripts.

Link to comment
Share on other sites

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