# Règles de rédaction
Il ne s'agit pas de règles absolues : ni dans l'espace (elles ne valent pas hors de ce projet), ni dans le temps (il est possible de s'adapter dans des cas particulier)
## Les métadonnées du sujet (.md) et le titre
```markdown
---
author:
- Prénom Nom 1
- Prénom Nom 2
- etc
hide:
- navigation
- toc
title: Le titre !
difficulty: un entier entre 0 et 399
maj: 23/10/2024 (la date de mise en ligne de l'exo)
tags:
- tag 1
- tag 2
- etc
---
```
Pour avoir exactement le titre mis en métadonnée, commencer par :
```markdown
# {{ title }}
```
## L'énoncé (le sujet en .md)
* Penser aux cas limites, aux *corner cases* : la liste est-elle vide ?, accepte-t-on les nombres négatifs ? Les valeurs sont-elles toutes entières ?
* Ne pas hésiter à être très précis. L'élève aura toujours une question.
* Une fonction ... prend en paramètres ... renvoie ...
* Si deux versions de l'exercice, utiliser :
```md
=== "Version vide"
{{ IDE('exoa') }}
=== "Version à compléter"
{{ IDE('exob') }}
```
* Fournir les exemples dans une admonition repliable "example" déjà dépliée
* Indiquer les interdictions dans une admonition "danger"
## Rédaction du code
* Ne pas mettre de assert qui vérifient les préconditions dans les fonctions
* Ne pas mettre de docstring
* Ne pas *toujours* utiliser `a += 1`
* Privilégier les noms de variables explicites
* Les noms de variables courts sont à limiter à des cas très précis : indices `i` ou`j`, entier `n`, nombre `x` *etc*
* Pour avoir la coloration du code :
Ne pas écrire
```md
`un peu de code in line`
```
Mais écrire :
```md
`#!py un peu de code in line`
```
## Le code des exercices
* fournir des tests publics (repris dans les exemples)
* fournir des tests privés (bien choisis et, si besoin, des tests aléatoires)
## Le tag difficulty
* débutant [0; 100[
* facile [100; 200[
* moyen [200; 300[
* difficile [300; 400[