[ Sasa_2 @ 10.01.2011. 20:27 ] @
E ovako znaci bacam 2 kockice (simuliram rand brojeve) i to smestam 2 niza e sad treba da proverim ko ima bolju kombinaciju npr. ako imam 1,1,2,3,4,5 i 1,2,2,3,4,5 pobedjuje 2. igrac jer ima par dvojki nasuprot paru jedinica.
MOlim za pomoc.
Hvala
[ Mihajlo Cvetanović @ 10.01.2011. 21:17 ] @
Jesu li to pravila jamba ili neka druga?
[ Sasa_2 @ 10.01.2011. 21:59 ] @
nisu, nego svaka cifra ima tezinu*broj ponavljanja
[ Mihajlo Cvetanović @ 10.01.2011. 22:55 ] @
Pa ako imaš jednačinu koja računa vrednost svake kombinacije, onda je samo upotrebi. Mada, sumnjiva mi je ta logika, težina * broj ponavljanja. Ako ja to dobro shvatam to praktično znači da možeš sve brojeve prosto da sabereš, i to je onda vrednost te kombinacije. Objasni malo detaljnije. Koje su vrednosti ovih kombinacija što si ih naveo, 1,1,2,3,4,5 i 1,2,2,3,4,5? Koja je vrednost kombinacije 1,1,1,1,2,2?
[ Sasa_2 @ 11.01.2011. 14:17 ] @
Izvinjavam se nisam lepo definisao sta me interesuje kada dobijem kombinaciju.
Znaci interesuju me samo kockice kada imam 1 par ili 3 iste kockice za prvog igraca i toliko za drugog igraca. znaci ako imam 1,2,2,5,6 i 1,3,3,5,6 onda je pobedio ovaj koji ima par trojki, analogno za tri iste. a kada imaju iste kombinacije onda pobedjuje onak ciji je zbir veci( ako imam 1,2,2,3,4 i 1,2,2,3,5 pobedjuje drugi jer mu je zbir kockica veci)
[ Mihajlo Cvetanović @ 11.01.2011. 15:10 ] @
Znači učestvuju 5 kockica, a ne 6, i računaju se trojke, parovi, a onda "jača karta". Da li se računa i ful? Da li je ful jači od trojke? Da li je ful s kečevima jači on tri petice? Da li je trojka nečega jača od dva para nečega?
[ Sasa_2 @ 11.01.2011. 17:29 ] @
Znači učestvuju 5 kockica, a ne 6, i računaju se trojke, parovi, a onda "jača karta"


Da li se računa i ful?
Ne, zanimaju me samo dogadjaji kada su pala dva ista ili tri ista broja.(1,1,2,3,4 - 6,6,1,2,3) ili (1,1,1,5,6-6,6,6,1,2)



[ Mihajlo Cvetanović @ 11.01.2011. 20:23 ] @
Znači 3,3,3,1,2 je jače od 2,2,2,4,4, a ovo drugo je jače od 4,4,1,2,3, a ovo treće je jače od 2,2,1,1,3?
[ Sasa_2 @ 11.01.2011. 21:42 ] @
da
[ Mihajlo Cvetanović @ 11.01.2011. 23:22 ] @
A šta je jače, 3,2,2,1,1 ili 4,3,2,2,1? Isti tako, šta je jače, 3,3,3,1,1 ili 3,3,3,2,1? Takođe, šta je jače, 3,3,3,3,4, ili 3,3,3,5,2? Takođe, šta je jače, 3,3,3,2,1 ili 3,3,3,3,1? Obrati pažnju na poslednji slučaj, pitanje je kako se tretira četvrta trojka.

Ako je druga kombinacija jača u sva četiri slučaja onda sam skapirao. Za svaku kombinaciju treba da izbrojiš pojavljivanje svakog broja, i to da smestiš u poseban niz. Recimo za kombinaciju 3,3,3,2,1 napravio bi niz int count[7] = {0, 1, 1, 3, 0, 0, 0}; Dužina niza je sedam jer imaš brojeve od jedan do šest, ali prvi element niza prosto ignorišeš (da se ne bi smarao sa oduzimanjem indeksa za jedan). Kad formiraš niz count za obe kombinacije koje porediš (count1 i count2) onda kreneš od kraja niza, for (int x=6; x>0; x--), i porediš pojavljivanja pomoću sledeća tri pravila:

