diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f498cbc681a89874f4790f3f342cdaf038925960..0c4d4a71f0b0c0e2a8aa30e97e8c3d00b3d59a9f 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 0000000000000000000000000000000000000000..864668ee2c9167b2b7fe257c3c1e03d3890be390 --- /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 0000000000000000000000000000000000000000..4df173f425927aaefdc9fd3588a29b95bbe0b37b --- /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 0000000000000000000000000000000000000000..dd844fb1a878005e0426f1475d03685ae43d7756 --- /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 1f8b4159dc4abb864ac5c51a1140f85992d5a7bd..a7ce96c7b9dcc013fb655c2ed112c5e0b5e0c402 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.