From f7e1a545d1a0ceddbbe6099120c444e4d7058ddc Mon Sep 17 00:00:00 2001 From: "orestis.malaspin" <orestis.malaspinas@hesge.ch> Date: Mon, 9 Sep 2024 08:53:35 +0200 Subject: [PATCH] Mdbnook exercises --- .gitlab-ci.yml | 17 +++++++++ exercises/book.toml | 29 ++++++++++++++ exercises/src/SUMMARY.md | 19 ++++++++++ exercises/src/exercices_avances.md | 30 +++++++++++++++ .../{exercices.md => src/exercices_intro.md} | 38 ++----------------- 5 files changed, 99 insertions(+), 34 deletions(-) create mode 100644 exercises/book.toml create mode 100644 exercises/src/SUMMARY.md create mode 100644 exercises/src/exercices_avances.md rename exercises/{exercices.md => src/exercices_intro.md} (56%) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f498cbc..0c4d4a7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -71,6 +71,13 @@ build:book: - mdbook test - mdbook build +build:exercises: + stage: build + script: + - cd exercises + - mdbook test + - mdbook build + build:slides: stage: build script: @@ -87,6 +94,16 @@ deploy:book: - mdbook build - rsync -avz book/html/* ur1bg_malas@ur1bg.ftp.infomaniak.com:web/malaspinas/rust-101/book/ +deploy:exercises: + stage: deploy + only: + - main + - merge_request + script: + - cd exercises + - mdbook build + - rsync -avz book/html/* ur1bg_malas@ur1bg.ftp.infomaniak.com:web/malaspinas/rust-101/exercises/ + deploy:slides: stage: deploy only: diff --git a/exercises/book.toml b/exercises/book.toml new file mode 100644 index 0000000..864668e --- /dev/null +++ b/exercises/book.toml @@ -0,0 +1,29 @@ +[book] +authors = ["Orestis Malaspinas, Michaël El Kharroubi"] +language = "fr" +multilingual = false +src = "src" +title = "Rust-101: Université d'automne" + +[output.html] +mathjax-support = true + +[output.html.playground] +editable = true + +[output.html.print] +enable = true + +[output.pdf] + +[output.linkcheck] +# Should we check links on the internet? Enabling this option adds a +# non-negligible performance impact +follow-web-links = false +# How should warnings be treated? +# +# - "warn" will emit warning messages +# - "error" treats all warnings as errors, failing the linkcheck +# - "ignore" will ignore warnings, suppressing diagnostic messages and allowing +# the linkcheck to continuing +warning-policy = "warn" diff --git a/exercises/src/SUMMARY.md b/exercises/src/SUMMARY.md new file mode 100644 index 0000000..4df173f --- /dev/null +++ b/exercises/src/SUMMARY.md @@ -0,0 +1,19 @@ +# Résumé des exercices + +- [Exercices introductuifs](exercices_intro.md) +- [Exercices avancés](exercices_avances.md) + +<!-- - [Les bases du Rust 1](./bases1.md) --> +<!-- - [Les bases du Rust 2](./bases2.md) --> +<!-- - [Les types avancés](./types_avances.md) --> +<!-- - [La généricité et des types composés](./gen_types_composes.md) --> +<!-- - [La propriété](./propriete.md) --> +<!-- - [Modules et visibilité](./modules_visibilite.md) --> +<!-- - [Les petits trucs sympas qui aident au développement](./tooling.md) --> +<!-- - [La gestion des erreurs en Rust](./gestion_erreurs.md) --> +<!-- - [Les closures](./closures.md) --> +<!-- - [Les itérateurs](./iterateurs.md) --> +<!-- - [Les collections](./collections.md) --> +<!-- - [Lifetimes](./lifetimes.md) --> +<!-- - [CLI](./cli.md) --> +<!-- - [Unsafe](./unsafe.md) --> diff --git a/exercises/src/exercices_avances.md b/exercises/src/exercices_avances.md new file mode 100644 index 0000000..dd844fb --- /dev/null +++ b/exercises/src/exercices_avances.md @@ -0,0 +1,30 @@ +# Exercices avancés + +Les exercices que nous proposons ici sont très vagues. L'objectif est de vous donner des thèmes, +de choses que vous connaissez du cours de programmation et d'algorithmique de l'année passée +et de les implémenter un peu comme vous voulez sans contraintes particulières pour +que vous expérimentiez avec le langage (oui vous êtes des grand·e·s maintenant). + +Essayez au maximum d'utiliser les concepts de Rust vus en classe. + +Vous trouverez une liste ci-dessous, avec un degré de difficulté croissant (plus ou moins). +L'idée est d'avancer à votre rythme (ce qui n'est pas équivalent à regarder le plafond +en attendant que ça passe) et vous donner des idées d'exercices devenant plus complexes +au fur et à mesure de votre périple. + +- Le nombre secret: implémenter le jeu du nombre secret qui serait joué par des IAs utilisant des stratégies différentes. +- Calculer pi: avec la méthode des fléchettes. +- Une pile simple: implémenter une pile utilisant un tableau statique comme structure de données. +- Un tri: un tri à bulles, tri à deux piles et/ou un quicksort ça fait l'affaire. +- Couverture de la reine: écrire un code qui permet de trouver pour une position de départ aléatoire toutes les solutions de couverture de la reine pour un tableau 8x8. +- Les fractions: écrire une librairie de fractions en utilisant les trait `Add`, `Sub`, etc. +- Les vecteurs: écrire une librairie de vecteurs en utilisant les trait `Add`, `Sub`, etc. +- Le jeu du pendu: implémenter le jeu du pendu où les mots sont des chaînes de caractères aléatoires et les lettres tirées sont également tirées au hasard. +- Compter différemment: écrire un programme qui permet de compter comme au tennis où chaque joueur gagne un point avec une probabilité donnée. +- Le puissance 4: simulez le jeu du puissance 4. +- Le jeu de la bataille: simulez le jeu de carte de la bataille entre deux machines. + +## Aller plus haut + +- Ascii art: écrire un convertisseur d'image en ASCII art. +- Simulation du système solaire: écrire un simulateur de système solaire. diff --git a/exercises/exercices.md b/exercises/src/exercices_intro.md similarity index 56% rename from exercises/exercices.md rename to exercises/src/exercices_intro.md index 1f8b415..a7ce96c 100644 --- a/exercises/exercices.md +++ b/exercises/src/exercices_intro.md @@ -20,10 +20,10 @@ Un nombre Armstrong est un nombre qui est la somme de ses propres chiffres, chac Par exemple, un nombre d'Armstrong est un nombre qui est la somme de ses propres chiffres : -* $9$ est un nombre d'Armstrong, car $9 = 9^1 = 9$, -* $10$ n'est pas un nombre Armstrong, car $10 \neq 1^2 + 0^2 = 1$, -* $153$ est un nombre Armstrong, car : $153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153$, -* $154$ n'est pas un nombre d'Armstrong, car : $154 \neq 1^3 + 5^3 + 4^3 = 1 + 125 + 64 = 190$ +* \\(9\\) est un nombre d'Armstrong, car \\(9 = 9^1 = 9\\), +* \\(10\\) n'est pas un nombre Armstrong, car \\(10 \neq 1^2 + 0^2 = 1\\), +* \\(153\\) est un nombre Armstrong, car : \\(153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153\\), +* \\(154\\) n'est pas un nombre d'Armstrong, car : \\(154 \neq 1^3 + 5^3 + 4^3 = 1 + 125 + 64 = 190\\) Écrivez un programme qui détermine si un nombre est un nombre d'Armstrong. @@ -100,33 +100,3 @@ Quels sont les facteurs premiers de 60 ? Nos diviseurs réussis dans ce calcul représentent la liste des facteurs premiers de 60 : 2, 2, 3 et 5. Si cela vous amuse vous pouvez vérifier qu'ils sont bien premiers en utilisant l'exercice précédent. -# Exercices avancés - -Les exercices que nous proposons ici sont très vagues. L'objectif est de vous donner des thèmes, -de choses que vous connaissez du cours de programmation et d'algorithmique de l'année passée -et de les implémenter un peu comme vous voulez sans contraintes particulières pour -que vous expérimentiez avec le langage (oui vous êtes des grand·e·s maintenant). - -Essayez au maximum d'utiliser les concepts de Rust vus en classe. - -Vous trouverez une liste ci-dessous, avec un degré de difficulté croissant (plus ou moins). -L'idée est d'avancer à votre rythme (ce qui n'est pas équivalent à regarder le plafond -en attendant que ça passe) et vous donner des idées d'exercices devenant plus complexes -au fur et à mesure de votre périple. - -- Le nombre secret: implémenter le jeu du nombre secret qui serait joué par des IAs utilisant des stratégies différentes. -- Calculer pi: avec la méthode des fléchettes. -- Une pile simple: implémenter une pile utilisant un tableau statique comme structure de données. -- Un tri: un tri à bulles, tri à deux piles et/ou un quicksort ça fait l'affaire. -- Couverture de la reine: écrire un code qui permet de trouver pour une position de départ aléatoire toutes les solutions de couverture de la reine pour un tableau 8x8. -- Les fractions: écrire une librairie de fractions en utilisant les trait `Add`, `Sub`, etc. -- Les vecteurs: écrire une librairie de vecteurs en utilisant les trait `Add`, `Sub`, etc. -- Le jeu du pendu: implémenter le jeu du pendu où les mots sont des chaînes de caractères aléatoires et les lettres tirées sont également tirées au hasard. -- Compter différemment: écrire un programme qui permet de compter comme au tennis où chaque joueur gagne un point avec une probabilité donnée. -- Le puissance 4: simulez le jeu du puissance 4. -- Le jeu de la bataille: simulez le jeu de carte de la bataille entre deux machines. - -## Aller plus haut - -- Ascii art: écrire un convertisseur d'image en ASCII art. -- Simulation du système solaire: écrire un simulateur de système solaire. -- GitLab