Jump to content

bitwizardry

Membro Inativo
  • Posts

    105
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by bitwizardry

  1. 17 horas atrás, Jimmy Durão disse:

    Conto com a ajuda dos bons membros para organizar o fórum.

     

    Quando ver algo fora do lugar;

    Quando ver alguém brigando ou ofendendo o outro;

    Quando tiver conteúdo irregular, ineficiente ou inadequado;

     

    Denuncie a publicação, por favor. Ninguém vai saber que foi você que denunciou.

     

    obrigado.

    Jimmy, há no forum um FAQ contendo as respostas das principais (e básicas) dúvidas mais frequentes feitas por novos usuários?
    Vejo muitos users perguntando como se usa o Ininuga, como se imprime bilhetes, o que são matrizes, como usá-las, onde acha-las, etc..
    Talvez fosse possível matar todos esses coelhos com uma cajadada só, ou melhor, um post só.
    É só uma sugestão. Imagino o quão cansativo deve ser administrar um fórum como esse apenas na camaradagem.

    • Like 1
  2. Em 2/7/2017 at 13:26, khundalini disse:

    Alguém pode me ajudar a montar o algoritmo para cálcular o CSN? Já tentei os algoritmos mencionados neste post, mas até agora sem sucesso. E se possível, queria uma explicação sobre o que é essa tal busca binária. Grato.

    Qual linguagem vc programa?

  3. O grupo 01 02 03 04 06 08 09 10 11 12 13 14 15 17 20 22 23 24 25 já acertou 14 pontos 63 vezes, o mais pontuado em 14 pontos de todas as c(25,19)

    No entanto, não acertou as 15 nenhuma vez até agora. (concurso 1624)

     

    Só lembrando que desdobramentos de 19 dezenas só dão retorno a partir do acerto de 13 dezenas ( aos que não sabem)

  4. Em 12/18/2015 at 09:31, BigMax disse:
    64,50,18,20=108

     

     

     

    Como fazer

     

     

     

    64,50,18,20 =32,25,18,20 ( substituir em dupla )

     

     

     

    32,25,18,20 = inv. 32,7,5,12 

     

     

     

    32,7,5,12= soma (17,7,5,7 + 15,7,5,6)

    BigMax, considerando que o mínimo teórico dessa matriz é 9,27, 108 blocos é muita gordura além do necessário (11x mais)

    Uma alternativa é reduzir a cobertura das c(17,7,5,7) e c(15,7,5,6) para 90% e refazer a montagem. 

    O WG é perfeito para isso. Estou desenvolvendo um sw que também realiza essa redução. (ainda em construção)

    Excelente post, e parabéns!

    • Like 1
  5. Amigos, há algum post onde os usuários do fórum postam suas apostas para compararmos as performances de acertos? (por brincadeira que seja)

     

    Pois esse foi meu jogo de hj:

     

     01 02 03 05 08 09 10 11 13 16 18 20 23 24 25
     01 02 03 05 08 09 10 11 13 17 18 20 21 24 25
     01 02 03 05 08 09 10 15 16 17 18 21 23 24 25
     01 02 03 05 08 09 11 15 16 17 20 21 23 24 25
     01 02 03 05 08 10 11 13 15 16 17 18 20 24 25
     01 02 03 05 08 10 11 13 15 18 20 21 23 24 25
     01 02 03 05 09 10 13 15 16 17 20 21 23 24 25
     01 02 03 05 09 11 13 15 16 17 18 21 23 24 25
     01 02 03 08 09 10 11 13 15 16 18 20 21 24 25
     01 02 03 08 09 10 11 13 15 17 18 20 23 24 25
     01 02 03 08 10 11 13 16 17 18 20 21 23 24 25
     01 02 05 08 09 10 11 13 15 16 17 21 23 24 25
     01 02 05 08 09 13 15 16 17 18 20 21 23 24 25
     01 02 05 09 10 11 15 16 17 18 20 21 23 24 25

     

    18 dezenas, sendo 4 fixas. Acertei as 4 fixas e errei as restantes... rsss.. paciência.

    2 bilhetes com 11 pontos.

    • Like 1
  6. Silva, aproveitando o embalo sobre "melhores combinações", aqui vai algumas:

    (atualizadas até o concurso 1617)

     

    03 14 15 22 24 - 132 ocorrencias

    03 04 11 13 15 22 - 77 ocorrencias

    11 13 15 18 20 22 - 77 ocorrencias

    03 11 13 15 18 20 22 - 45 ocorrencias

    03 04 06 14 15 22 24 - 45 ocorrencias

    03 04 13 15 19 22 24 - 45 ocorrencias

    01 02 06 12 15 18 24 25 - 28 ocorrencias

    01 02 03 05 11 15 18 20 22 - 18 ocorrencias

    02 03 04 05 07 09 13 14 20 23 - 11 ocorrencias

    01 02 06 09 12 15 18 19 24 25 - 11 ocorrencias

    02 04 06 12 13 17 18 23 24 25 - 11 ocorrencias

     

    Para aqueles que acreditam que "o que mais saiu, continuará saindo", basta escolher algum(s) desses conjuntos.

    • Like 1
  7. 1 minuto atrás, Giovana disse:

    bitwizardry, são muitos filtros em um único só,ou seja, quando digo um filtro, quero dizer um conjunto de filtros rodando todos juntos. Exemplo, pares e ímpares, linhas e colunas, todos os resultados anteriores da mega sena, fibonacci, são muitos, qualquer idéia de filtro por aí eu incluo, multiplus de três, multiplus de cinco, etc, etc, etc... a questão não é o intervalo de min e máx, é a velocidade de processamento mesmo.

    Eu entendi perfeitamente o que vc quer fazer, e repito... rsss me diga os ranges (min e max) e de cada filtro, não importa quais ou quantos e eu mando as combinações restantes pra vc.

  8. Em 1/25/2018 at 14:04, Giovana disse:

    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.

    Quais filtros exatamente vc quer aplicar em todas as combinações? Isso pode ser feito mais rapidamente do que se imagina.

  9. 1 minuto atrás, websilva disse:

    Neste mesmo contexto, ao aplicar um filtro adequado, você diminui o número de volantes e aumenta a margem de lucro.

     

    Certo, mas o que você chama de "filtro adequado"? As margens de min e max das dezenas fibonacci, primos e repetidas?

    • Like 1
  10. 1 minuto atrás, Jimmy Durão disse:

    Dei uma de bobo, você só queria comprovar que uma matriz tem lucro SE acertar a condição. Putz. :)

    Pensei a mesma, mas acabei não comentando pra não criar polêmica... rsss

    Qualquer matriz da família c(22,15,XX,XX) dá lucro, caso as 15 dezenas estiverem dentre as 22, e com o percentual de retorno bastante parecido.

     

    Basta simular:


    22,15,12,14

    22,15,11,13

    22,15,10,13

    22,15,10,10

    etc...

     

    Todas estão no google!

     

    • Like 2
    • Haha 1
  11. Em 1/21/2018 at 20:42, websilva disse:

    Garantir que todos conjuntos (volantes) de 15 dezenas apostados tenham:

     

    Não há polêmica nenhuma, apenas segui sua sugestão acima:

     

    1 - entre 3 a 5 elementos (dezenas) do conjunto das Fibonacci F={1,2,3,5,8,13,21} 
    2 - entre 4 a 7 elementos (dezenas) do conjunto dos Primos P={2,3,5,7,11,13,17,19,23} 
    3 - entre 7 a 11 elementos (dezenas) do conjunto das Repetidas R={dezenas sorteadas do concurso anterior (n-1)} 

     

    Não utilizei os conjuntos A, B, C, D...

     

    Depois das 2.2 milhões de combinações, divaguei sobre o assunto, só isso.

     

  12. Em 1/21/2018 at 20:42, websilva disse:

    Garantir que todos conjuntos (volantes) de 15 dezenas apostados tenham:
    entre 3 a 5 elementos (dezenas) do conjunto das Fibonacci F={1,2,3,5,8,13,21} 
    mais de 80% dos conjuntos de 15 elementos sorteados possuem essa característica
    entre 4 a 7 elementos (dezenas) do conjunto dos Primos P={2,3,5,7,11,13,17,19,23} 
    mais de 90% dos conjuntos de 15 elementos sorteados possuem essa característica
    entre 7 a 11 elementos (dezenas) do conjunto das Repetidas R={dezenas sorteadas do concurso anterior (n-1)} 
    mais de 95% dos conjuntos de 15 elementos sorteados possuem essa característica

     

    websilva ,

     

    Apenas uma observação: 0,8 * 0,9 * 0,95 = 0,612

     

    Ou seja, a probabilidade de vc obter sucesso nos 3 filtros juntos, é de  61% aproximadamente, o que resultaria em cerca 2 milhões de combinações candidatas para o próximo concurso, e consequentemente, essa estratégia funcionaria em 6 a cada 10 concursos. Para tirar a prova, realizei essa filtragem para o concurso 1617 e o resultado ficou em 2.224.663 combinações (não consegui anexar o arquivo .rar). 

     

    É aqui que começamos a enxergar de fato o tamanho do problema da loteria:

     

    Continuando a filtragem, e  se vc elaborasse mais 3 filtros utlizando outros grupos de dezenas (dezenas pares, linhas, ou qualquer grupo que seja) nessa mesma faixa de cobertura percentual, o filtro nos remeteria para:

     

    2.224.663 * 0,612 = 1.361.493

     

    depois, mais 3 filtros:

    1.361.493 * 0,612 = 833.234

     

    mais 3...

    833.234 * 0,612 = 509.939

     

    mais 3...

    509.939 * 0,612 = 312.082

    etc... etc...

     

    Até chegar numa quantidade plausível de bilhetes a serem apostados.

    • Like 1
  13. 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.

     

     

  14. Em 12/17/2017 at 21:41, DixieJoe disse:

    Bitwizardry,

     

    Muito obrigado pela dica.

    A função in-line que me mandou está em C, mas posso adaptar para Delphi com facilidade.

     

    Vou ver se consigo melhorar a velocidade da minha função contadora atual usando essa sua dica.

     

    Minha máquina é 64 bits mas a versão do Delphi instalada é 32 bits... Acho que isso também se resolve.

     

    Como meu notebook é relativamente antigo (mais de 5 anos, acredito), também preciso verificar se ele tem suporte para as instruções SSE4.

    Também algo possível de checar por aqui sem grandes preocupações.

     

     

    ----

     

     

    Peço desculpas, mas gostaria de aproveitar sua ajuda e lhe perguntar se é possível trabalhar com 128 bits (para aplicar as mesmas funções que vou adaptar com sua dica a variáveis Integer que ajudem a cobrir até 100 bits.).

     

    Até 64 bits, acho que que não tenho problema de aprender a usar. Mas para loterias como Quina (80 bits), Timemania (80 bits) e Lotomania (100 bits) eu ainda não consegui entender como posso adaptar.

     

    Hoje, utilizo Sets e posso tranquilamente trabalhar com 100 bits. 

    Pensei em deixar todas as funções atuais usando SETS porque são rápidas. E pensei em criar uma função que transforme de SETS para Integer (diretamente até 64 bits - isso eu consigo fazer facilmente) e para dois Integers de 64 bits para valores que atendam até 100 bits... Isso para a rotina Contadora com POPCOUNT.

     

    Nessa última parte, aceitaria sugestões e comentários sobre a melhor maneira de fazer isso e manter todo o restante em 64 bits.

     

    Na verdade, e resumindo: preciso aprender uma maneira eficiente de converter de SETS para 2 Integer de 64 bits, contar separadamente e SOMAR os dois POPCOUNT.

    Outra parte importante é uma função para Comparar 2 Integers (para valores maiores do que 64, claro)... Ou continuo comparando com SETS e apenas uso a rotina anterior para a contagem...

     

    Mais uma vez, obrigado.

     

    Dixie, não conheço nada de Delphi , mas se a classe sets do Delphi for idêntica ao bitset de C++, vc faz tudo isso com poucas linhas de código, observe o print:

    Imaginei um resultado fictício da quina "01 02 03 79 80", setei os bits nas respectivas posições e realizei um popcount, conforme mostra o output

     

    Para "partir" esse bitset em duas variáveis x64, antes de mais nada, crie as duas variáveis, "a" e "b", agora transcreva esse pseudocode:

     

    a = 0;

    b = 0;

     

    para c = 0 até 79

             se c < 64 então

                   se quina.test(c) = true então

                           a = a OR (1 << c)

                   fim se

             senão

                   se quina.test(c) = true então

                           b = b OR (1 << (c - 64))

                    fim se

             fim se

    fim para

     

    Me diga se é isso mesmo que vc deseja.

     

    print.png

  15. Em 12/17/2017 at 18:48, edcronos2 disse:

    ola

    vc parece um conhecedor da area

    saberia dizer como ficaria os operadores binarios AND OR XOR e NOT em 64bit e se possível 128 bit?

     

    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.

     

  16. Em 10/23/2017 at 12:39, DixieJoe disse:

    Pitaco_certo!

     

    Esta rotina está em Delphi (Pascal).

     

    Count := 0; 
    while x<>0 do begin 
        x := x and (x-1); 
        Inc(Count); 
    end;

     

    É exatamente isso que precisamos fazer (Em Assembly) para permitir usar In-Line dentro do Delphi.

     

    O que ela faz:

     

    1- Recebe um INTEGER (preferencialmente, no nosso caso, de 128 bits) onde cada bit estará SETADO em 1 se o valor correspondente existir.

    Explicado melhor: cada BIT representa uma DEZENA nossa. No caso, vamos usar do Bit 0 até o Bit 99 = Dezena 1 até Dezena 100.

    Inicializa um contador Count em 0 (vai armazenar a quantidade de BITS setados em 1.

    Testa os bits, um por um, enquanto eles tiverem o valor de 1... É aí que está a BELEZA do código!!!! Só conta quando o valor estiver em 1, senão, simplesmente vai para o próximo bit com valor 1.

     

    Depois te mando a rotina do AS em Assembler. Acho que ele conta diferente. Mas é super rápido também.

     

    ----

     

     

    Outro ponto importante: nos Assemblers para processadores mais modernos, parece que já existe uma rotina no próprio Assembler que já faz isso.

     

    Chama-se 

     

    popcout

     

    NÃO SEI COMO USAR ISSO, INFELIZMENTE....

     

    ----------------

     

    Dixie, é muito simples, o algorítmo do Uros pode ser traduzido dessa forma em assembly inline:

     

    int x;
    int Count ;

     

    asm {
        mov eax, x
        popcnt Count , eax
    }

     

    Para variáveis x64, troque o eax por rax (registrador 64)

     

    A instrução popcnt é suportada em processadores com tecnologia SSE4 ou superiores.

     

    https://en.wikipedia.org/wiki/SSE4

     

  17. Em 19/08/2017 at 03:22, owlx disse:

    SAGE é um sistema que engloba vários pacotes de softwares para matemática (incluindo pacotes em python,  matplot, R e vários outros). É bem complexo. Esse que você cita é uma classe que basicamente só acessa o banco de dados dos designs que já estão prontos no site ccrwest.  Sinceramente, se você não tem um interesse genuíno por matemática não queime pestanas com algo que só vai, basicamente, te dar acesso ao bando de dados do site.

     

    Eu testei esse pacote logo depois que foi lançado (meados de  2009), quando possuía apenas as 4 funções originais. A função trivial_covering_design , de fato, gera (ou gerava) nada mais do que todas as combinações possíveis c(v, k), o que não deixa de ser uma matriz, embora inútil. Você pode testa-la aqui: https://sagecell.sagemath.org/ 

     

    Com o seguinte comando:

    C = trivial_covering_design(10,5,3)
    print(C)

     

    Outra função interessante é a schonheim(v,k,t) , que retorna o mínimo teórico para quaisquer parâmetros. De resto, é só acesso ao bd.

     

×
×
  • Create New...