# 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:

{% code title="simplegrader.c" %}

```c
#include <stdio.h>

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

    return 0;
}
```

{% endcode %}

## 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:

{% code title="dataset.yaml" %}

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

{% endcode %}

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`](https://golang.org/pkg/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`:

```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:

```yaml
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`:

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://xmc.gitbook.io/xmc-documentation/romana/overview/import-external-data/xmc-format.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
