@@ -57,7 +57,9 @@ la deuxième ligne comportera le message lui-même.\\
...
@@ -57,7 +57,9 @@ la deuxième ligne comportera le message lui-même.\\
Le programme affichera donc une suite de commandes permettant d'émettre le message.
Le programme affichera donc une suite de commandes permettant d'émettre le message.
\section{Phase 1}
\section{Phase 1}
\subsection{Démarche générale}
\subsection{Fonctionnement général du script}
Le principe est le suivant : je défini la roue comme une liste des caractères (en majuscule) :
Le principe est le suivant : je défini la roue comme une liste des caractères (en majuscule) :
\begin{minted}{ocaml}
\begin{minted}{ocaml}
...
@@ -67,21 +69,25 @@ Le principe est le suivant : je défini la roue comme une liste des caractères
...
@@ -67,21 +69,25 @@ Le principe est le suivant : je défini la roue comme une liste des caractères
Puis, je demande à l'utilisateur le message à traduire grâce aux fonctions [parse\_input ()] et [split\_string s] fournies par le professeur.\\
Puis, je demande à l'utilisateur le message à traduire grâce aux fonctions [parse\_input ()] et [split\_string s] fournies par le professeur.\\
Le couple (n:int,l:char list) ainsi obtenu est passé dans la fonction [commande (n,l) roue].\\
Le couple (n:int,l:char list) ainsi obtenu est passé dans la fonction [\textbf{commande} (n,l) roue].\\
On introduit alors la fonction [translate c roue] qui se charge de renvoyer la commande correspondant à l'envoi de la lettre c:char, sous forme de string. (Il suffit pour cela de récupérer l'indice (noté i) du caractère c dans roue et de renvoyer i fois 'N' si i<14 sinon 27-i fois 'P').\\
On introduit alors la fonction [\textbf{translate} c roue] qui se charge de renvoyer la commande correspondant à l'envoi de la lettre c:char, sous forme de string et le nombre de déplacement de la roue à faire. (Il suffit pour cela de récupérer l'indice (noté i) du caractère c dans roue et de renvoyer i fois 'N' si i<14 sinon 27-i fois 'P').\\
On introduit aussi la fonction [tourner c n roue]
On introduit aussi la fonction [\textbf{tourner} c n roue] dont le but est de retourner le nouvel état de la roue en tournant n fois (par récurrence) vers la gauche si c='N' et vers la droite si c='P'. \\
Cette nouvelle fonction agit par récurrence sur la liste de caractères l de cette manière :\\
La fonction \textbf{commande} agit par récurrence sur la liste de caractères l de cette manière :\\
\begin{itemize}
\begin{itemize}
\item à la première itération, on traduit le premier caractère de la liste en sa commande (une string) grâce à la fonction translate qui renvoie un couple ()
\item à la première itération, on traduit le premier caractère de la liste en sa commande (une string) grâce à la fonction \textbf{translate} puis tourne la roue dans le bon sens et le bon nombre de cran avec la fonction \textbf{tourner}.
\item à la $n^ieme$ iteration, le $n^ieme$ caractère est traduit en sa commande (en une string) en utilisant la roue
\item à la $n^{ieme}$ iteration, le $n^{ieme}$ caractère est traduit en sa commande (en une string) en utilisant la roue obtenue après la $(n-1)^{ieme}$ itération puis tourne la roue de même que à la première itération.
\end{itemize}
\end{itemize}
\section{Fonctionnement général du script}
\section{Tests}
\section{Phase 2}
\subsection{Fonctionnement général du script}
\section{Idées d'optimisation du code}
\section{Idées d'optimisation du code}
Au lieu de choisir la roue à utiliser lettre après lettre, on peut tracer un arbre n-aire (où n est le nombre de roues) et trouver le chemin le plus court pour la phrase a traduire. On optimiserai le temps d'execution du programme non pas lettre par lettre mais pour toute la phrase. \\
Au lieu de choisir la roue à utiliser lettre après lettre, on peut tracer un arbre n-aire (où n est le nombre de roues) et trouver le chemin le plus court pour la phrase a traduire. On optimiserai le temps d'execution du programme non pas lettre par lettre mais pour toute la phrase. \\