From 8e02f0662753f0e625cc3155af822c3a05651447 Mon Sep 17 00:00:00 2001
From: Orestis <orestis.malaspinas@pm.me>
Date: Thu, 23 Sep 2021 23:04:25 +0200
Subject: [PATCH] added course 1 and working on 2

---
 slides/.gitignore         |   2 +
 slides/Makefile           |  38 +++
 slides/cours_1.md         | 693 ++++++++++++++++++++++++++++++++++++++
 slides/cours_2.md         |  49 +++
 slides/figs/matrix.png    | Bin 0 -> 5335 bytes
 slides/intro.md           |  69 ++++
 slides/metadata.yaml      |   9 +
 slides/my_highlight.theme | 204 +++++++++++
 8 files changed, 1064 insertions(+)
 create mode 100644 slides/.gitignore
 create mode 100644 slides/Makefile
 create mode 100644 slides/cours_1.md
 create mode 100644 slides/figs/matrix.png
 create mode 100644 slides/intro.md
 create mode 100644 slides/metadata.yaml
 create mode 100644 slides/my_highlight.theme

diff --git a/slides/.gitignore b/slides/.gitignore
new file mode 100644
index 0000000..021299b
--- /dev/null
+++ b/slides/.gitignore
@@ -0,0 +1,2 @@
+*.pdf
+*.err
diff --git a/slides/Makefile b/slides/Makefile
new file mode 100644
index 0000000..1403418
--- /dev/null
+++ b/slides/Makefile
@@ -0,0 +1,38 @@
+PDFOPTIONS = -t beamer
+PDFOPTIONS += -F mermaid-filter
+PDFOPTIONS += --highlight-style my_highlight.theme
+PDFOPTIONS += --pdf-engine xelatex
+PDFOPTIONS += -V theme:metropolis
+PDFOPTIONS += -V themeoptions:numbering=none -V themeoptions:progressbar=foot
+PDFOPTIONS += -V fontsize=smaller
+PDFOPTIONS += -V urlcolor=blue
+
+MD=$(wildcard *.md) # Tous les fichiers .md
+PDF=$(MD:%.md=%.pdf) # Pour les fichier pdf on transforme .md -> .pdf
+MARKDOWN=$(MD:%.md=%.markdown) # Pour les fichier markdown on transforme .md -> .markdown
+
+all: $(PDF) # La cible par défaut (all) exécute les cibles %.pdf
+
+markdown: $(MARKDOWN) # La markdown les cibles %.markdown
+
+%.pdf: %.md metadata.yaml # %.pdf (chaque fichier %.md génère un fichier avec le même nom mais l'extension .pdf et la dépendance metadata.yaml)
+	pandoc -s $(OPTIONS) $(PDFOPTIONS) -o $@ $^
+
+%.markdown: %.md metadata.yaml yq
+	sed '1 { /^---/ { :a N; /\n---/! ba; d} }' $< > no_header
+	grep -v -F -x -f  no_header $< > header.yaml
+	echo "---" > tmp.yaml
+	./yq_linux_amd64 merge metadata.yaml header.yaml >> tmp.yaml
+	cat tmp.yaml no_header > $@
+	rm no_header header.yaml tmp.yaml
+
+yq: # On peut même télécharger un petit programme avec notre makefile
+	wget -nc https://github.com/mikefarah/yq/releases/download/3.4.1/yq_linux_amd64
+	chmod "u+x" yq_linux_amd64 
+
+deploy: all 
+	mkdir -p algo_cours
+	cp *.pdf algo_cours
+
+clean:
+	rm -f *.pdf *.markdown yq_linux_amd64*
diff --git a/slides/cours_1.md b/slides/cours_1.md
new file mode 100644
index 0000000..81ca94e
--- /dev/null
+++ b/slides/cours_1.md
@@ -0,0 +1,693 @@
+---
+title: "Introduction aux algorithmes"
+date: "2021-09-22"
+---
+
+# Qu'est-ce qu'un algorithme?
+
+## Définition informelle (recette)
+
+* des entrées (les ingrédients, le matériel utilisé) ;
+* des instructions élémentaires simples (frire, flamber, etc.), dont les 
+  exécutions dans un ordre précis amènent au résultat voulu ;
+* un résultat : le plat préparé.
+
+. . .
+
+## Histoire et étymologie
+
+- Existent depuis 4500 ans au moins (algorithme de division, crible 
+  d'Eratosthène).
+- Le mot algorithme est dérivé du nom du mathématicien perse
+    *Muḥammad ibn Musā al-Khwārizmī*, qui a été "latinisé" comme 
+    *Algoritmi*.
+
+. . .
+
+## Définition formelle
+
+En partant d'un état initial et d'entrées (peut-être vides), une séquence finie 
+d'instruction bien définies (ordonnées) implémentables sur un ordinateur, afin 
+de résoudre typiquement une classe de problèmes ou effectuer un calcul.
+
+# Notions de base d'algorithmique
+
+## Variable
+
+. . .
+
+* Paire: identifiant - valeur (assignation);
+
+## Séquence d'instructions / expressions
+
+. . .
+
+* Opérateurs (arthimétiques / booléens)
+* Boucles;
+* Structures de contrôle;
+* Fonctions;
+
+
+# Algorithme de vérification qu'un nombre est premier (1/3)
+
+Nombre premier: nombre possédant deux diviseurs entiers distincts.
+
+. . .
+
+## Algorithme naïf (problème)
+
+```C
+est_premier(nombre) {
+    si {
+        pour tout i, t.q. 1 < i < nombre {
+            i ne divise pas nombre
+        }
+    } alors vrai
+    sinon faux
+}
+```
+
+. . .
+
+## Pas vraiment un algorithme: pas une séquence ordonnée et bien définie
+
+. . .
+
+## Problème: Comment écrire ça sous une forme algorithmique?
+
+# Algorithme de vérification qu'un nombre est premier (2/3)
+
+## Algorithme naïf (une solution)
+
+```C
+est_premier(nombre) { // fonction
+    soit i := 2;       // variable, type, assignation
+    tant que i < nombre { // boucle
+        si nombre modulo i = 0 { // expression typée
+            retourne faux    // expression typée
+        }
+        i := i + 1
+    }
+    retourne vrai // expression typée
+```
+
+# Algorithme de vérification qu'un nombre est premier (3/3)
+
+## Algorithme naïf (une solution en C)
+
+```C
+bool est_premier(int nombre) {
+    int i; // i est un entier
+    i = 2; // assignation i à 2
+    while (i < nombre) { // boucle avec condition
+        if (0 == nombre % i) { // is i divise nombre
+            return false; // i n'est pas premier
+        }
+        i += 1; // sinon on incrémente i
+    }
+    return true;
+}
+```
+
+. . .
+
+## Exercice: Comment faire plus rapide?
+
+# Génération d'un exécutable
+
+- Pour pouvoir être exécuté un code C doit être d'abord compilé (avec `gcc` ou `clang`).
+- Pour un code `prog.c` la compilation "minimale" est
+
+    ```bash
+    $ gcc prog.c
+    $ ./a.out # exécutable par défaut
+    ```
+
+- Il existe une multitude d'options de compilation:
+
+    ```bash
+    $ gcc -O1 -std=c11 -Wall -Wextra -g porg.c -o prog -fsanitize=address 
+    -fsanitize=leak -fsanitize=undefined
+    ```
+    1. `-std=c11` utilisation de C11.
+    2. `-Wall et -Wextra` activation des warnings.
+    3. `-fsanitize=…`  contrôles d’erreurs à l’exécution (coût en performance).
+    4. `-g` symboles de débogages sont gardés.
+    5. `-o` défini le fichier exécutable à produire en sortie.
+    6. `-O1`, `-O2`, `-O3`: activation de divers degrés d'optimisation
+
+
+
+# La simplicité de C?
+
+## 32 mots-clé et c'est tout
+
+---------------- -------------- ---------------- ---------------
+`auto`{.C}       `double`{.C}   `int`{.C}        `struct`{.C}   
+`break`{.C}      `else`{.C}     `long`{.C}       `switch`{.C}   
+`case`{.C}       `enum`{.C}     `register`{.C}   `typedef`{.C}  
+`char`{.C}       `extern`{.C}   `return`{.C}     `union`{.C}    
+`const`{.C}      `float`{.C}    `short`{.C}      `unsigned`{.C} 
+`continue`{.C}   `for`{.C}      `signed`{.C}     `void`{.C}
+`default`{.C}    `goto`{.C}     `sizeof`{.C}     `volatile`{.C}
+`do`{.C}         `if`{.C}       `static`{.C}     `while`{.C}
+---------------- -------------- ---------------- ---------------
+
+# Déclaration et typage
+
+En C lorsqu'on veut utiliser une variable (ou une constante), on doit déclarer son type
+
+```C
+const double two = 2.0; // déclaration et init.
+int x;   // déclaration (instruction)
+char c;  // déclaration (instruction)
+x = 1;   // affectation (expression)
+c = 'a'; // affectation (expression)
+int y = x; // déclaration et initialisation en même temps
+int a, b, c; // déclarations multiples
+a = b = c = 1; // init. multiples
+```
+
+# Les variables (1/2)
+
+## Variables et portée
+
+- Une variable est un identifiant, qui peut être liée à une valeur (un expression).
+- Une variable a une **portée** qui définit où elle est *visible* (où elle peut être accédée).
+- La portée est **globale** ou **locale**.
+- Une variable est **globale** est accessible à tout endroit d'un programme et doit être déclarée en dehors de toute fonction.
+- Une variable est **locale** lorsqu'elle est déclarée dans un **bloc**, `{...}`{.C}.
+- Une variable est dans la portée **après** avoir été déclarée.
+
+# Les variables (2/2)
+
+## Exemple 
+
+```C
+float max; // variable globale accessible partout
+int foo() {
+    // max est visible ici
+    float a = max; // valide
+    // par contre les varibles du main() ne sont pas visibles
+}
+int main() {
+    // max est visible ici
+    int x = 1; // x est locale à main
+    {
+        // x est visible ici, y pas encore
+        // on peut par exemple pas faire x = y;
+        int y = 2;
+    } // y est détruite à la sortie du bloc
+} // x est à la sortie de main
+
+```
+
+<!-- TODO: quiz, compile, compile pas -->
+<!-- ```C
+int main() {
+    global = 1;
+} // COMPILE PAS
+```
+
+```C
+int main() {
+    int global = 1;
+    {
+        printf("global = %d", global);
+    }
+} // COMPILE
+```
+
+```C
+int local;
+
+int main() {
+    local = 1;
+    {
+        printf("local = %d", local);
+    }
+} // COMPILE
+```
+
+```C
+#include <stdio.h>
+int local = 0;
+
+int main() {
+    int local = -1;
+    {
+        int local = 1;
+        printf("local = %d\n", local);
+    }
+} // COMPILE
+``` -->
+
+# Quiz: compile ou compile pas?
+
+## [Quiz: compile ou compile pas](https://cyberlearn.hes-so.ch/mod/evoting/view.php?id=1033948)
+
+# Types de base (1/4)
+
+## Numériques
+
+Type                               Signification (**gcc pour x86-64**)            
+---------------------------------- ---------------------------------------------
+`char`{.C}, `unsigned char`{.C}    Entier signé/non-signé 8-bit
+`short`{.C}, `unsigned short`{.C}  Entier signé/non-signé 16-bit
+`int`{.C}, `unsigned int`{.C}      Entier signé/non-signé 32-bit
+`long`{.C}, `unsigned long`{.C}    Entier signé/non-signé 64-bit
+`float`{.C}                        Nombre à virgule flottante, simple précision
+`double`{.C}                       Nombre à virgule flottante, double précision
+---------------------------------- ---------------------------------------------
+
+**La signification de `short`{.C}, `int`{.C}, ... dépend du compilateur et de l'architecture.**
+
+# Types de base (2/4)
+
+Voir `<stdint.h>` pour des représentations **portables**
+
+Type                               Signification
+---------------------------------- ---------------------------------------------
+`int8_t`{.C}, `uint8_t`{.C}        Entier signé/non-signé 8-bit
+`int16_t`{.C}, `uint16_t`{.C}      Entier signé/non-signé 16-bit
+`int32_t`{.C}, `uint32_t`{.C}      Entier signé/non-signé 32-bit
+`int64_t`{.C}, `uint64_t`{.C}      Entier signé/non-signé 64-bit
+---------------------------------- ---------------------------------------------
+
+. . .
+
+## Prenez l'habitude d'utiliser ces types-là!
+
+# Types de base (3/4)
+
+## Booléens
+
+- Le ANSI C n'offre pas de booléens.
+- L'entier `0`{.C} signifie *faux*, tout le reste *vrai*.
+- Depuis C99, la librairie `stdbool` met à disposition un type `bool`{.C}.
+- En réalité c'est un entier:
+  - $1 \Rightarrow$ `true`{.C}
+  - $0 \Rightarrow$ `false`{.C}
+- On peut les manipuler comme des entier (les sommer, les multiplier, ...).
+
+# Quiz: booléens
+
+## [Quiz: booléens](https://cyberlearn.hes-so.ch/mod/evoting/view.php?id=1032492)
+
+<!-- TODO Quiz en ligne -->
+<!-- ```C
+if (42) { /* vrai */ }
+
+int x = 100;
+if (x == 4) { /* faux */ }
+if (x) { /* vrai */ }
+
+int x = 100;
+while (x−−) { /* répète tant que x est différent de 0 */ }
+
+if (0) { /* faux */ }
+if (i = 4) { /* vrai */ }
+if (i = 0) { /* faux */ }
+
+#include <stdbool.h>
+
+bool x = true;
+if (x) { /* vrai */ }
+``` -->
+
+# Types de base (4/4)
+
+## Conversions
+
+- Les conversions se font de manière:
+  - Explicite:
+    ```C
+    int a = (int)2.8;
+    double b = (double)a;
+    int c = (int)(2.8+0.5);
+    ```
+  - Implicite:
+    ```C
+    int a = 2.8; // warning, si activés, avec clang
+    double b = a + 0.5;
+    char c = b; // pas de warning...
+    int d = 'c';
+    ```
+
+# Quiz: conversions
+
+## [Quiz: conversions](https://cyberlearn.hes-so.ch/mod/evoting/view.php?id=1033446)
+
+<!-- TODO Quiz en ligne -->
+<!-- ```C
+int a = (int)2.8; // 2
+
+double b = 2.85;
+int c = b + 0.5; // 3
+
+int d = a + 0.5; // 2
+
+bool d = 2.78; // 1
+bool e = 1.0; // 1
+``` -->
+
+# Expressions et opérateurs (1/6)
+
+Une expression est tout bout de code qui est **évalué**.
+
+## Expressions simples
+
+- Pas d'opérateurs impliqués.
+- Les littéraux, les variables, et les constantes.
+
+```C
+const int L = -1; // 'L' est une constante, -1 un littéral
+int x = 0;        // '0' est un litéral
+int y = x;        // 'x' est une variable
+int z = L;        // 'L' est une constante
+```
+
+## Expressions complexes
+
+- Obtenues en combinant des *opérandes* avec des *opérateurs*
+
+```C
+int x;     // pas une expression (une instruction)
+x = 4 + 5; // 4 + 5 est une expression
+           // dont le résultat est affecté à 'x'
+```
+
+# Expressions et opérateurs (2/6)
+
+## Opérateurs relationnels
+
+Opérateurs testant la relation entre deux *expressions*:
+
+  - `(a opérateur b)` retourne `1`{.C} si l'expression s'évalue à `true`{.C}, `0`{.C} si l'expression s'évalue à `false`{.C}.
+
+| Opérateur | Syntaxe      | Résultat             |
+|-----------|--------------|----------------------|
+| `<`{.C}   | `a < b`{.C}  | 1 si a <  b; 0 sinon |
+| `>`{.C}   | `a > b`{.C}  | 1 si a >  b; 0 sinon |
+| `<=`{.C}  | `a <= b`{.C} | 1 si a <= b; 0 sinon |
+| `>=`{.C}  | `a >= b`{.C} | 1 si a >= b; 0 sinon |
+| `==`{.C}  | `a == b`{.C} | 1 si a == b; 0 sinon |
+| `!=`{.C}  | `a != b`{.C} | 1 si a != b; 0 sinon |
+
+# Expressions et opérateurs (3/6)
+
+## Opérateurs logiques
+
+| Opérateur | Syntaxe      | Signification        |
+|-----------|--------------|----------------------|
+| `&&`{.C}  | `a && b`{.C} | ET logique           |
+| `||`{.C}  | `a || b`{.C} | OU logique           |
+| `!`{.C}   | `!a`{.C}     | NON logique          |
+
+# Quiz: opérateurs logiques
+
+## [Quiz: opérateurs logiques](https://cyberlearn.hes-so.ch/mod/evoting/view.php?id=1033629)
+
+<!-- TODO: Quiz -->
+<!-- ```C
+1 && 0 == 0
+7 && 3 == 1
+4 || 3 == 1
+!34 == 0
+!0 == 1
+
+Soit n un unsigned char initialisé à 127:
+!n == 0
+``` -->
+
+# Expressions et opérateurs (4/6)
+
+## Opérateurs arithmétiques
+
+| Opérateur | Syntaxe      | Signification        |
+|-----------|--------------|----------------------|
+| `+`{.C}   | `a + b`{.C}  | Addition             |
+| `-`{.C}   | `a - b`{.C}  | Soustraction         |
+| `*`{.C}   | `a * b`{.C}  | Multiplication       |
+| `/`{.C}   | `a / b`{.C}  | Division             |
+| `%`{.C}   | `a % b`{.C}  | Modulo               |
+
+# Expressions et opérateurs (5/6)
+
+## Opérateurs d'assignation
+
+| Opérateur | Syntaxe      | Signification                               |
+|-----------|--------------|---------------------------------------------|
+| `=`{.C}   | `a = b`{.C}  | Affecte la valeur `b` à la variable `a`     |
+|           |              | et retourne la valeur de `b`                |
+| `+=`{.C}  | `a += b`{.C} | Additionne la valeur de `b` à `a` et        |
+|           |              | assigne le résultat à `a`.                  |
+| `-=`{.C}  | `a -= b`{.C} | Soustrait la valeur de `b` à `a` et         |
+|           |              | assigne le résultat à `a`.                  |
+| `*=`{.C}  | `a *= b`{.C} | Multiplie la valeur de `b` à `a` et         |
+|           |              | assigne le résultat à `a`.                  |
+| `/=`{.C}  | `a /= b`{.C} | Divise la valeur de `b` à `a` et            |
+|           |              | assigne le résultat à `a`.                  |
+| `%=`{.C}  | `a %= b`{.C} | Calcule le modulo la valeur de `b` à `a` et |
+|           |              | assigne le résultat à `a`.                  |
+
+# Expressions et opérateurs (6/6)
+
+## Opérateurs d'assignation (suite)
+
+| Opérateur | Syntaxe      | Signification                               |
+|-----------|--------------|---------------------------------------------|
+| `++`{.C}  | `++a`{.C}    | Incrémente la valeur de `a` de 1 et         |
+|           |              | retourne le résultat (`a += 1`).            |
+| `--`{.C}  | `--a`{.C}    | Décrémente la valeur de `a` de 1 et         |
+|           |              | retourne le résultat (`a -= 1`).            |
+| `++`{.C}  | `a++`{.C}    | Retourne `a`{.C} et incrémente `a` de 1.    |
+| `--`{.C}  | `a--`{.C}    | Retourne `a`{.C} et décrémente `a` de 1.    |
+
+
+# Structures de contrôle: `if`{.C} .. `else if`{.C} .. `else`{.C} (1/2)
+
+## Syntaxe
+
+```C
+if (expression) {
+    instructions;
+} else if (expression) { // optionnel
+                         // il peut y en avoir plusieurs
+    instructions;
+} else {
+    instructions; // optionnel
+}
+```
+
+```C
+if (x) { // si x s'évalue à `vrai`
+    printf("x s'évalue à vrai.\n");
+} else if (y == 8) { // si y vaut 8
+    printf("y vaut 8.\n");
+} else {
+    printf("Ni l'un ni l'autre.\n");
+}
+```
+
+# Structures de contrôle: `if`{.C} .. `else if`{.C} .. `else`{.C} (2/2)
+
+## Pièges
+
+```C
+int x, y;
+x = y = 3;
+if (x = 2)
+    printf("x = 2 est vrai.\n");
+else if (y < 8)
+    printf("y < 8.\n");
+else if (y == 3)
+    printf("y vaut 3 mais cela ne sera jamais affiché.\n");
+else
+    printf("Ni l'un ni l'autre.\n");
+    x = -1; // toujours évalué
+```
+
+# Quiz: `if ... else`{.C}
+
+## [Quiz: `if ... else`{.C}](https://cyberlearn.hes-so.ch/mod/evoting/view.php?id=1033916)
+
+
+# Structures de contrôle: `while`{.C}
+
+## La boucle `while`{.C}
+
+```C
+while (condition) {
+    instructions;
+}
+do {
+    instructions;
+} while (condition);
+```
+
+## La boucle `while`{.C}, un exemple
+
+```C
+int sum = 0; // syntaxe C99
+while (sum < 10) {
+    sum += 1;
+}
+do {
+    sum += 10;
+} while (sum < 100)
+```
+
+# Structures de contrôle: `for`{.C}
+
+## La boucle `for`{.C}
+
+```C
+for (expression1; expression2; expression3) {
+    instructions;
+}
+```
+
+## La boucle `for`{.C}
+
+```C
+int sum = 0; // syntaxe C99
+for (int i = 0; i < 10; i++) {
+    sum += i;
+}
+
+for (int i = 0; i != 1; i = rand() % 4) { // ésotérique
+    printf("C'est plus ésotérique.\n");
+}
+```
+
+# Exercice: la factorielle
+
+Écrire un programme qui calcule la factorielle d'un nombre
+$$
+N! = 1\cdot 2\cdot ... \cdot (N-1)\cdot N.
+$$
+
+## Par groupe de 3: écrire un pseudo-code
+
+. . .
+
+```C
+int factorielle(int n) {
+    i = 1;
+    fact = 1;
+    pour i <= n {
+        fact *= i;
+        i += 1;
+    }
+}
+```
+
+# Exercice: la factorielle
+
+\footnotesize
+
+Écrire un programme qui calcule la factorielle d'un nombre
+$$
+N! = 1\cdot 2\cdot ... \cdot (N-1)\cdot N.
+$$
+
+## Par groupe de 3: écrire un code en C
+
+Quand vous avez fini postez le code sur le salon matrix.
+
+. . .
+
+```C
+#include <stdio.h>
+int main() {
+   int nb = 10;
+   int fact = 1;
+   int iter = 2;
+   while (iter <= nb) {
+      fact *= iter;
+      iter++;
+   }
+}
+```
+
+. . .
+
+## Comment améliorer ce code? (notez ça sur une feuille)
+
+
+# Entrées/sorties: `printf()`{.C} (1/2)
+
+## Généralités
+
+- La fonction `printf()`{.C} permet d'afficher du texte sur le terminal:
+
+    ```C
+    int printf(const char *format, ...);
+    ```
+- Nombre d'arguments variables.
+- `format`{.C} est le texte, ainsi que le format (type) des variables à afficher.
+- Les arguments suivants sont les expressions à afficher.
+
+# Entrées/sorties: `printf()`{.C} (2/2)
+
+## Exemple
+
+```C
+#include <stdio.h>
+#include <stdlib.h>
+
+int main() {
+    printf("Hello world.\n");
+    int val = 1;
+    printf("Hello world %d time.\n", val);
+    printf("%f squared is equal to %f.\n", 2.5, 2.5*2.5);
+    return EXIT_SUCCESS;
+}
+```
+
+# Entrées/sorties: `scanf()`{.C} (1/2)
+
+## Généralités
+
+- La fonction `scanf()`{.C} permet de lire du texte formaté entré au clavier:
+
+    ```C
+    int scanf(const char *format, ...);
+    ```
+
+- `format`{.C} est le format des variables à lire (comme `printf()`{.C}).
+- Les arguments suivants sont les variables où sont stockées les valeurs lues.
+
+# Entrées/sorties: `scanf()`{.C} (2/2)
+
+## Exemple
+
+```C
+#include <stdio.h>
+#include <stdlib.h>
+
+int main() {
+    printf("Enter 3 numbers: \n");
+    int i, j, k;
+    scanf("%d %d %d", &i, &j, &k);
+    printf("You entered: %d %d %d\n", i, j, k);
+    
+    return EXIT_SUCCESS;
+}
+```
+
+# Exercice: la factorielle en mieux
+
+## Individuellement
+
+1. Ajoutez des fonctionnalités à votre code.
+2. Écrivez l'algorithme de calcul de deux façon différentes.
+3. Pour celles et ceux qui ont fini pendant que les autres essaient: faites-le 
+   en récursif (sans aide).
+
+. . .
+
+## Postez vos solutions sur matrix!
+
+
diff --git a/slides/cours_2.md b/slides/cours_2.md
index c43498f..0be09fe 100644
--- a/slides/cours_2.md
+++ b/slides/cours_2.md
@@ -1,5 +1,54 @@
+---
+title: "Introduction aux algorithmes"
+date: "2021-09-29"
+---
+
+# Exercice: test si un nombre est premier
+
+## Avec tout ce que vous avez appris aujourd'hui (groupe de 2):
+
+* Écrivez pour vous même le code testant si un nombre est premier.
+* Quels sont les ajouts possibles par rapport au début du cours?
+* Rencontrez-vous des problèmes éventuels de compilation?
+* Voyez-vous une façon de générer des nombres premiers avec votre programme?
+
+. . .
+
+## Implémentez-la et postez votre code sur le salon matrix.
+
+# Corrigé: enfin pas vraiment mais juste un possible
+
+\footnotesize 
+
+```C
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <stdbool.h>
+int main() {
+   int nb = 1;
+   printf("Entrez un nombre: ");
+   scanf("%d", &nb);
+   bool premier = true;
+   for (int div = 2; div <= sqrt(nb); div++) {
+      if (nb % div == 0) {
+         premier = false;
+         break;
+      }
+   }
+   if (premier) {
+      printf("Le nombre %d est premier\n",nb);
+   } else {
+      printf("Le nombre %d n'est pas premier\n",nb);
+   }
+   return 0;
+}
+```
+
 # Quelques algorithmes simples
 
+## Voyons quelques algorithmes supplémentaires
+
 - Plus petit commun multiple (PPCM) de deux nombres
 - Autre algorithme de calcul du PPCM de deux nombres
 - Plus grand commun diviseur (PGCD) de deux nombres
diff --git a/slides/figs/matrix.png b/slides/figs/matrix.png
new file mode 100644
index 0000000000000000000000000000000000000000..7fc07f4c8b426af6d9b873f349c832844d92cf50
GIT binary patch
literal 5335
zcmeAS@N?(olHy`uVBq!ia0y~yU}OMc4mJh`hM1xiX$%Y^^E_P~Ln`9l&b^&<dl#RJ
z|G)o>s~@GAuTAPa!sEU~ckMp5JqZjtO<N|{{rUChyZyg~3|x1D8u=LtPVabZ!u2PN
zfnfrNMnN(w!-3xB{?{4|3?~>xc5Gx~cyR3C@lp{6h9?YMcOn=W3LZarY{kXEP{hER
zw}ydXN8yJ;Syl!H%LXR%Fb0M@7C(0MF)=jAI5bLYGce@I)Wo<mGC1%pIM6G~z+ld2
zw{9^5g93ZNgJWC_4btrL*8>?CCNPs~?Ew*nnwpwDQ;)d+5BECFU)qy(Unt=3{#Y6N
zzH9RZqp$9t7H0fyw$HaE@2h_^F<7s%IJ&Yg@GYamvNa3`!rU1c7|gg<sGsX;3i|HC
z9?-7Jz`($;AWr|X?&J@TxdM3RU!J!*Iiz|W!_fz&XVOY^X3niU%fv7#OYC`3SFr5j
zTg(kf9~c@`M8X-?F~l$~nKU!I<|p5S9QL{Fis}BwQQlj#3;uX4-Tpan@v4Q7?_ZQU
z7o)wkYwh2cKh|GKasO;_vf$f1xzFm89ev}D+cRtkJ?nWl<;+}(cXmfi_o+YrvEohk
zPtgZC>@OLnl$^L}bs=2w)e}C38^<IVIPw|ze2P>{|0vZ=UBbq2{^lbGzmt{>3=C6h
zG;d#GoU+tvPnTU914F57>ggvZSI&$3lqP+0!k5E0!(YX%&UztoJakLf(U+m}j8{`K
zI44!v%-*;>d~ce}+tU|abnm2GTvcrOPd0PuvxjS~8>SwzZVc*NBX%(P-x9T~NlXl;
zhra&aQyeRG|Lk=h{oia8e9E>i2(4C^U|6tjR#ldD?3Gh9m>cGHFgBzIPMURrF-Mev
zp;Y1YG`@$EPOf7M-#VQ&)8>Wc^68uHK<Sl{Z(k!T!z+(MhqZC_JD9FKUKsU>ZNuUl
zUJMqjOWE#j^cP*bd7H6Y@4_tmWdDBCkh@oF85tM?PDz>yhBy1@W?bE;a*JO%oj0_+
zG#=#rA~#<bh7UU03>A};ikU)JEvoNHTeI-p%2a-aV^>R(*1cNyZW7-E-vvw9%yQSO
zDakU(9@x%Q!!yIPtt3$UGb4lR+S+KV26M~YbQY~jC#&DKUe7}ouKsNEZE@Y5={6CQ
zq*mRss_S|DBAaa;gQCVtPJV`Yt?Ue6{R9~}xK@;ezm<<>WVqe1qUr);#&tHuzq6N>
zFqAMzvtBtA>i;&(Y*n%4+TtSKtsLnxI<Mw|(i%fAU*6YHUsfXq4v{ZBLF@f=zAk)q
zBF;AOCBv(H`Eyr=7#JGzS!GVFQ0HS<G5t<Y^U{5@^-oXV%e11;;@in5q5dAvS^VB!
z-)X)4Pw}HAPMSAUEq;d{S9z?s{;#Iqf5Q{}S0_zcvAiHVmtn!O^1XNcj>X(nWe5=E
zzPX(1lx5)yhF6Y0V$XYKT(|wbp7(h@TafDM8|OXPtQtN>Fg6tO@~<z5VVt*g=EQ;$
zhObNJ3HCpcDn0*#;Yt35m5;36RvJmZU^u31rYv{TG^9WOFWZ7H)5CT@3wx{17EEe1
zeHA;0>xtygYf+DL40QiX6l^_E{hGPq<Mq$w%r~{4JxumzNN`MHU|@)tP`2BfseyGO
z0|P^X<1NO9aPhx)Z$&wTvEN+%<lgz(3yeA)Jgvd{b5>_;RXFSA9mm9=>aU;mB~SlL
zmP8uEgAD(4@%B|mt#A4N6nP-q>iJfZ!AAR~gY(ZVYNETX&oDFi^%*fRFsLuTap4O?
zg2%pp2@DJjzalrCV`7-I#ulqg5*I^S&Hr1Kf^m^^{7%TqUo8#V==IKY>+*K7SNqb|
zysg>q())U%EyIn#W0gzGj;(MEnH)a%f8u<vA5Y?ftC<+iOENMr9B^w4*~r*%=BoP2
z$M+h+k)5%{OH*OnF8*~4e(QfF_c(jqV<?L{bnO1};6qQ2JpM3G>XtC5Bw2d-+|KjX
z$y1t&CWX(PZ{F~^!Grxl%3_0Kpcp&nU7;>l!tk}6d7;UyWvA~m1gWQMKb+KBw`AF?
z_N@C|i=uMQ?KRsOZ(14pe~#a=$j73MOS8Bc%0y-dDx7Qznq1yipQWV6$j<QU6*DL&
zO;g$6#r-dN2@@Z~6;U<@h6Ph}85XEq&R1T3IB5N}uXnfTGBPk|JQZTlILX5BEv0DR
ziv>Yb+z%8Bi!jVt{eG!+!?coD+<#9^4;S_NIz@7G$omt0@~@<l<#OGvEf@WI!EjD;
z@vEY3?}FDcFgWn;PFt_m870$ycSUxFT*<qY?DttpcG-PhGWX)%ZF}sa%NaH-{>QUP
zo!iA%h~dMUeZs}*JyPYS+g|+v=j~^2TztwqwVupLDmymi$iL$+a_)lN_T*+K2g5f}
zi|BGtC_6mvZ8mQRs;cO>IQO{y)-6l^2<`Z}m(?HMtMLnxf2%FYANqZ2wsq>lU(eSp
z?3;Os@eIclW?|En>3gi08_qD_o!IwkukFnyW(G$8tOX1Xu`yN+>1)$Op7)r(iu{o3
z$-ZIn3}KC}rwjeW(&J+ow{fjt?-pL3lD<-GOBO#U))`G7hJM(3FD2x_+L&nFE%%qN
z{n)COE}O~&a$G`C;XN^ilkIDlbQnMLvUSr8d4E$)-Z=FCq@5GyoPMb`Y2WvxvTNs;
zmoOMJE#0>6<uo5(g|B+Ed>9x$tXU?tKg?!MjL)&~ncNI-Ry<`1@Ks<4&_9%7llJ1>
zn{drrOLQ3+7^GQ4CaB(iAQ^7Nu%TB1Waom9953c<D`9BL()t?u`^oQS<LOmS%ls0)
z_sxpBuh}$pqwmkZ7w&$H)tI?LQ<eb?9YnPJCtH@(x^}7kEqG>S?iIgz^)7Y)+^hSa
zgwMLVRsP#biB+?#t8Jx>mogW$L}{K{7;&sV$nx<;&6xtL-Z3P^)P{ckDEj{#0|Sfc
zWQF2qLff)tuR6)Wkh5|>`>I*}>p2*7c;_x!%DiET9`7TrfJrMeUDy>eI2h&~UBoOP
z^y0u2z6AFfQx|<;3-Hfk2)O?0L{aKG{r3!4#3HwrA2L=}IC*HM;q+C>pT6@>`WUda
zXr1IMsa4xNs~I+|`0b%~vS;U&CCm)xyHp*Q9eccC_1`;J)?Z2Sd%b4fi&c9c-)8Y#
zR4>ECaAonDELZk`>)$REwRN0hzI)1g=B$pj24`k?`!ZWGST*FcG91{s{yD>fKK0Pm
zk~^dC*WR0C&Tx;xjBAONCP+aL`-G%flM7x|JAKM^u<e|q-LQD=s?Orxpjv;&lNT48
zx?R<pX|EYSt(-yAox#D)({v@{ft}ZP`-JqTGcs7;TA@Bgc*zr~lfps_R~D}XJ0)z}
z66Oi2w`CWonaVQAI+%Z+q<-a8i?`4mz6Jk0%#`bQdFt4RsVBdF<1Kkuv_boT8>3Z2
z)z1}Cs{9jv>D`{D&)p#TXq9@mu)|lAfbU;8-tW#_`fJ6n=NXf<R(!GXJEvLAz|a)s
zXTad_w{K0{`$_Sa1TQ75S~<D+6dPm1f@#8_1ll4}ZB$z17s=1Sk!5+1fq}un!;s;F
zJLA`T({=o|isrI{Q<TBO^)Hzksur%j*5!V{N@z~R)%5>=E<c;kt@F2<;Z^49c`MGn
zT=VW^r1RT?sO%NRmWuwOZx8ohiLqhQTDmXanw4RFl)~drXXiTV%CM(+9*|qR{?|gL
zyu6TCt1as+HmrM}5yZ~GFlB<w?NzPJ3`V<_r!g{Ed#zIM3uZ|VHkqohw^HW*_h&x;
z?z!ZjueJ~WTflYv=JlJ&GWO@r#jayWcel0JA7xR(;P{a_n32J%VW9~VL-fy}Djrr>
z2_6Q9h6#G-m#u7h&SfCNR{bHD@j*>Y@@gFix7>-rtUn^I@4S7sLO;-Srr`1=VV?hk
zJ{J7(erflVmw~~i{WNEl*26hZ3csyhxA@ofS@Eq~AJ5+ve>Lvv`Hk!h)~hVn&eHmK
zswMdQt1_KeRwtPl8BD)|%BR#W<~5g&{Fh*42;Ep%&A`Cm70JTzs((`!yQTB(#R|-z
zJSt{?>YfzC%J7>{oEKNs>x2eeJmJZ<wRGOY`Hzo3)J*+j_OfTstc`9#$M^o#d(RLT
zctnzQ(x=~s{0thGu3EgD8xzoNR#|a%>W@t<4Axzij^VBB45ddWee@7Z*J@*M*wJpC
z`>1EZ^~*bRSH7Fd=MWrs^?IX!5pSuUFRxWY?A|#GRv%jK$Iq}pbG_J<$=oMRuk182
zWnf?kFkY51-zR1{M{q;wwXoX#e?%9|FqSrUuSlP}*D#A=Zm`AH>(_4i37)xd_hR{Z
z@$~g8w?=;qmQS6$bHO>&r-A`@r%b+bPRg%wMZSQx@VSrYHMK&2Pf<G;7o5$^VESs&
zUg4O+PUm8E&#<8QtE-;Qx0=3q=VE=?hQ%fIJhBJ+-29rD8tOLv-B|F2m7%m&)EnGd
zzrd*RbaVdhPX+<y{GgBvSiLNnpMk0AoJHpxcOyB*<ISf<6Jicu;R&{Cc=CJ>U+h&w
zzM6Y4!yST8ex7msqSn@Z%tEH(QPrW(i?$TignVITu+CCtUaHn9v?qK+=@zfIw>A4x
zY_9B-St}zi3T|wEdV2Dj=c|RR|0Umuv`1|zVQ9=KWUUap=y}gU<54g}LsgFK+H>cG
zL1luXhJ~l?76n-cuYLDFGcYh1ObK9U;7ibG>|<N+vu3fa>VBu!Tgq1c&i>>zt>=D^
ze^3ao?Al2?Uq9&#nh<Qokm_8YGg-;%_4{5%hEmnJKNuUT%me#fZVNGRcri8XieOl<
zF7)&yK83}}DPjx((*+r>Y-M6t*uJCZ$??q$4Z998ELbPXz`(FHCs2OF9QIuyr#TtC
z6yHiMeN;Gudp`G{SMMIVFq;O>dAq80@h$r&fyY<WSt|y}UzN*V@oQDx_CEp7z4l$O
zj*|Vk=-kq*cTboYZUibwu1NW`jA_j;c7}OV%N^Ff;$vv(DL>*Ry8JWS0<~rZ*Xvgz
zqpyZvoyPYdk}>pi-UHU=r}E6JT1t-uO%B=moNIz-R%rP;2B)R+Gng12GEU-Ka8GGH
zOX+K^$t^tj438Nm{a<k8)Db2Ih6R&8y}Ek(<jYfbT4upk49i1T=hR(EJC?cNo#9NL
zRrQ<K8LearT;HFiQ}u0S#M(9d3<5t&7EISTbw1ehsmNyIW13D38_setEC}(q5N4}5
zHzj;KH^VFbF5^cRyW+LN7#!A4nqbQyvH!BQs|ULS`-im-U5ogH85kG}K0P}>BjnvB
z#vYf%1RVwj2IiN_^|`+?bQuhUS{pYqFfi~e;b)K#d@p-k&2#Oc<zJoboll4Co_#0V
zNbcn2o1M8q;;HL2<(ajlt5R>L9J2I$WV2)G7Z!%c^ZoWLX`4Sg>euT7D_Q0m@-xg>
zSXA4aV)KIG)vo*3jAj;;Fg(tj(!<Um(SQ7Dx`&z!gM|O|6dQ&E6*hYI&PERz4pi(?
zdCbUg>~W#R;Zw)8kFR~Qxg+X@U(o98Ehe5vv%cp0t^2br(WrjTpU`7IKSdO#hIAz>
zZ#&7b>L@3}Jmu$4_!(A&GBDh@$jNYJ((+VSc7t^fdn6ec7;b1hn6s_AlZzp3%KINu
zpe)qj&w53>`S#zQ={aSfQ3M7Ch7&<gpXZ!Ad~K)ouUWCR3yQxjS@&?ugI6z2ANL-<
z==C-EnC6=!&R=aM`AgqEl|2yj+}^J2tJgbDhAY8B3|F>#MKU#*?_!c+jn$na*-$JL
z^0k@oKwzac8v{ebLLIMdCm0emM6Q9_;cJfkH0EI7Ir+W1V3TriIWq%8!z^RzY6b%p
zc?OSdwc77btUSK&N#=rgnKo1ZpL<aAX>yC_rRi5<{MM;|PCVZ~{Vl_!lMA@scdQee
zo%LSjVUKCwH&%vuQv*L29Q(?^(6WvpYvamq3<m-qY(2)nu<*tUhGUb<*-~CGyeed3
zV0aMSD0$Q}nU{fqVHek$ef+DQJmp;=eQDjnS2N1ZcN}my>wJ&F$uX#vo#F8zW(GON
z-EZ@{3)cT&o8Xfr>a})K$n&DQ@Ol}}`t*SB)myebZr`=7SYpNXMNg!%=KK&*_@Xz_
zONYH?<yQG1i`T0?m%kHdSiyDuEh8uf7#Oy3PPCaDZg)zqOm#lrynpu0s?pD_ZvUBf
z*>d3(!&SE74Zr5@x_WZOF7?yQ3@v`qqD(6ns5>ru$H~CJVESJBTMVO9KoED-R(1x4
z1wj{9@iK5QI@GQxdUq?!`qh>>=VsX6pPT3DcdvQ>i!U?WS=X$}{d5qNQM=3=WLdAI
z_>1Khtvmccs{WJDRhQV^p>wi=tS5N>WM^o}P-Rxt`JFq<ig%Lh>^a`Lhn_rt{^}Nk
z!|qcSKiBm<<T@alu-M^MOUZ)uDtYf&{2cdhRcC)x{kf1;;8wAz=cMnB>JPG%w*3hf
zKB}3P&XdpJ7xqtf@v+jJt#31|7(gYYKkFQ&5<V8I26--vL(4f<%q#Od5c+@8+RdBq
zPuXT{C7HfH%Vv)06~mJ=PG|3bWzHDtE>q3$V1=2To9-c%6IZq#-~0AF1H&(=xk-!+
zeiOG^uZ(J8SfIT!_rs=qhHdVL92gWjL`_&3?ByQy=$kA(#K<6K%OuBYaFb8X|6Ir+
z+h>fRXlFE)oYd*TJ|SeY-E^tXAY)(0{ha3cV)gEbdyFfj=Ox-d-uye<_tleqS0c`8
zoLl{Sc@`goSS;hD&KWv$p6t7l;`8fa%*HE!SA8@76a1Y8-0EjoFfHJ&9K)5ZQCTNN
z6MFv`b3J+05UlLZ?!fNAz96hO)1JBD)iqFdW5~KX;~T>Pk-TpP>likR{*TIcYb;>B
zajeXXeS_NE2vOF61<M&2UT7XUANb%97efO#yZH5CB=kqV<DGoPr}ON+puq5S^>bP0
Hl+XkKZP6_@

literal 0
HcmV?d00001

diff --git a/slides/intro.md b/slides/intro.md
new file mode 100644
index 0000000..5b75c15
--- /dev/null
+++ b/slides/intro.md
@@ -0,0 +1,69 @@
+---
+title: Introduction générale
+date: 2020-09-16
+---
+
+# La hotline
+
+Nom                    Mél                               Bureau
+--------------------   ------------------------------    --------------------
+Paul Albuquerque       paul.albuquerque@hesge.ch         B410
+Orestis Malaspinas     orestis.malaspinas@hesge.ch       A401
+--------------------   ------------------------------    --------------------
+
+Utilisez le libre service (l'horaire sera fixé prochainement).
+
+Salon de discussion [Matrix](https://matrix.to/#/!tuZtXjUSPbnRfBsFXv:matrix.org?via=matrix.org), installez [element.io](https://element.io).
+
+![](figs/matrix.png){width=20%}
+
+# Cyberlearn
+
+Tout le contenu de ce qu'on raconte se trouve sur cyberlearn:
+
+- Algorithmes et structures de données
+  - <https://cyberlearn.hes-so.ch/course/view.php?id=13941>
+  - Clé d'inscription: algo_2020_21
+
+- Programmation Sequentielle en C
+  - <https://cyberlearn.hes-so.ch/course/view.php?id=12399>
+  - Clé d'inscription: PS_2018
+
+# Organisation du module
+
+* Deux cours, 50% chacun.
+1. Algorithmes et structures de données:
+    * 1er semestre:
+        * bases de programmation en C jusqu'à Noël.
+        * algorithmique jusqu'à fin janvier.
+    * 2e semestre:
+        * algorithmique.
+    * Deux évaluations écrites par semestre.
+2. Programmation séquentielle en C
+    * Familiarisation avec l'environnement Linux.
+    * Travaux pratiques en C.
+    * Apprentissage du gestionnaire de versions: git.
+    * Plusieurs "petits" exercices illustrant les concepts d'algorithmique 
+      (1-2 séances).
+    * Évaluations:
+        * Un projet de programmation.
+        * Une évaluation machine.
+
+# Sondage: expérience de programmation
+
+## [Sondage: expérience de linux](https://cyberlearn.hes-so.ch/mod/evoting/view.php?id=1291283)
+
+## [Sondage: expérience de programmation](https://cyberlearn.hes-so.ch/mod/evoting/view.php?id=1035242)
+
+**Installez un lecteur de QR code s'il-vous-plaît.**
+
+# Questions?
+
+- N'hésitez pas à poser des *questions*, nous sommes là pour ça! [^1]
+- Ne restez pas coincés pendant des jours sur un problème.
+- Utilisez le *libre-service*!
+- N'hésitez pas à faire des *retours*: *négatifs* ou *positifs*.
+
+[^1]: Chaque étudiant·e·s a un quota de 5 questions par semestre.
+
+
diff --git a/slides/metadata.yaml b/slides/metadata.yaml
new file mode 100644
index 0000000..74c008c
--- /dev/null
+++ b/slides/metadata.yaml
@@ -0,0 +1,9 @@
+---
+subtitle: "Programmation séquentielle en C, 2020-2021"
+author: "Orestis Malaspinas (A401), ISC, HEPIA"
+institute: En partie inspirés des slides de F. Glück, P. Albuquerque, et ma créativité sans limite
+lang: fr-CH
+revealjs-url: /reveal.js
+mathjaxurl: "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_HTML"
+---
+
diff --git a/slides/my_highlight.theme b/slides/my_highlight.theme
new file mode 100644
index 0000000..1d80b47
--- /dev/null
+++ b/slides/my_highlight.theme
@@ -0,0 +1,204 @@
+{
+    "text-color": null,
+    "background-color": "#f0f0f0",
+    "line-number-color": "#aaaaaa",
+    "line-number-background-color": null,
+    "text-styles": {
+        "Other": {
+            "text-color": "#8f5902",
+            "background-color": null,
+            "bold": false,
+            "italic": false,
+            "underline": false
+        },
+        "Attribute": {
+            "text-color": "#c4a000",
+            "background-color": null,
+            "bold": false,
+            "italic": false,
+            "underline": false
+        },
+        "SpecialString": {
+            "text-color": "#4e9a06",
+            "background-color": null,
+            "bold": false,
+            "italic": false,
+            "underline": false
+        },
+        "Annotation": {
+            "text-color": "#8f5902",
+            "background-color": null,
+            "bold": true,
+            "italic": true,
+            "underline": false
+        },
+        "Function": {
+            "text-color": "#000000",
+            "background-color": null,
+            "bold": false,
+            "italic": false,
+            "underline": false
+        },
+        "String": {
+            "text-color": "#4e9a06",
+            "background-color": null,
+            "bold": false,
+            "italic": false,
+            "underline": false
+        },
+        "ControlFlow": {
+            "text-color": "#204a87",
+            "background-color": null,
+            "bold": true,
+            "italic": false,
+            "underline": false
+        },
+        "Operator": {
+            "text-color": "#ce5c00",
+            "background-color": null,
+            "bold": true,
+            "italic": false,
+            "underline": false
+        },
+        "Error": {
+            "text-color": "#a40000",
+            "background-color": null,
+            "bold": true,
+            "italic": false,
+            "underline": false
+        },
+        "BaseN": {
+            "text-color": "#0000cf",
+            "background-color": null,
+            "bold": false,
+            "italic": false,
+            "underline": false
+        },
+        "Alert": {
+            "text-color": "#ef2929",
+            "background-color": null,
+            "bold": false,
+            "italic": false,
+            "underline": false
+        },
+        "Variable": {
+            "text-color": "#000000",
+            "background-color": null,
+            "bold": false,
+            "italic": false,
+            "underline": false
+        },
+        "Extension": {
+            "text-color": null,
+            "background-color": null,
+            "bold": false,
+            "italic": false,
+            "underline": false
+        },
+        "Preprocessor": {
+            "text-color": "#8f5902",
+            "background-color": null,
+            "bold": false,
+            "italic": true,
+            "underline": false
+        },
+        "Information": {
+            "text-color": "#8f5902",
+            "background-color": null,
+            "bold": true,
+            "italic": true,
+            "underline": false
+        },
+        "VerbatimString": {
+            "text-color": "#4e9a06",
+            "background-color": null,
+            "bold": false,
+            "italic": false,
+            "underline": false
+        },
+        "Warning": {
+            "text-color": "#8f5902",
+            "background-color": null,
+            "bold": true,
+            "italic": true,
+            "underline": false
+        },
+        "Documentation": {
+            "text-color": "#8f5902",
+            "background-color": null,
+            "bold": true,
+            "italic": true,
+            "underline": false
+        },
+        "Import": {
+            "text-color": null,
+            "background-color": null,
+            "bold": false,
+            "italic": false,
+            "underline": false
+        },
+        "Char": {
+            "text-color": "#4e9a06",
+            "background-color": null,
+            "bold": false,
+            "italic": false,
+            "underline": false
+        },
+        "DataType": {
+            "text-color": "#204a87",
+            "background-color": null,
+            "bold": false,
+            "italic": false,
+            "underline": false
+        },
+        "Float": {
+            "text-color": "#0000cf",
+            "background-color": null,
+            "bold": false,
+            "italic": false,
+            "underline": false
+        },
+        "Comment": {
+            "text-color": "#8f5902",
+            "background-color": null,
+            "bold": false,
+            "italic": true,
+            "underline": false
+        },
+        "CommentVar": {
+            "text-color": "#8f5902",
+            "background-color": null,
+            "bold": true,
+            "italic": true,
+            "underline": false
+        },
+        "Constant": {
+            "text-color": "#000000",
+            "background-color": null,
+            "bold": false,
+            "italic": false,
+            "underline": false
+        },
+        "SpecialChar": {
+            "text-color": "#000000",
+            "background-color": null,
+            "bold": false,
+            "italic": false,
+            "underline": false
+        },
+        "DecVal": {
+            "text-color": "#0000cf",
+            "background-color": null,
+            "bold": false,
+            "italic": false,
+            "underline": false
+        },
+        "Keyword": {
+            "text-color": "#204a87",
+            "background-color": null,
+            "bold": true,
+            "italic": false,
+            "underline": false
+        }
+    }
+}
-- 
GitLab