Afişează mesaje
Pagini: [1]
1  Comunitate - feedback, proiecte si distractie / Blog / Răspuns: Idei proaste :) : Martie 20, 2012, 01:58:29
Nici eu sunt de acord ca trebuie neaparat sa ai o idee folositoare. Daca o ai, e perfect. Daca nu, e mai bine sa codezi un proiect, oricare ar fi, sa il duci la capat si sa il prezinti, decat sa nu o faci deloc. E o experienta din care vei invata o gramada. Pur si simplu gandeste-te la ceva ce te pasioneaza pe tine (sport, muzica, fotografie etc) si codeaza ceva ce ti se pare interesant.

Un exemplu ar fi sa implementezi o copie Photoshop. Nu va folosi nimanui atata timp cat exista alternative comerciale sau open-source. Dar vei invata algoritmi pentru procesare de imagini.

Am participat o singura data la un astfel de concurs.

Proiectul a fost o lectie interactiva de fizica: "Miscarea in camp gravitational". Ca module mai interesante a avut un mic engine fizic in Action-Script pentru simularea experimentelor; un joculet bazat pe acest engine; si un un fel de compilator de formule LaTeX. Nu prea stiam cum se face un compilator la vremea aceea, dar in final si-a facut treaba.

Ideea proiectului nu a fost a mea; ci a unui prof, sau a altui membru al echipei, nu mai stiu. In final mi s-a parut interesant si chiar m-am implicat muncind la un moment dat o zi si o noapte aproape in continuu pentru a termina la timp.

A fost o experienta placuta, avand ocazia sa colaborez cu mai multi prieteni. Sunt mandru si acum de produsul software rezultat, desi nu stiu cat de folosit a fost.



 
2  infoarena - concursuri, probleme, evaluator, articole / Algoritmiada 2010 / Răspuns: Algoritmiada Runda Finala : Mai 20, 2010, 16:38:36
Ce se aude de poze?
3  infoarena - concursuri, probleme, evaluator, articole / Algoritmiada 2009 / Răspuns: Feedback Runda Finala : Mai 05, 2009, 06:43:13
Organizarea a fost foarte reusita: cazarea a fost mult mai buna decat la multe concursuri la care am participat, mancarea excelenta iar setul de probleme interesant si cu un nivel de dificultate potrivit (la grupa studenti). Poate ca unele teste, sau limita de timp la o problema nu au fost foarte inspirate.

Programul din afara concursului a fost frumos, doamna directoare foarte de treaba, punandu-ne la dispozitie mese de ping-pong.

Pe mine nu m-a deranjat pauza de o zi intre concurs si evaluare live. La evaluarea live ar fi util daca ati avea doua ferestre care isi dau refresh, una cu monitorul si una cu clasamentul.

Promovarea concursului a fost ok: noi am primit mail la facultate cu algoritmiada

Ce mai, o organizare foarte reusita, felicitari echipei si celor care v-au ajutat.
Algoritmiada e singurul concurs de algoritmi pentru studenti din tara de care stiu si sper sa urmeze si editii viitoare.
4  Comunitate - feedback, proiecte si distractie / Blog / Răspuns: Google Chrome : Septembrie 03, 2008, 11:52:29
Interesant ce scrie in EULA la Google Chrome:
Citat
11. Licenţa de conţinut de la dvs.

11.1 Dvs. păstraţi drepturile de copiere şi orice alte drepturi pe care le deţineţi deja asupra Conţinutului pe care îl trimiteţi, postaţi sau afişaţi în cadrul sau prin intermediul Serviciilor. Prin trimiterea, postarea sau afişarea conţinutului, dvs. acordaţi Google o licenţă permanentă, irevocabilă, valabilă oriunde în lume, gratuită şi neexclusivă de a reproduce, adapta, modifica, traduce, publica, reprezenta public, expune public şi distribui orice Conţinut pe care îl trimiteţi, postaţi sau afişaţi în cadrul sau prin intermediul Serviciilor. Această licenţă este pentru singurul scop de a permite Google să expună, distribuie şi să promoveze Serviciile şi poate fi revocată pentru anumite Servicii, după cum este definit în Termenii adiţionali ai acelor Servicii.