1) Ako je count1[x] > 2 ili count2[x] > 2, a onaj drugi nije veći od 2 onda imaš pobednika, i prekini dalje sa pretragom. Ako su oba veća od 2, ali jedan je veći od drugog, onda si pronašao najjaču pojedinačnu brojku (to ti je onaj četvrti primer s početka). Ako su oba veća od 2 i jednaka onda nastavljaš s petljom, ali od sad gledaš samo treću tačku (s trojkama i parovima si završio). Ako je od ranije u trećoj tački već dobijena najjača pojedinačna brojka onda već imaš pobednika, i prekini dalje s radom.

2) Ako je count1[x] == 2 ili count2[x] == 2 a onaj drugi je manji od 2 onda imaš pobednika, i prekini dalje sa pretragom. Ako su oba jednaka 2 onda gledaš dalje, ali samo prvu i treću tačku (s parovima si završio).

3) Ako do sada nije određena najjača pojedinačna brojka, i jedan od count1[x] i count2[x] je veći od drugog, onda zapamti koji je to veći, i u sledećim iteracijama ignoriši ovaj korak

Ako si završio petlju bez pobednika, ali si pronašao najjaču pojedinačnu brojku, onda imaš pobednika. Ako nema najjače pojedinačne brojke onda su dva niza istovetna.
[ Sasa_2 @ 12.01.2011. 18:43 ] @
VIDI SE DA RAZMISLAJMO ISTO :)


evo ja uradio u JAVI evo kod nadam se da mozes da se snadjes ali mislim da sam negde pogresio jer nesto ne stima :(

Code:
public void actionPerformed(ActionEvent arg0) { /*klik na dugme*/
        
        if(arg0.getSource()==Bacanje)
        {
            for(int t=0; t<10;t++)
            {
                for(int i=0; i<7;i++) /* reset niza gde cuvam broj pojavljivanja*/
                {
                a[i]=0;
                b[i]=0;
                }
            for(int i=0; i<5; i++)
            {
            kockiceA[i].setText(String.valueOf((int)(6*Math.random() + 1)));
            }
            for(int i=0; i<5; i++)
            {
            kockiceB[i].setText(String.valueOf((int)(6*Math.random() + 1)));
            }
            for(int i=0; i<5; i++)
            {
            kockiceC[i].setText(String.valueOf((int)(6*Math.random() + 1)));
            }
    
            for(int i=0; i<5; i++)
            {
                if(1==Integer.parseInt(kockiceA[i].getText()))
                    a[1]++;
                if(2==Integer.parseInt(kockiceA[i].getText()))
                    a[2]++;
                if(3==Integer.parseInt(kockiceA[i].getText()))
                    a[3]++;
                if(4==Integer.parseInt(kockiceA[i].getText()))
                    a[4]++;
                if(5==Integer.parseInt(kockiceA[i].getText()))
                    a[5]++;
                if(6==Integer.parseInt(kockiceA[i].getText()))
                    a[6]++;
                if(1==Integer.parseInt(kockiceB[i].getText()))
                    b[1]++;
                if(2==Integer.parseInt(kockiceB[i].getText()))
                    b[2]++;
                if(3==Integer.parseInt(kockiceB[i].getText()))
                    b[3]++;
                if(4==Integer.parseInt(kockiceB[i].getText()))
                    b[4]++;
                if(5==Integer.parseInt(kockiceB[i].getText()))
                    b[5]++;
                if(6==Integer.parseInt(kockiceB[i].getText()))
                    b[6]++;
            }---------------------------------------------------------------------------------------------------------------------------------
                             int fleg1=0, fleg2=0;;
                for(brojac1=6; brojac1>0; brojac1--)
                {
                    if(a[brojac1]==2)
                    {
                        fleg1=1;
                        break;
                    }
                }
                for(brojac2=6; brojac2>0; brojac2--)
                {
                    if(b[brojac2]==2)
                    {
                        fleg2=1;
                        break;
                    }
                }
            if(fleg1==0 || fleg2==0 || fleg1+fleg2==0)
                nereseno++;
            if(fleg2==1 && fleg1==1)
                {
                    
                    if(brojac1>brojac2)
                        suma2A=suma2A+1;
                     if(brojac1<brojac2)
                        suma2B=suma2B+1;
                     if(brojac1==brojac2)                                                                                          /*ovde je greska*/
                    {                                                             
                        int pom1=0, pom2=0;
                        for(int i=0; i<5; i++)
                        {
                        pom1=pom1+ Integer.parseInt(kockiceA[i].getText());
                        pom2=pom2+ Integer.parseInt(kockiceB[i].getText());
                        }
                        if(pom1==pom2)
                            nereseno++;
                        if(pom1>pom2)
                            sumaA=suma2A+1;
                        
                        if(pom1<pom2)
                            sumaB=suma2B+1;
                    }
                        
                        
                }
        ------------------------------------------------------------------------------------------------------------------------------------------------------------------
            for(int i=1; i<6;i++)
                System.out.println(a[i]);
                System.out.println();                             /*ispis u konzoli*/
                for(int i=1; i<6;i++)
                    System.out.println(b[i]);
                System.out.println();
                System.out.println("A= "+ sumaA);
                System.out.println("B= "+ sumaB);
                System.out.println("nereseno= "+ nereseno);
                for(int i=0; i<7; i++)
                {
                    a[i]=0;
                    b[i]=0;
                }
        
                
                }
        
            System.out.println("pobedio A= "+suma2A+" pobedio B= "+suma2B+" nereseno= "+nereseno); /*krajnji rezultat*/
            
    
            
            
    }    
        
        }
}


