diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5ca424eb6249db943b4fc18b0d90d6b08b808a18..2e5ca0830e971fa8ad4b3f19eb3f9b2fca980fd1 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,10 +2,11 @@ image: gitlab.dsi.universite-paris-saclay.fr:5005/info111/computerlab/image:late
 
 variables:
   ASSIGNMENT: Semaine1
-  STUDENT: $CI_PROJECT_NAMESPACE # CI_PROJECT_ROOT_NAMESPACE is GitLab 13.2 only
+  STUDENT: $CI_PROJECT_ROOT_NAMESPACE
 
 autograde:
   script:
+    - STUDENT=`echo $STUDENT | sed -e 's/_travo//;s/_/./'`
     - info-111 student_autograde $ASSIGNMENT $STUDENT
   artifacts:
     paths:
diff --git a/.gradebook.db b/.gradebook.db
index 08aa612949bcca9cb31118394e14f8bfdd6d3f0d..e551af62008ae036385296e36efc90e77e7c50e5 100644
Binary files a/.gradebook.db and b/.gradebook.db differ
diff --git a/TD.md b/TD.md
index 8a3b634f0c2e4c5391251cc6ba833c749cb5e6ec..c74f692ee0fea269c8fbc57a527823c4c31107b9 100644
--- a/TD.md
+++ b/TD.md
@@ -24,7 +24,7 @@ semaine sur l'autre.**
 
 :::
 
-+++ {"deletable": false, "nbgrader": {"cell_type": "markdown", "checksum": "8ad448955b1ba80fb9a1ef1e85ca2fa2", "grade": true, "grade_id": "1", "locked": false, "points": 0, "schema_version": 3, "solution": true}}
++++ {"deletable": false, "nbgrader": {"cell_type": "markdown", "checksum": "9cea354d1a408c25828d0da0331786be", "grade": true, "grade_id": "1", "locked": false, "points": 0, "schema_version": 3, "solution": true}}
 
 :::{admonition} Exercice : Modélisation d'un problème et notion d'algorithme
 
@@ -43,12 +43,12 @@ se retrouvait seule en présence du chou.
     -   `décharge(objet)`
     -   `traverse()`
 
-	**Indication :** Ne cherchez pas à résoudre le problème de tête;
-	au contraire, l'objectif est d'apprendre à raisonner sur papier
-	pour aborder ensuite des problèmes plus complexes et pouvoir
-	transmettre ce raisonnement. Cherchez une manière de représenter
-	l'état du système, et décrivez sur votre feuille comment celui-ci
-	évolue au fur et à mesure des instructions.
+    **Indication :** Ne cherchez pas à résoudre le problème de tête;
+    au contraire, l'objectif est d'apprendre à raisonner sur papier
+    pour aborder ensuite des problèmes plus complexes et pouvoir
+    transmettre ce raisonnement. Cherchez une manière de représenter
+    l'état du système, et décrivez sur votre feuille comment celui-ci
+    évolue au fur et à mesure des instructions.
 
     % REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
 
@@ -61,7 +61,7 @@ se retrouvait seule en présence du chou.
 
 :::
 
-+++ {"deletable": false, "nbgrader": {"cell_type": "markdown", "checksum": "9d1d93a1ea55a97a541a509d31763bf9", "grade": true, "grade_id": "2", "locked": false, "points": 0, "schema_version": 3, "solution": true}}
++++ {"deletable": false, "nbgrader": {"cell_type": "markdown", "checksum": "00355dc3ecafb358340cc9518fb7db19", "grade": true, "grade_id": "2", "locked": false, "points": 0, "schema_version": 3, "solution": true}}
 
 ::::{admonition} Exercice : Modélisation d'un problème et notion d'algorithme
 
@@ -75,16 +75,16 @@ cruches.
     d'instructions, puis donnez une suite d'instructions permettant
     d'atteindre une solution.
 
-	**Indication :** Comme dans l'exercice précédent, ne cherchez pas
+    **Indication :** Comme dans l'exercice précédent, ne cherchez pas
     à résoudre le problème de tête.
 
