Pagina 1 di 2

[Code] Estrazione dei match della fantacoppa

MessaggioInviato: 16 ott 2007, 16:29
di thrantir
uno dei vantaggi del codice aperto è la completa trasparenza di ciò che avviene. Per dimostrarlo, per cogliere un'occasione di parlare un po di programmazione, e per fare un po gli sboroni, ecco il codice del programmino che ha estratto gli incontri per la nostra fantacoppa

Codice: Seleziona tutto
thrantir@Rivendell:~/workspace/fantacalcio$ cat estrazione.cc
#include <fstream>
#include <list>
#include <iostream>
#include <stdexcept>
#include <ctime>

struct Team {
        Team(const std::string & a_name, int an_id)
                : name(a_name)
                , id(an_id)
        {}
        std::string name;
        int id;
};

typedef std::list<Team> Teams;
typedef std::pair<Team, Team> Match;
typedef std::list<Match> Matches;

Teams the_teams;
Matches the_matches;

void readTeams(const std::string & file_name);
void printTeams();
void extractMatches();
void printMatches();

int main() {

        readTeams("teams.dat");
        //printTeams();
        extractMatches();
        printMatches();
        return EXIT_SUCCESS;
}

void readTeams(const std::string & file_name) {
        std::ifstream file(file_name.c_str());
        std::string line;
        if(!file.good()) {
                throw std::runtime_error("no team file");
        }
        while(!file.eof()) {
                getline(file, line);
                if(line.length() > 0) {
                        int index = line.find('|');
                        if(index != std::string::npos) {
                                std::string my_name = line.substr(index+1, line.length() - index) ;
                                int my_id = atoi(line.substr(0, index).c_str());
                                the_teams.push_back(Team(my_name, my_id));
                        }
                }
        }
}

void printTeams() {
        Teams::const_iterator my_iter = the_teams.begin();
        Teams::const_iterator my_end = the_teams.end();
        for( /* void */;
                my_iter != my_end;
                ++my_iter) {
                std::cout << "team " << my_iter->id << " " << my_iter->name << std::endl;
        }
}

void extractMatches() {
        if((the_teams.size() % 2) != 0 ) {
                perror("squadre dispari!!!");
        }
        srand(time(0));
        while( the_teams.size() > 0) {
        //long long my_rand = rand();
                int my_choose =  (the_teams.size() * (rand() / (RAND_MAX + 1.0)));
                Teams::iterator my_iter = the_teams.begin();
                for (/* void */; my_choose > 0 ; --my_choose) ++my_iter;
                Team first(*my_iter);
                the_teams.erase(my_iter);
                my_choose =  (the_teams.size() * (rand() / (RAND_MAX + 1.0)));
                my_iter = the_teams.begin();
                for (/* void */; my_choose > 0 ; --my_choose) ++my_iter;
                Team second(*my_iter);
                the_teams.erase(my_iter);
                the_matches.push_back(std::make_pair(first, second));
        }
}

void printMatches() {
        Matches::const_iterator my_iter = the_matches.begin();
        Matches::const_iterator my_end = the_matches.end();
        for( /* void */;
                my_iter != my_end;
                ++my_iter) {
                std::cout << "match: " << my_iter->first.name << " - " << my_iter->second.name << std::endl;
        }
}

Re: [Code] Estrazione dei match della fantacoppa

MessaggioInviato: 16 ott 2007, 16:45
di nemesys_72
che sboooooooooooorone..
:lol:
scherzi a parte, bel lavoro teo..

Re: [Code] Estrazione dei match della fantacoppa

MessaggioInviato: 17 ott 2007, 12:08
di thrantir
una cosa che non ho scritto, perchè consideravo scontata, è che chiunque è libero di migliorare questo codice, magari estenderlo :wink:

Re: [Code] Estrazione dei match della fantacoppa

MessaggioInviato: 24 ott 2007, 18:43
di MauriAxel
domanda da super novellino, come fai a far caricare al programma i dati (in questo caso i nomi delle squadre) senza la presensa di nessun cin?

Re: [Code] Estrazione dei match della fantacoppa