[Ovu poruku je menjao Mihajlo Cvetanović dana 12.01.2011. u 20:53 GMT+1]
[ Sasa_2 @ 12.01.2011. 18:51 ] @
ovaj deo koda gde sam stavio --------------- u tom delu izracunavam ko je pobednik ali mislim da imam greske
[ ventura @ 12.01.2011. 19:22 ] @
Code:

for(int i=0; i<5; i++)
    {
        (String.valueOf((int)(6*Math.random() + 1)));
    }

for(int i=0; i<5; i++)
    {
        kockiceB.setText(String.valueOf((int)(6*Math.random() + 1)));
    }

for(int i=0; i<5; i++)
    {
        kockiceC.setText(String.valueOf((int)(6*Math.random() + 1)));
    }


Ovde imaš ozbiljan problem, naime, koristiš Math.random u petlji sa default seedom (milisekunde/unix time) i dešavaće ti se da dobijaš isti seed odnosno isti broj na outputu a za koji ti misliš da je random... Izlaz će ti biti npr ovakav:
Kockica A: 1 1 1 2 2
Kockica B: 2 2 6 6 6
Kockica C: 5 5 5 5 1

('random' brojevi se ponavljaju sve dok je seed isti)

Rešenje tog problema je da smisliš nešto pametnije za seed, ili jednostavnija varijanta, da staviš neki minimalni sleep u petlje, čisto da bi bio siguran da ćeš dobiti različit seed prilikom svake iteracije.
[ Sasa_2 @ 12.01.2011. 19:35 ] @
nije to problem, dobijam dobre brojeve, nego je problem u tome sto nekako ne izracunava dobro ko je pobedio
[ Mihajlo Cvetanović @ 12.01.2011. 20:11 ] @
Prva stvar, ako već koristiš Javu znači da programski jezik C nema veze s temom. Mislim da je bolje da se tema prebaci u Art of Programming.

Drugo, umesto ovog koda

Code:
                if(1==Integer.parseInt(kockiceA[i].getText()))
                    a[1]++;
                if(2==Integer.parseInt(kockiceA[i].getText()))
                    a[2]++;
                if(3==Integer.parseInt(kockiceA[i].getText()))
                    a[3]++;
                if(4==Integer.parseInt(kockiceA[i].getText()))
                    a[4]++;
                if(5==Integer.parseInt(kockiceA[i].getText()))
                    a[5]++;
                if(6==Integer.parseInt(kockiceA[i].getText()))
                    a[6]++;

može samo jedna linija:
Code:
a[Integer.parseInt(kockiceA[i].getText())]++;

Treće, ne razumem ovu logiku sa sumaA, sumaB, i nereseno. Cilj je valjda proglasiti pobednika, a ne prikazati korisniku nekakva tri broja.

Četvrto, iako smo počeli isto, i izbrojali sve brojke, ono šta posle radimo sa tim brojkama nam se razlikuje. Moj algoritam ne traži pobednika posredstvom nekih suma i brojača, nego se traži direktno. Možeš li da objasniš logiku svog algoritma od tačke kad se završi prebrojavanje svih brojki?
[ ventura @ 12.01.2011. 21:15 ] @
Citat:
Sasa_2: nije to problem, dobijam dobre brojeve, nego je problem u tome sto nekako ne izracunava dobro ko je pobedio

