crs12decoder Posted June 11, 2013 Report Share 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 Link to comment Share on other sites More sharing options...
passfig Posted June 12, 2013 Report Share 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 Link to comment Share on other sites More sharing options...
u0m3 Posted June 15, 2013 Report Share 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 Link to comment Share on other sites More sharing options...
H3xoR Posted June 15, 2013 Report Share 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 Link to comment Share on other sites More sharing options...
andreiiar Posted June 15, 2013 Report Share Posted June 15, 2013 Si ce castigam? Quote Link to comment Share on other sites More sharing options...
eusimplu Posted June 15, 2013 Report Share 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 Link to comment Share on other sites More sharing options...
Todo Posted June 18, 2013 Report Share 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 Link to comment Share on other sites More sharing options...
AlMalalah Posted June 22, 2013 Report Share 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 Link to comment Share on other sites More sharing options...
Todo Posted June 23, 2013 Report Share 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 Link to comment Share on other sites More sharing options...