MessaggioInviato: 25 ott 2007, 11:34
di thrantir
la risposta è nella funzione reatTeam, che legge da un file le squadre.

Chiaramente il file deve avere il formato che il programma prevede. Una cosa comoda sarebbe, per esempio, una fuzione che ti permette di riempirlo inserendo man mano i team, e magari anche di modificarlo, leggendo il file pre-esistente e risalvandolo dopo le modifiche

ti ci vuoi cimentare? se ti va ti do supporto :-)

Re: [Code] Estrazione dei match della fantacoppa

MessaggioInviato: 25 ott 2007, 16:00
di MauriAxel
no no non ti preoccupare è un livello troppo alto per me, abbiamo appena introdotto i record a scuola

Re: [Code] Estrazione dei match della fantacoppa

MessaggioInviato: 25 ott 2007, 16:50
di thrantir
tranquillo, non è difficile

intanto potresti dirmi in modo informale tu come lo faresti, poi vediamo come si trasformano quelle frasi in codice :-)

Re: [Code] Estrazione dei match della fantacoppa

MessaggioInviato: 25 ott 2007, 17:36
di MauriAxel
quel che ho capito io è che questo programma prende da un file esterno le squadre e tramite non so quale algoritmo fa un sorteggio, giusto?
la prima domanda che mi sorge è: è un algoritmo fatto per un numero fisso di squadre oppure posso usare qualsiasi potenza di due?

Re: [Code] Estrazione dei match della fantacoppa

MessaggioInviato: 25 ott 2007, 18:05
di thrantir
la risposta la trovi nella funzione extract Match, prova a leggerla, se non riesci a capire cosa fa ti aiuto io, passo passo però (sennò non ragioni :P)

Re: [Code] Estrazione dei match della fantacoppa

MessaggioInviato: 26 ott 2007, 21:39
di tonertemplum
thrantir ha scritto:la risposta la trovi nella funzione extract Match, prova a leggerla, se non riesci a capire cosa fa ti aiuto io, passo passo però (sennò non ragioni :P)


io so la risposta... posso prenotarmi??? "buzzzzzzzzzz" pulsante acceso :mrgreen: :mrgreen: :mrgreen:

No no, lascio all'amico MauriAxel....

teo scusa, ma è.... java? o sbaglio?

Sono a chiederti però, visto che sei partito senza "cappello"... che intendi ora per codice aperto? Nel senso, a cosa ti ricolleghi con questo thread? Se no mi son perso qualcosa e non ci raccapezzo.... :-s

Re: [Code] Estrazione dei match della fantacoppa

MessaggioInviato: 26 ott 2007, 21:58
di Joistick
no web non è java è C++....

Re: [Code] Estrazione dei match della fantacoppa

MessaggioInviato: 26 ott 2007, 23:14
di tonertemplum
ah ok... thx! perchè la sintassi è molto simile....

Re: [Code] Estrazione dei match della fantacoppa

MessaggioInviato: 27 ott 2007, 00:38
di thrantir
sisi la sintassi java deriva al 95% da quella c++ :-)

con condice aperto intendo proprio open source, ho reso pubblico il codice del programmino che ho usato per generare le sfide :-)

Re: [Code] Estrazione dei match della fantacoppa

MessaggioInviato: 27 ott 2007, 12:07
di tonertemplum
thrantir ha scritto:sisi la sintassi java deriva al 95% da quella c++ :-)

con condice aperto intendo proprio open source, ho reso pubblico il codice del programmino che ho usato per generare le sfide :-)


OK... ora ci sono :D

Re: [Code] Estrazione dei match della fantacoppa

MessaggioInviato: 30 ott 2007, 22:39
di MauriAxel
thrantir ha scritto:la risposta la trovi nella funzione extract Match, prova a leggerla, se non riesci a capire cosa fa ti aiuto io, passo passo però (sennò non ragioni :P)

ci capisco poco nulla di quel contenuto già il controllo dell'if mi risulta arabo figuriamoci il resto.
è un livello superiore al mio tutto troppo incomprensibile mi sa che non potrò esserti utile per ottimizzare il programma