crs12decoder Posted June 11, 2013 Report Posted June 11, 2013 (edited) Daca tot a inceput frenezia potului mare, ar fi interesant de vazut ce inseamna 6/49 pentru a-i face pe oameni sa realizeze sansele de castig.Scrieti un cod in C sau PHP care simuleaza intregul joc 6/49.Prima oara generati 6 numere random cu valori cuprinse intre 1 si 49, acestea reprezentand extragerea.Generati un numar N de "bilete" cu numere random si comparati-le cu biletul castigator.Afisati numarul de bilete castigatoare care au nimerit 3,4,5,6 numere. (Doar numarul lor, nu si biletele).Atentie!Nu conteaza ordinea.Daca numerele extrase sunt 2,3,7,9,12,4 ; biletul 3,2,9,12,7,4 este considerat castigator.Si, in mod evident, nu generati bilete care continin acelasi numar de mai multe ori. Ex: 3,3,4,2,7,3.Reprezentarea rezultatelor ar putea fi ceva de genul:Numar de bilete generate: NNumar de bilete cu 3 nr. castigatoare: (numarul)Numar de bilete cu 4 nr. castigatoare: (numarul)Numar de bilete cu 5 nr. castigatoare: (numarul)Numar de bilete cu 6 nr. castigatoare: (numarul)Numerele extrase: 4, 19, 21, 32 , 1, 7Biletele cu 6 nr. castigatoare: 19, 32, 1, 4, 21, 7 ; 7, 19, 32, 1, 4, 21 ..... Edited June 11, 2013 by crs12decoder Quote
passfig Posted June 12, 2013 Report Posted June 12, 2013 (edited) Test pentru 20 de milioane de bilete:#include <iostream>#include <stdlib.h>using namespace std;int castigator[6],castiguri[7],matrice[720][6],linie=0;long long RANDOM_USE;void inregistrare_castigator(int v[6]){ for(int i=0;i<6;i++)matrice[linie][i]=v[i]; linie ++;}int check_valid(int v[6], int x, int n){ for(int i=0;i<n;i++) if (v[i]==x || x==0)return 0; return 1;}void generare(int v[6]){ int i=0,x; srand(RANDOM_USE); RANDOM_USE++; do { x = rand()%50; if(x!=0 && check_valid(v,x,i)){v[i]=x; i++;} }while(i<6);}int check_castig (int v[6]){ int nr = 0; for(int i=0;i<6;i++) for(int j=0;j<6;j++)if(castigator[i] == v[j]){nr++; j=6;} castiguri[nr-1]++; if(nr==6)inregistrare_castigator(v);}void afisare(int v[6]){ for(int i=0;i<6;i++)cout<<" "<<v[i]<<" "; cout<<"\n";}int main(){ int i=0,j,x,v[6]; long long n; srand(time(NULL)); RANDOM_USE = rand()%20; generare(castigator); srand(RANDOM_USE); RANDOM_USE++; cout<<"Numarul de bilete jucate: "; cin>>n; for(i=0;i<n;i++) { generare(v); //afisare(v); cout<<endl; check_castig(v); } cout<<"Numar de bilete cu 3 nr. castigatoare: "<<castiguri[2]<<"\n"; cout<<"Numar de bilete cu 4 nr. castigatoare: "<<castiguri[3]<<"\n"; cout<<"Numar de bilete cu 5 nr. castigatoare: "<<castiguri[4]<<"\n"; cout<<"Numar de bilete cu 6 nr. castigatoare: "<<castiguri[5]<<"\n"; cout<<"Numere extrase: "; afisare(castigator); cout<<"\n"; if(linie!=0) { cout<<"Biletele cu 6 nr. castigatoare:\n"; for(i=0;i<linie;i++) { for(j=0;j<6;j++)cout<<matrice[i][j]<<" "; cout<<"\n"; } } return 0;}Mersi pentru challange! Edited June 12, 2013 by passfig Quote
u0m3 Posted June 15, 2013 Report Posted June 15, 2013 #!/usr/bin/env python2import randomdef longest_common_subset(s1, s2): m = [[0] * (1 + len(s2)) for i in xrange(1 + len(s1))] longest, x_longest = 0, 0 for x in xrange(1, 1 + len(s1)): for y in xrange(1, 1 + len(s2)): if s1[x - 1] == s2[y - 1]: m[x][y] = m[x - 1][y - 1] + 1 if m[x][y] > longest: longest = m[x][y] x_longest = x else: m[x][y] = 0 return s1[x_longest - longest: x_longest]number_of_sold_tickets = random.randint(10, 10000000)print "Sold", number_of_sold_tickets, "tickets..."valid_numbers = range(1, 50) # alternative [x+1 for x in range(0, 49)]current_drown_numbers = sorted(random.sample(valid_numbers, 6))print "Numbers drown:", current_drown_numberssold_tickets = {}print "Preparing sold tickets...",for i in range(0, number_of_sold_tickets): sold_tickets[i] = sorted(random.sample(valid_numbers, 6))print "Done"winners = {}print "Searching for winners...",for i in sold_tickets: m = longest_common_subset(sold_tickets[i], valid_numbers) l = len(m) if l not in winners: winners[l] = 0 winners[l] += 1print "Done"for l in winners: print winners[l], "people guessed", l, "numbers."Cu mentiunea ca longest_common_subset, nu e original a mea. Quote
H3xoR Posted June 15, 2013 Report Posted June 15, 2013 (edited) #include <iostream>#include <cstdlib>#include <ctime>using namespace std;int nr_c[6], bil_c[7], bilet[6], n, nr, k;bool Exista(int a[], int x) { for (int i = 0; i < 6; i++) if (a[i] == x) return true; return false;}void Bilet_Nou(int a[], int b[]) { for (int i = 0; i < 6; i++) { nr = rand() % 50; if (Exista(a, nr)) i--; else { a[i] = nr; if (Exista(b, nr)) k++; } }}int main(void) { cout << "n = ", cin >> n; srand((unsigned int)time(NULL)); Bilet_Nou(nr_c, nr_c); for (int i = 0; i < n; i++) { for (int i = 0; i < 6; i++) bilet[i] = 0; k = 0; Bilet_Nou(bilet, nr_c); bil_c[k]++; } for (int i = 3; i < 7; i++) cout << "Bilete cu " << i << " nr. norocoase: " << bil_c[i] << endl; return 0;} Edited June 15, 2013 by H3xoR Quote
eusimplu Posted June 15, 2013 Report Posted June 15, 2013 Versiunea simpla:<?php$jucate = (int)$_GET['jucate'];$castigatoare = genereaza();for ($i=1; $i <= $jucate; $i++) { $bilete[$i] = genereaza(); $diff = array_diff($castigatoare, $bilete[$i]); for ($w=3; $w <= 6; $w++) { if( count($diff) == (6-$w) ) $win[$w][] = $bilete[$i]; }}echo 'Bilete totale: <b>'.number_format($jucate,0,'.','.').'</b><br/>';echo 'Numere extrase: <b>'.implode($castigatoare,' ').'</b><br/><br/>';for ($i=3; $i <= 6; $i++) { echo 'Numar de bilete cu '.$i.' nr castigatoare: <b>'.number_format(count($win[$i]),0,'.','.').'</b><br/>'; }function genereaza(){ while (count($nr) != 6) { $nr[] = rand(1,49); $nr = array_unique($nr); } return $nr;}?>Si cu afisarea celor 6 numere castigatoare:<?phpini_set('memory_limit', '-1');ini_set('max_execution_time', '-1');$jucate = (int)$_GET['jucate'];$castigatoare = genereaza();for ($i=1; $i <= $jucate; $i++) { $bilete[$i] = genereaza(); $diff = array_diff($castigatoare, $bilete[$i]); for ($w=3; $w <= 6; $w++) { if( count($diff) == (6-$w) ) $win[$w][] = $bilete[$i]; }}echo 'Bilete totale: <b>'.number_format($jucate,0,'.','.').'</b><br/>';echo 'Numere extrase: <b>'.implode($castigatoare,' ').'</b><br/>';for ($i=3; $i <= 6; $i++) { echo 'Numar de bilete cu '.$i.' nr castigatoare: <b>'.number_format(count($win[$i]),0,'.','.').'</b><br/>'; if($i==6 && count($win[$i]) > 0){ echo 'Bilete cu 6 numere castigatoare: <br><div style="margin-left:20px;">'; foreach ($win[$i] as $k => $v) { echo implode($win[$i][$k],' ').'<br/>'; } echo '</div>'; } }function genereaza(){ while (count($nr) != 6) { $nr[] = rand(1,49); $nr = array_unique($nr); } return $nr;}?> Quote
Todo Posted June 18, 2013 Report Posted June 18, 2013 (edited) Am facut si eu un test pentru 1 miliard de tichete. Sper sa nu fie probleme ca e scris in Java. Am vazut ca a aparut si o versiune in Python.Code: RST Challenge 6/49 Edited June 18, 2013 by Todo Quote
AlMalalah Posted June 22, 2013 Report Posted June 22, 2013 Daca tot a inceput frenezia potului mare, ar fi interesant de vazut ce inseamna 6/49 pentru a-i face pe oameni sa realizeze sansele de castig.Scrieti un cod in C sau PHP care simuleaza intregul joc 6/49.Prima oara generati 6 numere random cu valori cuprinse intre 1 si 49, acestea reprezentand extragerea.Generati un numar N de "bilete" cu numere random si comparati-le cu biletul castigator.Afisati numarul de bilete castigatoare care au nimerit 3,4,5,6 numere. (Doar numarul lor, nu si biletele).Atentie!Nu conteaza ordinea.Daca numerele extrase sunt 2,3,7,9,12,4 ; biletul 3,2,9,12,7,4 este considerat castigator.Si, in mod evident, nu generati bilete care continin acelasi numar de mai multe ori. Ex: 3,3,4,2,7,3.Reprezentarea rezultatelor ar putea fi ceva de genul:Numar de bilete generate: NNumar de bilete cu 3 nr. castigatoare: (numarul)Numar de bilete cu 4 nr. castigatoare: (numarul)Numar de bilete cu 5 nr. castigatoare: (numarul)Numar de bilete cu 6 nr. castigatoare: (numarul)Numerele extrase: 4, 19, 21, 32 , 1, 7Biletele cu 6 nr. castigatoare: 19, 32, 1, 4, 21, 7 ; 7, 19, 32, 1, 4, 21 .....O faza tare:Vrei sa vezi daca ar exista totusi o metoda de a juca cat mai eficient la loto dar in acelasi timp, pe o caldura ca asta, mai bine te duci si stai la o terasa sau altundeva cu burta la soare ? Nimic mai simplu, deschizi un topic asa ca asta sub forma de "competitie" si astepti sa vina unu intr-o zi si sa iti zica:Variante generate 10.Variante cu 6 numere: 1.Variante cu 5 numere: 8.Variante cu 4 numere: 1.Eficient, nu ? Si nici nu a trebuit sa faci ceva ptr. asta ! Quote
Todo Posted June 23, 2013 Report Posted June 23, 2013 O faza tare:Vrei sa vezi daca ar exista totusi o metoda de a juca cat mai eficient la loto dar in acelasi timp, pe o caldura ca asta, mai bine te duci si stai la o terasa sau altundeva cu burta la soare ? Nimic mai simplu, deschizi un topic asa ca asta sub forma de "competitie" si astepti sa vina unu intr-o zi si sa iti zica:Variante generate 10.Variante cu 6 numere: 1.Variante cu 5 numere: 8.Variante cu 4 numere: 1.Eficient, nu ? Si nici nu a trebuit sa faci ceva ptr. asta ! Bai Guta, cum era aia: "Iei bacu' nu iei bacu' semintele acelasi gust are, nu?"Sugestie: ramai la terasa ta, sparge seminte, bea bere, eventual poti sa si eructezi DAR lasa-ne pe noi in pace. Quote