Le fichier `challenge.txt` définit les paramètres de votre étape/exercice (au format [toml](https://github.com/toml-lang/toml/blob/master/versions/en/toml-v0.4.0.md)).
`wip = true` : indique que l'étape n'est pas terminée.
Cet attribut est utilisé pour signifier aux potentiels testeurs, lors des FIC blancs par exemple, que votre étape n'est pas encore prête à être testée.
Cela débloque automatiquement l'étape suivante.
![Rendu de l'avertissement d'étape non terminée](wip.png)
+ `mcq` : [question à choix multiple]({{< relref "/responses/mcq.md" >}}) (cases à cocher) avec ou sans [justification]({{< relref "/responses/mcq_justified.md" >}}),
*`label = "Intitulé"` : (facultatif, par défaut : `Flag`) intitulé du drapeau ;
*`raw = 'MieH2athxuPhai6u'` ou `raw = ['part1', 'part2']` : drapeau(x) exact(s) à trouver ; sous forme de tableau, le participant n'aura pas connaissaance du nombre d'éléments (à moins de définir l'attribut `showlines`) ;
*`showlines = false` : (facultatif, par défaut : `false`) lorsque le drapeau est un tableau et que `showlines` est vrai, le nombre d'éléments du tableau sera donné au participant, sinon il devra déterminer lui-même le nombre d'éléments à trouver (pour l'instant cette option est limitée à un tableau de 9 éléments maximum, c'est normal si ça bug au-delà, demandez-moi si vous avez besoin de plus) ;
*`bonus_gain = 33` : (facultatif) donne des points supplémentaires si complété ;
*`ordered = false` : (facultatif, par défaut : `false`) ignore l'ordre dans lequel les éléments du tableau sont passés ;
*`capture_regexp = "^(?:sudo +)?(.*)$"` : (facultatif) expression rationnelle dont les groupes capturés serviront comme chaîne à valider (notez que `?:` au début d'un groupe ne le capturera pas) ;
*`choices_cost = 42` : (facultatif) coût pour afficher les choix : avant l'affichage, se comporte comme un drapeau `key` classique (à 0, les choix sont affichés directement)
*`noshuffle = true` : (facultatif, par défaut `false`) conserve l'ordre des propositions, au lieu de les mélanger ;
*`[[flag.choice]]` : représente un choix, répétez autant de fois qu'il y a de choix (pour les `mcq` et `ucq`) :
+ `label = "Intitulé de la réponse"` (facultatif, par défaut `raw`),
+ `value = true` (facultatif, par défaut `false`, sauf si `raw` est précisé) : valeur attendue pour ce choix,
+ `raw = "Justification"` (nécessaire pour un [QCM justifié]({{< relref "/responses/mcq_justified.md" >}})) : utilisez une chaîne de caractères (notez qu'il n'est pas possible de combiner des réponses vraies justifiées et non justifiées),
+ `help = "Flag correspondant"` : (facultatif) indication affichée dans le champ de texte des QCM justifiés,
Tous les fichiers sont importés par défaut, voir [la page concernée]({{< relref "/files/files.md" >}}).
Cependant il peut être nécessaire de préciser certains attributs. Cela se fait alors avec :
-`[[file]]` : paramètres pour un indice :
*`filename = "toto.txt"` : nom du fichier tel qu'il apparaît dans le dossier `files` ;
*`hidden = true` : indique si le fichier doit être caché aux participants par défaut (l'équipe serveur pourra le distribuer si besoin, dans tous les cas il sera affiché lorsque le challenge sera archivé) ;