Formatul XMC

Formatul XMC reprezinta totalitatea formatelor lui XMC pentru stocarea datelor in sistemul de fisiere.

Grader (corector)

Un grader, in formatul XMC, este un fisier cod sursa cu filename-ul de forma numecorector.ext, unde numecorector este numele unic al programului corector, iar ext este extensia specifica limbajului de programare in care este scris.

Exemplu

Urmatorul fisier este un grader numit simplegrader scris in C:

simplegrader.c
#include <stdio.h>

int main() {
    printf("This grader is pretty dumb\n");

    return 0;
}

Datasets (seturi de date)

Un set de date reprezinta un folder al carui nume este numele unic al setului de date. Acesta contine un fisier dataset.yaml care stocheaza informatii specifice setului de date, impreuna cu un folder numit testcases care contine fisierele de test ale setului de date.

Folderul testcases tine pentru fiecare test cate doua fisiere: un fisier de intrare, test1.in de exemplu, si un fisier de iesire, test1.out. Formatul numelui fisierelor este test#.in/test#.ok, unde # este numarul testului. Testele se numeroteaza de la 1 si trebuie sa fie consecutive.

Fisierul dataset.yaml are urmatoarea structura:

dataset.yaml
description: Descriere a setului de date
grader_name: example_grader
memory_limit: 1024
time_limit: 1.23s

Fisierul dataset.yaml trebuie sa fie un fisier valid YAML. Limita de memorie este o valoare intreaga in bytes, iar limita de timp respecta formatul functiei time.ParseDuration din libraria standard Go. Pe scurt, este o secventa de numere rationale, cu partea fractionara optionala, si un sufix care reprezinta unitatea de timp. Suxifele valide sunt "ns", "us", "ms", "s", "m" si "h".

Exemplu

Urmatorul set de date se numeste permuations_easy.

permutations_easy
├── dataset.yaml
└── testcases
    ├── test10.in
    ├── test10.ok
    ├── test1.in
    ├── test1.ok
    ├── test2.in
    ├── test2.ok
    ├── test3.in
    ├── test3.ok
    ├── test4.in
    ├── test4.ok
    ├── test5.in
    ├── test5.ok
    ├── test6.in
    ├── test6.ok
    ├── test7.in
    ├── test7.ok
    ├── test8.in
    ├── test8.ok
    ├── test9.in
    └── test9.ok

1 directory, 21 files

dataset.yaml:

description: Teste de dificultate redusa pentru problema permutarilor.
grader_name: basic_grader
memory_limit: 8192
time_limit: 0.45s

Tasks (sarcini, probleme)

Un task este un director al carui nume este numele unic al task-ului. Acesta contine numai un singur fisier task.yaml care stocheaza informatii ce definesc task-ul.

Fisierul task.yaml are urmatoarea structura:

description: Descrierea task-ului
dataset_name: example_dataset
input_file: problema.in
output_file: problema.out

Fisierul trebuie sa fie un fisier valid YAML. Fisierele de intrare si de iesire pot avea valorile stdin, respectiv stdout.

Exemplu

Urmatorul task se numeste addition:

addition
└── task.yaml

0 directories, 1 file

task.yaml:

description: Adunare simpla
dataset_name: addition.1
input_file: addition.in
output_file: addition.out

Last updated