Criando um sistema de loteria


Antes de mais nada: eu falhei!

Não com o sistema, já explico ele, mas falhei com o blog, pois minha ideia era manter ele atualizado, mas não dá pra garantir nada com um bebê em casa, tenho certeza que ninguém vai me condenar por isso.

Só para saberem, eu fiz progressos no meu projeto quase todo dia.

Bom, agora ao que interessa, resolvi criar esse post pois achei muito interessante como resolvi um problema simples.


Eu estou criando um sistema de loteria, daqueles em que o usuário tem que apostar 6 dezenas, de 01 até 60, e ver se ganhou.

Apresentei ao usuário um prompt onde ele era obrigado a preencher essas 6 dezenas, e até ai tudo tranquilo.

O problema foi conferir se ele por acaso não marcou dezenas repetidas na aposta, pois nesse caso ele nunca ganharia já que o resultado da loteria são sempre dezenas diferentes.

Embora eu tende a ser a favor que se você está pagando pra ser burro, deixar você pagar, resolvi que eu quero que os usuários gostem do meu sistema e avise eles disso antes deles apostarem.

Só para esclarecer, não estamos falando de dinheiro de verdade aqui, é tudo uma moeda inventada que vai circular no meu servidor do discord.

E como fazer pra conferir se algum dos 6 integers são iguais?

Acho que antigamente eu faria o velho método "horrível, mas funciona", de colocar manualmente um if para checar cada possibilidade.

O problema é que são muitas checagens que teriam que ser feitas, e isso daria um trabalhão e é muito fácil errar.

Como resolvi então? De uma maneira muito engenhosa:

Criei a seguinte função (está em javascript)

function CheckIfNumberExist(array, dezena){
    if(array.includes(dezena)) return true;
    array.push(dezena);
    return false;
}

Essa função só faz duas coisas: primeira, checa se em uma array já existe um valor, caso exista, ela retorna 'true', caso não exista, ela adiciona o valor e retorna 'false'.

Em seguida, no meu código eu checo todos os números da seguinte forma:

let arrayNums = [num1];
if(CheckIfNumberExist(arrayNums, num2) ||
    CheckIfNumberExist(arrayNums, num3) ||
    CheckIfNumberExist(arrayNums, num4) || 
    CheckIfNumberExist(arrayNums, num5) ||
    CheckIfNumberExist(arrayNums, num6))
{
    // TEM NÚMEROS REPETIDOS
}

Isso vai progressivamente alimentando a array e checando se algum número já é repetido.

Como o if está com o marcador OU ( || ), isso significa que caso o num2, por exemplo, já seja igual ao num1, todas as demais checagens são puladas pois já há pelo menos 1 número repetido no código.

Passar o primeiro número nessa checagem é inútil já que irá sempre retornar false visto que a array está vazia, então vale mais a pena iniciar a array já com o num1.


Só queria compartilhar esse código aqui pois achei uma solução muito boa que tive e que dá para ser reusada em diferentes linguagens e contextos.

Leave a comment

Log in with itch.io to leave a comment.