-	% REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
+    % REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
 
 2.  Peut-on trouver une suite d'instructions de façon que l'une des
     deux cruches contienne 1 litre? 2 litres? 3 litres? 4 litres? 5
     litres?  6 litres? 7 litres?
 
-	% REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
+    % REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
 
 ::::
 
@@ -107,7 +107,7 @@ pour poser les opérations (pas de calculatrice).
 
 :::
 
-+++ {"deletable": false, "nbgrader": {"cell_type": "markdown", "checksum": "9486416dcdc7b441f9f31d1461cd1d0c", "grade": true, "grade_id": "4", "locked": false, "points": 0, "schema_version": 3, "solution": true}}
++++ {"deletable": false, "nbgrader": {"cell_type": "markdown", "checksum": "c2cc90b7c3c445e44612a86f1d3e1b6e", "grade": true, "grade_id": "4", "locked": false, "points": 0, "schema_version": 3, "solution": true}}
 
 <s></s>
 
@@ -136,7 +136,7 @@ Voici un exemple d'algorithme pour le robot :
 2.  Décrivez un algorithme qui permet au robot de donner l'âge exact
     de l'utilisateur.
 
-	% REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
+    % REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
 
 3.  Quelles difficultés avez-vous rencontrées pour écrire les
     algorithmes?
@@ -145,7 +145,7 @@ Voici un exemple d'algorithme pour le robot :
 
 :::
 
-+++ {"deletable": false, "nbgrader": {"cell_type": "markdown", "checksum": "05c0255d5284a46ad7d60ba1604593f4", "grade": true, "grade_id": "5", "locked": false, "points": 0, "schema_version": 3, "solution": true}}
++++ {"deletable": false, "nbgrader": {"cell_type": "markdown", "checksum": "63dbdfec0b0ae715c1378fe11451e3d0", "grade": true, "grade_id": "5", "locked": false, "points": 0, "schema_version": 3, "solution": true}}
 
 :::{admonition} Exercice : $\clubsuit$ Un peu de logique et de booléens
 
@@ -155,29 +155,29 @@ Voici un exemple d'algorithme pour le robot :
     -   `op1(a, b): (a ET (NON b)) OU ((NON a) ET b)`
     -   `op2(a, b): (a OU b) ET ((NON a) OU (NON b))`.
 
-	% REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
+    % REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
 
 2.  Que constatez-vous?
 
-	% REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
+    % REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
 
 3.  `op1(a, b)` est en fait une opération très courante en informatique;
     elle a même un nom. Savez-vous comment on l'appelle?
 
-	% REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
+    % REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
 
 4.  Écrivez une opération `op3(a, b)` dont le résultat est vrai si et
     seulement si le résultat de `op1(a, b)` est faux. Utiliser au plus
     5 mots `OU`, `NON` et `ET` dans l'écriture de `op3(a, b)`.
 
-	% REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
+    % REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
 
 5.  Expliquez pourquoi cette opération permet de déterminer si deux mots
     booléens sont identiques.
 
 :::
 
-+++ {"deletable": false, "nbgrader": {"cell_type": "markdown", "checksum": "9c87fcfc225cd97c8857be3473d92d8b", "grade": true, "grade_id": "6", "locked": false, "points": 0, "schema_version": 3, "solution": true}}
++++ {"deletable": false, "nbgrader": {"cell_type": "markdown", "checksum": "52f1d2f3511b7bce76589f0e9c606bcf", "grade": true, "grade_id": "6", "locked": false, "points": 0, "schema_version": 3, "solution": true}}
 
 :::{admonition} Exercice : $\clubsuit$ Notion de test de programme
 
@@ -189,13 +189,13 @@ voulez tester si les résultats de ce programme sont cohérents.
 1.  Spécifiez le programme sans écrire l'algorithme : que va-t-il
     prendre en entrée? renvoyer en sortie?
 
-	% REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
+    % REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
 
 2.  Donnez une série de tests dont vous connaissez le résultat sans
     calculs: situations extrêmes (par ex : tirer verticalement),
     symétries, ...
 
-	% REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
+    % REMPLACER CETTE LIGNE PAR VOTRE RÉPONSE
 
 :::