11.2 Sunteţi de acord că această licenţă include un drept pentru Google de a pune astfel de Conţinut la dispoziţia altor companii, organizaţii sau persoane individuale cu care Google are relaţii pentru furnizarea de servicii de distribuţie şi de a utiliza astfel de Conţinut în legătură cu furnizarea acelor servicii.

 Thumb down

5  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Java vs C# : Octombrie 19, 2007, 10:46:31
Am inteles ca cele doua limbaje seamana foarte mult. Diferenta majora dintre ele e ca Java e sub licenta GPL. O carte buna de java e Atac la Java (Head First Java).
6  infoarena - concursuri, probleme, evaluator, articole / Autumn Warmup 2007 / Răspuns: Runda 1 : Septembrie 05, 2007, 19:21:41
 Applause
7  Comunitate - feedback, proiecte si distractie / Off topic / Răspuns: cati de aici veniti la ONI ? : Aprilie 05, 2007, 23:13:38
Daca reusesti sa instalezi X pe calculatoare dau eu un suc.  Tongue
8  Comunitate - feedback, proiecte si distractie / Off topic / Răspuns: cati de aici veniti la ONI ? : Aprilie 05, 2007, 17:10:48
Deci cum ? Daca ceri una iti dau doua ?  Very Happy
9  Comunitate - feedback, proiecte si distractie / Off topic / Răspuns: bancuri : Aprilie 02, 2007, 17:18:01
Cum se face educatia in Polonia:
1. Nu gandi !
2. Daca totusi gandesti, nu vorbi!
3. Daca gandesti si vorbesti nu scrie !
4. Daca gandesti, vorbesti si scrii nu semna.
5. Daca gandesti, vorbesti scrii si semnezi nu fi surprins.
10  infoarena - concursuri, probleme, evaluator, articole / Informatica / Arhiva Baraj ONI 2006 : Martie 27, 2007, 18:47:23
Are cineva subiectele si testele de la barajul de la oni 2006 ?
11  Comunitate - feedback, proiecte si distractie / Off topic / Răspuns: Urmasii lui Moisil : Martie 26, 2007, 14:23:54
Tu esti Paul din Salaj, nu ?
A fost misto la concurs. Pacat ca ne-au scurtat astia seara de sambata spre duminica.
12  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Divide et impera : Martie 22, 2007, 19:17:10
In ordinea dificultatii:
Zparcurgere
Fractal
Coins
Zebughil
13  infoarena - concursuri, probleme, evaluator, articole / preONI 2007 / Răspuns: Urmasii lui Moisil - PreONI : Martie 14, 2007, 19:45:33
Proba la concursul "Urmasii lui Moisil" coincide cu runda 12 de la .campion deci va fi sambata, 24 martie intre orele 9: 00 - 12 : 15. Runda a 4-a preoni incepe duminica la ora 9. Mie mi se pare ca nu se suprapun deloc. E o zi distanta intre ele. Daca tii neaparat sa participi si la preoni, nu mai stai la premiere si pleci sambata seara.  Thumb up
14  Comunitate - feedback, proiecte si distractie / Off topic / Răspuns: Cum va intelegeti cu scoala? : Martie 14, 2007, 19:32:38
Ma inteleg bine scoala. Fiind a 12-a, e foarte lejer.
Ce as schimba la sistemul de invatamant ? As renunta la unele materii si as incerca sa promovez creativitatea si sportul.
15  Comunitate - feedback, proiecte si distractie / Off topic / Răspuns: Ce-ati facut la OJI ? : Martie 11, 2007, 22:07:58
Mie prima data cand mi-au evaluat aveau deschis pe fundal si BC 3.1 si BC 5.0 si luam un tle.
Probabil daca mai existau versiuni de borland mai deschideau  Aha
16  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: limita de memorie la OJI? : Martie 06, 2007, 00:24:14
Alocarea dinamica in borlandc e un fel de marca sau banul  Shocked
Poti fi mai explicit. Vad ca multi se plang de alocarea dinamica din C. Ai avut vreodata probleme cu alocarea dinamica ?
17  Comunitate - feedback, proiecte si distractie / Off topic / Raspuns: Linux vs. Windows : Februarie 25, 2007, 00:02:43
Windows e foarte comod si fiabil. La mine merge de un an jumate fara antivirus instalat.
In postul asta nu a luat nimeni in calcul costurile windows.
Sunt curios cati ar plati 300 RON pt o licenta.
18  infoarena - concursuri, probleme, evaluator, articole / Informatica / Raspuns: c++ : Februarie 24, 2007, 23:43:50
http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html
Nu m-am uitat pe "Thinking in C++" dar "Thinking in Java" era destul de buna.
19  infoarena - concursuri, probleme, evaluator, articole / Informatica / Raspuns: Intrebare despre compilator : Februarie 24, 2007, 23:40:44
Vezi ca bool-u ocupa un octet. Nu te ajuta sa rezolvi problema, dar e bine de stiut.
20  infoarena - concursuri, probleme, evaluator, articole / Informatica / Raspuns: StEval : Ianuarie 15, 2007, 21:04:47
Evaluatorul care-l folosesc eu. Nu e cine stie ce dar isi face treaba.
Pentru instalare copiati codul de mai jos intr-un fisier numit jlaunch.cpp
Cod:
/*
        SAE
        ----------------------
        jlaunch.cpp
        Cristian George Strat
*/

