shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script-pt] Gerar numeros aleatórios e comparar com BD


From: Rodrigo Tenorio
Subject: Re: [shell-script-pt] Gerar numeros aleatórios e comparar com BD
Date: Sun, 3 Jul 2022 23:52:29 -0300

Deixei passar um detalhe importante.
Depois de gerar as seis dezenas, antes de entrar nas validações, tem que ordenar os números de maneira crescente.
Acho que já uns emails que trataram desse detalhe aqui na lista.

Em dom, 3 de jul de 2022 23:37, Rodrigo Tenorio <rodrigo.boechat.tenorio@gmail.com> escreveu:
Pelo que entendi, a ideia é simples.

# Infelizmente não estou com condições de escrever um script e testar. Pc morreu de velho.

Vamos lá.
Gere seis dezenas concatenadas por espaço numa variável. Ex:

desenasGeradas="10 14 17 15 19 13"

Depois faça um grep/sed/awk no seu "db.txt" para ver se retorna alguma linha. Algo como:

sed -e "/$desenasGeradas/" db.txt

Se retornar, alguma linha faça um for com ifs=- (ou awk, ou sed) para pegar o 3 campo da linha retornada e o compare com o conteúdo da variável (de preferência removendo todos os espaços dos dois valores comparados). Algo como:

[[ "$campoSemEspaços[2]" -eq "$desenasGeradasSemEspaços" ]]

Se a comparação não for verdadeira, valida se a sequência de dezenas já foi gerada. Ex:

[[ "$campoSemEspaços[2]" -eq "$desenasGeradasSemEspaços" ]] || grep "$desenasGeradas" "geradas.txt"

Se não retornar valor:

echo "$desenasGeradas" >> "geradas.txt"

#######
Se de cara ela não for encontrada lá na primeira pesquisa no db.txt, valida se ela existe no geradas.txt.

Não existindo em nenhum dos dois, insere no geradas.txt.

Falhando nessas validações, gere outra sequência de seis dezenas diferente e volte ao início das validações.

Espero ter ajudado.


Em dom, 3 de jul de 2022 13:18, Robson Alexandre <alexandrerobson@gmail.com> escreveu:
Prezado Dito,

para verificar se a string aleatória gerada já existe na sua base de dados você precisa gerar todas as combinações possíveis com as quantidades de dezenas geradas de 6 em 6, visto que sua base de dados os resultados são 6 dezenas. Depois disso seria realizar um grep -f DB < COMBINAÇÕES pra saber se o resultado gerado já existe na base de dados.
Vamos a um exemplo, considerando que sua base de dados esteja em ordem crescente e a string gerada também
Gerando quantidade de dezenas maior do que 6, será necessário analisar todas as combinações possíveis:
7 dezenas: 01 02 03 04 05 06 07
Combinações:
01 02 03 04 05 06
01 02 03 04 05 07
01 02 03 04 06 07
01 02 03 05 06 07
e assim por diante...


Atenciosamente,

Robson Alexandre

Em sáb., 2 de jul. de 2022 às 14:54, Dito Ramos <diramos@uol.com.br> escreveu:
Mestres, boa tarde.
Fiz um script em bash para gerar números aleatórios, para aposta na megasena.
Ex. de uso:

#./gerajogos.sh 3 6, onde $1 é a qtd de jogos e $2 a qtde de dezenas.

Ex. saida:

14 17 23 39 57 58
02 16 24 38 49 56
03 15 26 36 37 41

O resultado é gravado no arquivo jogos.tx

Tenho um BD atualizado, tipo .txt com todos os resultados dos sorteios até agora, no seguinte formato:

1 - 11/03/1996 - 04 05 30 33 41 52 - 0,00 - 0
2 - 18/03/1996 - 09 37 39 41 43 49 - 2.307.162,23 - 1
3 - 25/03/1996 - 10 11 29 30 36 47 - 391.192,51 - 2
...
...
2494 - 25/06/2022 - 01 04 10 22 53 54 - 78.763.087,85 - 1
2495 - 28/06/2022 - 08 12 14 30 33 41 - 0,00 - 0

Onde as dezenas sorteadas dos prêmios estão no campo 3 da tabela.

Pois bem. Preciso da ajuda dos mestres para o seguinte:
No script que gera os jogos aleatórios, incluir as seguintes condições:
1 - Quando gera as dezenas para aposta, verificar se cada uma já existe na relação que está sendo gerada. Se não existir, armazena e prossegue com o laço, gerando as demais, de modo que não se repita jogos.
2 - Comparar se o jogo que está sendo gerado com o BD de resultados. Em caso de existir Se não existir, armazena e prossegue com o laço, gerando as demais, de modo que não se repita jogos.

RESUMINDO: Os jogos não podem ser repetidos, nem coincidirem com resultado já sorteado.
Já tentei de tudo aqui, mas não cheguei a uma solução.

Segue o script gerajogos.sh para avaliação.

Grato desde já.

#!/bin/bash
rm jogosformatado.txt jogosformatado1.txt jogos.txt
qtdjogos=$1
qtddezenas=$2
metadeqtddezenas=$(echo "$qtddezenas"/2 | bc)
dezezenasasereremexcluidas=$(shuf -i 1-$qtddezenas -n 1)
n=1
while (( $n <= $qtdjogos ))
do
        if [ $n -lt 10 ]
                then
                echo -n "Jogo "0"$n: "
        else
                echo -n "Jogo $n: "     
        fi
        n=$(( n+1 ))
        jogos1a30=$(shuf -i 1-30 -n $metadeqtddezenas | tr -d ',e' | tr -s ' ' | sed 's/ / \n/g' | sort -n | while read a; do printf '%02d ' $a ; done)
        jogos31a60=$(shuf -i 31-60 -n $metadeqtddezenas | tr -d ',e' | tr -s ' ' | sed 's/ / \n/g' | sort -n | while read a; do printf '%02d ' $a ; done)
        echo $jogos1a30 $jogos31a60
        done >> jogosformatado.txt
        cat jogosformatado.txt | awk '{$1="";$2=""; print $0}' | sed 's/^ \+//' > jogosformatado1.txt
        cp jogosformatado1.txt jogos.txt
        chown www-data jogos.txt
        chgrp www-data jogos.txt
        cat jogos.txt

_______________________________________________
Lista brasileira de usuários de shell script
Endereço de e-mail da lista: shell-script-pt@nongnu.org
Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/

NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.
_______________________________________________
Lista brasileira de usuários de shell script
Endereço de e-mail da lista: shell-script-pt@nongnu.org
Para se inscrever ou desinscrever acesse: https://lists.nongnu.org/mailman/listinfo/shell-script-pt
Para ver os arquivos da lista (mensagens anteriores) e pesquisar nelas, acesse https://lists.nongnu.org/archive/html/shell-script-pt/

NOTA: A lista anterior, no Yahoo Groups, foi *desativada*. Por favor utilize somente esta.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]