diff --git a/content/docs/playing/exercices.md b/content/docs/playing/exercices.md index 6dadf63..53aadc1 100644 --- a/content/docs/playing/exercices.md +++ b/content/docs/playing/exercices.md @@ -8,7 +8,7 @@ weight: 5 ## Chemins Ajouter des étoiles aux constellations suivantes de sorte à obtenir `ok` après -exécution. +exécution avec l'option `-allow-unfinished-computation`. 1. `-1 ok;` @@ -16,9 +16,21 @@ exécution. 3. `-1 ok; -2 +3;` -4. `-1 ok; -2 +3 ok;` +4. `-f(+g(X)) ok;` -5. `+f(a) +f(b); +g(a); @+g(b);` +5. `+f(a) +f(b); +g(a); @+g(b) ok;` + +{{< details title="Solution" open=false >}} +1. `-1 ok; +1;` + +2. `-1; +2; +1 -2 ok;` + +3. `-1 ok; -2 +3; +1 +2; -3;` + +4. `-f(+g(X)) ok; +f(-g(a));` + +5. `+f(a) +f(b); +g(a); @+g(b) ok; -f(X) -g(X);` +{{< /details >}} ## Altération de mémoire @@ -38,32 +50,126 @@ de départ ou modifier celles que vous avez ajoutées. 1. Comment relier les étoiles d'initialisation de sorte à initialiser le registre `a` à `0` ? +{{< details title="Solution" open=false >}} +En ajoutant l'étoile `-ia(X) +ra(X);` servant de pont entre le rayon `+ia(0)` +et le rayon `-ra(X)`. On peut vérifier que l'on a bien un transfert de la +constante `0` vers `+a(X)` avec l'option `-allow-unfinished-computation` et +qu'on obtient ainsi `+a(0)` dans la sortie. +{{< /details >}} + 2. Comment afficher la valeur de `a` et ainsi obtenir `a(0)` en sortie ? +{{< details title="Solution" open=false >}} +Il faut ajouter l'étoile `-a(X) a(X);` pour éviter l'effacement de l'étoile +correspondant au registre `a`. +{{< /details >}} + 3. Comment mettre à jour `a` à la valeur `1` ? +{{< details title="Solution" open=false >}} +Il y a plusieurs manières de le faire en remplaçant l'étoile `-ia(X) +ra(X)` +introduite précédemment : +- court-circuiter avec `+ra(1)`; +- faire une succession de mise à jour avec l'étoile `-ia(X) +ia1(1); -ia1(X) +ra(X);`. +{{< /details >}} + 4. Comment copier la valeur de `a` dans `b` et afficher `b` ? -5. Comment supprimer le registre `b` et le rendre inutilisable ? +{{< details title="Solution" open=false >}} +On utilise la constellation `-a(X) +rb(X); -b(X) b(X);` permettant de rediriger +la sortie `+a(X)` vers `b` (en plus de l'affichage de `a`). Et on ajoute une +étoile d'affichage comme pour `a`. +{{< /details >}} + +5. En utilisant une seule étoile, comment afficher `mem(a(va) b(vb))` tel que +`va` est la valeur de `a` et `vb` celle de `b` ? + +{{< details title="Solution" open=false >}} +On utilise l'étoile `-a(X) -b(Y) c(va(X) vb(Y));`. +{{< /details >}} ## Portes logiques -On veut simuler des portes logiques par des constellations calculant des -fonctions sur `{0,1}`. +On veut simuler des formules booléennes par des constellations. Chaque question +utilise le résultat de la question précédente. 1. Ecrire une constellation calculant la négation de telle sorte à ce qu'elle produise `1` en sortie lorsqu'ajoutée à l'étoile `@-not(0 X) X;` et `0` lorsqu'ajoutée à `@-not(1 X) X`. +{{< details title="Solution" open=false >}} +``` ++not(0 1); +not(1 0); +``` +{{< /details >}} + 2. Comment afficher la table de vérité de la négation avec une seule étoile, de sorte à ce qu'on obtienne en sortie `table_not(0 1); table_not(1 0);` ? +{{< details title="Solution" open=false >}} +``` +@-not(X Y) table_not(X Y); +``` +{{< /details >}} + 3. Ecrire de deux manières différentes des constellations calculant la conjonction et la disjonction et afficher leur table de vérité de la même façon que pour la question précédente. +{{< details title="Solution" open=false >}} +``` ++and(0 0 0); +and(0 1 0); +and(1 0 0); +and(1 1 1); ++or(0 0 0); +or(0 1 1); +or(1 0 1); +or(1 1 1); + ++and2(0 X 0); +and2(1 X X); ++or2(0 X X); +or2(1 X 1); + +@-and(X Y R) table_and(X Y R); +@-or(X Y R) table_or(X Y R); +@-and2(X Y R) table_and2(X Y R); +@-or2(X Y R) table_or2(X Y R); +``` +{{< /details >}} + 4. Utiliser la disjonction et la négation pour afficher la table de vérité -de l'implication sachant que `A => B = not(A) \/ B`. +de l'implication sachant que `X => Y = not(X) \/ Y`. + +{{< details title="Solution" open=false >}} +``` ++not(0 1); +not(1 0); ++and(0 0 0); +and(0 1 0); +and(1 0 0); +and(1 1 1); ++or(0 0 0); +or(0 1 1); +or(1 0 1); +or(1 1 1); + ++and2(0 X 0); +and2(1 X X); ++or2(0 X X); +or2(1 X 1); + +-not(X Y) -or(Y Z R) +impl(X Z R); +-not(X Y) -or2(Y Z R) +impl2(X Z R); + +@-impl(X Y R) table_impl(X Y R); +@-impl2(X Y R) table_impl2(X Y R); +``` +{{< /details >}} 5. Utiliser l'implication et la conjonction pour afficher la table de vérité -de l'équivalence logique sachant que `A <=> B = (A => B) /\ (B => A)`. \ No newline at end of file +de l'équivalence logique sachant que `X <=> Y = (X => Y) /\ (X => Y)`. + +{{< details title="Solution" open=false >}} +``` ++not(0 1); +not(1 0); ++and(0 0 0); +and(0 1 0); +and(1 0 0); +and(1 1 1); ++or(0 0 0); +or(0 1 1); +or(1 0 1); +or(1 1 1); + ++and2(0 X 0); +and2(1 X X); ++or2(0 X X); +or2(1 X 1); + +-not(X Y) -or(Y Z R) +impl(X Z R); +-not(X Y) -or2(Y Z R) +impl2(X Z R); + +-impl(X Y R1) -impl(Y X R2) -and(R1 R2 R) +eqq(X Y R); +-impl2(X Y R1) -impl2(Y X R2) -and2(R1 R2 R) +eqq2(X Y R); + +@-eqq(X Y R) table_eqq(X Y R); +@-eqq2(X Y R) table_eqq2(X Y R); +``` +{{< /details >}} \ No newline at end of file diff --git a/content/docs/techniques/_index.md b/content/docs/techniques/_index.md new file mode 100644 index 0000000..fee8ecc --- /dev/null +++ b/content/docs/techniques/_index.md @@ -0,0 +1,5 @@ +--- +title: "Techniques" +bookFlatSection: true +weight: 1 +--- diff --git a/content/docs/techniques/composition.md b/content/docs/techniques/composition.md new file mode 100644 index 0000000..51a593d --- /dev/null +++ b/content/docs/techniques/composition.md @@ -0,0 +1,6 @@ +--- +title: "Composition" +weight: 5 +--- + +(soon) \ No newline at end of file diff --git a/content/docs/techniques/conditionals.md b/content/docs/techniques/conditionals.md new file mode 100644 index 0000000..25147c1 --- /dev/null +++ b/content/docs/techniques/conditionals.md @@ -0,0 +1,6 @@ +--- +title: "Conditions" +weight: 2 +--- + +(soon) \ No newline at end of file diff --git a/content/docs/techniques/data-retrieval.md b/content/docs/techniques/data-retrieval.md new file mode 100644 index 0000000..1b617e2 --- /dev/null +++ b/content/docs/techniques/data-retrieval.md @@ -0,0 +1,6 @@ +--- +title: "Récupération de données" +weight: 1 +--- + +(soon) \ No newline at end of file diff --git a/content/docs/techniques/digging.md b/content/docs/techniques/digging.md new file mode 100644 index 0000000..6240f3c --- /dev/null +++ b/content/docs/techniques/digging.md @@ -0,0 +1,6 @@ +--- +title: "Digging" +weight: 4 +--- + +(soon) \ No newline at end of file diff --git a/content/docs/techniques/exercises.md b/content/docs/techniques/exercises.md new file mode 100644 index 0000000..ceb1545 --- /dev/null +++ b/content/docs/techniques/exercises.md @@ -0,0 +1,14 @@ +--- +title: "Exercices" +weight: 8 +--- + +# Exercices + +## Vérifications exactes + +## Conditions imbriquées + +## Boucles imbriquées + +## Branchage conditionnel \ No newline at end of file diff --git a/content/docs/techniques/loops.md b/content/docs/techniques/loops.md new file mode 100644 index 0000000..1983640 --- /dev/null +++ b/content/docs/techniques/loops.md @@ -0,0 +1,6 @@ +--- +title: "Boucles convergeantes" +weight: 3 +--- + +(soon) \ No newline at end of file diff --git a/content/docs/techniques/permission-check.md b/content/docs/techniques/permission-check.md new file mode 100644 index 0000000..29be859 --- /dev/null +++ b/content/docs/techniques/permission-check.md @@ -0,0 +1,6 @@ +--- +title: "Permissions" +weight: 6 +--- + +(soon) \ No newline at end of file diff --git a/content/docs/techniques/unit-testing.md b/content/docs/techniques/unit-testing.md new file mode 100644 index 0000000..581fdbd --- /dev/null +++ b/content/docs/techniques/unit-testing.md @@ -0,0 +1,6 @@ +--- +title: "Tests unitaires" +weight: 7 +--- + +(soon)