/**
        argv
                1       binary file to execute
                2       uid for impersonation
                3       time limit (float, seconds)
                4       directory to chroot()

        :WARNING:
                Binaries must be statically compiled since chroot() denies access
                to shared libraries.

        returns
                0               execution successful
                200             execution timed out
                210             unknown run-time error
                100-199 known run-time error (exitcode = 100 + WTERMSIG(status))
*/

/* #define VERBOSE */
/* #define PROFILING */

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <signal.h>
#include <wait.h>
#include <sys/resource.h>

#include <math.h>

#ifdef PROFILING
#include <sys/time.h>
#endif

#define MBM     (1 << 20)
/* #define LIMIT_STACK_SIZE */

double datalimit = 63., stacklimit = 1.;

void die(char *msg) {
        printf("%s\n", msg);
        exit(255);
}

int main(int argc, char *argv[], char *envp[]) {
#ifdef PROFILING
        rusage ru;
#endif

        pid_t child;    /* child that loses privileges and executes argv[1] */
        pid_t timer;    /* child timer */
        uid_t nuid;             /* uid assigned to child */
        pid_t who;

        char cmd[250];
        int exitcode = 0;
        int status;

        /* failsafe */
        if (5 > argc) die("not enough arguments\n");

        /* -- spawn child ---------------------------------------- */
        child = fork();
        if (!child) {
                /* child process here */

                rlimit rl;

                /* limit number of processes */
                rl.rlim_cur = rl.rlim_max = 2;
                setrlimit(RLIMIT_NPROC, &rl);

                /* limit memory */
#ifdef LIMIT_STACK_SIZE
                rl.rlim_cur = rl.rlim_max = (int)ceil(datalimit * MBM);
                setrlimit(RLIMIT_DATA, &rl);
                rl.rlim_cur = rl.rlim_max = (int)ceil(stacklimit * MBM);
                setrlimit(RLIMIT_STACK, &rl);
#endif
                rl.rlim_cur = rl.rlim_max = (int)ceil((stacklimit + datalimit) * MBM);
                setrlimit(RLIMIT_AS, &rl);

                /* chroot */
                chroot(argv[4]);

                /* lose admin privileges */
#ifdef VERBOSE
                printf("child: renunt la permisiuni\n");
#endif
                nuid = strtol(argv[2], NULL, 10);
                setuid(nuid);

#ifdef VERBOSE
                printf("child: ma transform\n");
#endif
                execve(argv[1], argv, envp);
        }

        /* -- spawn timer ----------------------------------------- */
        timer = fork();
        if (!timer) {
#ifdef VERBOSE
                printf("timer: cronometrez %d\n", child);
#endif
                /*
                        :TODO:
                        sleep could be done through a system call
                */
                sprintf(cmd, "sleep %s", argv[3]);
                system(cmd);

#ifdef VERBOSE
                printf("timer: am terminat\n");
#endif

                exit(200);
        }

        /* -- main thread ----------------------------------------- */
#ifdef VERBOSE
        printf("tata: astept sa termine cineva...\n");
#endif

#ifdef PROFILING
        who = wait4(-1, &status, 0, &ru);
        printf("PROFILING: wait4 finished with. utime: %d s, %d us; stime: %d s, %d us\n", ru.ru_utime.tv_sec, ru.ru_utime.tv_usec, ru.ru_stime.tv_sec, ru.ru_stime.tv_usec);
#else
        /* waits for a single child process (it doesn`t matter which one) */
        who = wait4(-1, &status, 0, NULL);
#endif

#ifdef VERBOSE
        printf("tata: am asteptat destul -> %d ...\n", who);
#endif

        if (!who) return 200;   /* weird error, this shouldn`t happen */

        if (timer == who) {
#ifdef VERBOSE
                printf("tata: timer a terminat primul, omor child (%d)\n", child);
#endif
                /* timer finished first -> execution timed out */
                kill(child, SIGKILL);

                return 200;
        }
        else {
#ifdef VERBOSE
                printf("tata: child a terminat primul, omor timer (%d)\n", timer);
#endif
                /* analyze why child terminated */
                if (!WIFEXITED(status)) {
                        if (WIFSIGNALED(status)) exitcode = (100 + WTERMSIG(status));
                        else exitcode = 210;
                }
                else exitcode = 0;

#ifdef VERBOSE
                printf("tata: exitcode = %d\n", exitcode);
#endif

                /* child process finished first -> execution is ok, kill timer */
                kill(timer, SIGKILL);

                return exitcode;
        }
}
Si codul urmator intr-un fisier "eval.pl"
Cod:
$a1=@ARGV[0];
if ( ($a1 ne "help" && $a1 ne "config" && $a1 ne "c" && $a1 ne "pascal" && $a1 ne "setup") ) {
        print ("Mod de folosire:\n");
        printf ("\tperl eval.pl setup        : Compileaza fisierul jlaunch.cpp necesar la testare\n");
        print ("\tperl eval.pl help          : Afiseaza informatii referitoare la modul de folosire\n");
        print ("\tperl eval.pl config        : Configureaza evaluatoru\n");
        print ("\tperl eval.pl p fisier.pas  : Testeaza un program scris in Pascal\n");
        print ("\tperl eval.pl c fisier.cpp  : Testeaza un program scris in C++\n");
        exit();
}

