Jump to content

danniel.df

Membro Novato
  • Posts

    1
  • Joined

  • Last visited

Posts posted by danniel.df

  1. Um algoritmo com IA em PHP  que eu fiz para usar os resultados antigos da caixa e gerar apostas baseado no suposto princípio de que os números tendem a igualar a quantidade de ocorrências ao longo do tempo:







     

    <?php
    // http://loterias.caixa.gov.br/wps/portal/loterias/landing/megasena
    ini_set('display_errors', true);
    error_reporting(E_ERROR ^ E_DEPRECATED);
    set_time_limit(999999);
    $url = 'http://www1.caixa.gov.br/loterias/_arquivos/loterias/D_megase.zip';
    $pasta = 'dat';
    $file = 'configuracoes.php';
    $qtd_jogos = 0;
    $qtd_apostas = 1;
    $numeros_por_jogo = 6;
    $total = 60;
    $erros = [];
    $ocorrencias = [];

    if (!$_GET)
    {
        if (file_exists($pasta . "/" . $file))
        {
            require($pasta . "/" . $file);
        }
    }

    else
    {
        $url = $_GET['url'];
        $qtd_apostas = max($_GET['qtd_apostas'], 1);
        $numeros_por_jogo = max($_GET['numeros_por_jogo'], 6);
        $qtd_premios_acumulados = 0;
        $qtd_ganhadores = 0;
        
        if (!is_dir($pasta))
        {
            if (!mkdir($pasta))
            {
                $erros[] = 'Falha ao criar o diretorio para guardar os arquivos da Caixa Economica';
            }
        }
        if (is_dir($pasta))
        {
            $conteudo_arquivo_configuracoes = 
                '<?php' . PHP_EOL . 
                    '$url = "' . $url . '";' . PHP_EOL . 
                    '$qtd_apostas = ' . $qtd_apostas . ';' . PHP_EOL . 
                    '$numeros_por_jogo = ' . $numeros_por_jogo . ';' . PHP_EOL . 
                '?>';
            if (!file_put_contents($pasta . "/" . $file, $conteudo_arquivo_configuracoes))
            {
                $erros[] = 'Falha ao gravar as configuracoes';
            }
        }
        
        $numeros_validos = [];
        for ($x = 1; $x <= $total; $x++)
        {
            $numero = sprintf("%0" . strlen($total) . "d", $x);
            $ocorrencias[$numero] = 0;
            $numeros_validos[] = $numero;
        }
        
        if (function_exists('curl_init'))
        {
            $useragent = $_SERVER['HTTP_USER_AGENT'];
            $timeout = 120;
            $dir = dirname(__FILE__);
            $cookie_file = $dir . '/cookies/' . md5($_SERVER['REMOTE_ADDR']) . '.txt';
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_FAILONERROR, true);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
            curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($ch, CURLOPT_ENCODING, "");
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_AUTOREFERER, true);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
            curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
            curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
            curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
            curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com/');
            $content = curl_exec($ch);
            if (curl_errno($ch))
            {
                $erros[] = 'Falha ao consultar o arquivo zip. Erro CURL: "' . curl_error($ch) . '"';
            }
            curl_close($ch);
        }
        else
        {
            $erros[] = 'O PHP não consegue extrair os arquivos da caixa';
        }
        
        if (isset($content))
        {
            file_put_contents($pasta . "/html.zip", $content);
            $zip = new ZipArchive();
            $ok_zip = $zip->open($pasta . "/html.zip");
            if ($ok_zip)
            {
                $zip->extractTo($pasta . "/zip");
                $entradas = scandir($pasta . "/zip");
                foreach ($entradas as $entrada)
                {
                    if ($entrada == "." || $entrada == "..")
                    {
                        continue;
                    }
                    if (is_file($pasta . "/zip/" . $entrada))
                    {
                        if (strtolower(substr($entrada, -4)) == '.htm')
                        {
                            $html = file_get_contents($pasta . "/zip/" . $entrada);
                        }
                        unlink($pasta . "/zip/" . $entrada);
                    }
                    if (is_dir($pasta . "/zip/" . $entrada))
                    {
                        rmdir($pasta . "/zip/" . $entrada);
                    }
                }
                rmdir($pasta . "/zip");
            }
            else
            {
                $erros[] = 'O arquivo ZIP é inválido';
            }
            $zip->close();
        }
        else
        {
            $erros[] = 'O arquivo ZIP está vazio';
        }
        
        if (isset($html))
        {
            $dom_html = new DOMDocument();
            $dom_html->loadHTML($html);
            $dom_tables = $dom_html->getElementsByTagName('table');
            $tabela_invalida = false;
            foreach ($dom_tables as $dom_table)
            {
                $dom_trs = $dom_table->getElementsByTagName('tr');
                foreach ($dom_trs as $indice_linha => $dom_tr)
                {
                    if (!$indice_linha)
                    {
                        $dom_ths = $dom_table->getElementsByTagName('th');
                        foreach ($dom_ths as $indice_coluna => $dom_th)
                        {
                            switch ($indice_coluna)
                            {
                                case 2:
                                case 3:
                                case 4:
                                case 5:
                                case 6:
                                case 7:
                                    if ($dom_th->textContent != ($indice_coluna - 1) . 'ª Dezena')
                                    {
                                        $tabela_invalida = true;
                                    }
                                    break;
                                case 9:
                                    if ($dom_th->textContent != 'Ganhadores_Sena')
                                    {
                                        $tabela_invalida = true;
                                    }
                            }
                        }
                    }
                    else
                    {
                        $dom_tds = $dom_tr->getElementsByTagName('td');
                        if (count($dom_tds) != count($dom_ths))
                        {
                            continue;
                        }
                        $qtd_jogos++;
                        foreach ($dom_tds as $indice_coluna => $dom_td)
                        {
                            switch ($indice_coluna)
                            {
                                case 1:
                                    $data_primeiro_jogo = isset($data_primeiro_jogo) ? $data_primeiro_jogo : $dom_td->textContent;
                                    $data_ultimo_jogo = $dom_td->textContent;
                                    break;
                                case 2:
                                case 3:
                                case 4:
                                case 5:
                                case 6:
                                case 7:
                                    $numero_sorteado = $dom_td->textContent;
                                    if (!in_array($numero_sorteado, $numeros_validos))
                                    {
                                        die('O numero sorteado ' . $numero_sorteado . ' é invalido, concurso ' . ($indice_linha + 1) . ', ' . ($indice_coluna + 1) . '° numero');
                                    }
                                    $ocorrencias[$numero_sorteado]++;
                                    break;
                                case 9:
                                    if ($dom_td->textContent == '0')
                                    {
                                        $qtd_premios_acumulados++;
                                    }
                                    else
                                    {
                                        $qtd_ganhadores += (int)$dom_td->textContent;
                                    }
                                    break;
                            }
                        }
                    }
                }
                if  ($tabela_invalida)
                {
                    continue;
                }
            }
        }
        else
        {
            $erros[] = 'O arquivo HTML não foi localizado no ZIP';
        }
        
        if (!$ocorrencias)
        {
            $erros[] = 'Nenhum resultado foi encontrado';
        }
    }
    ?>
    <!DOCTYPE html>
    <html>
      <head>
        <title>MEGASENA</title>
        <meta charset="utf-8">
        <meta author="danniel.df@hotmail.com.br">
        <style type="text/css">
            body 
            {
                color: #555;
                font-family: verdana, sans-serif;
                font-size: 10px;
                text-align: center;
                background: #fefffe;
                width: 50em;
                margin: auto;
            }
            label
            {
                padding-bottom: 1em;
                display: block;
            }
            p
            {
                text-align: center;
                padding: 1em;
                font-style: italic;
                display: flex;
                justify-content: center;
            }
            h1 
            {
                cursor: pointer;
                color: #096;
            }
            ul 
            {
                display: inline-block;
                text-align: left;
            }
            #form 
            {
                background-color: #096;
                color: #fff;
                font-style: italic;
                font-weight: bold;
                margin: 0 auto 1em auto;
                padding: 1em;
            }
            #erros
            {
                border: solid 1px #ffa5a5;
                background-color: #ffbeb8;
                padding: 1em;
                margin: 0 auto 1em auto;
            }
            #url
            {
                width: 30em;
            }
            #qtd
            {
                width: 3em;
            }
            #btn
            {
                border: solid 1px gray;
                padding: 0.5em 5em;
                margin-top: 1em;
            }
            #ocorrencias
            {
                display: flex;
                flex-wrap: wrap;
                justify-content: center; 
                background-color: #fbfbdf;
                padding: 1em;
                margin: 0 auto 1em auto;
            }
            #ocorrencias div
            {
                border: solid 1px #a00;
                color: #a00;
                background-color: #fff;
                padding: .5em;
                margin-right: .5em;
                margin-bottom: .5em;
            }
        </style>
      </head>
      <body onload="history.pushState('', '', '', '');">
          <h1 onclick="location.assign('.');" title="recarregar">
              MEGASENA
          </h1>
          <div id="form">
            <label style="display: block">
                URL da Caixa com o ZIP de todos resultados:<br/>
                <input type="text" id="url" value="<?php echo $url; ?>" style="text-align: center"/>
            </label>
            <label style="display: block">
                Quantidade de Jogos:<br/>
                <input type="number" id="qtd_apostas" value="<?php echo $qtd_apostas; ?>" min="1" step="1" style="width: 3em; text-align: center"/>
            </label>
            <label style="display: block">
                Quantidade de Números por Jogo:<br/>
                <input type="number" id="numeros_por_jogo" value="<?php echo $numeros_por_jogo; ?>" min="6" max="15" size="3" step="1" style="width: 3em; text-align: center"/>
            </label>
            <input 
                type="button" 
                id="btn" 
                value="Processar" 
                onclick="location.assign('?url=' + document.getElementById('url').value + '&qtd_apostas=' + document.getElementById('qtd_apostas').value + '&numeros_por_jogo=' + document.getElementById('numeros_por_jogo').value);"
            />
          </div>
        <?php
        if ($erros)
        {
            echo '<div id="erros"><ul>';
            foreach ($erros as $erro)
            {
                echo '<li>' . $erro . '</li>';
            }
            echo '</ul></div>';
        }
        if ($ocorrencias)
        {
            echo 
                '<p><b>qtd de ocorrências de cada número:</b></p>' . 
                '<div id="ocorrencias">';
            $ocorrencias_ordenadas = [];
            foreach ($ocorrencias as $numero => $qtd_ocorrencias)
            {
                if (!isset($ocorrencias_ordenadas[$qtd_ocorrencias]))
                {
                    $ocorrencias_ordenadas[$qtd_ocorrencias] = [];
                }
                array_push($ocorrencias_ordenadas[$qtd_ocorrencias], $numero);
            }
            ksort($ocorrencias_ordenadas);
            echo '<table><tr><th>Ocorrências</th><th>Números</th></tr>';
            foreach ($ocorrencias_ordenadas as $qtd_ocorrencias => $numeros)
            {
                echo 
                    '<tr>' .
                        '<td>' . $qtd_ocorrencias . '</td>' .
                        '<td>' .
                            implode(',',  $numeros) .
                        '</td>' .
                    '</tr>';
            }
            echo '</table>';
            echo 
                '</div>' .
                '<p><b>demais estatísticas:</b></p>' . 
                '<ul>' .
                    '<li>Qtd de jogos: <b>' . $qtd_jogos . '</b></li>' .
                    '<li>Qtd de prêmios acumulados: <b>' . sprintf("%01.1f", $qtd_premios_acumulados * 100 / $qtd_jogos) . '%</b></li>' .
                    '<li>Qtd de ganhadores até hoje: <b>' . $qtd_ganhadores . '</b></li>' .
                    '<li>Qtd média de ganhadores por jogo: <b>' . sprintf("%01.2f", $qtd_ganhadores / $qtd_jogos) . '</b></li>' .
                    '<li>Data do primeiro jogo: <b>' . $data_primeiro_jogo . '</b></li>' .
                    '<li>Data do último jogo: <b>' . $data_ultimo_jogo . '</b></li>' .
                '</ul>';
            echo 
                '<div style="padding: 10px; background-color: #cbffaa; border: solid 1px #b9e9bb;">' .
                    '<strong style="display: block; text-align: center; margin-bottom: 30px;">' . 
                        'Apostas sugeridas:' . 
                    '</strong>';
            if ($qtd_apostas && $numeros_por_jogo)
            {
                for ($jogo = 1; $jogo <= $qtd_apostas; $jogo++)
                {
                    $numeros = range(1, $total);
                    while (count($numeros) > $numeros_por_jogo)
                    {
                        $total_ocorrencias = 0;
                        foreach ($ocorrencias as $numero => $ocorrencia)
                        {
                            $numero = (int)$numero;
                            if (in_array($numero, $numeros))
                            {
                                $total_ocorrencias += $ocorrencia;
                            }
                        }
                        $range_numero_eliminado = rand(1, $total_ocorrencias);
                        $total_ocorrencias = 0;
                        foreach ($ocorrencias as $numero => $ocorrencia)
                        {
                            $numero = (int)$numero;
                            $posicao = array_search($numero, $numeros);
                            if ($posicao !== false)
                            {
                                $total_ocorrencias += $ocorrencia;
                                if ($range_numero_eliminado <= $total_ocorrencias)
                                {
                                    unset($numeros[$posicao]);
                                    break;
                                }
                            }
                        }
                    }
                    
                    echo "<div style='padding: 3px; margin-top: 5px;'> Jogo " . str_pad($jogo, strlen($qtd_apostas), "0", STR_PAD_LEFT) . ": ";
                    foreach ($numeros as $numero)
                    {
                        echo '<span style="padding: 3px; margin-right: 3px; background-color: white;">' . str_pad($numero, strlen($total), "0", STR_PAD_LEFT) . '</span>';
                    }
                    echo "</div>";
                }
                echo "<div style='text-align: center; font-weight: bold; font-family: garamound, sans-serif; font-size: 2.5em; color: #d31eac; padding: 15px;'>BOA SORTE!</div>";
            }
            else
            {
                echo '<div style="background: lightgray; color: orange; padding: 3px; text-align: center; border: solid 1px gray; font-weight: bold;">Não foram definidas as apostas</div>';
            }
            echo "</div><br/>";
        }
        ?>
      </body>
    </html>

×
×
  • Create New...