Bash script primitivas/Loto

+1
0
-1

Bueno, hacía bastante tiempo que no escribía nada en mi bitácora, o blog, como también se le llama ahora. La verdad es que he estado muy liado, y al tener que desempolvar mis conocimientos sobre programación bash script por otro tema, al terminarlo me puse a hacer una simple script más bastante simplón y anecdótico, pero creo que simpático. Como la verdad es que va a parar al baúl de los recuerdos, antes de que llegue allí lo incluyo aquí en mi bitácora por si alguien le es útil, divertido o lo por si lo quiere usar para lo que le de la gana. Bueno, que saludos.

#!/bin/bash

#primitiva.sh ­ Copyright (C) 2008 ubaloie ubaloie PT gmail.com
#
#Para desenmohecer mis conocimientos de la programación bash script, llevaba tiempo sin escribir nada, realicé éste pequeño recordatorio en forma de ejemplo.
#
#Script para generar combinaciones aleatorias para la loto
#
#La forma de usarlos es, desde la línea de comandos: ./primitivas.sh -s 6
#con lo que se generará una primitiva sencilla de 6 bloques. Una forma análoga es: ./primitias.sh --sencilla 6
#
#Para generar una combinación múltiple, por ejemplo de 44 apuestas, se haría: ./primitivas.sh -m 44
#o en su forma alargada: ./primitivas.sh --múltiple 44
#Sí, con acento.
#
#Éste script se puede copiar, modificar, utilizar en todo o en parte, ampliar. Todo ello sin ningún tipo de restricción
#
#Existe una versión mejorada y ampliada para KDE hecha en c++ con las librerías qt. Para verla y descargarla visita ésta página:
# http://ubaloie.atwebpages.com
#
#Bueno, si os hacéis ricos gracias a éste script no dudéis en escribirme y al menos invitarme a una cerveza;-)
#
###################################################################################################################################################

# Funcion que genera combinaciones de primitivas
function funGenerarPrimitivas
{
    #Si el segundo argumento pasado a la función es s, de sencilla, se generan tantos bloques como apuestas solicitadas, entre 1 y 8 ...
    if [ $2 = s ]; then
        #En el primer argumento pasado a la función se pasa el número de apuestas, número de bloques, y se recoge en $1
        bloAGen=$1
        #En las apuestas sencillas siempre se generan seís números por apuesta/bloque
        numAGen=6
    # ...Si se pasa m, de múltiple, como segundo argumento a la función se genera tan sólo un bloque
    elif [ $2 = m ]; then
        bloAGen=1
        #En el primer argumento pasado a la función se pasó el número de apuestas, en múltiples equivalen a Apuestas(Cruces):
        #7(7), 28(8), 44(5), 84(9), 210(10; 462(11)       
        case $1 in
               7)
              numAGen=7 ;;
               28)
              numAGen=8 ;;
               44)
              numAGen=5 ;;
               84)
              numAGen=9 ;;
               210)
              numAGen=10 ;;
               462)
              numAGen=11 ;;
        esac

    fi

    for((conCom=1;conCom<=$bloAGen;conCom++)); do

        cont=0

        #Mientras sea falso que números generados no repetidos sea equivalente a 6 o el número de cruces a poner en el bloque, sigue bucle
        until [ $cont -eq $numAGen ]; do

            #Se genera un número aleatorio entre 0 y 48 más uno, osea, entre 1 y 49
            numAle=$((RANDOM%48+1))

            #Recorremos el array con los número aleatorios generados hasta ahora para no guardar número repetidos
            #Pero si cont tiene el valor no equivalente a 0, distinto; ya que la primera vez el array arrNumAle aún no
            #tendrá ningún número guardado por lo que no puede haber repetición
            let numRep=0
            if [ $cont -ne 0 ]; then

                for((conRep=0;conRep<$cont;conRep++)); do
                   
                    #Si números son equivalentes, número repetido
                    if [ ${arrNumAle[$conRep]} -eq $numAle ]; then
                        let numRep=1
                    fi

                done

            fi

            #Si número no está repetido se guarda en el array y se suma uno al contador del índice del array
            if [ $numRep -eq 0 ]; then
                arrNumAle[$cont]=$numAle     
                let cont=$cont+1     
            fi
   
        done

        #Mostramos la combinación de seís números aleatorios generados, línea a línea por número de apuestas
        comFin=""
        for((conSac=0;conSac<=$numAGen;conSac++)); do
            comFin=$comFin" "${arrNumAle[$conSac]}
        done
        echo $comFin

    done
echo $i
}

#Se coge el primer argumento pasado al script y se comprueba que sea -s, --sencilla, -m ó --múltiple, de otro modo se indica.
#Se hace un or lógico para comprobar que sea uno de las dos opciones válidas
#
#Si son sencillas...
if [ $1 = "-s" ] || [ $1 = "--sencilla" ]; then
   
    #Comprobamos que el número de apuestas en sencilla esté entre 1 y 8, -ge es igual o mayor, -le es igual o menor
    #Se hace un and lógico para comprobar que esté en el rango
    if [ $2 -ge 1 ] && [ $2 -le 8 ]; then
        #Vamos a la función que genera las combinaciones y mandamos el número de apuestas a generar, número de bloques, y la s de sencilla
        funGenerarPrimitivas $2 s
    else
        echo "use ./primitivas.sh [-s] [--sencilla] [1] [2] [3] [4] [5] [6] [7] [8]"
    fi

#Si son múltiples...
elif [ $1 = "-m" ] || [ $1 = "--múltiple" ]; then

    #Comprobamos que el número de apuestas en múltiple está dentro del rango válido: Apuestas 7, 28, 44, 84, 120, 462, que equivalen a una sóla
    #combinación con 7, 8, 5, 9, 10, 11 cruces
    if [ $2 -eq 7 ] || [ $2 -eq 28 ] || [ $2 -eq 44 ] || [ $2 -eq 84 ] || [ $2 -eq 120 ] || [ $2 -eq 462 ]; then
        #Vamos a la función que genera las combinaciones, mandamos el número de apuestas a generar, y la m de múltiple
        funGenerarPrimitivas $2 m
    else
        echo "use ./primitivas.sh [-m] [--múltiple] [7] [28] [44] [84] [120] [462]"
    fi

else
    echo 'Use ./primitivas.sh [-s] [--sencilla] [-m] [--múltiple] apuestas'
fi

# Finalizamos retornando éxito de script.
exit 0

 

Saludos. Mi Blog

Comentarios

Imagen de guisheca

Mmmmm muy interesante, vamos a ver que tal va, lo pruebo y si gano me voy para allá a visitarte jajaja. Soy de Argentina.

Me di una vuelta por tu sitio y me pareció muy bueno, espero puedas seguir adelante.

Un saludo.


hay gente que ocupa un cuchillo para desatornillar un tornillo sólo porque el destornillador está un poco lejos y no quieren ir a buscarlo

"Mi blog"

 


hay gente que ocupa un cuchillo para desatornillar un tornillo sólo porque el destornillador está un poco lejos y no quieren ir a buscarlo

"Mi blog"