IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 1 - Testování algoritmu pro podvod s ruletou

Každý člověk, který se pohybuje na internetu, určitě narazil na stránku, která se jej bude snažit zlákat k sázení v ruletě a ukazovat mu šanci jak se snadno stát milionářem. Na tuto stránku jsem narazil i já. Rozhodl jsem se, že bez peněz a rizika vyzkouším jak tento manuál funguje v praxi.

Spustit si online ruletu a zkoušet mi ale přišlo velmi časově náročné a proto jsem se rozhodl, že si celý test naprogramuji.

Pro programování jsem se rozhodl využít programovací jazyk Java. Na výstup bude stačit konzole. Celý program bude značně zjednodušený a bude umět pouze tento jeden experiment. Obsahuje ale určitou strukturu a tak by neměl být problém jej rozšířit a použít dál.

Třída Ruleta, která reprezentuje virtuální ruletu, vypadá takto:

public class Ruleta {
    private int padleCislo;
    private Random nahoda;

    public Ruleta(){
        nahoda = new Random();
    }

    public void zatoc(){
        this.padleCislo = nahoda.nextInt(37);
    }
    public boolean vsadNaBarvu(String barva){
        if(barva.equals(vratBarvu())){
            return true;
        }
        else{
            return false;
        }
    }
    private String vratBarvu(){
        if(padleCislo <= 18 && padleCislo != 0){
            return "cervena";
        }
        else{
            return "cerna";
        }

    }
}

Ruleta funguje následovně. Vytvoříme si její instanci. Pro zatočení ruletou zavoláme metodu zatoc(). Vygeneruje se nám náhodně číslo v intervalu <0;36>, reprezentující jednu položku rulety. Metoda vsadNaBarvu() vrací true v případě, že jsme vsadili na správnou barvu a false v případě, že jsme se mýlili. Pro zjednodušení jsem si určil, že čísla z intervalu <1;18> budou červená a čísla z intervalu <19;36> budou černá. Neodpovídá to sice pravidlům rulety, ale pravděpodobnost zůstává stejná.

Třída hra reprezentuje naši hru. Obsahuje instanci rulety a naše herní peníze.

public class Hra {

    private int penize;
    private Ruleta ruleta;
    public Hra(){
        this.penize = 1000;
        this.ruleta = new Ruleta();

    }

    public boolean vsadNaBarvu(int vsazenaCastka, String barva){
            if(this.penize < vsazenaCastka){
                return true;
            }
            this.penize -= vsazenaCastka;
            ruleta.zatoc();
            if(ruleta.vsadNaBarvu(barva)){
                this.penize += (vsazenaCastka*2);
                return true;
            }
            else{
                return false;
            }

    }

    public int vratPenize(){
        return this.penize;
    }

}

Třída obsahuje metody vsadNaBarvu() a vratPenize().

Metoda vsadNaBarvu() slouží k vsazení částky. Předáváme částku, kterou hodláme vsadit a barvu. Metoda vrací true v případě, že jsme vyhráli a false v případě, že jsme prohráli. Metoda vrací true i v případě, že nelze tolik peněz vsadit. Vysvětlím později.

Metoda vratPenize() vrací naše jmění.

A jdeme do finále. Hlavní třída našeho projektu, Ruletatest, bude provádět samotný test.

public class RuletaTest {
    Hra hra;

    public RuletaTest(){
        hra = new Hra();

        int vsazenaCastka = 10;

        while(hra.vratPenize() >= 10){
            System.out.println("Vsadil jste "+vsazenaCastka);
            if(hra.vsadNaBarvu(vsazenaCastka, "cervena")){
                vsazenaCastka = 10;
            }
            else{
                vsazenaCastka = vsazenaCastka*2;
            }
            System.out.println("A teď máte "+hra.vratPenize());
        }


    }
    public static void main(String[] args) {
        new RuletaTest();
    }
}

Celý test funguje přesně podle návodu, který můžete najít například na Google po zadání klíčových slov "Jak vyhrát v ruletě". Pokud se vám nechce hledat, tak jej naleznete tady. Návod spočívá v tom, že si na začátek zvolíme nějakou částku, kterou budeme sázet. Například 100 Kč. Když prohrajeme, tak částku zdvojnásobíme a jsme na 200kč. Když prohrajeme, tak částku zas zdvojnásobíme a jsme na 400Kč. A hle! Vyhráli jsme. Jsme v plusu.

Když se budeme striktně držet návodu, budeme postupovat asi takto. Na začátku si zvolíme vsazenou částku. V našem případě to bude 10 jednotek. V algoritmu je vsazená částka v proměnné vsazenaCastka. A nyní budeme provádět stále dokola a dokola sázecí cyklus. Budeme sázet tak dlouho, dokud budeme mít alespoň těch 10 jednotek, které jsou potřeba k minimální sázce. Napíšeme si tedy cyklus, který bude vypadat takto.

while(hra.vratPenize() >= 10){

            System.out.println("Vsadil jste "+vsazenaCastka);
            if(hra.vsadNaBarvu(vsazenaCastka, "cervena")){
                vsazenaCastka = 10;
            }
            else{
                vsazenaCastka = vsazenaCastka*2;
            }
            System.out.println("A teď máte "+hra.vratPenize());
}

Cyklus nejdříve vypíše kolik sázíme a poté tuto částku vsadí. Podle návodu sázíme stále dokola na stejnou barvu, protože jedna barva nemůže padat do nekonečna. V případě výhry musíme vsadit znovu základní částku. V případě prohry vsadíme přesně dvojnásobek vsazené částky. Takto postupujeme stále dokola. Můj algoritmus rozšiřuje původní v tom, že pokud již nemůžeme vsadit tolik peněz, tak se znovu vrátíme k výchozí částce a pokusíme se začít znovu.

Dost bylo programování, jdeme z toho dostat nějaký závěr. Když necháte proběhnout tento algoritmus, zjistíte, že se dříve nebo později dostanete na nulu. Proč to tak je? Protože pravděpodobnost prostě pracuje. Z krátkodobého hlediska se vám bude velmi dařit a peníze budou pomalu přibývat. Dříve nebo později ale nastane situace, kdy nesprávná barva prostě padne vícekrát za sebou a vy se neustálým zdvojnásobováním vsazené částky dostanete na tak vysokou částku, že ji prostě nemůžete vsadit.

Algoritmus pro podvod s ruletou - Ostatní algoritmy

Došli jsme tedy k závěru, že tento návod je podvod a rozhodně jej nikdy nezkoušejte v praxi! Schválně si zkuste projít výsledný výpis algoritmu. Uvidíte že částka se bude slibně zvedat, a vy si budete myslet, že zkrátka nemůžete prohrát. Jak jsem ale napsal výše, pravděpodobnost začne fungovat a šance na prohru roste úměrně s počtem sázek.

V další lekci, Úvod do analýzy přirozeného jazyka, si uděláme úvod do syntaktické a sémantické analýzy přirozených jazyků, spadající do oblasti umělé inteligence.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 78x (18.52 kB)
Aplikace je včetně zdrojových kódů

 

Všechny články v sekci
Ostatní algoritmy
Přeskočit článek
(nedoporučujeme)
Úvod do analýzy přirozeného jazyka
Článek pro vás napsal martinkobelka
Avatar
Uživatelské hodnocení:
8 hlasů
Aktivity