Jump to content

sam88

Membro Inativo
  • Posts

    158
  • Joined

  • Last visited

Posts posted by sam88

  1. 9 minutos atrás, rockcavera disse:

    Boa noite.

     

    Meu caro, não vai funcionar, pois a Caixa mudou a API. Agora os resultados são baixados diretamente por arquivo de excel. Inclusive, abri um issue no repositório que fala sobre: #1

     

    Claro que irá compilar... mas não funciona mais.

     

    Abraço.

    Justo, reparei depois que testei.

     

    Vi o código e eu usava algo parecido, e que também não funciona mais.

     

    Well, enquanto não acho outra api gratuita, vou ter de baixar no manual. rsrsrs

     

    Mas valeu mesmo assim, gostei de ver que essa linguagem nim é bem veloz por manter uma saída bem parecida com C.

  2. 8 minutos atrás, Agua Imantada disse:

    Procure recursos DENTRO DE VOCÊ, na sua cabeça e seu coração, seja determinado e esqueça esta obsessão pós moderna por software, na lotofácil isto só deve ser aplicado no final, pra executar o trabalho que foi todo projetado dentro de nós, com a força do nosso pensamento INDUTIVO, nunca dedutivo.

     

    Entendo, o ruim no meu caso é que eu trabalho com software (programação), dai já tenho tendencia a achar que posso automatizar tudo rsrsrs, mas já tinha pensado nessa ideia de usar mais a intuição. 

     

    Vou dar um tempo novamente pra ver o que fazer, se bem que loteria tá mais como hobby do que profissão pra mim.

     

    Valeu ai.

    • Like 2
  3. 11 horas atrás, PARAFUSO disse:

     

    ....esses sorteios aleatorios que usou para testes vem do proprio banco de dados da caixa ? ou foram gerados ? existe uma diferença de anos luz entre um e outro 

    Na verdade eu quis dizer que uso os sorteios passados de forma aleatória, tipo pego um numero entre 500 e 1200 que será usado do sorteio 1 até esse número como treinamento do programa e ai deixo o resto para predição.

     

    11 horas atrás, Agua Imantada disse:

    Bom dia.

    Meu mantra aqui no fórum: Simule com sorteios anteriores; Se der certo no passado, dará no futuro.

     

    Se, no seu esquema, houver possibilidade de deixar atrasar uns sorteios, para então apostar de forma mais confiável, faça-o; é dinheiro economizado.

     

    Faça uma condição em seu software, de modo a que as dezenas previstas estejam apenas entre as sorteadas do sorteio anterior, e não entre ausentes e sorteadas, isto lhe dará ótimos parâmetros para trabalhar com as outras dez dezenas que se juntarão ás cinco pretensamente garantidas.

    Se preferir outro filtro, como pares e ímpares, também tá valendo.

     

    O resto, se vê depois.

     

    Aos estudantes, boa sorte em seus estudos.

    EU tava procurando colocar esses 5 grupos como dz fixas, mas pelo que vi é bem baixo o retorno.

    Acho que vou ver se consigo aumentar pra 10 dz e ver se acerta pelo menos 8 com a mesma porcentagem.

     

    Mesmo assim, obrigado ai pelos comentários.

    • Like 1
  4. Olá pessoas,

     

    criei um preditor pra lotofácil que me dá a seguinte garantia:

    -dentre as 25 dz, ele me mostra 5 grupos de 5 dz onde saem exatamente 5pts num desses grupos.

     

    Testei aqui com sorteios aleatórios e acreditem, é previsível acertar 5dz de 15.

    É muito mais fácil acertar 5 dz das 15 do que acertar um jogo de 15 que sai >=11 pts.

     

    Algum proveito pra isso?

    Vim perguntar por ideias, ainda estou trabalhando no programa.

     

    Quem quiser postar ideias, fique a vontade.

     

    NOTA:

    -só lembrando que pode ser bug pois é muito recente tal preditor.

    • Like 3
  5. 5 horas atrás, rockcavera disse:

    @sam88o cpusam do github é tu?

    Isso, sou eu.

    8 horas atrás, rockcavera disse:

    Minha postagem sobre a comparação dos métodos fala a partir de qual processador Intel e Amd a instrução está presente. Então, portanto, não é portável. 

    Entendo, nesse caso não posso usar porque esse meu código faz parte de uma aplicação comercial. Vou deixar com a lookup table enquanto não acho uma solução melhor.

     

    Mas obrigado ai pelos exclarecimentos e ao @Omesmo também.

    • Like 1
  6. 12 minutos atrás, Omesmo disse:

    se nao me engano se voce nao ativar a instrução SIMD o compilador vai usar oq tiver
    tipo voce tem que liberar uso de mmx e sse com -mavx -msse4.2 -mpopcnt

    Minha dúvida é se é portável, será que numa máquina amd vai ter suporte a essa função?

    Vou testar só mais tarde, agora vou sair.

     

    14 minutos atrás, rockcavera disse:

    Uma tabela de consulta de 256 é mais provável que seja carregada no cache mais rápido do processador em loops longos que uma tabela de 65535 (16bits).

    Faz sentido, por isso o aumento na velocidade.

    • Like 1
  7. @Omesmo

    Testei aqui com std::popcount (e seu equivalente __builtin_popcount) e não teve diferença significativa com a lookup table.

     

    @rockcavera

    Não sei se tu testou exatamente do mesmo jeito que fiz.

     

    Mas deixa eu explicar pra tu testar ai se quiser:

    -a lookup table que falo é apenas uma tabela de 256 valores (8 bits cada) u_char table[256] //variável global ou estática na função

    -dai eu inicio ela com as quantidades de bits 1 em cada um dos 256 valores, ex: table[1] = 1 bit table[7] = 3 bits etc

    -para contar eu pego a uint64_t combA & combB e salvo em uint64_t combC

    -como combC é um tipo de 64 bits (uint64_t), eu uso um for assim:

    for (; c; c = c >> 8 ) //desloco 8 bits a cada iteração até que não haja mais nenhum valor em c

    -então, dentro do for eu só faço algo como: contador += table[c & 0xFF]

    Dai é instantaneamente somado os bits 1 atuais que já estavam previamente configurado.

    No máximo 8 iterações (se usar mais números), na lotofácil fica como apenas 4 iterações quando tem a dz 25

     

    Tentei com uma table de 256*256 mas ficou muito lento. A mais rápida foi de 256.

    • Like 1
  8. 1 hora atrás, rockcavera disse:

    Basta dar um COMB3 = COMB1 AND COMB2, depois contar quantos bits continuam ON, ou seja, marcados como 1 em COMB3.

     

    O loop for você vai realizar várias operações para verificar apenas 1 bit por vez.

     

    Antes de tudo, é preciso ter um conhecimento básico da lógica de programação. Operadores bit a bit (bitwise) precisam ser dominados para enxergar o seu uso.

    Justamente o que eu faço. Mas pensando melhor, adicionei uma lookup table e ai, excluindo o carregamento em memória, agora meu programa compara uma combinação de 15 contra as 3.2M em apenas 28 ms, mais de dez vezes menos que antes. Com uma lookup table, não preciso ficar contando todos os bits, basta pular de 8 em 8 bits e tá tudo contado.

     

    Valeu a ideia.

    • Like 2
  9. 10 horas atrás, rockcavera disse:

    Não concordo com isso. A operação bit a bit é a melhor forma de se verificar acertos para loterias, pelo menos para CPU. Com operações bits a bits, você pode comparar a quantidade de bits iguais entre dois INTEIROS com duas instruções. Ou seja, se o processador é 64 bits, até 64 bits você vai usar duas instruções para comparar.

    E como que tu conta os bits iguais?

    Não me refiro a operação bit a bit AND. Ainda desconheço um jeito de saber quantos bits 1 são iguais sem que se use um for. Ali eu me referia a ter de usar um for pra ir movendo os bis e ir contando o que é 1 num inteiro a parte do resultado da operação bit a bit and.

    • Like 1
  10. Em 30/01/2023 em 10:40, OdeioParasita disse:

    Tabela com a cobertura da matriz 25,15,11,15=43 by Kinski & Pereira.

     

    É interessante observar que o fechamento não tem a melhor performance no início. Pois a 3ª combinação cobre apenas 325.301 índices, mas o final é espetacular, com a última combinação cobrindo 1.095 índices.

     

    Combinações

    Cobertura

    41

    346.126

    17

    346.126

    2

    325.301

    1

    282.151

    4

    251.312

    21

    247.039

    13

    210.896

    26

    147.617

    35

    134.633

    6

    122.091

    8

    96.341

    23

    88.102

    32

    81.290

    40

    73.618

    20

    57.700

    38

    52.335

    19

    48.048

    9

    42.599

    18

    36.073

    7

    35.362

    34

    29.720

    24

    27.403

    43

    25.410

    25

    24.587

    22

    19.480

    29

    15.520

    39

    13.955

    5

    12.230

    12

    11.090

    33

    9.560

    27

    9.170

    30

    7.445

    42

    6.505

    28

    5.625

    14

    4.845

    37

    4.325

    11

    4.065

    10

    3.055

    15

    2.800

    3

    2.515

    16

    2.040

    31

    1.560

    36

    1.095

    Total

    3.268.760

     

    Como é feito essa contagem?

    Por exemplo:

    considere a combinação com csn 1, obviamente, deve-se contar da 2 em diante e comparar quais tem >=11 números iguais a combinação de csn 1.

    Agora, porque a que tem csn 3003 tem 346.126 combinações >=11?

    É comparado com tipo, de 3004 indo até 3.2 milhões, ou considera também as 3002 anteriores e faz a comparação também?

    • Like 1
  11. 6 horas atrás, DixieJoe disse:

     

    Você utiliza no C++? 

    E, o que você chama de voar???  Me dê um exemplo de tempo que gasta para gerar e conferir todos os jogos da Lotofacil, usando o C++, por favor?

     

    No Delphi, no meu notebook i5 antigo está levando 6.619 milisegundos para gerar todos os 3,2 milhões de jogos e conferir cada linha e mostrar um resumo dos acertos em tela.

    Sei que poderia ser bem menos de 1 segundo se estivesse utilizando Assembly na função de CONTAR ACERTOS entre 2 linhas.

     

    SIm uso C++. Esses 6.619 milissegundos é para comparar uma única combinação contra as 3.2 milhões?

    Se sim, calculei aqui e meu programa leva 0.320 segundos (320 milissegundos) pra fazer o mesmo.

    • Like 1
  12. 6 horas atrás, DixieJoe disse:

    Maravilha. Confesso que não tenho explorado o uso de threads nos meus programas.

     

    O Delphi, que uso, oferece esse recurso. Vou precisar aprender a usar.

     

    Você utiliza no C++? 

     

     

    E, o que você chama de voar???  Me dê um exemplo de tempo que gasta para gerar e conferir todos os jogos da Lotofacil, usando o C++, por favor?

     

    No Delphi, no meu notebook i5 antigo está levando 6.619 milisegundos para gerar todos os 3,2 milhões de jogos e conferir cada linha e mostrar um resumo dos acertos em tela.

    Sei que poderia ser bem menos de 1 segundo se estivesse utilizando Assembly na função de CONTAR ACERTOS entre 2 linhas.

     

    Usando duas threads o que antes levaria tipo 10 segundos num programa normal, passa a levar 2 segundos. É uma grande otimização.

    Eu ainda estou aprendendo aplicar nos meus programas, mas basicamente é dividir as iterações de for e while em funções que processam cada parte em paralelo.

     

    Por exemplo:

    se tu quer conferir uma única combinação contra todas as 3.2 milhões da LF, tu usando threads faz algo como:
    thread_1 processa do 1 ao 1.6 milhões

    thread_2 processa do 1.6 milhões até a 3.2 milhões.

    Dai fica como se fossem dois programas num só, porém, cada thread executa em paralelo em núcleos do processador diferente, e por isso o grande aumento de velocidade de processamento.

     

    Não uso Delphi, mas nesse teu processador ai, deve dá pra usar umas 4 ou 8 threads por programa.

  13. 4 horas atrás, DixieJoe disse:

    Sam88,

     

    Já se aventurou com Assembly para loterias?

     

    Vale a pena?

    Já sim, mas é muito complexo de aprender e ai prefiro ficar pelo C++ rsrsrs

     

    Uma coisa que quase não se vê comentar é o uso de threads (paralelismo), a linguagem pode ser fraca mas o processador tem mais de um núcleo e pode ser usado para processamento paralelo.

     

    No momento eu tenho estudado threads pra cortar caminho no processamento. Com meu i3 usando 4 theads o tempo de processamento é diminuido quase que exponencialmente. Muito em breve meus programas vão voar em cada núcleo do processador.

  14. Eu costumo usar o std::bitset<100> no c++ para criar um vetor de bits e ai contar tudo que é igual 1.

    É um pouco mais lento que setar bit a bit mas muito mais compreensível. 

     

    Python é bom mas pra loteria é muito lento por ser uma linguagem interpretada.

    C++ é mais rápido, C é mais ainda e Assembly é o suprassumo da velocidade mas muito mais complexo.

     

    Se quer mais velocidade, tem que diminuir o processamento e aumentar o uso de memória.

    Opração bit bit pode ser mais custosa em execução, dependendo da quanidade de bits, do que acessar uma posição num vetor e contar bits com um for ou while.

  15. A probabilidade real de repetir um jogo de 15 anterior onde já saiu >=11 é essa:

    p = porcentagem de combinações de 15 que sairam >=11 no sorteio atual

    porcentagem para repetir = p * p, considerando p como 11% = aproximadamente 1.21%

    Por que não 1/3.2M vezes 1/3.2M? Porque essa é a probabilidade para repetir 15.

    Agora, quando vc considera >=11 a coisa muda porque >=11 não é apenas uma única combinação, mas sim quase 11% de 3.2 milhões!

     

     

    • Like 1
  16. Em 10/02/2023 em 18:42, OdeioParasita disse:

    Um filtro com o algarismo 8 na 8ª posição seleciona um conjunto de 38.896 combinações de 15 que já acertou, até o sorteio 2736, 15 pontos 19 vezes e já acertou 14 pontos 3.866 vezes. Um filtro assim aceitaria os números 8 ou 18 nessa posição.

     

    Para entender como esse filtro funciona, é preciso entender o conceito de algarismo. No sistema decimal existem 10 algarismos (0, 1, 2, 3, 4, 5, 6, 7, 8, 9). Algarismos são símbolos utilizados para compor os números. Exemplo, o número 8 é formado pelo algarismo 8. Já o número 18 é formado pelo algarismo 1 na posição das dezenas e pelo algarismo 8 na posição das unidades.

     

    Esse tipo de filtro é muito eficaz para loterias com universo grande como Megasena e Quina, mas principalmente para a Lotomania porque é a única loteria que tem equilíbrio na frequência dos algarismos. Ou seja, todos os algarismos ocorrem na mesma quantidade de vezes.

     

    Gostei disso. Vou ver se ifaço um filtro aqui. com essa informação.

    • Like 2
  17. 19 horas atrás, OdeioParasita disse:

     

    Apostas com garantia parcial (abaixo de 100%) podem ser montadas de inúmeras formas. Cada apostador escolhe o jeito que lhe agrada mais. Entretanto, apostas com garantia de acerto (100%) não são possíveis de montar com poucas combinações.

     

    Para garantir 14 pontos apostando na repetição de 8 do anterior:

    • C(15,8,7,8=180) x C(10,7,7,7=120) = 21.600
    • Ou C(15,8,8,8=6435) x C(10,7,6,7=8) = 51.480

    Para garantir 14 pontos apostando na repetição de 9 do anterior:

    • C(15,9,8,9=142) x C(10,6,6,6=210) = 29.820
    • Ou C(15,9,9,9=5005) x C(10,6,5,6=14) = 70.070

    Para garantir 14 pontos apostando na repetição de 10 do anterior:

    • C(15,10,9,10=95) x C(10,5,5,5=252) = 23.940
    • Ou C(15,10,10,10=3003) x C(10,5,4,5=14) = 42.042

    Se utilizar filtragem:

     

    Para garantir 15 pontos apostando na repetição de 8 do anterior:

    • C15,8 x C10,7 = 6.435 x 120 = 772.200

    Para garantir 15 pontos apostando na repetição de 9 do anterior:

    • C15,9 x C10,6 = 5.005 x 210 = 1.051.050

    Para garantir 15 pontos apostando na repetição de 10 do anterior:

    • C15,10 x C10,5 = 3.003 x 252 = 756.756

    Nossa, tanto jogo! E eu achando que acertar a saída do filtro fosse diminuir os jogos rsrsrs no fim, continuo a busca. Valeu ai os cálculos. 

    • Like 1
  18. Em 29/11/2022 em 23:20, OdeioParasita disse:

    Suponha que uma fada madrinha assopre no seu ouvido que o sorteio de amanhã à noite irá repetir 9 do sorteio de hoje à noite. De posse dessa informação, quantas combinações você precisa para garantir 14 pontos com 100% de certeza?

     

    Como montar os fechamentos parciais? Existem inúmeras opções, mas como o erro se propaga nos fechamentos?

    • 15-9-9-9 = 5.005 combinações;
    • 15-9-9-10 =578 combinações;
    • 15-9-9-11 = 117 combinações;
    • 15-9-9-12 = 31 combinações;
    • 15-9-9-13 =10 combinações;
    • 15-9-9-14 = 3 combinações;
    • 15-9-9-15 = 1 combinação;

     

    E se por um acaso a fada madrinha disser que amanhã sai de 8 até 10 do sorteio anterior? Isso com 80% de certeza? Quantas combs daria pra jogar. 

     

    Esses 80% é um chute alto, eu uso um programa que me dá nessa faixa de certeza com +1 ou - 1 de erro. 

     

    Será que dá pra pegar 14 com poucos cartões? 

    • Like 1
  19. Teus tópicos são muito interessante. Também acredito na matemática na loteria.

     

    Se tu olhar as pontuações >=11 de uma única combinação (ou todas), elas terão uma distribuição logaritmica se contar do último >=11 até o próximo >=11.

    Funciona em toda loteria essa distribuição. Então, a loteria não é tão aleatória assim.

    Essa distribuição logaritmica pertence a classe daquele famoso estudo de formação de constantes (lei de benford).

     

    Então, quanto mais próximo do último sorteio que saiu >=11 maior é a chance de uma combinação qualquer sair >=11 de novo.

    O ruim é saber quando essa combinação vai dar esse >=11 nos próximos sorteios.

     

    Pra isso eu tenho desenvolvido um multilayer perceptron para calcular o próximo valor. Mas mesmo assim, ainda depende muito de sorte, infelizmente rsrsrs

    • Like 1
    • Thanks 2
  20. Em 08/12/2022 em 23:19, Jimmy disse:

    Já existem extensões que fazem isso, não é preciso. Sobre prestar o serviço, por enquanto estou analisando, não será para agora. Contudo, na Lotofácil, 0,25 é muito pouco para tal. Prestar um serviço assim não é só ir à lotérica ou no site online e efetuar a aposta. Tem que organizar, atender, conferir e pagar impostos. Tem que ser um valor viável para conseguir prestar um serviço assim. Não pode ser poucas pessoas a ponto de inviabilizar, como também muitas o serviço se torna maior, demandando mais gastos. Tudo tem que ser pensando antes de simplesmente colocar um serviço assim no ar. Mas realmente R$ 0,25 por apostas não é viável.

    Entendo, de qualquer forma, gostaria de pagar por esse serviço. Até porque, eu sentiria maior segurança confiando em ti que é conhecido aqui no fórum do que num site estrangeiro.

     

    Quando tiver um tempo, faz ai uma lista de sites pra apostar, também quero ver algo assim aqui.

     

    Abraços.

    • Thanks 1
×
×
  • Create New...