if ($a1 eq "setup") {
        if (!( -e "jlaunch.cpp") ) {
                print ("Fisierul jlaunch.cpp nu exista. Probabil l-ati sters sau nu l-ati descarcat. Daca nu il mai aveti\ntrimiteti un email la [email protected]");
                exit();
        }
        if (-e "run") {
                print ("Evaluatorul a mai fost instalat odata\n");
                exit();
        }
        exec ("g++ -o run jlaunch.cpp\n");
        printf ("Evaluatorul a fost instalat cu succees\n");
        exit();
}

if ($a1 eq "help") {
        printf ("======================================\n");
        print ("Evaluator versiunea 1.0\n");
        print ("Autor: Vlad Saveluc\nLicenta: GPL (http://www.gnu.org/copyleft/gpl.html)\n");
        print ("=======================================\n");
        print  ("Instructiuni de utilizare:\n");
        print ("1. Inainte de a testa surse programul trebuie configurat.\n");
        print ("\taceasta se realizeaza prin comanda:\n\t\t'perl eval.pl config'\n");
        printf ("\tProgramul va genera un fisier config.txt folosit mai tarziu la testare.\n");
        printf ("\tVor trebui introduse date referitoare la numarul de teste, denumirea \n\tfisierelor de intrare/iesire etc.\n");
        printf ("2. Testele se vor afla intr-un director cu teste definit la configurare\n");
        printf ("\tFisierele vor fi denumite 0.in, 1.in ... respectiv 0.ok, 1.ok ...\n");
        printf ("\tFisierele .ok sunt necesare doar in cazul in care validarea outputului\n");
        printf ("\tse face print diferenta de fisiere\n");
        printf ("3. Daca verificarea este realizata de un verificator acesta va trebui sa scrie intr-un fisier ver.ok\n");
        printf ("\t1- daca rezultatul este corect, 0- daca este gresit. !!! ver.ok va avea o singura linie\n");
        printf ("3.1 Utilizatorul sub care este rulat evaluatorul va trebui sa aiba drepturi de executare a verificatorului\n");
        printf ("\tAceasta se face prin: 'chmod 700 nume_verificator'\n");
        printf ("4. Dupa ce a fost configurat, programul poate testa programe scrise in C sau Pascal astfel\n");
        printf ("\tperl eval.pl c nume_fisier    - Pentru programe in C++\n");
        printf ("\tperl eval.pl p nume_fisier    - Pentru programe scrise in Pascal\n");
        printf ("5. Rezultatele evaluarii se vor gasi intr-un fisier definit la configurare\n");
        exit();
}


