Skip to content

Edd12321/RezProbleme

Repository files navigation

RezProbleme

Platforma interactiva & modulara pentru probleme de informatica.

Software necesar

  • Un server web cu suport PHP (ex. Apache);
  • Colectia de compilatoare GNU GCC;
  • Diverse compilatoare/interpreter-uri pentru solutii (ex. DMD, Python, etc.)
  • Un browser (NU mai trebuie suport Javascript neaparat!);
  • Nucleul Linux, pentru seccomp(2);
  • libseccomp/seccomp-bpf
  • POSIX sh, pentru compilare.php;

BCCVM - Un limbaj ezoteric de programare

BCCVM este un limbaj de programare ezoteric in care programele sunt stocate pe un plan bidimensional. Limbajul a fost implementat de la zero. Este inspirat din Befunge98, ><> si Forth. Utilizatorii pot incarca solutii in acest limbaj ca si cu orice alt limbaj (ex C/C++, D).

Detalii: https://github.com/Edd12321/bccvm

Capturi de ecran

ecran de pornire rezolvare corecta problema trimitere cerinta pb clasament profil

Configuratie

gcc src/wrap.c -lseccomp -o wrap

Mai intai, wrap.c face un whitelist cu toate syscall-urile acceptabile, apoi nu lasa anumite syscall-uri din a fi executate (ex stat, unlink)

wrap.c este un filtru pentru a evita executarea de cod arbitrar.

auth.php menajeaza conturile utilizatorilor si verifica salted hash-urile parolelor

bl.csv este un istoric al modificarilor majore al proiectului

style.css contine design-ul grafic al paginii,

index.php contine pagina in sine (bara, etc.),

config.php contine variabile aleatorii,

inv.php stocheaza codul pentru incarcarea problemelor noi,

home.php stocheaza pagina principala,

compilare.php contine pagina de rezolvare a problemelor,

...iar probleme.php face posibila afisarea listei de probleme.

Utilitate

Scopul proiectului este de a-ti putea personaliza cu usurinta codul care ruleaza pe server:

Proiectul poate fi rulat pe un server local, pentru o metoda rapida de a puncta probleme de informatica fara conturi, scor, etc.

Poate fi utilizat de catre cadre didactice ca o alternativa modulara la alte platforme asemanatoare, in cazul unei pane de Internet. Adaugarea unui limbaj nou, de exemplu, se poate face modificand doar un rand in config.php, apoi adaugand o optiune noua in switch case-ul din compilare.php.

Un alt exemplu de modularitate este fisierul wrap.c: puteti adauga doar numele un element nou in vectorul blocare[], si syscall-ul respectiv va fi filtrat in mod automat din orice solutie trimisa de catre utiizator.

Imagini

Imaginile de fundal de pe Unsplash se pot gasi in folderul "res".

Releases

No releases published

Packages

 
 
 

Contributors