diff --git a/doc/_minted-rapport/0BBFED1F8FA73396EB005C2D20181F21F5367203DB9C5C29E728CCB221C2B2CA.pygtex b/doc/_minted-rapport/0BBFED1F8FA73396EB005C2D20181F21F5367203DB9C5C29E728CCB221C2B2CA.pygtex new file mode 100644 index 0000000000000000000000000000000000000000..acba0b135815c5839d24f8e5818a9308b4a69f4b --- /dev/null +++ b/doc/_minted-rapport/0BBFED1F8FA73396EB005C2D20181F21F5367203DB9C5C29E728CCB221C2B2CA.pygtex @@ -0,0 +1,4 @@ +\begin{Verbatim}[commandchars=\\\{\}] + \PYG{k}{let} \PYG{n}{roue} \PYG{o}{=} \PYG{o}{[}\PYG{l+s+sc}{\PYGZsq{} \PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}A\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}B\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}C\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}D\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}E\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}F\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}G\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}H\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}I\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}J\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}K\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}L\PYGZsq{}}\PYG{o}{;} + \PYG{l+s+sc}{\PYGZsq{}M\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}N\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}O\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}P\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}Q\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}R\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}S\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}T\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}U\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}V\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}W\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}X\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}Y\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}Z\PYGZsq{}}\PYG{o}{]} +\end{Verbatim} diff --git a/doc/_minted-rapport/2948F96AAE53931596E74284E4F762CBF5367203DB9C5C29E728CCB221C2B2CA.pygtex b/doc/_minted-rapport/2948F96AAE53931596E74284E4F762CBF5367203DB9C5C29E728CCB221C2B2CA.pygtex deleted file mode 100644 index 344a06560f1d953f881d38a932f70cf3fdcc1ccd..0000000000000000000000000000000000000000 --- a/doc/_minted-rapport/2948F96AAE53931596E74284E4F762CBF5367203DB9C5C29E728CCB221C2B2CA.pygtex +++ /dev/null @@ -1,4 +0,0 @@ -\begin{Verbatim}[commandchars=\\\{\}] - \PYG{k}{let} \PYG{n}{roue} \PYG{o}{=} \PYG{o}{[}\PYG{l+s+sc}{\PYGZsq{} \PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}A\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}B\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}C\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}D\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}E\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}F\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}G\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}H\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}I\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}J\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}K\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}L\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}M\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}N\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}O\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}P\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}Q\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}R\PYGZsq{}}\PYG{o}{;} - \PYG{l+s+sc}{\PYGZsq{}S\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}T\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}U\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}V\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}W\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}X\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}Y\PYGZsq{}}\PYG{o}{;}\PYG{l+s+sc}{\PYGZsq{}Z\PYGZsq{}}\PYG{o}{]} -\end{Verbatim} diff --git a/doc/rapport.pdf b/doc/rapport.pdf index 1169fd5938da9bd3196f4557da6070ad2e5c8e36..3cba27404a659e213906a52617aab1e1545ab82d 100644 Binary files a/doc/rapport.pdf and b/doc/rapport.pdf differ diff --git a/doc/rapport.tex b/doc/rapport.tex index 6f210e047bef8069659d98417ed954913481c32a..4e6c3b072c1e7f90259350395de5ed682da064ba 100644 --- a/doc/rapport.tex +++ b/doc/rapport.tex @@ -12,6 +12,7 @@ \usepackage{graphicx} \usepackage[a4paper]{geometry} \usepackage{minted} +\usepackage{listings} \hypersetup{ colorlinks, @@ -56,15 +57,40 @@ la première ligne comportera un entier n donnant le nombre d'antennes disponibl la deuxième ligne comportera le message lui-même.\\ Le programme affichera donc une suite de commandes permettant d'émettre le message. +\clearpage + +\section{Architecture du projet} + +\begin{lstlisting} +> ipf_s2/ +| > doc/ +| | rapport.pdf +| | rapport.tex +| > src/ +| | main.ml +| | tests.ml +| [> bin/] +| | main.out +| | tests.out +| Makefile +| README.md +| (...) +\end{lstlisting} + +\paragraph{} Les dossiers entre crochets \verb|[]| sont des dossiers créés par la compilation (partielle ou complète), les noms entre parenthèses \verb|()| sont là pour indiquer que des dossiers/fichiers ne sont pas précisés. + \section{Phase 1} +\subsection{Objectifs} + +Dans cette phase nous avons accès à une seule antenne, on analyse uniquement a seconde entrée standard. \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) : \begin{minted}{ocaml} - let roue = [' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L';'M';'N';'O';'P';'Q';'R'; - 'S';'T';'U';'V';'W';'X';'Y';'Z'] + let roue = [' ';'A';'B';'C';'D';'E';'F';'G';'H';'I';'J';'K';'L'; + 'M';'N';'O';'P';'Q';'R';'S';'T';'U';'V';'W';'X';'Y';'Z'] \end{minted} Puis, je demande à l'utilisateur le message à traduire grâce aux fonctions [parse\_input ()] et [split\_string s] fournies par le professeur.\\ @@ -84,8 +110,26 @@ La fonction \textbf{commande} agit par récurrence sur la liste de caractères l \section{Phase 2} +\subsection{Objectifs} + +Le changement de place d'une roue ('N' ou 'P') prennant 3 secondes et la sélection d'une antenne ('Sn' où n est le numéro de l'antenne à activer) prennant 1 seconde, l'objectif devient donc d'optimiser le temps de calcul pour l'envoi d'un message. (l'émission 'E' d'une commande à une antenne prend 5s)\\ + +La première entrée sera le nombre d'antennes disponibles et la seconde entrée restera le message à envoyer (en majuscule).\\ + + + \subsection{Fonctionnement général du script} +J'introduit d'abord la fonction [\textbf{quelle\_roue} l c i] où l est la liste de roue actuelle, c le caractère à traduire et i l'indice de la roue sur laquelle on est à l'entrée de la fonction. Cette fonction choisi dans l la roue qui donne le plus petit nombre de cran à tourner pour avoir c peu importe le sens.\\ + +Une autre fonction à introduire est la fonction [\textbf{tourner\_list} c n i l] qui en utilisant \textbf{tourne} de la phase 1 tourne n fois la roue d'indice i dans le sens de c ('N' ou 'P') dans l.\\ + +Pour cette phase j'ai donc créé la fonction [\textbf{commande2} (n,m)] où n est le nombre d'antennes et m le message à traduire. Cette fonction crée une liste de n roues en phase initiale puis fait le calcul par la récurrence décrite ci-dessous : \\ + +\begin{itemize} + \item à la première itération, on choisi la roue à utiliser grâce à la fonction \textbf{quelle\_roue} on traduit le premier caractère de la liste en sa commande (une string) grâce à la fonction \textbf{translate} de la phase 1 puis tourne la roue choisie dans la liste de roues dans le bon sens et le bon nombre de cran avec la fonction \textbf{tourner\_list}. + \item à la $n^{ieme}$ iteration, le $n^{ieme}$ caractère est traduit en sa commande (en une string) de même que pour la première itération en utilisant la liste de roues obtenue après la $(n-1)^{ieme}$ itération puis envoie à l'itération suivant la liste de roues bien modifiée. +\end{itemize} \section{Idées d'optimisation du code}