Probaj svoj kod na malo bržem računaru pa ćeš videti o čemu pričam.

Odnosno, da bi testirao random uradi recimo 60.000 izvlačenja i napravi analizu izvučenih brojeva. Ako imaš brojeve od 1 do 6 (standardna kockica) svaki bi trebao da se javi otprilike po 10.000 puta, gore dole nekoliko procenata... Međutim ako ti random seed ne valja, to ćeš videti u podacima...

[Ovu poruku je menjao ventura dana 12.01.2011. u 22:30 GMT+1]
[ Mihajlo Cvetanović @ 12.01.2011. 21:48 ] @
Venturo, to o čemu ti pričaš se ispoljava kad neko poziva srand(time()) svaki put pre rand(). Ako se srand pozove samo jednom na početku rada onda nema tog problema. Svaki sledeći slučajan broj zavisi isključivo od nekog internog stanja i ni od čega više, pa ni od intervala između pozivanja rand funkcije.
[ Sasa_2 @ 12.01.2011. 22:20 ] @
posto moram da zavrsim do 20tog januara pa je kod grub


Igrač A ima 5 belih, a igrač B ima 5 crvenih kockica. Istovremeno se bacaju
sve kockice. Pobeđuje onaj koji ima bolju «kombinaciju», npr. ako A ima
1,2,2,5,6, a B ima 1,4,4,5,6, onda pobeđuje B. Ako su kombinacije iste pobeđuje
onaj koji ima veći zbir, a inače je ta partija nerešena. Modelirati 1000
ponavljanja ige i kao rezultat dati i statističke podatke – koliko je pobeda
ostvareno kad su oba igrača imala samo po par istih brojeva, koliko sa po tri
ista broja, ... koliko nerešenih partija.
ceo tekst zadatka


nadam se da je sad jasnije s tim da moram da imam i treceg igraca samo sto jos nisam dobio njegove kockice jer izgleda bice specificne najverovatnije (3,3,5,5,6)
[ Mihajlo Cvetanović @ 12.01.2011. 22:44 ] @
Da li je ovo kompletan tekst zadatka? Ovde se ne precizira šta je tačno bolja "kombinacija". Zašto onda ful ne bi bio jači od trilinga, ili kare od fula. Istovremeno, šta tačno znači kad su kombinacije iste? Takođe, ti si na početku spominjao jaču pojedinačnu brojku, ali sad ispada da na kraju odlučuje zbir umesto pojedinačne brojke. Ispada da sam džabe pisao rešenje, jer nije lepo postavljen zadatak. Gunđ.
[ Sasa_2 @ 12.01.2011. 22:58 ] @
Pa dobro je tvoje resenje, nisi dzabe pisao, ja imam 1000 partija, sto je isto kao da imam 1 partiju sa ove sume mi odredjuju samo koliko je ko pobedio, razumes?
gleda se ovako ako imam par istih kod igraca A i par istih kod igraca B onda samo gledam koji je par veci i njemu pririsem pobedu a ako su isti parovi onda sumiram sve brojeve pa ko ima vecu sumu je pobednik.
[ ventura @ 12.01.2011. 23:19 ] @
Citat:
Mihajlo Cvetanović: Venturo, to o čemu ti pričaš se ispoljava kad neko poziva srand(time()) svaki put pre rand(). Ako se srand pozove samo jednom na početku rada onda nema tog problema. Svaki sledeći slučajan broj zavisi isključivo od nekog internog stanja i ni od čega više, pa ni od intervala između pozivanja rand funkcije.

pseudorandom generatori za seed obično koriste vreme u milisekundama (unix time, nema tu nekih specijalnih internih stanja), i postoji nekoliko načina da se to zaobiđe:

1. Custom seed (vreme+neki interni broj (id procesora/ploče)+temperatura+neki drugi interni parametar ukoliko može da se sazna)
2. Sleep između dva pozivanja ukoliko su u petlji
3. Konstantan rad rnd generatora i uzimanje broja samo kad ti treba
4. Custom random funkcija
[ Sasa_2 @ 13.01.2011. 10:11 ] @
mozemo li da se drzimo teme, jer mi random f-ja radi dobro kao sto sam vec rekao