Jump to content

rockcavera

Super VIP
  • Posts

    373
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by rockcavera

  1. Você pode pedir no cabeçalho do requerimento que venha compactado em gzip, assim a transferência é mais rápida, desde que sua linguagem tenha suporte para descompactar gzip, é claro. Outro detalhe, você tem q definir um cookie "security=true" para a solicitação não vir com resposta "302 Found".

  2. 10 horas atrás, DixieJoe disse:

    Silva -GGS

     

    Parabéns pelo sorteio 2401!

      Em 16/08/2021 em 22:04, Silva - GGS disse:

    Mega Sena - Dezenas que não devemos jogar no concurso 2401

     

    01 02 12 24 28 29 39 45 56 57

     

    Principalmente as dzs 12 e 29

     

     

    Vc acertou as dezenas sugeridas. Então, seria possivel jogar com apenas 50 dezenas e manter a SENA.

     

    Teriamos a SENA em 15.890.000 jogos. Ao invés de 50.063.000. SUPER REDUÇÃO!!!!

     

     

    Se isso acontecer com frequencia, vale muito a pena investir na automatização desse processo.

     

    Vc vai publicar para o 2402?

     

    Outra forma de prever isso, é automatizar o sistema para fazer a previsão história e ver a porcentagem de acerto do sistema.

    • Like 2
  3. 24 minutos atrás, Silva - GGS disse:

    Bom dia ao Jimmy e a todos do fórum:

    Minha sugestão seria se possível abrir aqui no fórum, um menu de apostas online e para cada tipo de aposta seus valores específicos sendo as loterias da Lotofácil com 17, 18, 19, 20 dzs, Quininha com 20, 25, 30, 35, 40, 45 dzs, Seninha com 20, 25, 30, 35, 40 dzs, Dupla Sena com 15, 20, 25, 30 dzs, Dia de sorte com 10,15, 18, 20 dzs entre outras apostas, com valores baixos ou próximos de ex: 0,50 centavos de real ou especificado um valor pelo Administrador a cada linha a ser apostada, podendo o apostador apostar quantas linhas quiser e assim o Administrador tira seus 15% do total arrecadado e o restante apostados ficaria entre os ganhadores de acertos máximos e ou maiores acertos se não houver ganhadores de acerto máximo, e que os valores se não houver ganhadores, sejam acumulados passando para o próximo concurso e ou que os apostadores que mais pertos chegarem, levam o montante, isto sendo especificado pelo Administrador.

    Isto me parece ser bem intuitivo para quem gosta mas não sei se seria possível ser feito aqui no fórum, sei que existem muitos sites trabalhando com tipos de apostas diversas das loterias brasileiras entre outras internacionais.

    OBS: Acredito que este tipo de apostas com valores bem abaixo das loterias atuais, seriam bem interessantes e talvez um meio de se continuar a trabalhar com números já que os valores de apostas das loterias brasileiras se encontram com preço super elevado e assim dificultam os apostadores a participarem destas loterias.

    Boa Sorte a todos!!!

    Isso vai contra a lei. É exploração de jogo de azar. O forum poderia ter problemas legais.

     

    • Like 2
    • Thanks 1
  4. Fiz uns teste aqui e é impossível, @Wata.

     

    O máximo que você vai conseguir são 2 linhas no desdobramento. A partir da terceira linha, já vai haver mais de um prêmio de 11 ou mais. A partir do momento que uma linha do desdobramento tem mais de 6 iguais dezenas iguais a de outra linha, já vai haver mais de dois prêmios. Sem repetir 6 é possível fazer apenas 2 linhas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 e qualquer outra que não repita mais de 6 dezenas com essa. Depois disso a terceira linha obrigatoriamente vai ter mais de 6 dezenas repetidas com a primeira ou segunda linha.

     

    Exemplo:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    1 2 3 4 5 6 16 17 18 19 20 21 22 23 24

    Entre a primeira e a segunda linha se repetem 6

     

    Adicionando uma terceira linha repetindo menos possível:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    1 2 3 4 5 6 16 17 18 19 20 21 22 23 24
    7 8 9 10 11 12 13 18 19 20 21 22 23 24 25

    Entre a primeira e a terceira repetem 7.

    Entre a segunda e a terceira repetem 7.

    A partir dai já temos linhas que vão premiar em mais de uma linha do desdobramento.

     

    Exemplo: 1 2 3 4 7 8 9 10 11 12 13 18 19 20 21

    1 2 3 4 7 8 9 10 11 12 13 18 19 20 21 -> 11 pontos com a primeira linha

    1 2 3 4 7 8 9 10 11 12 13 18 19 20 21 -> 11 pontos com a terceira linha

     

    Abraço.

    • Like 3
    • Thanks 1
  5. 10 minutos atrás, luiz.antonio disse:

    Sem problemas compartilhar, mas acredito incorrer na mesma questão...segue os 84 volantes sendo 25 dezenas em volantes de 15 com repetição máxima de 10 dezenas entre qualquer volante (25-15-r10).

     

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    1 2 3 4 5 6 7 8 9 10 16 17 18 19 20
    1 2 3 4 5 6 7 8 9 10 21 22 23 24 25
    1 2 3 4 5 6 7 11 12 13 16 17 18 21 22
    1 2 3 4 5 6 7 11 12 14 16 19 20 23 24
    1 2 3 4 5 6 7 13 14 15 17 18 19 23 25
    1 2 3 4 5 6 8 11 12 15 17 18 20 24 25
    1 2 3 4 5 6 8 11 13 14 19 20 21 22 25
    1 2 3 4 5 6 9 12 13 15 16 19 21 24 25
    1 2 3 4 5 6 9 12 14 15 17 20 21 22 23
    1 2 3 4 5 6 10 13 14 15 16 18 20 22 24
    1 2 3 4 5 7 8 12 13 15 16 20 22 23 25
    1 2 3 4 5 7 8 12 14 15 18 19 21 22 24
    1 2 3 4 5 7 9 11 13 15 17 19 20 22 24
    1 2 3 4 5 7 9 11 14 15 16 18 20 21 25
    1 2 3 4 5 7 10 12 13 14 17 20 21 24 25
    1 2 3 4 5 8 9 11 13 14 16 17 18 23 24
    1 2 3 4 5 8 10 11 12 15 16 17 19 21 23
    1 2 3 4 5 9 10 11 12 13 18 19 20 23 25
    1 2 3 4 5 16 17 18 19 20 21 22 23 24 25
    1 2 3 4 6 7 10 11 15 18 19 20 21 22 23
    1 2 3 4 6 8 9 12 14 16 18 19 22 23 25
    1 2 3 4 6 8 10 12 13 17 19 20 22 23 24
    1 2 3 4 6 9 10 11 12 14 17 18 19 21 24
    1 2 3 4 6 9 10 11 13 15 16 17 22 23 25
    1 2 3 4 7 8 10 11 13 15 16 18 19 24 25
    1 2 3 5 7 8 10 11 12 14 17 18 20 22 23
    1 2 3 5 7 9 10 11 13 14 16 19 21 22 23
    1 2 3 5 7 9 10 12 15 16 17 18 22 24 25
    1 2 3 5 8 9 10 14 15 16 19 20 23 24 25
    1 2 3 6 7 8 9 11 12 13 17 19 21 23 25
    1 2 3 6 7 8 9 11 12 15 16 20 21 22 24
    1 2 3 6 7 8 9 13 14 17 18 20 22 24 25
    1 2 3 6 7 8 10 12 13 14 16 18 21 23 24
    1 2 3 6 7 8 10 14 15 16 17 19 21 22 25
    1 2 3 8 9 12 13 14 15 16 17 18 19 20 21
    1 2 3 9 11 12 13 14 15 18 21 22 23 24 25
    1 2 4 5 8 9 10 11 14 15 17 18 19 22 25
    1 2 4 6 7 8 9 13 14 15 19 20 21 23 24
    1 2 4 6 8 9 10 12 13 15 18 20 21 22 25
    1 2 4 6 8 10 11 14 16 17 18 20 21 23 25
    1 2 4 7 9 10 11 12 16 17 19 20 21 22 25
    1 2 5 6 7 8 10 11 13 15 16 17 20 23 24
    1 2 5 6 7 10 11 12 13 14 18 19 22 24 25
    1 2 5 6 9 10 13 15 17 18 19 21 22 23 24
    1 2 7 8 10 12 15 17 18 19 20 21 23 24 25
    1 3 4 6 7 9 10 12 14 15 18 20 23 24 25
    1 3 4 7 8 9 10 13 14 15 17 18 21 22 23
    1 3 4 7 8 11 12 14 16 17 21 22 23 24 25
    1 3 5 6 8 9 10 11 13 16 18 20 21 24 25
    1 3 5 6 8 11 12 13 14 15 16 17 19 22 24
    1 3 6 10 11 12 13 14 15 16 19 20 21 23 25
    1 3 7 8 9 11 15 16 17 18 19 20 22 23 25
    1 4 5 6 7 8 9 11 12 13 18 20 22 23 24
    1 4 5 6 7 8 9 12 15 16 17 18 21 23 25
    1 4 5 6 7 9 10 11 14 15 16 17 21 22 24
    1 4 5 7 8 10 11 12 13 14 16 18 19 20 21
    1 4 5 9 10 12 13 14 16 17 19 22 23 24 25
    1 4 6 7 12 13 15 16 17 18 19 20 22 24 25
    1 4 9 10 11 12 13 15 16 17 18 20 21 23 24
    1 5 6 7 9 11 14 17 18 19 20 21 23 24 25
    1 5 7 8 9 11 12 13 14 15 17 20 21 22 25
    2 3 4 8 9 10 11 12 13 14 16 20 22 24 25
    2 3 5 6 7 8 11 14 15 16 18 22 23 24 25
    2 3 7 9 10 12 13 14 15 17 19 20 22 23 25
    2 4 5 6 7 9 10 11 12 15 17 19 23 24 25
    2 4 5 6 8 10 12 13 14 15 16 17 19 20 25
    2 4 5 6 8 12 13 14 17 18 21 22 23 24 25
    2 4 5 7 9 10 12 14 16 18 20 21 22 23 24
    2 4 5 8 9 11 13 15 16 18 19 20 21 22 23
    2 5 6 7 9 11 12 14 15 16 17 18 19 20 22
    2 5 6 8 10 11 12 14 15 19 20 21 22 23 24
    2 5 7 8 9 10 13 14 16 17 18 19 21 24 25
    3 4 5 6 7 8 10 11 13 14 17 19 21 23 24
    3 4 5 6 7 9 10 12 13 15 16 18 19 22 23
    3 4 5 8 9 10 12 15 17 19 20 21 22 24 25
    3 4 6 7 8 11 12 13 14 15 16 17 18 20 23
    3 4 6 7 9 11 13 14 16 18 19 20 21 22 24
    3 5 6 7 9 12 13 16 17 20 21 22 23 24 25
    3 5 7 8 9 10 11 12 14 15 18 19 21 23 25
    3 6 7 8 10 11 12 13 15 17 18 21 22 24 25
    4 5 6 7 8 9 10 11 14 16 19 20 22 23 25
    4 5 7 10 11 13 14 15 17 18 20 22 23 24 25
    6 8 9 10 11 12 13 14 16 17 18 19 21 22 23

     

    * O código em python para gerar combinações com limite de repetições sem limite de dezenas tem apenas 63 linhas

     

     

    Paz e Prosperidade.

    Luiz

    Obrigado pela rápida resposta. Infelizmente não satisfaz também os requisitos impostos pelo @Wata.

     

    Acredito que seja uma missão impossível 🤣

    • Like 2
  6. Em 04/07/2021 em 16:18, rockcavera disse:

    Aqui está o desdobramento que falei: 25,15,11,15=60

    Tive um tempo para voltar a este tópico e no computador fazer a verificação. Infelizmente esse sistema que passei não preenche os requisitos que você mencionou, pois pode haver mais de um jogo premiado no sistema. Agora não sei se há como fazer o que você pede. Talvez o @luiz.antonio possa disponibilizar o desdobramento dele para verificarmos.

    • Like 1
  7. Não tenho muito a acrescentar, mas vou dar minha visão.

     

    Acredito que a forma mais rápida de se fazer isso é com uma câmera para fotografar. Se você precisa de velocidade, fotografar é mais rápido que escanear. O maior desafio é construir algo que puxe os comprovantes dos jogos, ou seja, mesmo problema de um scanner, segundo li nos tópicos anteriores. O scanner evita a parte de automação e manipulação de vários "hardwares" separados, pois se for uma usar câmera fotográfica, você vai ter que criar todo um sistema de disparo, integrar com uma forma de puxar e soltar os comprovantes... Isso acredito que não seja difícil fazer, pois já deve ter coisas prontas para arduino, só vai precisar botar um timer para sincronizar com a troca de comprovante.

     

    O mais fácil de tudo é criar o reconhecimento de caracteres. Há diversas bibliotecas para isso, ainda mais o que se pretende reconhecer são linhas "-------", números e algumas palavras, pois a "FONTE" dos comprovantes são universais. Então, o treinamento para reconhecer vai ser especifico para ela. Como o @doisjá disse, é melhor transformar a foto em monocromática para se fazer o reconhecimento, pois, até onde conheço, o reconhecimento se faz com hashes, ou seja, assinaturas.

     

    Infelizmente a parte de automação não posso ajudar, pois nada entendo. A parte de programação seria algo interessante.

    • Like 2
  8. 20 horas atrás, PS_(Soares) disse:

    Muito interessante essa questão. Praticamente ninguém que faz bolão pela internet emite nota fiscal. Sob esse aspecto vai ser muito difícil encontrar alguém que faça emissão de nota fiscal. Uma vez um participante aqui falou de uma pessoa da internet e pesquisei sobre ele, o cara faz bolões com valores altos, perguntei se ele emitia nota fiscal, e fui bloqueado imediatamente, ou seja falcatrua pura!

     

    Mas você levantou uma coisa legal, como são recolhidos então os impostos?

     

    O que eu sei é que cada serviço possui obrigação de emissão de nota fiscal por lei.

     

    No Brasil, quando você pede nota fiscal, você arruma uma confusão grande, um dia comprei uma bateria e queria ter a nota fiscal, para caso desse problema teria como resolver mesmo com um advogado se necessário fosse, o cara com a maior cara de pau, me forneceu um documento que não era uma nota fiscal, pensando que estaria satisfeito, disse a ele imediatamente que aquilo não era nota fiscal e que ou ele emitia a nota fiscal ou eu iria chamar a força policial, porque qualquer um tem o direito de ter nota fiscal, aí acharam uma nota fiscal legal para mim, o que ocorre, é que as pessoas não emitem para não pagar impostos simples assim.

     

    Mas em relação ao Sorte On line eu fico pensando em algo ainda pior, se eles recebem o prêmio, e depositam para terceiros, porque não pagam o ITCMD, que qualquer um tem que pagar caso ganhe e precise repassar a outros, porquê eles não pagam ITCMD?

     

    Precisamos de um Contador e um Advogado urgente!

    Acredito que isso é mais caso para um Contador. Talvez um advogado especializado em tributário e empresarial também responda. Eu atuo com criminal e família. Nem na época da faculdade eu arriscava tributário. Mesmo assim, vou dar meu palpite, sem pesquisar a situação do prestador do serviço de bolões, pois teria que ver caso a caso (se é pessoa natural ou jurídica, modelo de sociedade, opção tributária...).

     

    Ao meu ver, uma empresa bem constituída, para fornecer serviços de tais naturezas, teria que arcar com IR e ISS (aqui não vou falar de verbas trabalhista e previdenciárias, pois vou focar apenas na empresa e não nos trabalhadores/colaboradores).

     

    O IR (Imposto de Renda) pode ser o imposto de renda da pessoa natural ou jurídica. Aqui não existe malandragem, até porque toda a circulação de dinheiros dos caras é por via eletrônica (não é?), então não teria como fugir da movimentação do dinheiro que entra e sai das contas. Ou paga ou o leão te come, ao menos que você seja isento ou imune (neh? abrir uma igreja e receber o dinheiro como dízimo). Aqui a competência da cobrança é da União.

     

    Do outro lado temos o ISS (Imposto Sobre Serviço). Aqui é o seguinte: prestou serviço, tem que pagar! No entanto, a forma de pagamento aqui pode variar. Você pode pagar por cada serviço prestado, incidindo o valor do imposto sobre o valor do serviço, de acordo com alíquota de cada Cidade (Sim! O ISS é imposto municipal). Ou, também, dependendo da opção tributária e do tamanho da empresa, pode usar a alíquota única, na qual você paga um valor fixo do ISS.

     

    Então, ao menos que tal empresa seja imune ou isenta, ela vai ter que pagar, ao meu ver, estes dois impostos. E sim, teriam que emitir nota fiscal, pois estão prestando um serviço. O fato de não emitirem a nota fiscal com certeza é devido a alguma malandragem fiscal.

    • Like 3
  9. 1 hora atrás, Bruno Cintra disse:

    obrigado,qualquer um que responde-se seria bem vindo

    Só para não passar batido, vou explicar o motivo de não compensar otimizar tal código. Existem outras formas de se obter matrizes/desdobramentos/sistemas/fechamentos que são mais atuais que essa lógica deste programa. Não desmerecendo, até porque esta é uma lógica comum quando se entende o que é preciso para gerar um sistema. Só o fato de você conseguir chegar neste entendimento já lhe dá méritos, ainda mais fazendo sozinho. Ocorre que, esse método nem sempre vai trazer a melhor solução, mas pode ser usado para encurtar a utilização de outros métodos mais elaborados, como: Problem Dependent Optimization (PDO) e Simulated Annealing. Com certeza existe coisa melhor ainda, pois existe muita gente inteligente pesquisando e criando algoritmos para isso, mas não necessariamente para uso em loterias. Você mesmo já me passou links usando estes métodos.

     

    Abraço.

    • Like 1
  10. 22 horas atrás, Bruno Cintra disse:

    vc conseguiu rodar o codigo que postei,estou tentando modificar para gerar numeros maiores mais rapido,nao sei se vai dar ,gera v,k,t,m

    Sei que não perguntou para mim, mas o código acima pode ser melhorado sim. Tem várias coisinhas que podem ser feitas de outras formas que vão fazer o desempenho saltar.

    22 horas atrás, Bruno Cintra disse:

    daria para converter o codigo que postei para C?

    A conversão é muito fácil. Eu converti para Nim em menos de 2 horas, isso sem saber Python. Fui olhando tutorial de Python e fazendo a transcrição do código. Funcionou perfeitamente e rodou cerca de 35 vezes mais rápido, isso sem fazer qualquer otimização. No entanto, não vale a penas otimizar o código, pois o algoritmo é simples e não é vantajoso. Praticamente uma versão sem otimizações do gencover meu. Ou seja, ele gera todas combinações de V,M e V,K, depois fica adicionando combinações de V,K na matriz de saída até que todas as combinações de V,M estejam cobertas segundo a garantia T. A seleção das combinações de V,K, que irão compor a matriz são feita da seguinte maneira a cada adição: verifica-se todas as combinações de V,K restantes com as combinações de V,M restantes e pega-se a combinações de V,K que mais elimina combinações de V,M. É simples assim. Com certeza é um dos métodos mais simples de gerar matrizes/desdobramentos/fechamentos (ou qualquer outro nome que dê para isso).

     

    Quem quiser o código Nim, conversão nua e crua, apenas com ajustes para se comportar igual ao código Python original:

    # Tradução para Nim do código Python em https://thelotteryforum.com/code-skulptor.php?id=user303_FzKynHVfSjm4VIx
    
    import std/[algorithm, strutils]
    
    const
      ch = ['A','B','C','D','E','F','G','H','I','J','K','L'] # v
      if_match = 5 # m
      min_match = 3 # t
      numbers_per_ticket = 5 # k
    
    proc check(ind: var seq[int], i, group_size, l: int): int =
      if i >= 0:
        ind[i] += 1
        if ind[i] > (l - 1 - (group_size - 1 - i)):
          return check(ind, i - 1, group_size, l)
        else:
          return i
      else:
        return i - 1
    
    proc combinations(li: openarray[char], group_size: int): seq[tuple[comb: seq[char], count: int]] =
      var index = newSeq[int](group_size)
      for i in 0 ..< group_size:
        index[i] = i
      let l = len(li)
      while index[0] <= (l - group_size):
        var comb = newSeqOfCap[char](group_size)
        for z in 0 ..< group_size:
          add(comb, li[index[z]])
        add(result, (comb, 0))
        let
          i = group_size - 1
          lowestchange = check(index, i, group_size, l)
        for j in (lowestchange + 1) ..< group_size:
          # Índices negativos em Python retornam a lista na ordem de traz para frente.
          # Em Nim dá erro. Este código faz ter o mesmo comportamento de Python.
          if j > 0:
            index[j] = index[j - 1] + 1
          elif j == 0:
            index[0] = index[^1] + 1
          else:
            let
              i1 = abs(j)
              i2 = abs(j - 1)
            index[^i1] = index[^i2] + 1
    
    proc row_match(row1, check1: seq[char]): int =
      for item in row1:
        if item in check1:
          result += 1
    
    var dot_count = 1
    
    proc row_matches_count(clist, checklist: var seq[tuple[comb: seq[char], count: int]]) =
      for i in 0 ..< len(checklist):
        write(stdout, '.')
        dot_count += 1
        if (dot_count mod 100) == 0:
          dot_count = 1
          write(stdout, '\n')
        checklist[i].count = 0
        for k in 0 ..< len(clist):
          if clist[k].count == 0:
            let c = row_match(clist[k].comb, checklist[i].comb)
            if c >= min_match:
              checklist[i].count += 1
    
    proc allchecked(clist: seq[tuple[comb: seq[char], count: int]]): bool =
      for clistrow in clist:
        if clistrow.count == 0:
          return false
      return true
    
    proc markcheck(clist: var seq[tuple[comb: seq[char], count: int]], checkrow: seq[char]) =
      for i in 0 ..< len(clist):
        if clist[i].count == 0:
          let c = row_match(clist[i].comb, checkrow)
          if c >= min_match:
            clist[i].count = 1
    
    proc myCmp(a, b: tuple[comb: seq[char], count: int]): int =
      # Código adicionado para comparação e ordenação.
      if a.count == b.count:
        return 0
      elif a.count < b.count:
        return -1
      else:
        return 1
    
    var
      comb = combinations(ch, if_match)
      mylist = combinations(ch, numbers_per_ticket)
    
    var keys: seq[seq[char]]
    while not allchecked(comb):
      echo "\nProcessing..."
      row_matches_count(comb,mylist)
      sort(mylist, myCmp, Descending)
      add(keys, mylist[0].comb)
      markcheck(comb, mylist[0].comb)
      del(mylist, 0)
    echo "\nPossible Result, buys followed by number of match"
    for i in 0 ..< len(comb):
      let linenum = i + 1
      write(stdout, linenum, "-result ")
      let checkrow = comb[i].comb
      write(stdout, join(checkrow, ""), " buys: ")
      for key in keys:
        let c = row_match(checkrow, key)
        write(stdout, join(key, ""), " ", c, " ")
      write(stdout, '\n')
    echo "number of key lines: ", len(keys)
    write(stdout, "Keys: ")
    for key in keys:
      write(stdout, join(key, ""), " ")
    echo ""
    echo "\n", len(ch), " Wheel, if match ", if_match, ", win ", min_match, " with ", len(keys), " tickets (", numbers_per_ticket, " numbers per ticket)."
    echo "end program!"

     

    Obs: a impressão de caracteres na tela é mais lerda no Nim que no Python. O teste de velocidade que fiz, eu comentei as impressões desnecessárias, apenas retornando a matriz gerada. Essa lerdeza da impressão no Nim se dá principalmente no Windows que o cmd.exe (prompt de comandos) é por buffer e o Nim até hoje não otimizou a impressão.

    Obs2: Nim gera código C não muito legível para inexperientes.

    • Like 1
  11. Em 10/04/2021 em 14:50, Bruno Cintra disse:

    ola Luiz,olha esse codigo em python ve se consegue rodar peguei neste site.

    https://gimplearn.net/viewtopic.php?f=39&t=2333&p=25624&hilit=wheeling#p25624

     

    #You can change below 4 lines to values you want and run program
    #----------------------------------------------------------------
    ch = ['1','2','3','4','5','6','7','8','9','10','11','12'] #characters to use as number substitutes for wheeling keys/pattern
    if_match = 3 #if we match this number of numbers in our wheel
    min_match = 3 #minimum guarantee match
    numbers_per_ticket = 6 #numbers on per line on a ticket
    # -------------------------------------------------------------

    def check(ind,i,group_size,l):
        if i >= 0:
            ind[i] += 1 #try incrementing it
            if ind[i] > (l - 1 - (group_size-1-i)):
                return check(ind,i-1,group_size,l)
            else:
                return i
        else:
            return i-1
    def combinations(li,group_size):
        index = [0] * group_size #initialize pointers
        for i in range(0,group_size):
            index[i] = i
        l = len(li)
        combs = []
        while index[0] <= (l - group_size):
            #print ((l - group_size))
            #grab combination here
            comb = []
            #print (index)
            for z in range(0,group_size):
                comb.append(li[index[z]])
            combs.append(tuple(comb))
            i = group_size-1
           
            lowestchange = check(index,i,group_size,l)
            #print (lowestchange)
            for j in range(lowestchange+1,group_size):
                k = j - lowestchange
                #print (index[j-1]+k,end=",")
                index[j]=index[j-1]+1
           # print   
        return combs
    def row_match(row1,check1): #returns number of matches check appears in row
        count = 0
        for item in row1:
            if item in check1:
                count += 1
        return count
    dot_count = 1

    def row_matches_count(clist,checklist):
        global dot_count
        for i in range(0,len(checklist)):
            #print (".",end="")
            dot_count += 1
            if dot_count % 100==0:
                dot_count = 1
               # print ()
            checklist[i][1] = 0 #reset checks each time.
            for k in range(0,len(clist)):
                if clist[k][1] == 0: #not yet included
                    c = row_match(clist[k][0],checklist[i][0])
                    if c >= min_match:
                        #print "match:" + str(c)
                        checklist[i][1] += 1 #increment counter of rows matched mininum matches.
        return clist,checklist;
    def allchecked(clist):
        for clistrow in clist:
            if clistrow[1] == 0:
                return False
        return True
    def markcheck(clist,checkrow):
        for clistrow in clist:
            if clistrow[1] == 0: #not yet included
                c = row_match(clistrow[0],checkrow)
                if c >= min_match:
                    clistrow[1] = 1  #mark it as checked
        return clist            
    # Get all combinations of [1, 2, 3]
    # and length 2
    comb = combinations(ch, if_match)
    comb = list(comb)
    #mylist = []
    #copy and convert to list
    for i in range(0,len(comb)):
        comb[i] = [list(comb[i]),0]
        #mylist.append([list(comb[i][0]),0])

    mylist = combinations(ch,numbers_per_ticket)
    mylist = list(mylist)
    for i in range(0,len(mylist)):
        #comb[i] = [list(comb[i]),0]
        mylist[i] = [list(mylist[i]),0]

    #match count
    keys = []
    while not allchecked(comb):
       # print ()
       # print ("Processing...")
        comb,mylist = row_matches_count(comb,mylist)
        #print str(mylist)
        mylist = sorted(mylist,key=lambda x: -x[1])
        keys.append(mylist[0][0]) #add it as key
        comb = markcheck(comb,mylist[0][0])
        del mylist[0]
    #print ()
    print ("Resultado possível, compras seguidas pelo número de correspondências")
    for i in range(0,len(comb)):
        linenum = str(i+1)
       # print (linenum+ "-result",end=" ")
        checkrow = comb[i][0]
       # print ("".join(checkrow),"buys:",end=" ")
       # for key in keys:
         #   c = row_match(checkrow,key)
           # print ("".join(key),c,end=" ")
       # print ()
    #print ("number of key lines:",len(keys))
    #print ("Keys:",end=" ")
    for key in keys:
        print (" ".join(key))
    print    ()
    print (str(len(ch)) + " Numeros, ganha "+str(if_match) + " se " + str(min_match))
    print(str(len(keys)) + " Cartões ("+str(numbers_per_ticket)+" Numeros por Cartão).")
    print ("Fim!")

     

     

    Esse código é simples de rodar. Baste ter o Python instalado, configurar as 4 primeiras linhas e dar um "python nome.py" no prompt de comandos (famoso CMD.exe). Obs: "nome.py" é o nome do arquivo que você vai salvar o código. As configurações estão nas 4 primeiras linhas.:

    #You can change below 4 lines to values you want and run program
    #----------------------------------------------------------------
    ch = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N'] #characters to use as number substitutes for wheeling keys/pattern
    if_match = 5 #if we match this number of numbers in our wheel
    min_match = 3 #minimum guarantee match
    numbers_per_ticket = 5 #numbers on per line on a ticket
    # -------------------------------------------------------------

    A variável CH é uma lista com os elementos da combinação. Aqui no forum, estamos acostumados a chamar de V. Claro que o V será a contagem da quantidade de elementos. No caso do código acima, o programador inseriu letras para facilitar a substituição pelos números escolhidos depois.

    A variável IF_MATCH é o que chamamos de M. Ou seja, é a condição que precisa ser respeitada para termos a garantia T.

    A variável MIN_MATCH é o que chamamos de T. Portanto, é a garantia mínima pretendida com o sistema/desdobramento/fechamento.

    Por fim, a variável NUMBERS_PER_TICKET é o que chamamos de K. É a quantidade de elementos por combinação.

     

    Não olhei o código todo ainda, apenas testei e funciona perfeitamente. Depois vou dar uma olhada mais a funda e fazer algumas considerações.

     

    Abraço.

     

    Edit: @Bruno Cintra, antes que eu me esqueça, sempre que colar um código (linhas de programação), utilize um campo código do editor de publicação. Vide no Print.1369796773_ensinarusarcdigo.thumb.png.ea5b6e1f8682835bfcd7807c1155a129.png

    • Like 1
  12. Venho aqui prestar alguns esclarecimentos a todos aqueles que ainda usam o site lotdrw.tk. Já faz 1 ano e 3 meses que inaugurei este projeto e estava meio parado, até então.

     

    Fiquei sem o que fazer este final de semana e resolvi finalizar algumas funcionalidades pendentes no site, mas que não eram essenciais para o funcionamento principal.

     

    Pois bem. Aqui estão as adições que foram feitas:

    1) Adicionado sistema de redefinição de senha. Sabe quando você não lembra a senha de cadastro e não consegue acessar mais o site ou enviar seus sistemas pelo programa? Então, agora você pode redefinir sua senha de forma fácil e simples;

    2) Adicionada página para ver seu perfil. Nesta página você pode acessar os dados da sua conta, como: data de registro, e-mail e número de sistemas enviados. Além de poder alterar o nome e a senha. Claro, isso só é acessível quando você entra com seu e-mail e senha no site; e

    3) Melhoria no sistema de envio de e-mails (tanto de cadastro quanto para redefinir a senha). Esta melhoria visa fortalecer a confiabilidade dos e-mails enviados pelo site, para que não sejam considerados spams e encaminhados para lixeira ou caixa de spam.

     

    Ainda fiz algumas alterações no site que não surtem efeitos para os usuários, mas que melhoraram a navegabilidade.

     

    Já em relação ao programa, ainda não tive tempo para terminar aquilo que mencionei nesta postagem. Mas, assim que tiver, irei fazer.

     

    Algumas estatísticas do site:

    1) 24 usuários cadastrados e confirmados;
    2) Sendo que, destes 24 cadastrados, 7 já enviaram pelo menos 1 sistema;

    3) 1289 sistemas enviados, Fora os possíveis sistemas inversos que podem ser gerados a partir destes; e

    4) O último sistema cadastrado foi enviado dia 13 de março de 2021.

     

    Desde já, obrigado a todos que ajudam.

    • Like 3
  13. Sempre vejo alguém pedido todas as combinações da mega, quina, lotofácil... para facilitar a vida desse povo, eu resolvi fazer esse programinha simples. Ele gera todas as combinações de V,K e armazena elas em um arquivo .txt. Eu, particularmente, não vejo muita utilidade, mas há quem pode ver, como há quem pede no fórum. Então, é mais fácil essa pessoa baixar o programa, rodá-lo e obter o que deseja, que esperar por alguém fazer, compactar o arquivo e enviar para algum lugar (alguma das vezes são arquivos bem grandes).

     

    Então é isso ai.

     

    Download

     

    Leia-me.txt

    O gencombs é um gerador de todas as combinações possíveis de V,K, armazenando-as em
    um arquivo CV,K.txt.
    
    Exemplo: Combinações de 5,3. Irá criar um arquivo C5,3.txt com estas linhas:
    1 2 3
    1 2 4
    1 2 5
    1 3 4
    1 3 5
    1 4 5
    2 3 4
    2 3 5
    2 4 5
    3 4 5
    
    V = Total de números. Ex: V = 5 (1 2 3 4 5)
    K = Números usados em cada combinação (linha). Ex: K = 3 (1 2 3)
    
    No qual: 0 < V <= 100 (V maior que 0 e V menor ou igual a 100, ou seja, de 1 até 100)
             0 < K <= V (K maior que 0 e K menor ou igual a V, ou seja, de 1 até V)
    
    O zip possui dois arquivos. O gencombs64.exe e o gencombs.32.exe. O com final 64 é
    para sistemas operacionais 64 bits e o 32 para os sistemas operacionais 32 bits. Há
    uma limitação para criar arquivos de até 4GB em sistemas operacionais de 32 bits.
    Isso é uma limitação da arquitetura e não do programa em si.
    
    Para abrir o programa, basta dar um duplo clique no gencombs64.exe ou gencombs32.exe.
    O programa rodará em uma janela de comandos. Basta seguir as instruções.
    
    Após informar os parâmetros V e K, o gerador calculará a quantidade de combinações e
    o tamanho que terá o arquivo, para, então, perguntar se de fato deseja gerar as
    combinações.
    
    É um programa muito simples. No entanto, tenha cuidado para não gerar combinações
    muito grandes, que irão ocupar o seu HD ou SSD todo. Por isso, preste muito atenção
    no tamanho do arquivo antes de confirmar para gerar. No entanto, caso acabe
    confirmando e se arrependendo no meio do caminho, dê um CTRL + C, que o programa irá
    fechar.
    
    Os arquivos gerados possuem o caractere nova linha (LF), padrão do unix. Optei por
    usá-lo, pois os sistemas operacionais Windows atuais o reconhecem sem problema, bem
    como economiza 1 byte por combinação. Ou seja, caso gere todas as combinações de
    60,6, irá economizar 50.063.860 bytes (47,744 MB). Recomendo não usar o notepad.exe
    (famoso Bloco de Notas do Windows) para visualizar arquivos muito grandes (maiores
    de 100 MB). Recomendo utilizar o KLOGG (https://klogg.filimonov.dev/) ou outros.
    
    Este programa foi feito por rockcavera - oculto

     

    gencombs.jpg

    • Like 6
    • Thanks 3
  14. Estava olhando os códigos e achei um gencover64.nim. Olhei e estava feito já para trabalhar com V até 63. Já fiz o upload e está no mesmo link do de cima.

     

    Tanta coisa que nem lembrava que tinha feito o código e algumas otimizações nele em comparação com o outro.

     

    Observação: não me recordo da qualidade do programa em relação a tratamento de erros, pois faz tempo que fiz. Mas acredito que esteja bem fraquinho em relação a isso.

     

    Download

    • Like 2
    • Thanks 2
  15. 1 hora atrás, oiregor disse:

     

    quanto ao código totalmente compreensível... (mas me chame no privado eeheh)

     

    estou usando o gencover64, w10, dentro de uma pasta no onedrive local , usuário perfil ADM do PC....  vou colocar numa pasta no drive C 

     

    novamente obrigado

    Irei te chamar, agora estou pelo cel. Hora que eu tiver um tempo de sentar a bunda no computador, te mando mensagem.

     

    Depois vou tentar usar dentro de uma pasta onedrive para ver. Mas no win10 funciona geralmente em qualquer lugar rodando sem privilégios de admin, menos em pastas protegidas.

    54 minutos atrás, oiregor disse:

     

    @rockcavera troquei para uma pasta no C

    funcionou!!!!

    larguei um 25-15-11-15 pra ver o tempo ... 

     

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


    a minha dúvida, que envolve o código, claro, nem é sobre a geração da matriz, mas sim as estratégias de redução... como vc fez o cruzamento das linhas para ficar tão rápido... estou usando vba-excel e a mesma matriz que testei 18-15-14-15=24 no vba levou +/- 2 minutos... no teu alguns milésimos de segundo...
    sei que a linguagem, neste caso afeta muito...  mas o tempo não é o "problema" , mas sim o resultado... nunca faz de primeira as 24 linhas... preciso rodar trÊs quatro vezes para "achar" ...

    toda ajuda é bem vinda... e novamente OBRIGADO!

    Que bom que funcionou. Maiores detalhes te respondo no pc e no privado.

     

    Abraço.

    • Thanks 1
×
×
  • Create New...