if ($a1 eq "config") {
        print ("Sunteti sigur ca doriti sa (re)configurati evalutorul (configuratia trecuta se va pierde) ? (DA/NU)\n");
        $ans=<STDIN>;
        while ($ans ne "DA\n" && $ans ne "NU\n") {
                print ("Raspunsul nu este valid. Mai incercati (trebuie scris cu masjuscule)\n");
                $ans=<STDIN>;
        }
        if ($ans eq "NU\n") {exit();}
        open (fout,">config.txt");
        print ("Problema va avea verificator (daca nu, se va verifica print diferenta de fisiere? (DA/NU)\n");
        $ans=<STDIN>;
        while ($ans ne "DA\n" && $ans ne "NU\n") {
                print ("Raspunsul nu este valid. Mai incercati (trebuie scris cu masjuscule)\n");
                $ans=<STDIN>;
        }
        print fout ("$ans");
        if ($ans eq "DA\n") {
                printf ("Dati denumirea executabilului verificatorului\n");
                $ans=<STDIN>;
                chomp($ans);
                while ( !( -e $ans) ) {
                        if ($ans eq "a.out") {printf ("a.out este fisier rezervat\n");}
                        else {printf ("Acest fisier nu exista. Mai incercati (CTRL + C pentru a iesi)\n");}
                        $ans=<STDIN>;
                        chomp($ans);
                }
                print fout ("$ans\n");
        }
        printf ("Directorul in care se gasesc testele este: \n");
        $ans=<STDIN>;
        chomp($ans);
        while ( !(-d $ans) ) {
                printf ("Directorul $ans nu exista. Mai incercati (CTRL + C pentru iesi)\n");
                $ans=<STDIN>;
                chomp($ans);
        }
        print fout ("$ans\n");
        printf ("Numarul de teste (divizor de 100)");
        $ans=<STDIN>;
        print fout ("$ans");
        printf ("Denumirea fisierului de intrare:");
        $ans=<STDIN>;
        print fout ("$ans");
        printf ("Denumirea fisierului de iesire:");
        $ans=<STDIN>;
        print fout ("$ans");
        printf ("Timp de executie: ");
        $ans=<STDIN>;
        print fout ("$ans");
        printf ("Comanda de compilare in C++ (recomandat 'g++') ");
        $ans=<STDIN>;
        chomp($ans);
        print fout ("$ans\n");
        printf ("Comanda de compilare in pascal (recomandat 'fpc') ");
        $ans=<STDIN>;
        chomp($ans);
        print fout ("$ans\n");
        printf ("Fisierul in care vor fi scrise rezultatele evaluarii (borderoul):");
        $ans=<STDIN>;
        print fout ("$ans");
}


