Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2008-03-16 18:20:17.
Revizia anterioară   Revizia următoare  

Aceasta pagina e in constructie

LimeEval

  • Versiune :
  • Framework .NET :
  • Functii generale :
    • - mod consola / mod grafic
    • - configurare completa din interfata
    • - compilare automata surse concurenti (selectiva sau totala)
    • - posibilitate de specificare a compilatoare multiple
    • - directive custom de compilare
    • - salvare output compilatoare pe fiecare sursa
    • - xml generat cu rezultatele compilarii tuturor concurentilor
    • - evaluare (selectiva sau totala) in mod sandbox
    • - limitare de timp si limitare de memorie
    • - evaluare test cu test, sau rapida
    • - salvarea in fisier individual outputului produs de fiecare concurent pe fiecare test
    • - salvare in fisier individual rezultate evaluare pe fiecare test (punctaj, timp, memorie, mesaj verif)
    • - xml generat cu rezultatele totale ale evaluarii
    • - curatare foldere concurenti \ filtrare surse \ redenumire surse
    • - error reporting, exceptii, warninguri, erori, salvate in fisiere si afisate in consola grafica
  • To Do :
    • - clasament real time, si detasat din tab control
    • - exportare borderouri in *.txt-uri individuale pentru fiecare concurent
    • - exportare clasament in *.xls (Excel)
  • Buguri cunoscute :
    • - in timpul evaluarii in mod grafic (fara pauza), daca se tot face resize la tabel, aplicatia se blocheaza. (thread deadlock)

<br><br>

Screenshots

<br><br><br>

Structura de fisiere a evaluatorului

<br><br><br>

Instructiuni de folosire

<br><br><br>

Intrebari frecvente

<br><br><br>

Sursa verif

Verificatorul este necesar pentru a puncta fisierul OUT produs de concurent. Trebuie pus sub forma de executabil in fisierul cu testele problemei.

Mai jos este o sursa generala de verificator. Sursa are implementate functii de comparare bit la bit, si a numarului din fisier. Pentru probleme cu solutii multiple sau un alt mod de verificare vor trebui implementate si alte functii de verificare a rezultatului.
Shimbati #define-urile INFILE, OUTFILE, si OKFILE cu numele corespunzatoare.

#include <stdio.h>

/* !!! schimba <problema> cu numele problemei */
#define INFILE "problema.in"
#define OUTFILE "problema.out"
#define OKFILE "problema.ok"

FILE *fIN, *fOUT, *fOK, *fV;

bool openFiles();        /* deschide fisierele si verifica existenta lor */
void closeHandles();     /* inchide fisierele */
bool compareBitByBit();  /* compara out si ok, bit la bit */
bool compareNumber();    /* compara numerele din out si ok */

int main()
{
    if(!openFiles()) return 0;
    if (compareBitByBit())
        fprintf(fV, "10\nCorect");
    else
        fprintf(fV, "0\nGresit");
    closeHandles();
    
    return 0;
}

bool openFiles()
{
    fIN = fopen(INFILE, "r");
    fOUT = fopen(OUTFILE, "r");
    fOK = fopen(OKFILE, "r");
    fV = fopen("punctaj.verif", "w");
    if (!fIN)
    {
        fprintf(fV, "0\nFisier IN lipsa.");
        closeHandles();
        return false;
    }
    if (!fOUT)
    {
        fprintf(fV, "0\nFisier OUT lipsa.");
        closeHandles();
        return false;
    }
    if (!fOK)
    {
        fprintf(fV, "0\nFisier OK lipsa.");
        closeHandles();
        return false;
    }
    return true;
}

void closeHandles()
{
    if (fIN) fclose(fIN);
    if (fOUT) fclose(fOUT);
    if (fOK) fclose(fOK);
    if (fV) fclose(fV);
}

bool compareBitByBit()
{
    char b1, b2;
    int ret1, ret2;
    while (1)
    {
        ret1 = fscanf(fOUT, "%c", &b1);
        ret2 = fscanf(fOK, "%c", &b2);
        if (ret1 > 0 && ret2 <= 0) return false;
        if (ret1 <= 0 && ret2 > 0)  return false;
        if (b1 != b2) return false;
        if (ret1 <= 0 && ret2 <= 0) return true;
    }
    return true;
}

bool compareNumber()
{
     int nr1, nr2;
     fscanf(fOUT, "%d", &nr1);
     fscanf(fOK, "%d", &nr2);
     if (nr1 != nr2) return false;
     return true;
}