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/book/book.toml b/book/book.toml index ff062f1d42674a135f52f2546cd2f88046686fdd..864668ee2c9167b2b7fe257c3c1e03d3890be390 100644 --- a/book/book.toml +++ b/book/book.toml @@ -3,7 +3,7 @@ authors = ["Orestis Malaspinas, Michaël El Kharroubi"] language = "fr" multilingual = false src = "src" -title = "Rust-101: Université d'été" +title = "Rust-101: Université d'automne" [output.html] mathjax-support = true 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/exercices.md b/exercises/src/exercices_avances.md similarity index 98% rename from exercises/exercices.md rename to exercises/src/exercices_avances.md index 3e88cbd19c291554b8b02122c2ab21e5ecb63bd4..dd844fb1a878005e0426f1475d03685ae43d7756 100644 --- a/exercises/exercices.md +++ b/exercises/src/exercices_avances.md @@ -1,4 +1,4 @@ -# Exercices +# 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 @@ -27,4 +27,4 @@ au fur et à mesure de votre périple. ## 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. \ No newline at end of file +- Simulation du système solaire: écrire un simulateur de système solaire. diff --git a/exercises/src/exercices_intro.md b/exercises/src/exercices_intro.md new file mode 100644 index 0000000000000000000000000000000000000000..a7ce96c7b9dcc013fb655c2ed112c5e0b5e0c402 --- /dev/null +++ b/exercises/src/exercices_intro.md @@ -0,0 +1,102 @@ +# Exercices introductifs + +Le but de ces petits exercices est d'écrire des programmes simples avec une connaissance minimale du Rust. +Faites les dans l'ordre qui vous amuse. N'hésitez pas à refaire plusieurs fois le même exercice en variant +le type de structures de contrôle que vous utilisez par exemple. + +## Année bissextile + +Écrire un programme déterminant si une année est bissextile. Pour savoir si une année est bissextile, il faut que: + +* l'année soit divisible par 4, +* sauf si elle est divisible par 100, +* sauf si elle est aussi divisible par 400! + +Ainsi, l' année 2001 n'est pas bissextile. En revanche l'année 2000 l'est. Contrairement à l'année 1900 qui ne l'est pas. + +## Nombre d'Armstrong + +Un nombre Armstrong est un nombre qui est la somme de ses propres chiffres, chacun élevé à la puissance du nombre de chiffres. + +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\\) + +Écrivez un programme qui détermine si un nombre est un nombre d'Armstrong. + +## Nombres heureux + +Un nombre heureux est un entier naturel non nul, qui lorsqu'on calcule la somme des carrés de ses chiffres +puis la somme des carrés des chiffres du nombre obtenu et ainsi de suite, on aboutit au nombre 1. +Un nombre est malheureux lorsque ce n'est pas le cas. + +Ainsi, le nombre 7 est heureux, car: + +$$ +7^2=49, +$$ +$$ +4^2+9^2=97, +$$ +$$ +9^2+7^2=130, +$$ +$$ +1^2+3^2+0^2=10, +$$ +$$ +1^2+0^2=1. +$$ + +D'autres nombres heureux sont 1, 10, 13, 19 par exemple. Il faut faire attention car certains nombres +rencontrés dans la suite mènent à une suite périodique: 4, 16, 20, 37, 42, 58, 89, 145 et on ne s'arrête jamais. + +Écrivez un programme qui détermine si un nombre est heureux ou malheureux. + +## Différence de nombres + +Écrivez un programme qui calcule la différence entre le carré de la somme et la somme des carrés des $N$ premiers nombres naturels. + +Le carré de la somme des dix premiers entiers naturels est +$$ +(1 + 2 + ... + 10)^2 = 55^2 = 3025. +$$ + +La somme des carrés des dix premiers nombres naturels est +$$ +1^2 + 2^2 + ... + 10^2 = 385. +$$ + +Donc, la différence entre le carré de la somme des dix premiers nombres naturels et la somme des carrés des dix premiers nombres naturels est +$$ +3025 - 385 = 2640. +$$ + +## Nombre premier + +Écrire un programme qui détermine si un nombre est premier. Un nombre est premier s'il n'a que deux diviseurs distincts. + +## Décomposition en nombres premiers + +Écrire un programme qui calcule les facteurs premiers d'un nombre naturel donné. + +Exemple d'algorithme + +Quels sont les facteurs premiers de 60 ? + +* Notre premier diviseur est 2: + * 60 est divisible par 2 et il reste 30, + * 30 est divisible par 2 et il reste 15, + * 15 n'est pas divisible par 2, + * 15 est divisible par 3 et il reste 5, + * 5 n'est pas divisible par 2, + * 5 n'est pas divisible par 3, + * 5 n'est pas divisible par 4, + * 5 est divisible par 5 et il reste 1 et nous avons fini. + +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. + diff --git a/slides/book.toml b/slides/book.toml index 52da55e6048c124ebb18697f8538a73668da8320..cadd2f068bf4f9f18521495e82d342224bbe3e01 100644 --- a/slides/book.toml +++ b/slides/book.toml @@ -3,4 +3,4 @@ authors = ["Orestis"] language = "en" multilingual = false src = "src" -title = "Université d'été 2024: Rust 101" +title = "Université d'automne 2024: Rust 101"