if ($a1 eq "c" || $a1 eq "p") {
        $file=@ARGV[1];
        unless (-e "run") {
                printf ("Evaluatorul nu a fost instalat\n");
                printf ("Rulati 'perl eval.pl setup'\n");
                exit();
        }
        unless (-e "config.txt") {
                printf ("Evaluatorul nu a fost configurat\n");
                exit();
        }
        if ($file eq "") {
                printf ("Trebuie sa specificati fisierul sursa ce va fi evaluat\n");
                printf ("Rulati 'perl eval.pl' pentru mai multe detalii\n");
                exit();
        }
        unless (-e $file) {
                printf ("Fisierul $file nu exista\n");
                exit();
        }

        $fin="config.txt";
        open(fin);
        @data=<fin>;
        close(fin);
        foreach (@data) {
                chomp($_);
        }
        $type=@data[0];
        my $ver,$tdir,$nt,$in,$out,$tl,$comp_c,$comp_p,$borderou;
        $tl=0.0;
        if ($type eq "DA") {
                $ver=@data[1];
                $tdir=@data[2];
                $nt=@data[3];
                $in=@data[4];
                $out=@data[5];
                $tl=@data[6];
                $comp_c=@data[7];
                $comp_p=@data[8];
                $borderou=@data[9];
        }
        else {
                $tdir=@data[1];
                $nt=@data[2];
                $in=@data[3];
                $out=@data[4];
                $tl=@data[5];
                $comp_c=@data[6];
                $comp_p=@data[7];
                $borderou=@data[8];
        }
        open (fout,">$borderou");
        $ppt=100/$nt;
        #Partea de compilare
        if ($a1 eq "c") {
                system ("$comp_c $file 2>eror.txt\n");
        }
        else {
                system ("$comp_p $file 2>eror.txt\n");
        }

        unless (-e "a.out") {
                printf ("Eroare de compilare\n");
                system ("cp -f eror.txt $borderou");
                exit();
        }
        system ("rm -f eror.txt");
        $total=0;
        for ($i=0;$i<$nt;++$i) {
                printf fout ("Testul %2d ............ ",$i+1);
                chdir ("$tdir");
                system ("cp -f $i.in ../$in");
                if ($type eq "NU") {
                        system ("cp -f $i.ok ../");
                }
                else {
                        system ("cp -f $i.ok ../$tdir.ok");
                }
                chdir ("..");
                $mess=system ("./run a.out 0 $tl 0");
                if ($mess==0) {
                        if ($type eq "DA") {
                                system ("./$ver");
                                $fin="ver.ok";
                                open(fin);
                                @data=<fin>;
                                if (@data[0] eq "1") {
                                        $total+= $ppt;
                                        printf fout ("OK\n");
                                }
                                else {
                                        printf fout ("Raspuns gresit\n");
                                }
                        }
                        else {
                                $mess2=system("diff -bq $out $i.ok >/dev/null");
                                if ($mess2 ==0) {
                                        printf fout ("OK\n");
                                        $total += $ppt;
                                }
                                else {
                                        printf fout ("Raspuns gresit\n");
                                }
                        }
                }

                if ($mess==51200) {printf fout ("Limita de timp depasita\n");}
                if ($mess != 51200 && $mess!=0) {printf fout ("Eroare la executie\n");}
                system ("rm -f $in");
                system ("rm -f $out");
                system ("rm -f $i.ok");
        }
        printf fout ("Total                 $total\n");
        system ("rm -f a.out\n");
}

Pentru a executa "perl eval.pl".
21  infoarena - concursuri, probleme, evaluator, articole / Informatica / Raspuns: Sunt incepator in pascal, need help. : Ianuarie 15, 2007, 20:41:13
Problemele le poti rezolva in Pascal, C sau C++.
Rezolvarea la o problema trebuie sa citeasca niste date dintr-un fisier si sa scrie rezultatele in altul.
Daca nu stii cum se face, poti sa afli din manualul tau de la scoala. 
Spor la treaba  Weightlift
22  infoarena - concursuri, probleme, evaluator, articole / Informatica / Raspuns: Viteza cu care se compileaza/executa un program c++ : Ianuarie 09, 2007, 19:57:02
Faci un program sau script care sa-ti compileze sursa si vezi in cat timp ruleaza acesta.
23  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Raspuns: 295 Noroc : Decembrie 18, 2006, 16:58:41
Problema e cunoscuta ca "Sistemul D'Alembert".
24  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Raspuns: 058 Cifre : Decembrie 17, 2006, 09:16:17
Ce greu merge generatorul random de la voi. In 0.2 secunde am putut genera doar 500 000 numere.
Oricum traiasca randomu.
Pagini: [1]
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines