diff --git a/AlgoApprofondie/INFAL24-AlgorithmiqueApprofondie.pdf b/AlgoApprofondie/INFAL24-AlgorithmiqueApprofondie.pdf deleted file mode 100644 index 3308e92..0000000 Binary files a/AlgoApprofondie/INFAL24-AlgorithmiqueApprofondie.pdf and /dev/null differ diff --git a/AlgoApprofondie/cours/Makefile b/AlgoApprofondie/cours/Makefile deleted file mode 100644 index 8b94f17..0000000 --- a/AlgoApprofondie/cours/Makefile +++ /dev/null @@ -1,216 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = _build - -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " applehelp to make an Apple Help Book" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - @echo " coverage to run coverage check of the documentation (if enabled)" - -.PHONY: clean -clean: - rm -rf $(BUILDDIR)/* - -.PHONY: html -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -.PHONY: dirhtml -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -.PHONY: singlehtml -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -.PHONY: pickle -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -.PHONY: json -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -.PHONY: htmlhelp -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -.PHONY: qthelp -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Algorithmique.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Algorithmique.qhc" - -.PHONY: applehelp -applehelp: - $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp - @echo - @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." - @echo "N.B. You won't be able to view it unless you put it in" \ - "~/Library/Documentation/Help or install it in your application" \ - "bundle." - -.PHONY: devhelp -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/Algorithmique" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Algorithmique" - @echo "# devhelp" - -.PHONY: epub -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -.PHONY: latex -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -.PHONY: latexpdf -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: latexpdfja -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: text -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -.PHONY: man -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -.PHONY: texinfo -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -.PHONY: info -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -.PHONY: gettext -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -.PHONY: changes -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -.PHONY: linkcheck -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -.PHONY: doctest -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -.PHONY: coverage -coverage: - $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage - @echo "Testing of coverage in the sources finished, look at the " \ - "results in $(BUILDDIR)/coverage/python.txt." - -.PHONY: xml -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." - -.PHONY: pseudoxml -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/AlgoApprofondie/cours/_static/cesi.jpg b/AlgoApprofondie/cours/_static/cesi.jpg deleted file mode 100644 index dafbe55..0000000 Binary files a/AlgoApprofondie/cours/_static/cesi.jpg and /dev/null differ diff --git a/AlgoApprofondie/cours/algo.txt b/AlgoApprofondie/cours/algo.txt deleted file mode 100644 index c2f8ed7..0000000 --- a/AlgoApprofondie/cours/algo.txt +++ /dev/null @@ -1,291 +0,0 @@ -Algorithmique -============= - -Al-Kharezmi, auteur du traité "Kitab al jabr w'al-muqabala", est l'inventeur -des manipulations algébriques (algèbre = **al jabr**). -C'est Léonard de Pise, dit Fibonacci, qui emprunta le nom du célèbre -mathématicien arabe du 9ème siècle, mais l'algèbre existe -depuis bien plus longtemps (Depuis Babylone, puis ensuite l'Egypte ancienne). - -.. glossary:: - - - algorithme - - terme désignant une suite d'opérations constituant un schéma de calcul - ou de résolution d'un problème. C'est un processus systématique de - résolution d'un problème permettant de décrire précisément des étapes. - C'est une suite finie d'instructions permettant de donner la réponse à un - problème. - -L'algorithmique est l'étude et la production de règles et de techniques -qui sont impliquées dans la définition d'algorithmes. - -Implémentation d'un algorithme ------------------------------- - -.. glossary:: - - implémentation - - Adaptation de la méthodologie de calculabilité au calcul effectif - sur une machine abstraite ou via un langage formel. - -Il n’y a pas de parcours à sens unique de l’algorithme vers l’implantation. -La quête d’une implantation efficace nous amène souvent à effectuer -un retour vers les algorithmes eux-mêmes, et à en modifier des points -essentiels. L’aspect théorique de réflexion sur les algorithmes, -et l’aspect pratique de l'implémentation sont donc en symbiose. - -Un existant émerge de la décomposition structurale d'un -domaine de base. Le fait essentiel, c'est la genèse des genres de l'existant les -uns à partir des autres. - -L'essence d'une forme (un algorithme) se réalise au sein d'une matière qu'elle créée -(un langage). L'origine d'une matière fait naître les formes (concepts) -que sa structure dessine. - -- Notion structurale de non-contradiction -- Notion extensive de "réalisation dans un champ donné" - -Deux aspects réciproques : l'essence d'une forme se réalise au sein d'une -matière qu'elle crée, l'essence d'une matière faisant naître les formes que sa -structure dessine. - -Abandonner l'idée trop simpliste de domaines concrets et d'opérations abstraites -qui posséderaient en eux-mêmes comme une nature de matière et une nature de -forme ; cette conception tendrait, en effet, à stabiliser les existants -mathématiques dans certains rôles immuables et ignorerait le fait que les -existants abstraits qui naissent de la structure d'un domaine plus concret -peuvent à leur tour servir de domaine de base pour la genèse d'autres existants. - -L'algorithme comme généralisation de la calculabilité ------------------------------------------------------- - -L'importance croissante de l'informatique comme outil scientifique -impose d'élaborer un nouveau mode de description des méthodes de calcul (appelées algorithmes) -susceptible de satisfaire à la fois le critère de sécurité (maîtrise du résultat) et la possibilité -d'implémenter les calculs sur un ordinateur. - -Exemple d'algorithme ---------------------- - -.. raw:: latex - - \begin{algorithm} - \caption{L'alorithme de Bellman-Kalaba} - \begin{algorithmic}[1] - \Procedure {BellmanKalaba}{$G$, $u$, $l$, $p$} - \ForAll {$v \in V(G)$} - \State $l(v) \leftarrow \infty$ - \EndFor - \State $l(u) \leftarrow 0$ - \Repeat - \For {$i \leftarrow 1, n$} - \State $min \leftarrow l(v_i)$ - \For {$j \leftarrow 1, n$} - \If {$min > e(v_i, v_j) + l(v_j)$} - \State $min \leftarrow e(v_i, v_j) + l(v_j)$ - \State $p(i) \leftarrow v_j$ - \EndIf - \EndFor - \State $l(i) \leftarrow min$ - \EndFor - \State $changed \leftarrow l \not= l’$ - \State $l \leftarrow l$ - \Until{$\neg changed$} - \EndProcedure - \Statex - \Procedure {FindPathBK}{$v$, $u$, $p$} - \If {$v = u$} - \State \textbf{Write} $v$ - \Else - \State $w \leftarrow v$ - \While {$w \not= u$} - \State \textbf{Write} $w$ - \State $w \leftarrow p(w)$ - \EndWhile - \EndIf - \EndProcedure - \end{algorithmic} - \end{algorithm} - -Exemple d'algorithme avec son implémentation ---------------------------------------------- - -Soit l'algorithme de factorielle suivant, - -.. raw:: latex - - \begin{algorithm} - \caption{Algorithme de la factorielle d'un nombre}\label{factorielle} - \begin{algorithmic}[1] - \Function{factorielle}{$n$}\Comment{La fonction récursive factorielle} - \BState \emph{parametre} : $n$ entier - \If{$n = 1$} - \BState \emph{Sortie} : 1 - \Else - \BState \emph{Sortie} : $n * \Call{factorielle}{n-1}$ \Comment{On appelle la fonction dans l'algorithme lui-même} - \EndIf - \EndFunction - \end{algorithmic} - \end{algorithm} - -et son implémentation en python : - -.. literalinclude:: code/factorielle.py - :language: python - -En voici une autre implémentation (en OCaml) : - -.. literalinclude:: code/factorielle.ml - :language: ocaml - -On remarque que le **pseudocode** est très proche de -la syntaxe du python : - -.. function:: factorielle(n:int) - -:: - - if n=1 - return 1 - else - return n * factorielle(n-1) - end if - -Qualité d'un algorithme ------------------------ - -- correction d'un algorithme -- complétude d'un algorithme - -Sémantique - - Étude du sens, de la signification d'un langage - Définir la sémantique d’un langage formel consiste à lui donner une - signification mathématique. - -Sémantique opérationnelle - - on définit la sémantique par sa mise en œuvre sur - une machine abstraite. - -Sémantique dénotationnelle - - on associe à chaque construction syntaxique un - objet mathématique - -Sémantique axiomatique - - chaque construction est décrite par la manière dont - elle transforme des propriétés ou des prédicats. - -Proposition - - une proposition est un énoncé qui est soit vrai, soit faux - -**exemple** : ``2 + 3 = 5``. Proposition vraie. - -Prédicats - - Une proposition dont la valeur de vérité dépend de la valeur d’une ou plusieurs variables - -**Exemple** : ``n est pair`` : vrai pour n = 4 mais faux pour n = 9 - - -Axiome - - une proposition qui est supposée vraie - -Un ensemble d’axiomes est consistant s’il n’existe pas de proposition -dont on peut démontrer qu’elle est à la fois vraie et fausse. - -Un ensemble d’axiomes est complet si, pour toute proposition, il est -possible de démontrer qu’elle est vraie ou fausse. - -Théorème d’incomplétude de Gödel (1931) : tout ensemble -consistant d’axiomes pour l’arithmétique sur les entiers est -nécessairement incomplet. - -**Les concepts de base en algorithmique sont les axiomes** - -inférence - - règles d’inférence, règles permettant de combiner des axiomes et des - propositions vraies pour établir de nouvelles propositions vraies. - -Démonstration - - vérification d’une proposition par une séquence de déductions logiques - à partir d’un ensemble d’axiomes. - -Lorsque le champ donné (le domaine) ne contient qu'un nombre fini d'individus, -on peut définir un choix de valeur des variables permettant de vérifier la -proposition obtenue par la *conjonction* de tous les axiomes du système proposé. -On dit alors que ce choix *réalise* un système d'axiomes. - - -Il ne s'agit plus de savoir si la définition entraîne l'existence, mais de -chercher si la structure d'un système d'axiomes (*règles*) peut donner naissance -à un champ d'individus qui soutiennent entre eux les relations définies pas les -axiomes. - -Concret et abstrait --------------------- - -Il est possible qu'un même genre d'existant joue dans un schéma de genèse le -rôle d'abstrait par rapport à un concret de base, et soit au contraire dans une -autre genèse le concret de base d'un nouvel abstrait. - -Une pareille présentation des choses implique un tel renversement par rapport -aux habitudes de pensée classiques, qu'il faut encore insister sur le sens -nouveau que reçoivent ici les expressions de "concret" et "d'abstrait". - -Les systèmes d'axiomes sont souvent conçus comme des structures purement -formelles, abstraites. Ces structures sont si profondément engagées dans la -genèse de leurs réalisations, qu'il valait mieux désigner par ces termes les -structures de base. - -Un système d'axiome *peut* devenir le concret de base. - -Ceci permet d'exprimer non seulement l'engagement du concret dans la genèse de -l'abstrait, mais encore les relations d'imitation qui peuvent exister entre la -structure de cet abstrait et celle du concret de base. - -Dans certains cas, la genèse de l'abstrait à partir d'un concret de base -s'affirme jusqu'à réaliser une imitation de structure entre ces genres -d'existants qui naissent l'un de l'autre. - -**C'est pourquoi on représente souvent un algorithme en pseudo-code**, -c'est-à-dire en fait dans le mode de représentation (issu du langage préféré de la -personne qui l'exprime) dominant chez la personne qui exprime un algorithme. - -Comment rendre un algorithme lisible ------------------------------------- - -- Le bon algorithme utilise des identifiants explicites. -- Le bon algorithme est structuré. -- Le bon algorithme est indenté. - -Complexité d'un algorithme --------------------------- - -On peut approximer la complexité des algorithmes. -C'est utile pour pouvoir comparer des algorithmes. - -complexité - - estimer la complexité d'un algorithme, c'est estimer le nombre de calculs qu'il utilise. - -Si f est la fonction caractérisant exactement le coût d’un algorithme et n -la taille des données, on s’intéresse à la façon dont augment f(n) lorsque n augmente -on va montrer que f(n) n'augmente pas plus vite qu’une autre fonction -g(n). Du point de vue mathématique, on dit que la fonction f est dominée -asymptotiquement par la fonction g ce qui se note f = O(g) - -- Complexité temporelle : c’est le nombre d’op«erations effectuées par - une machine qui exécute l’algorithme. - -- Complexité spatiale : c’est le nombre de positions mémoire utilisées par - une machine qui exécute l’algorithme. diff --git a/AlgoApprofondie/cours/annexes/agile.txt b/AlgoApprofondie/cours/annexes/agile.txt deleted file mode 100644 index 5884c11..0000000 --- a/AlgoApprofondie/cours/annexes/agile.txt +++ /dev/null @@ -1,83 +0,0 @@ -La planification agile -======================== - -Le mode itératif ------------------ - -- livrer des versions successives et utilisables qui convergent vers - la version finale - -- ne pas perdre d'énergie à maintenir des specs détaillées non nécessaires - -- de nouvelles orientations fonctionnelles sont possibles, même tard - -- les specs détaillées sont écrites "juste à temps" - - -La planification agile ------------------------ - -- chaque livraison est un projet qui est planifié en tant que tel -- utiliser l'expérience acquise pour affiner les estimations -- préservation de l'écologie du projet au quotidien (code, tests...) - -La confiance, feedback ------------------------ - -- livraisons régulières -- progrès visibles par tous (pas d'effet tunnel) -- pilotage du projet par choix du contenu des livraisons -- investissement du Product Owner -- chercher la collaboration plutôt que la confrontation - -L'agilité ----------- - -- le projet n'est pas joué d'avance -- cultiver la souplesse -- révolution douce -- sortir de la confrontation, jouer le "nous collectif" - mettre tout le monde sur le mme pont et amener tout le monde à bon port - -Les outils agiles ------------------- - -- planification par itérations de 4 semaines -- entrepot de source partagé -- intégration continue -- tests automatisés -- pair programming sur points cruciaux -- sprints -- extranet : - - - hitoires utilisateurs - - test cases - - gestion du backolog et des tickets - - suivi de l'avancement - - documentation - -Le product owner ------------------ - -idéalement, - -- connaissance du métier à informatiser -- fibre projet -- dispo à 100% - -Les tests ---------- - -- automatiser -- viser l'exhaustivité -- tester une cible mouvante -- migrer les tests d'une release à l'autre - -Questions importantes en environnement agile ----------------------------------------------- - -- quelle durée d'itération ? -- comment découper en itérations ? -- que faire lorsque le product owner se retrouve sur le chemin critique ? -- la planification est faite en mode "juste à temps" et "juste assez" -- on ne s'échine plus à blâmer, au contraire on cherche à gagner ensemble diff --git a/AlgoApprofondie/cours/annexes/exercices.txt b/AlgoApprofondie/cours/annexes/exercices.txt deleted file mode 100644 index 1597a02..0000000 --- a/AlgoApprofondie/cours/annexes/exercices.txt +++ /dev/null @@ -1,19 +0,0 @@ -Exercices complémentaires --------------------------- - -+ **Manipulation de chaînes de caractères**: - (création, accès à un caractère, concaténation), listes (création, ajout - d’un élément, suppression d’un élément, accès à un élément, extraction d’une partie de liste), tableaux à une ou plusieurs dimensions. - - + traitement des chaines de caractères - + s.replace() - + s1 + s2 - + un exemple de regexp simple - -+ **Fichiers** : - notion de chemin d’accès, lecture et écriture de données numériques ou de type chaîne de caractères depuis ou vers un fichier. - On encourage l’utilisation de fichiers en tant que supports de données ou de résultats avant divers traitements, par exemple graphiques. - -+ **Piles** - Algorithmes de manipulation : fonctions 'push' et 'pop'. On utilise des listes - (ou tableaux à 1 dimension) pour leur implantation. diff --git a/AlgoApprofondie/cours/annexes/index.txt b/AlgoApprofondie/cours/annexes/index.txt deleted file mode 100644 index dc5acf1..0000000 --- a/AlgoApprofondie/cours/annexes/index.txt +++ /dev/null @@ -1,10 +0,0 @@ -Annexes -========= - -.. toctree:: - :maxdepth: 2 - - exercices - surete - agile - scrum diff --git a/AlgoApprofondie/cours/annexes/scrum.txt b/AlgoApprofondie/cours/annexes/scrum.txt deleted file mode 100644 index 3777780..0000000 --- a/AlgoApprofondie/cours/annexes/scrum.txt +++ /dev/null @@ -1,176 +0,0 @@ -scrum -===== - -.. glossary:: - - scrum - - Scrum est une méthode agile pour la gestion de projets - Le terme Scrum est emprunté au rugby et signifie mêlée. - Ce processus s'articule en effet autour d'une équipe soudée, - qui cherche à atteindre un but, comme c'est le cas en rugby - pour avancer avec le ballon pendant une mêlée. - - -Scrum définit trois rôles principaux : - -- le responsable de produit -- Product Manager, -- le faciliteur -- ScrumMaster -- le développeur - -et bien sûr, l'équipe (auto-gérée). - -Des intervenants peuvent s'intégrer également au projet -de façon plus ponctuelle. - -responsable de produit - - Le responsable de produit (Product Manager) est le représentant des - clients et utilisateurs. - C'est lui qui définit l'ordre dans lequel les fonctionnalités - seront développées et qui prend les décisions importantes - concernant l'orientation du projet. - -Le terme responsable n'est d'ailleurs pas à prendre au sens hiérarchique -du terme, mais dans le sens de l'orientation. - -équipe, développement - - outes les décisions sont prises ensemble et personne ne donne d'ordre - à l'équipe sur sa façon de procéder - -facilitateur - - est chargé de protéger l'équipe de tous les éléments perturbateurs - -planification --------------- - -Scrum utilise une planification à trois niveaux : - -- release/projet -- sprint -- quotidien -- ScrumMeeting - -quotidien - - Au quotidien, une réunion, le ScrumMeeting (pas plus de 15 min) - permet à l'équipe et au ScrumMaster de faire un point d'avancement sur - les tâches et sur les difficultés rencontrées. - répondre à trois questions : - * Qu'est-ce que j'ai fait hier ? - * Qu'est-ce que je compte faire aujourd'hui ? - * Quelles difficultés est-ce que je rencontre ? - -sprint - - Scrum est un processus itératif : les itérations sont appelées des sprints - et durent en théorie 30 jours calendaires. - En pratique, les itérations durent généralement entre 2 et 4 semaines. - Chaque sprint possède un but et on lui associe une liste d'items - de fonctionnalités à réaliser. - Ces items sont décomposés par l'équipe en tâches élémentaires - de quelques heures, les items de fonctionnalités de sprint. - - Pendant un sprint, les items de fonctionnalités de sprint à réaliser - ne peuvent pas être changés. - Les changements éventuels seront éventuellement réalisés - dans les sprints suivants. - -releases - - pour améliorer la lisibilité du projet, - on regroupe généralement des itérations en releases. - En effet, comme chaque sprint doit aboutir à la livraison - d'un produit partiel, une release permet de marquer la livraison - d'une version aboutie, susceptible d'être mise en exploitation - -gestion des besoins -------------------- - -tâches (backlog de sprint) -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Lorsqu'on démarre un sprint, on choisit quels items des fonctionnalités -seront réalisés dans ce sprint. - -L'équipe décompose ensuite chaque item en liste de tâches élémentaires -(techniques ou non), chaque tâche étant estimée en heures -et ne devant pas durer plus de 2 jours. -On constitue ainsi le backlog de sprint. - -Les items de backlog de produit sont les fonctionnalités qui deviendront -les items du baclog d'un sprint. -Ces fonctionnalités sont estimées en points relatifs, sans unité. - -planning poker - - façon ludique et efficace de produire des estimations - sur la complexité des fonctionnalités à développer - - pour évaluer les scénarios utilisateurs (user stories) - du carnet de produit (product backlog). - -à la fin d'un sprint : - -- revue de sprint -- rétrospective de sprint - -comprendre ce qui n'a pas bien marché dans le sprint, -les erreurs commises et de prendre des décisions pour s'améliorer - -mise en oeuvre --------------- - -Scrum peut être mis en pratique avec trois fois rien : deux listes suffisent. -La liste des items du backlog de produit et la liste des items du backlog -de sprint. La saisie et la mise à jour des données est simplement -un peu moins agréable. - -glossaire ---------- - -Directeur de produit (Product Owner) (responsable produit) - - personne responsable de produire et maintenir à jour le backlog de produit. - C'est lui qui en détermine les priorités et qui prend les décisions - concernant l'orientation du projet. - -ScrumMaster (facilitateur) - - membre de l'équipe dont l'objectif principal est de la protéger - des perturbation extérieures. - Il est complètement transparent pour la communication entre l'équipe - et les clients et n'a aucun pouvoir hiérarchique sur l'équipe. - C'est en revanche un facilitateur pour les problèmes non techniques - de l'équipe. - -Backlog de produit (Product Backlog) (fonctionnalités) - - liste des fonctionnalités qui devront être réalisées par le logiciel. - -Backlog de sprint (Sprint Backlog) (tâches) - - liste des tâches à accomplir pendant un sprint. - Elles correspondent à la réalisation des items de backlog - du produit affectés au sprint. - -Mêlée quotidienne (Daily Scrum) (quotidien) - - réunion quotidienne de 15 minutes qui a pour but de faire le point - sur ce qui a été fait depuis la dernière mêlée, - ce qui est prévu de faire jusqu'à la prochaine - et quelles sont les embûches rencontrées durant le travail. - -Sprint (sprint) - - nom d'une itération dans Scrum. - Cette itération dure 30 jours calendaires en théorie, - mais en pratique on utilise plutôt entre 2 et 4 semaines. - Pendant une itération, l'équipe doit développer une liste d'items - du backlog de produit qui a été définie au début de ce sprint. - -Graphique d'avancement (Burndown Chart) (avancement) - - graphique qui montre la tendance du reste à faire total de jour en jour - (pour les sprints) ou de sprint en sprint (pour les releases). diff --git a/AlgoApprofondie/cours/annexes/surete.txt b/AlgoApprofondie/cours/annexes/surete.txt deleted file mode 100644 index 44da9b7..0000000 --- a/AlgoApprofondie/cours/annexes/surete.txt +++ /dev/null @@ -1,93 +0,0 @@ -Outils de sureté d'un programme --------------------------------------- - -La preuve de programme -~~~~~~~~~~~~~~~~~~~~~~ - -Le niveau maximum de sûreté d'exécution d'un programme est la preuve. Qu'est-ce que la preuve -formelle d'un programme ? Selon la définition de Wikipédia, ce sont "des techniques permettant de -raisonner rigoureusement, à l'aide de logique mathématique, sur des programmes informatiques ou -du matériel électroniques, afin de démontrer leur validité par rapport à une certaine -spécification." Bref c'est un raisonnement logique sur un programmme qui permet d'être sûr que le -programme est valide et ne va pas planter. - -La preuve de programme est très peu utilisée dans l'industrie, car très coûteuse et très -difficile à mettre en place. Elle quand même utilisée, mais dans des secteurs où le risque doit -absolument être évacué et où il n'y a aucun droit à l'erreur. Par exemple, le secteur médical -(informatique en bloc opératoire), militaire (peu d'informations nous parviennent dans ce -domaine), l'aviation civile (le logiciel Astrée pour Airbus), la fusée Ariane (depuis le bug qui -avait fait crasher Ariane 5 ces questions sont prises très au sérieux), et le milieu bancaire -(surtout le domaine des décisions boursières : un programme chargé de lancer des décisions -d'achat ou de vente à la bourse qui comporte un bug peut en quelque centièmes de secondes faire -perdre des millions, voire des milliards d'euros à une banque. Le programme ne doit tout simplement pas -bugger). - -Le model checking -~~~~~~~~~~~~~~~~~~ - -Le model checking, l'analyse statique et l'interprétation abstraite procèdent d'une méthodologie -moins lourde de validation des programmes. Ces méthodes analysent exhaustivement l'évolution du -système lors de ses exécutions possibles et permetent de dire si globalement, dans un contexte -donné, le programme va fonctionner correctement. Encore très lourdes, ces techniques ne sont -utilisées que dans un contexte industriel de haute sécurité. - -Les tests d'acceptation -~~~~~~~~~~~~~~~~~~~~~~~ - -Il y a plusieurs types de tests - -- unitaires -- fonctionnels -- acceptation - -Très utilisés dans l'industrie, les tests unitaires et fonctionnels ne testent que certaines -parties du programme et permettent de dire que le programme va marcher grosso-modo à peu près. -Beaucoup moins coûteux à installer, ce sont des éléments cléfs des méthodes agiles. - -Les Outils de linting (validation) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- vérifications syntaxiques -- vérification sémantiques -- vérification sur les imports inutiles ou mal formés (imports croisés - -Exemple en python : pylint - - -La dette technique -~~~~~~~~~~~~~~~~~~ - -Au bout d'un moment le code devient du code spaghetti et les techniques sont obsolètes. -Les tests permettent de solder la dette technique plus facilement. - -**avoir le courage de payer une dette technique, et affronter une dette technique -sinon il peut y avoir un coût à payer qui sera pohibitoire.** - -On solde la dette technique parce que à un moment ça va devenir beaucoup trop -cher à payer. - -Les méthodologies agiles -~~~~~~~~~~~~~~~~~~~~~~~~ - -La manière dont le code est produit importe énormément. Par exemple, une -méthodologie ou le **refactoring** (réécriture de code) est permis et même conseillé -a plus de chance de produire du code organisé. - -Les méthodologies agiles produisent en général du code mieux organisé. Ce sont les -méthodes de travail les plus en vogue aujourd'hui, elles mettent l'accent sur : - -- Du logiciel fonctionnel plutôt que de la documentation exhaustive -- La réponse au changement plutôt que le suivi d'un plan -- Le logiciel fonctionnel est la principale mesure d'avancement -- Une attention continue à l'excellence technique et à une bonne - conception améliore l'agilité -- La simplicité est essentielle (il est facile de faire, il est - difficile de faire simple) - -Le principe de base de la méthodologie Scrum par exemple est de focaliser l'équipe de façon -itérative sur un ensemble de fonctionnalités à réaliser, dans des itérations de durée fixe de une -à quatre semaines, appelées **sprints**. Chaque sprint possède un but à atteindre, défini par le -responsable de produit, à partir duquel sont choisies les fonctionnalités à implémenter dans ce -sprint. Un sprint aboutit toujours sur la livraison d'un produit partiel fonctionnel. Pendant ce -temps, le facilitateur a la charge de réduire au maximum les perturbations extérieures et de -résoudre les problèmes non techniques de l'équipe. diff --git a/AlgoApprofondie/cours/apercu.txt b/AlgoApprofondie/cours/apercu.txt deleted file mode 100644 index ea09668..0000000 --- a/AlgoApprofondie/cours/apercu.txt +++ /dev/null @@ -1,79 +0,0 @@ -Aperçu des algorithmes fondamentaux -=================================== - -Les algorithmes sont partout. Absolument partout aujourd'hui. -Il n'est pas un domaine de nos activités qui ne soit liés à tel ou tel algorithme. - -En mathématiques ------------------ - -- l'algèbre (étude des structures de données) -- l'arithmétique modulaire (théorie des nombres) -- la géométrie (affine, algébrique, invariants topologiques...) -- les diagrammes (diagrammes de Venn...) -- les colorisation d'une carte -- comportements stochastiques - -En informatique ----------------- - -- les algorithmes sur la manipulation des structures de données - Exemple : les algorithmes de tri, de recherche dans un arbre... -- les parcours de graphes (chemins le plus court, voyageur de commerce...) -- la cryptologie (code gray) -- les stratégies de jeux - -Tirés du monde réel --------------------- - -- les jeux (casse-tête, dominos, échiquiers...) -- énigmes, logique et paradoxes -- problèmes de raisonnements. Il n'existe pas beaucoup de méthodes - ou de moyens simples pour traiter et résoudre les énoncés de logique de raisonnement. -- La "marche de l'ivrogne" : processus de progression discrète (pas à pas) - dont l'étape suivante est lié à l'état présent et pas du tout à la mémoire du passé proche. - Il revêt seulement un caractère de type probabilité (stochastique) dit markovien. -- algorithmes de colonies de fourmis (chemins optimal pour arriver à la nourriture) - -Le voyageur de commerce -~~~~~~~~~~~~~~~~~~~~~~~~ - -Le problème du voyageur de commerce, consiste en la recherche d’un trajet minimal permettant à un -voyageur de visiter n villes. En règle générale on cherche à minimiser le temps de parcours total ou la -distance totale parcourue. - -Il suffit de construire tous les chemins possibles et de calculer leurs longueurs. -Avec ``n`` villes il y a ``(n-1)!/2`` chemins possibles. -Avec 36 villes on trouve : 5166573983193072464833325668761600000000, -si le nombre de villes augmente, ça devient vite rédibitoire. - -Résolution par - -- algorithme de parcours de graphes -- algorithme glouton -- algorithmes génétiques - -Les algorithmes génétiques s’appuient sur un principe de sélection des individus d’une population qui présen- -tent des caractéristiques se rapprochant au mieux de ce que l’on recherche; cette population évoluant par -ailleurs selon des critères d’évolution génétique à choisir. Dans le contexte du problème du voyageur de -commerce, un individu est une tournée, un chemin et une population un ensemble de tournées. Il s’agit -maintenant de dé...nir un critère de sélection ainsi que des règles d’évolution de la population. - -- approches métaheuristiques (exemples: colonies de fourmis) - -Exemple de résolution - -.. raw:: latex - - \begin{algorithm} - \caption{Algorithme du voyageur de commerce}\label{commerce} - \begin{algorithmic}[1] - - \BState \emph{Données} : $L$ \Comment{Liste des villes à parcourir avec les distances entre les villes} - \BState \emph{Données} : $L'$ \Comment{Liste du parcours des villes à effectuer} - \State \emph{début} - \BState ... - \State \emph{fin} - - \end{algorithmic} - \end{algorithm} diff --git a/AlgoApprofondie/cours/cesar.py b/AlgoApprofondie/cours/cesar.py deleted file mode 100644 index c3d25ac..0000000 --- a/AlgoApprofondie/cours/cesar.py +++ /dev/null @@ -1,61 +0,0 @@ -# coding: utf-8 -minuscules = 'abcdefghijklmnopqrstuvwxyz' -majuscules = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - -def rotation(chaine, x): - """ - Effectue une rotation de x caractères vers la droite: - >>> rotation('abcde', 2) - 'cdeab' - """ - return chaine[x:] + chaine[:x] - -def index(c, chaine): - """ - Trouve l'index de c dans la chaine: - >>> index('n', 'bonjour') - 2 - """ - for i in range(len(chaine)): - if (c == chaine[i]): - return i - return -1 - -def chiffre_minuscules(chaine, x): - """ - Chiffre une chaîne composée de minuscules - >>> chiffre_minuscules('bonjour', 3) - 'erqmrxu' - """ - r = rotation(minuscules, x) - resultat = '' - for lettre in chaine: - resultat = resultat + r[index(lettre, minuscules)] - return resultat - -def chiffre(chaine, x): - """ - Chiffre une chaîne quelconque - >>> chiffre('Bonjour les amis!', 3) - 'Erqmrxu ohv dplv!' - """ - r_min = rotation(minuscules, x) - r_maj = rotation(majuscules, x) - resultat = '' - for lettre in chaine: - if lettre in minuscules: - resultat = resultat + r_min[index(lettre, minuscules)] - elif lettre in majuscules: - resultat = resultat + r_maj[index(lettre, majuscules)] - else: - resultat = resultat + lettre - return resultat - -############################################################################# -# Programme principal -############################################################################# -print(chiffre_minuscules('bonjour', 3)) -print(chiffre('Bonjour les amis!', 3)) -print(chiffre('Erqmrxu ohv dplv!', 23)) -print(chiffre('Eudyr, yrxv dyhc ilql fhw hahuflfh!', 23)) - diff --git a/AlgoApprofondie/cours/code/factorielle.ml b/AlgoApprofondie/cours/code/factorielle.ml deleted file mode 100644 index 5065a2c..0000000 --- a/AlgoApprofondie/cours/code/factorielle.ml +++ /dev/null @@ -1,17 +0,0 @@ -let rec fact = function - |1 -> 1 - | n -> n * fact (n-1) ;; - -let print_fact n = - Printf.printf "factorielle %i = %i\n" n (fact n) - -let main () = - begin - print_fact 5 ; - print_newline () ; - exit 0 ; - end - -let _ = main () - - diff --git a/AlgoApprofondie/cours/code/factorielle.py b/AlgoApprofondie/cours/code/factorielle.py deleted file mode 100644 index 734719f..0000000 --- a/AlgoApprofondie/cours/code/factorielle.py +++ /dev/null @@ -1,12 +0,0 @@ -def factorielle(n): - if (n > 1): - r = n*factorielle(n-1) - else: - r = 1 - return r - -def print_fact(n): - print "factorielle {} = {}\n".format(5, factorielle(5)) - -if __name__ == '__main__': - print_fact(5) diff --git a/AlgoApprofondie/cours/conf.py b/AlgoApprofondie/cours/conf.py deleted file mode 100644 index 3005e97..0000000 --- a/AlgoApprofondie/cours/conf.py +++ /dev/null @@ -1,370 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Algorithmique documentation build configuration file, created by -# sphinx-quickstart on Thu Mar 16 16:07:00 2017. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx.ext.pngmath', 'sphinx.ext.ifconfig', -] - -# ajout des cours avec solution des exercices ou non -def setup(app): - app.add_config_value('correction', False, 'env') - app.add_config_value('exercice', False, 'env') - -exercice = False -correction = False - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# source_suffix = ['.rst', '.md'] -source_suffix = '.txt' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'Algorithmique Approfondie' -copyright = u'2017, Gwen' -author = u'Gwen' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = u'1' -# The full version, including alpha/beta/rc tags. -release = u'1' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = 'fr' - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -today_fmt = '%d/%m/%Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -default_role = 'literal' - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -#keep_warnings = False - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'alabaster' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (relative to this directory) to use as a favicon of -# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -#html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -html_show_sphinx = False - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -html_show_copyright = False - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' -#html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# Now only 'ja' uses this config value -#html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -#html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. -htmlhelp_basename = 'Algorithmiquedoc' - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -'papersize': 'a4paper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -'preamble': """\usepackage{amsmath} -\usepackage{algorithm} -\usepackage[noend]{algpseudocode} -\makeatletter -\def\BState{\State\hskip-\ALG@thistlm} -\makeatother - -""" - -# Latex figure (float) alignment -#'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'AlgorithmiqueApprofondie.tex', u'Cours d\'algorithmique approfondie', - u'INFAL24', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -latex_logo = '_static/cesi.jpg' - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = False - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'algorithmique', u'Algorithmique Documentation', - [author], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'Algorithmique', u'Algorithmique Documentation', - author, 'Algorithmique', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -#texinfo_no_detailmenu = False - - -# -- Options for Epub output ---------------------------------------------- - -# Bibliographic Dublin Core info. -epub_title = project -epub_author = author -epub_publisher = author -epub_copyright = copyright - -# The basename for the epub file. It defaults to the project name. -#epub_basename = project - -# The HTML theme for the epub output. Since the default themes are not -# optimized for small screen space, using the same theme for HTML and epub -# output is usually not wise. This defaults to 'epub', a theme designed to save -# visual space. -#epub_theme = 'epub' - -# The language of the text. It defaults to the language option -# or 'en' if the language is not set. -#epub_language = '' - -# The scheme of the identifier. Typical schemes are ISBN or URL. -#epub_scheme = '' - -# The unique identifier of the text. This can be a ISBN number -# or the project homepage. -#epub_identifier = '' - -# A unique identification for the text. -#epub_uid = '' - -# A tuple containing the cover image and cover page html template filenames. -#epub_cover = () - -# A sequence of (type, uri, title) tuples for the guide element of content.opf. -#epub_guide = () - -# HTML files that should be inserted before the pages created by sphinx. -# The format is a list of tuples containing the path and title. -#epub_pre_files = [] - -# HTML files that should be inserted after the pages created by sphinx. -# The format is a list of tuples containing the path and title. -#epub_post_files = [] - -# A list of files that should not be packed into the epub file. -epub_exclude_files = ['search.html'] - -# The depth of the table of contents in toc.ncx. -#epub_tocdepth = 3 - -# Allow duplicate toc entries. -#epub_tocdup = True - -# Choose between 'default' and 'includehidden'. -#epub_tocscope = 'default' - -# Fix unsupported image types using the Pillow. -#epub_fix_images = False - -# Scale large images. -#epub_max_image_width = 0 - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#epub_show_urls = 'inline' - -# If false, no index is generated. -#epub_use_index = True diff --git a/AlgoApprofondie/cours/control.txt b/AlgoApprofondie/cours/control.txt deleted file mode 100644 index 7770490..0000000 --- a/AlgoApprofondie/cours/control.txt +++ /dev/null @@ -1,294 +0,0 @@ -Les structures de contrôle -========================== - -L'instruction de saut ----------------------- - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de saut conditionnel}\label{saut} - \begin{algorithmic}[1] - \Procedure{Euclide}{} \Comment{c'est l'algorithme d'Euclide} - \State $\textit{stringlen} \gets \text{length of }\textit{string}$ - \State $i \gets \textit{patlen}$ - \BState \emph{top}: - \If {$i > \textit{stringlen}$} \Return false - \EndIf - \State $j \gets \textit{patlen}$ - \BState \emph{loop}: \Comment{C'est le label (l'étiquette)} \label{etiquette} - \If {$\textit{string}(i) = \textit{path}(j)$} - \State $j \gets j-1$. - \State $i \gets i-1$. - \State \textbf{goto} \emph{loop}. \label{goto} - \State \textbf{close}; - \EndIf - \State $i \gets - i+\max(\textit{delta}_1(\textit{string}(i)),\textit{delta}_2(j))$. - \State \textbf{goto} \emph{top}. \Comment{C'est l'instruction de saut} - \EndProcedure - \end{algorithmic} - \end{algorithm} - - -.. raw:: latex - - Ligne \ref{etiquette}, le bloc `loop` est aussi un label (une étiquette), - c'est-à-dire une marque posée qu'il est possible de retrouver dans le programme. \\ - -.. raw:: latex - - Ligne \ref{goto}, l'instruction \texttt{goto} (aller à ) est le saut vers le label. \\ - -Description générique d'une instruction de saut:: - - Instruction 1 - Saut Label1 - Instruction 2 - ... - Label1: - Instruction n - -.. important:: les sauts conditionnels sont à éviter, même s'ils sont implémentés - dans le langage cible, car c'est le meilleur moyen d'aboutir à - du **code spaghetti**. - -L'instruction de branchement conditionnel ------------------------------------------- - -On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non. - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple d'instruction de test} - \begin{algorithmic}[1] - \BState \emph{entrée}: $quality\gets 0$ \Comment{C'est cette valeur qui sera testée} - \BState \emph{locale}: $a\gets ""$ - \BState \emph{sortie}: $a$ \Comment{La sortie est la valeur de $a$} - \BState \emph{corps}: - \If{$quality\ge 9$} - \State $a\gets perfect$ - \ElsIf{$quality\ge 7$} - \State $a\gets good$ - \ElsIf{$quality\ge 5$} - \State $a\gets medium$ - \ElsIf{$quality\ge 3$} - \State $a\gets bad$ - \Else - \State $a\gets unusable$ - \EndIf - \end{algorithmic} - \end{algorithm} - - - -.. ifconfig:: exercice - - **Exercice** : Compacter l'algorithme suivant en une seule condition de test:: - - Si il fait trop chaud Alors - Si il ne pleut pas Alors - Ouvrir la fenêtre - Sinon - Fermer la fenêtre - Finsi - Sinon - Fermer la fenêtre - Finsi - -.. ifconfig:: correction - - **Correction** : - - :: - - Si il fait trop chaud ET il ne pleut pas Alors - Ouvrir la fenêtre - Sinon - Fermer la fenêtre - Finsi - - -L'instruction switch --------------------- - -L'instruction switch permet de faire plusieurs tests de valeurs sur le contenu d'une même variable. -Ce branchement conditionnel simplifie beaucoup le test de plusieurs valeurs d'une variable. - -Les instructions d'itérations (boucles) ---------------------------------------- - -.. important:: Toutes les boucles concernent le paradigme de programmation impératif - et ne sont pas valides dans le paradigme de programmation fonctionnel - (puisque l'ordre d'évaluation importe) - -- arrêt conditionnel (break) -- passage d'un pas (continue) - -Répéter ... jusqu'à -~~~~~~~~~~~~~~~~~~~ - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de répéter ... jusqu'à} - \begin{algorithmic}[1] - \BState \emph{locales}: $i \gets 1$ \Comment{déclaration et initialisation de i} - \Repeat \Comment{c'est le label de début du répéter} - \State $i \gets \textit{i+1}$ - \Until{i == 100} \Comment{condition de fin de la boucle} - \end{algorithmic} - \end{algorithm} - -La boucle **pour** (for) -~~~~~~~~~~~~~~~~~~~~~~~~ - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de boucle for} - \begin{algorithmic}[1] - \BState \emph{locales}: $sum\gets 0$ - \For{$i\gets 1, n$} - \State $sum\gets sum+i$ - \EndFor - \end{algorithmic} - \end{algorithm} - - - - - -.. ifconfig:: exercice - - **Exercice** : Ecrire un algorithme qui demande successivement 20 nombres à l’utilisateur, - et qui lui dise ensuite quel était le plus grand parmi ces 20 nombres - -.. ifconfig:: correction - - **Correction** : - :: - - Variables N, i, PG en Entier - Debut - PG <- 0 - Pour i <- 1 à 20 - Ecrire "Entrez un nombre : " - Lire N - Si i = 1 ou N > PG Alors - PG <- N - FinSi - Ecrire "Le nombre le plus grand était : ", PG - Fin - - -.. attention:: ne jamais manipuler le compteur dans une boucle - -:: - - Variable Truc en Entier - Début - Pour Truc <- 1 à 15 - Truc <- Truc * 2 - Ecrire "Passage numéro : ", Truc - Truc Suivant - Fin - -La boucle tant que (while) -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de boucle while} - \begin{algorithmic}[1] - \BState \emph{locales}: $sum\gets 0$ - \State $i\gets 1$ - \While{$i\le n$} - \State $sum\gets sum+i$ - \State $i\gets i+1$ - \EndWhile - \end{algorithmic} - \end{algorithm} - -.. ifconfig:: exercice - - **Exercice** : Ecrire un algorithme de validation d'une entrée utilisateur - - :: - - "Voulez vous un café ? (O/N)" - -.. ifconfig:: correction - - **Correction** : deux solutions possibles, une - - :: - - Variable Rep en Caractère - Début - Rep <- "" - Ecrire "Voulez vous un café ? (O/N)" - TantQue Rep <> "O" et Rep <> "N" - Lire Rep - Si Rep <> "O" et Rep <> "N" Alors - Ecrire "Saisie Erronée, Recommencez" - FinSi - FinTantQue - Fin - - :: - - Variable Rep en Caractère - Début - Ecrire "Voulez vous un café ? (O/N)" - Lire Rep - TantQue Rep <> "O" et Rep <> "N" - Ecrire "Vous devez répondre par O ou N. Recommencez" - Lire Rep - FinTantQue - Ecrire "Saisie acceptée" - Fin - -.. ifconfig:: exercice - - **Exercice** : "C'est plus, C'est moins", c'est-à-dire Ecrire un algorithme qui demande à l’utilisateur - un nombre compris entre a et b jusqu’à ce que la réponse convienne. - -.. ifconfig:: correction - - **Correction** : - - :: - - Variable N en Entier - Debut - N <- 0 - Ecrire "Entrez un nombre entre 10 et 20" - TantQue N < 10 ou N > 20 - Lire N - Si N < 10 Alors - Ecrire "Plus grand !" - SinonSi N > 20 Alors - Ecrire "Plus petit !" - FinSi - FinTantQue - Fin - -Et les autres boucles : répéter... jusqu'à, etc... - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de boucle répéter} - - \begin{algorithmic}[1] - \State $sum\gets 0$ - \State $i\gets 1$ - \Repeat - \State $sum\gets sum+i$ - \State $i\gets i+1$ - \Until{$i>n$} - \end{algorithmic} - \end{algorithm} diff --git a/AlgoApprofondie/cours/donnees.txt b/AlgoApprofondie/cours/donnees.txt deleted file mode 100644 index 990629e..0000000 --- a/AlgoApprofondie/cours/donnees.txt +++ /dev/null @@ -1,577 +0,0 @@ -Les structures de données -=========================== - -.. glossary:: - - ATD - - Abstract Data Type, structure de données abstraites. - La représentation des données est forcément un choix. - Il est impossible de rendre compte globalement d'un élément du réel, - il faut en faire une interprétation abstraite. - -**Exemple**: - -- Un être humain peut être représenté par les données présentes dans sa - carte d'identité. Mais un être humain n'est pas sa carte d'identité. -- Un être humain peut être représenté par les données présentes dans ses préférences - de surf sur internet. Mais un être humain **n'est pas** l'ensemble de ses logs de surf sur le net. - -Les séquences -------------- - -Les types séquences (listes) - -.. code-block:: ocaml - - # 4::1::5::8::1::[];; - - : int list = [4 ;1 ;5 ;8 ;1] - - -Un ensemble de valeurs portant le même nom de variable et repérées par un nombre, s’appelle un tableau, ou encore une liste, ou une variable indicée. -Le nombre qui, au sein d’un tableau, sert à repérer chaque valeur s’appelle l’indice. -Chaque fois que l’on doit désigner un élément du tableau, on fait figurer le nom du tableau, suivi de l’indice de l’élément. - -**manipulation** : - -- `insert()` -- `append()` -- `remove()` -- `find()` -- `print()` -- ... - -.. code-block:: python - - zoo = ['bear', 'lion', 'panda', 'zebra'] - print(zoo) - - # But these list elements are not - biggerZoo = ['bear', 'lion', 'panda', 'zebra', ['chimpanzees', 'gorillas', 'orangutans', 'gibbons']] - print(biggerZoo) - -- Lists Versus Tuples : types mutables, immutables -- Lists Versus Sets : non ordonné, collection simple - -- Recherche dans une liste, recherche du maximum dans une liste -- Recherche d’un mot dans une chaîne de caractères. - -Algorithme de la longueur d'une liste --------------------------------------- - -.. code-block:: ocaml - - # let rec longueur l = - match l with - [] -> 0 - | ::s -> 1 + (longueur s);; - -Cette fonction est prédéfinie en Ocaml : `List.length` - -.. ifconfig:: exercice - - **Exercice** : écrire un algorithme qui déclare et - remplisse un tableau de 7 valeurs numériques en les mettant toutes à zéro. - -.. ifconfig:: correction - - **Correction** : - :: - - Tableau Truc(6) en Numérique - Variable i en Numérique - Debut - Pour i <- 0 à 6 - Truc(i) <- 0 - i Suivant - Fin - - exemple d'implémentation en python - - .. code-block: python - - >>> liste = [] - >>> for i in range(6): - ... liste.append(i) - ... - >>> liste - [0, 1, 2, 3, 4, 5] - >>> - - -.. ifconfig:: exercice - - **Exercice** : Calcul du premier élément maximal dans une liste, - proposer une implémentation en python qui renvoie le maximum et - la position du max dans la liste. - -.. ifconfig:: correction - - **Correction** : - - .. code-block: python - - def max_list(L) : - k = len(L) - max, x = L[0], 0 - i = 1 - while i < k : - if max < L[i]: - max = L[i] - x = i - i = i + 1 - return max, x - - couple = max_list([4,5,6,9,12,5,10,3,18,5,6,7]) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - - Exemple de généricité : ce code fonctionne avec une chaîne de caractères. - - .. code-block: python - - couple = max_list(’totovaaumarche’) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - -.. glossary:: - - Matrice - - Tableaux de dimension multiple, c'est un tableau de tableau - -.. ifconfig:: exercice - - **Exercice** : Écrivez un algorithme remplissant un tableau de 6 sur 13, avec des zéros. - -.. ifconfig:: correction - - **Correction** : - - implémentation en python - - .. code-block:: python - - >>> matrice = [] - >>> for i in range(12): - ... matrice.append([0 for i in range(5)]) - ... - >>> from pprint import pprint - >>> pprint(matrice) - [[0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0]] - >>> - -Algorithmes de tri ------------------- - -On désigne par "tri" l'opération consistant à ordonner un ensemble d'éléments en fonction de clés sur lesquelles est définie une relation d'ordre. - -Les algorithmes de tri ont une grande importance pratique. -Ils sont fondamentaux dans certains domaines (exemples : map-reduce en database non relationnelle). - -L'étude du tri est également intéressante en elle-même, c'est un des domaines de l'algorithmique très étudié et connu. - -Tri par insertion -~~~~~~~~~~~~~~~~~~ - -Cet algorithme de tri suit de manière naturelle la structure récursive des -listes. Soit l une liste à trier : - -- si l est vide alors elle est déjà triée -- sinon, l est de la forme x::s et on trie récursivement la suite s et on obtient une liste triée s’ - on insert x au bon endroit dans s’ et on obtient une liste triée - -Description de l'algorithme - -- la fonction inserer permet d’insérer un élément x dans une liste l -- si la liste l est triée alors x est inséré au bon endroit - -.. code-block:: ocaml - - # let rec inserer x l = - match l with - [] -> [x] - | y::s -> if x<=y then x::l else y::(inserer x s);; - val inserer : ’a -> ’a list -> ’a list - # inserer 5 [3 ;7 ;10];; - - : int list = [3 ; 5 ; 7 ; 10] - -Tri rapide -~~~~~~~~~~~~ - -soit une liste l à trier : - -- si l est vide alors elle est triée -- sinon, choisir un élément p de la liste (le premier par exemple) - nommé le **pivot** -- partager l en deux listes g et d contenant les autres éléments de l - qui sont plus petits (resp. plus grands) que la valeur du pivot p -- trier récursivement g et d, on obtient deux listes g’ et d’ triées - -.. code-block:: ocaml - :caption: fonction de partage d'une liste - - #let rec partage p l = - match l with - [] -> ([] , []) - |x::s -> let g,d = partage p s in - if x<=p then (x::g , d) else (g , x::d) ;; - val partage : ’a -> ’a list -> ’a list * ’a list = - # partage 5 [1 ;9 ;7 ;3 ;2 ;4];; - - : int list * int list = ([1 ; 3 ; 2 ; 4], [9 ; 7]) - -.. code-block:: ocaml - :caption: algorithme de tri rapide - - # let rec tri rapide l = - match l with - [] -> [] - | p::s -> let g , d = partage p s in - (tri rapide g)@[p]@(tri rapide d) ;; - val tri rapide : ’a list -> ’a list = - # tri rapide [5 ; 1 ; 9 ; 7 ; 3 ; 2 ; 4];; - - : int list = [1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 9] - - -Définition d'un itérateur -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. code-block:: python - - >>> l = range(10) - >>> for i in l: - ... print l[i] - ... - 0 - ... - 8 - 9 - >>> l.__iter__() - - - -Les listes chaînées -~~~~~~~~~~~~~~~~~~~~ - -.. code-block:: ocaml - - typedef struct list{ - int elt ; - struct list* suivant ; - } ; - - -**Outils de manipulation** : - -- `next()` -- `pointer()` -- `insert(l, a)` -- `remove(a, n)` - - -Les piles ----------- - -**manipulation** - -- `insert()` : insérer un élément à la fin de la pile -- `dequeue()` : (remove and return) : retirer un élément du haut de la pile -- FIFO : "first in first out" - - -Traduction d'une structure de données dans une autre ------------------------------------------------------ - -.. code-block:: python - - >>> listOfStrings = ['One', 'Two', 'Three'] - >>> strOfStrings = ' '.join(listOfStrings) - >>> print(strOfStrings) - One Two Three - >>> - >>> # List Of Integers to a String - ... listOfNumbers = [1, 2, 3] - >>> strOfNumbers = ''.join(str(n) for n in listOfNumbers) - >>> print(strOfNumbers) - 123 - >>> - -.. code-block:: python - - >>> l = [('host1', '10.1.2.3', '6E:FF:56:A2:AF:18'), ('host3', '10.1.2.5', '6E:FF:56:A2:AF:19')] - >>> result = [] - >>> for hostname, ip, macaddress in l: - ... result.append(dict(hostname=hostname, ip=ip, macaddress=macaddress)) - ... - >>> result - [{'hostname': 'host1', 'ip': '10.1.2.3', 'macaddress': '6E:FF:56:A2:AF:18'}, - {'hostname': 'host3', 'ip': '10.1.2.5', 'macaddress': '6E:FF:56:A2:AF:19'}] - >>> - - -.. ifconfig:: exercice - - **Exercice** : Proposer un algorithme de traduction de cette structure de donnée - - .. code-block:: python - - [ - { - 'address': '192.168.0.0', - 'mask': '255.255.255.0', - 'dynamicRanges': [ - { 'low': '192.168.0.5', 'high': '192.168.0.12', 'only_unknown': True }, - { 'low': '192.168.0.50', 'high': '192.168.0.55', 'only_unknown': False }, - ], - }, - { - 'address': '192.168.0.0', - 'mask': '255.255.255.0', - 'dynamicRanges': [ - { 'low': '192.168.0.12', 'high': '192.168.0.45', 'only_unknown': True }, - { 'low': '192.168.0.8', 'high': '192.168.0.35', 'only_unknown': False }, - ], - }, - { - 'address': '192.168.0.1', - 'mask': '255.255.255.0', - 'dynamicRanges': [ - { 'low': '192.168.0.5', 'high': '192.168.0.12', 'only_unknown': True }, - { 'low': '192.168.0.50', 'high': '192.168.0.55', 'only_unknown': False }, - ], - }, - - ] - - En cette structure de données : - - .. code-block:: python - - [ - { - address: '192.168.0.0', - mask: '255.255.255.0', - dynamicRanges: [ - { low: '192.168.0.5', high: '192.168.0.12', only_unknown: true }, - { low: '192.168.0.50', high: '192.168.0.55', only_unknown: false },j - ], [ - { low: '192.168.0.12', high: '192.168.0.45', only_unknown: true }, - { low: '192.168.0.8', high: '192.168.0.35', only_unknown: false }, - ], - }, - { - 'address': '192.168.0.1', - 'mask': '255.255.255.0', - 'dynamicRanges': [ - { 'low': '192.168.0.5', 'high': '192.168.0.12', 'only_unknown': True }, - { 'low': '192.168.0.50', 'high': '192.168.0.55', 'only_unknown': False }, - ], - }, - ] - -.. ifconfig:: correction - - **Correction** : - - .. code-block:: python - - >>> from pprint import pprint - pprint(l) - [{'address': '192.168.0.0', - 'dynamicRanges': [{'high': '192.168.0.12', - 'low': '192.168.0.5', - 'only_unknown': True}, - {'high': '192.168.0.55', - 'low': '192.168.0.50', - 'only_unknown': False}], - 'mask': '255.255.255.0'}, - {'address': '192.168.0.0', - 'dynamicRanges': [{'high': '192.168.0.45', - 'low': '192.168.0.12', - 'only_unknown': True}, - {'high': '192.168.0.35', - 'low': '192.168.0.8', - 'only_unknown': False}], - 'mask': '255.255.255.0'}] - >>> newdata = [] - >>> for i in l: - ... if i['address'] not in [j['address'] for j in newdata]: - ... newdata.append(i) - ... else: - ... for k in newdata: - ... if k['address'] == i['address']: - ... k['dynamicRanges'].extend(i['dynamicRanges']) - ... - >>> pprint(newdata) - [{'address': '192.168.0.0', - 'dynamicRanges': [{'high': '192.168.0.12', - 'low': '192.168.0.5', - 'only_unknown': True}, - {'high': '192.168.0.55', - 'low': '192.168.0.50', - 'only_unknown': False}, - {'high': '192.168.0.45', - 'low': '192.168.0.12', - 'only_unknown': True}, - {'high': '192.168.0.35', - 'low': '192.168.0.8', - 'only_unknown': False}], - 'mask': '255.255.255.0'}, - {'address': '192.168.10.0', - 'dynamicRanges': [{'high': '192.168.0.12', - 'low': '192.168.0.5', - 'only_unknown': True}, - {'high': '192.168.0.55', - 'low': '192.168.0.50', - 'only_unknown': False}], - 'mask': '255.255.255.0'}] - >>> - -.. ifconfig:: exercice - - **Exercice** : Proposer un algorithme qui permette de récupérer la liste - des adresses IP disponibles - - .. code-block:: python - - { - "local": { - "leases": [ - { - "mac": "02:00:c0:a8:00:66", - "name": "pcxubuntu", - "address": "192.168.0.200" - }, - { - "mac": "02:00:c0:a8:00:67", - "name": "pcxubuntu", - "address": "192.168.0.201" - }, - { - "mac": "02:00:c0:a8:00:68", - "name": "pcxubuntu", - "address": "192.168.0.202" - } - ] - } - } - -.. ifconfig:: correction - - **Correction** : - - .. code-block:: python - - >>> l = { - ... "local": { - ... "leases": [ - ... { - ... "mac": "02:00:c0:a8:00:66", - ... "name": "pcxubuntu", - ... "address": "192.168.0.200" - ... }, - ... { - ... "mac": "02:00:c0:a8:00:67", - ... "name": "pcxubuntu", - ... "address": "192.168.0.201" - ... }, - ... { - ... "mac": "02:00:c0:a8:00:68", - ... "name": "pcxubuntu", - ... "address": "192.168.0.202" - ... } - ... ] - ... } - ... } - >>> leases = l["local"]["leases"] - >>> from pprint import pprint - >>> pprint(leases) - [{'address': '192.168.0.200', 'mac': '02:00:c0:a8:00:66', 'name': 'pcxubuntu'}, - {'address': '192.168.0.201', 'mac': '02:00:c0:a8:00:67', 'name': 'pcxubuntu'}, - {'address': '192.168.0.202', 'mac': '02:00:c0:a8:00:68', 'name': 'pcxubuntu'}] - >>> addresses = [lease['address'] for lease in leases] - >>> addresses - ['192.168.0.200', '192.168.0.201', '192.168.0.202'] - >>> - - - -Structures de données complexes -------------------------------- - -Les types produits nommés -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -On les appelle enregistrements, dictionnaires ou tables de hachage. - -:: - - algorithme monAlgorithme - // déclaration d'un enregistrement - enregistrement Personne - chaine nom; - chaine prenom; - entier age; - réel taille; - finenregistrement - ... - Personne[50] t; - début - // Initialisation - t[0].nom <- "Duchmol"; - t[0].prenom <- "Robert"; - t[0].age <- 24; - t[0].taille <- 1.80; - ... - fin - -.. code-block:: ocaml - - # type adresse = { rue : string ; ville : string ; cp : int};; - # type fiche = { - nom : string ; - prenom : string ; - adresse : adresse ; - date naissance : int * int * int ; - tel fixe : string ; - portable : string - };; - # let v1 = { a = 1 ; b = false ; c = 'r'};; - - - - -- les sommes (constructeurs) - -.. code-block:: ocaml - - # type couleur = Pique | Coeur | Carreau | Trefle;; - # let v = (Pique , Coeur);; - val v : couleur * couleur = (Pique , Coeur) - -.. code-block:: ocaml - - type nombre = - Ent of int | Reel of float | Cplx of float × float - Ent, Reel, Cplx sont les constructeurs du type. - -Autres structures de données complexes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- arbres -- graphes -- dates - -- le parcours de graphes -- les calculs de dates diff --git a/AlgoApprofondie/cours/fonctions.txt b/AlgoApprofondie/cours/fonctions.txt deleted file mode 100644 index 330cbca..0000000 --- a/AlgoApprofondie/cours/fonctions.txt +++ /dev/null @@ -1,588 +0,0 @@ -Les fonctions et les procédures -================================ - -Préliminaire : rappel de théorie de cybernétique -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Théorie de l'information (Claude Shannon, 1949), (ou théorie de la communication) - -Canal de transmission:: - - entrée -> récepteur -> émetteur -> sortie - -.. glossary:: - - cybernétique - - étude des fonctions de réflexes conditionnés du cerveau humain - utilisation au mieux en PNL ("programmation neuro-linguistique") - ou en analyse transactionnelle, ou au pire en ingérinerie sociale. - -La matérialité physique est considérée comme le hardware, le génétique (le -réseau neuronal) étant assimilé au network hardware. - -Les objets mentaux (fonctionnements psychologiques et épigénétiques du -cerveaux) est assimilé au logiciel, au software. - -IFTTT ("if this then that") : la causalité mondaine est ramenée à un ordre de -comportement affecté à un assimilé-machine. - -L'humain est ramené à une machine. -C'est articulation entre "déclencheur contextuel" et "action en réponse de" -n'est pas une "black box" mais un "feedback" qui, pour l'humain, -loin d'être ramené à une entrée/sortie, constitue un **feedback** -utile pour la connaissance de soi. - -A la place, la communication est ramenée à une **boucle de rétroaction** -(comme dans un prompt) entre un système comportemental et son environnement. -La représentation sujet/objet (la perspective traditionnelle) est remplacée -par le clivage intérieur/extérieur. Behaviorisme, procédural. - -L'humain est donc ramené à - -- un ordonnanceur -- un comportement intrinsèque (boîte noire) - -- un stimuli pavlovien (déclencheur, trigger) est considéré comme un paramètre -d'entrée -- une instruction comportementale est considérée comme une action de - traitement -- le résultat est observé. - -Cette articulation entre "déclencheur contextuel" et "action en réponse" -est très exactement une forclusion de la profondeur monadique (Leibniz) de -l'humain à la black box informationnelle (et cybernétique). - -Pour quoi faire ? Pour pirater. Pour manipuler. -Le piratage consiste à - -- isoler les constantes (les procédures répétitives, les algorithmes) -- les observer (collecter les données) - -afin de - -- les réécrire (influence toxique, pishing - hammeçonnage) -- les détruire (attaque en règle) - - -Description d'une procédure -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -En programmation impérative, un programme est une suite d’instructions qui font -évoluer l’état mémoire, le résultat est dans l’état final de la mémoire. - -- une procédure peut prendre des paramètres -- elle modifie l'état courant du système - -- Déclaration des paramètes -- Déclaration du corps -- Appel de la procédure - -.. raw:: latex - - \begin{algorithm} - \caption{Procédure de permutation de deux entiers}\label{permutation} - \begin{algorithmic}[1] - \Procedure{permuter}{$a,b$}{} - \BState \emph{parametres}: - \State $a: \textit{int}$ - \State $b: \textit{int}$ - \BState \emph{locales}: - \State $z: \textit{int}$ \Comment{Une variable intermédiaire est nécessaire} - \BState \emph{corps}: - \State $z \gets a$ - \State $a \gets b$ - \State $b \gets z$ - \EndProcedure - \State \Call{permuter}{10, 12} \Comment{appel de la procédure} - \end{algorithmic} - \end{algorithm} - -effet de bord - - toute modification de la mémoire ou modification d'un support externe - -instruction - - commande ou phrase en mesure de modifier l'état du programme ou de la machine hôte - (allocation mémoire, support externe, disque, écran...) - -Une procédure ne renvoie pas de valeur, mais provoque un 'effet de bord' (écriture dans une globale, dans un flux sortant etc.). - -Une procédure permet de créer une instruction nouvelle qui deviendra une primitive pour le programmeur. -Cela permet de structurer le texte source du programme et améliorer sa -lisibilité. Cela permet aussi d'appeler plusieurs fois, et à plusieurs endroit -dans le code, cette primitive. - -Appel d'une procédure -~~~~~~~~~~~~~~~~~~~~~ - -(ex: pseudo-pascal) - -**déclaration de procédure** - -.. raw:: latex - - \begin{algorithm} - \caption{Procédure de permutation de deux entiers}\label{appelpermutation} - \begin{algorithmic}[1] - \Procedure{permuter}{$a,b$}{} - \BState \emph{parametres}: - \State $a: \textit{int}$ \Comment{paramètres formels de la procédure} - \State $b: \textit{int}$ - \BState \emph{locales}: - \State $z: \textit{int}$ \Comment{les variables locales de la procédure} - \BState \emph{corps}: - \State ... \Comment{Le corps de la procedure} - \EndProcedure - \State \Call{permuter}{10, 12} \Comment{l'appel de la procédure} - \end{algorithmic} - \end{algorithm} - - -- les variables x1,...,xn sont appelées *paramètres formels* de p -- les variables v1,...,vm sont appelées *les variables locales* de p - -les valeurs effectivement passées en paramètres, ici `10, 12` -sont appelées **paramètres effectifs** de p - -signature - - C'est l'ensemble paramètre formel + resultat de l'appel - -fermeture - - L'ensemble procédure + variables locales + signature + parametres effectifs - est appelé une **fermeture**. C'est la procédure + son contexte qui permet - de l'instancier dans un programme. - -Environnement - - Contexte d’évaluation d'une expression ou d'une fonction - -Portée - - La portée d'un identifiant (une variable) est sa condition d'utilisation dans un contexte donné - (utilisation locale uniquement, ou bien globale, ou bien locale et globale) - La portée d’une liaison est la portion du code dans laquelle cette - liaison est valide (i.e. où un identifiant est lié à une expression). - -.. ifconfig:: exercice - - **Exercice** : Que donne ce code ? - - .. code-block:: ocaml - - # let x = 42 in - let y = x - 1 in x - y ;; - -.. ifconfig:: correction - - **Correction** : - - .. code-block:: ocaml - - - : int = 1 - - -.. code-block:: ocaml - - let a = 3 (* première liaison pour l'identifiant a *) - let b = 5 and c = 6 - let somme = a + b + c - val somme : int = 14 - let a = 45 (* deuxième liaison pour l'identifiant a *) - somme - val a : int = 45 - -.. ifconfig:: exercice - - **Exercice** : Que donne ce code ? - - .. code-block:: ocaml - - let a = 3 and b = 4 and c = 8 ;; - let somme = a + b + c ;; - val somme : int = ??? - let a = 44 - let b = 5 - let c = 1 - somme - - : int = ??? - -.. ifconfig:: correction - - .. code-block:: ocaml - - let a = 3 and b = 4 and c = 8 ;; - - : int = 15 - let somme = a + b + c ;; - val somme : int = 15 - let a = 44 - let b = 5 - let c = 1 - somme - - : int = 15 - - Même code en python - - .. code-block:: python - - >>> a = 1 - >>> b = 2 - >>> c = 3 - >>> somme = a + b + c - >>> somme - 6 - >>> a = 56 - >>> b = 5678 - >>> c = 56789 - >>> somme - 6 - >>> - -Portée locale dans une expression - -.. code-block:: ocaml - - # let a = 2 and b = 3 and c = 4 in - let somme = a+b+c in - somme - - : int = 9 - # somme ;; - Error: Unbound value somme - # a ;; - Error: Unbound value a - -.. important:: - - L’ordre d’évaluation dans un let ... in ... est bien déterminé, - sans grande importance dans un cadre purement fonctionnel, mais important - en cas d’effets de bord - - -Exemple de variable globale modifiée localement (**attention, mauvaise pratique** !) : - -.. code-block:: python - - >>> a = 5 - >>> def print_a(): - ... print("La variable a = {0}.".format(a)) - ... - >>> print_a() - La variable a = 5. - >>> a = 8 - >>> print_a() - La variable a = 8. - >>> - - - -niveau - - Le niveau d’une déclaration (de variable ou de procédure) est le nombre - de procédures sous lesquelles elle est déclarée. Le programme principal - a le niveau 0. - -.. code-block:: python - :linenos: - - def _get_config(name): - # return config value - if not isfile(CONFIG_FILE): - raise Exception("Fichier de configuration non existant") - from ConfigParser import ConfigParser - cfg = ConfigParser(allow_no_value=True) - cfg.read(CONFIG_FILE) - - if name == "SUBNETS": - return eval(cfg.get('eole', 'subnets')) - elif name == "LEASES_FILE": - DHCP_PATH = cfg.get('eole', 'container_path_dhcp') - return join('/', DHCP_PATH, 'var/lib/dhcp/dhcpd.leases') - def get_routes(*args, **kwargs): - """ - Send list of reserved IP - return list of tuple (id, machine name, IP, MAC Adress) - """ - cfg = creole_loader(load_extra=True, rw=False, owner=MODNAME, - mandatory_permissive=False) - return zip(cfg.dhcp.dhcp.id_dhcp.id_dhcp, cfg.dhcp.dhcp.id_dhcp.hostname, - cfg.dhcp.dhcp.id_dhcp.ip, cfg.dhcp.dhcp.id_dhcp.macaddress) - -On voit que l'objet `cfg` ligne 6 et 7 a le même nom que l'objet `cfg` ligne 19. -C'est autorisé et les espaces de nommages sont différents. - - -Description d'une fonction -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Une fonction renvoie une valeur et ne modifie pas l'état courant du programme -en cours d'exécution ni ne réalise d'effets de bord. Elle renvoie -**toujours** quelque chose (même la valeur ``None`` qui n'est pas rien) - -- une procédure peut prendre des paramètres -- elle modifie l'état courant du système - -- Déclaration des paramètes -- Déclaration du corps -- Appel de la fonction - -En programmation fonctionnelle, programme est un ensemble de définitions de fonctions, -un résultat est l'application d’une fonction à une structure de données effective. - -- composant de base : la fonction -- opération de base : l’application - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de fonction}\label{fonction} - \begin{algorithmic}[1] - \Function{permuter}{$a,b$}{} \Comment{définition de la fonction} - \BState \emph{parametres}: \Comment{déclaration (noms, types) des paramètres formels} - \State $a: \textit{int}$ - \State $b: \textit{int}$ - \BState \emph{locales}: \Comment{déclaration (noms, types) des valeurs locales} - \State $z: \textit{int}$ - \BState \emph{corps}: - \State $z \gets a$ - \State $a \gets b$ - \State $b \gets z$ - \BState \emph{return}: \Comment{La valeur, le résulat renvoyé par la fonction} - \EndFunction - \State \Call{permuter}{10, 12} \Comment{appel de la fonction} - \BState \emph{result}: - \State (12, 10) \Comment{Le résultat effectif de la fonction après appel} - \end{algorithmic} - \end{algorithm} - -.. ifconfig:: exercice - - **Exercice** : factoriser le code suivant - :: - - Ecrire "Etes-vous marié ?" - Rep1 <- "" - TantQue Rep1 <> "Oui" et Rep1 <> "Non" - Ecrire "Tapez Oui ou Non" - Lire Rep1 - FinTantQue - ... - Ecrire "Avez-vous des enfants ?" - Rep2 <- "" - TantQue Rep2 <> "Oui" et Rep2 <> "Non" - Ecrire "Tapez Oui ou Non" - Lire Rep2 - FinTantQue - -.. ifconfig:: correction - - **Correction** : - - :: - - Fonction RepOuiNon() en caractère - Truc <- "" - TantQue Truc <> "Oui" et Truc <> "Non" - Ecrire "Tapez Oui ou Non" - Lire Truc - FinTantQue - Renvoyer Truc - Fin - - Ecrire "Etes-vous marié ?" - Rep1 <- RepOuiNon() - ... - Ecrire "Avez-vous des enfants ?" - Rep2 <- RepOuiNon() - - -Définition mathématique -~~~~~~~~~~~~~~~~~~~~~~~~~ - -fonction - - Une fonction f d’un ensemble E vers un ensemble F est une - correspondance qui associe à chaque élément de E au plus - un élément de F. - -- E est appelé le domaine de définition -- F est appelé codomaine -- la **signature** de la fonction : `E → F (int -> int = )` - - -Exemple de signature d'une fonction - -:: - - Fonction RepOuiNon(Msg en Caractère) en Caractère - Ecrire Msg - Truc <- "" - TantQue Truc <> "Oui" et Truc <> "Non" - Ecrire "Tapez Oui ou Non" - Lire Truc - FinTantQue - Renvoyer Truc - Fin Fonction - - ... - Rep1 <- RepOuiNon("Etes-vous marié ?") - ... - Rep2 <- RepOuiNon("Avez-vous des enfants ?") - ... - - -curryfication - - évaluation de l'application d'une fonction - -- évaluter `(f x y)` -- peut donner une **valeur fonctionnelle** -- évaluation de la valeur fonctionnelle sur une valeur des types de base - -:: - - let g = function n -> (function p -> p + 1) n;; - -Typage d'une fonction -~~~~~~~~~~~~~~~~~~~~~ - -.. code-block:: ocaml - - # let f x y z = if x > 0 then y + x else z - x;; - val f : int -> int -> int -> int = - -c’est en fait une fonction à un argument qui retourne une fonction:: - -.. code-block:: ocaml - - val f : int -> (int -> (int -> int)) = - -application de f à trois valeurs - -.. code-block:: ocaml - - # f 1 2 3;; - - : int = 3 - -en programmation fonctionnelle, -les fonctions sont des valeurs comme les autres - - -.. code-block:: ocaml - - # fun x -> x * x;; - - : int -> int = - -Récursivité -~~~~~~~~~~~~ - -.. code-block:: ocaml - - let rec fact n = - if n=0 then 1 else n * fact (n-1) - - -équivalent impératif utilisant une boucle - -.. code-block:: c - - int fact(int n){ - int f = 1 ; - int i = n ; - while (i>0){ - f = f * i; - i-- ; - } ; - return f ; - } - -Définitions par cas -~~~~~~~~~~~~~~~~~~~ - -.. code-block:: ocaml - - let rec fact n = - match n with - 0 -> 1 - | -> n * fact (n-1) - -**exemple** : la fonction puissance - -.. code-block:: ocaml - - let rec puissance x n = match n with - 0 -> 1 - | -> x * puissance x (n-1) - - - -.. ifconfig:: exercice - - **Portée locale dans une fonction** - Quelles sera la valeur de la variable `a` ? - - .. code-block:: python - - >>> a = 1 - >>> def myfunc(): - ... a = 2 - ... return a + 1 - ... - >>> a = myfunc() + a - - -.. ifconfig:: correction - - Correction: - - .. code-block:: python - - >>> a = 1 - >>> def myfunc(): - ... a = 2 - ... return a + 1 - ... - >>> a = myfunc() + a - >>> a - 4 - >>> - - -.. ifconfig:: exercice - - **Exercice** : Portée locale dans une fonction avec variable globale - Quelles sera la valeur de la variable `a` ? - - .. code-block:: python - - >>> a = 1 - >>> def myfunc(): - ... global a - ... a = 2 - ... return a + 1 - ... - >>> a = myfunc() + 3 - >>> - -.. ifconfig:: correction - - **Correction** : - - .. code-block:: python - - >>> a = 1 - >>> def myfunc(): - ... global a - ... a = 2 - ... return a + 1 - ... - >>> myfunc() - 3 - >>> a - 2 - >>> a = myfunc() + 3 - >>> a - 6 - >>> diff --git a/AlgoApprofondie/cours/fondement.txt b/AlgoApprofondie/cours/fondement.txt deleted file mode 100644 index 874365c..0000000 --- a/AlgoApprofondie/cours/fondement.txt +++ /dev/null @@ -1,198 +0,0 @@ -Présentation de l'art de programmer -==================================== - -Qu'est-ce que la programmation ? --------------------------------- - -programmation - - Description d’un calcul (traitement) dans - un langage compréhensible par la machine - (langage de programmation) - -Le processus d'abstraction --------------------------- - -Débuter en programmation n'est pas une chose aisée. Aujourd'hui, la tendance est au -"bas niveau". Souvent, on se jette dans le grand bain : - -- soit en s'approchant au maximum de la machine (admin système et réseau, noyau - linux, langage C) - -- soit en faisant du dev web côté backend, ce qui ramène à une administration réseau - de bas niveau (microservices, monde nodeJS/javascript, etc...) - -Soit on suit un cursus scolaire traditionnel qui commence souvent par une -explication du fonctionnement d'une machine abstraite de bas niveau, puis en -allant de plus en plus haut, mais étant sous-entendu qu'il faut rester connecté au -bas niveau (comprendre comment ça se passe derrière la scène). - -Dans ces deux cas, il est sous-entendu qu'on apprend plus de choses et plus rapidement en mettant -les mains dans le cambouis, ce qui est vrai bien sûr. Mais cela sous-entend qu'un développeur doit -rester le nez dans le guidon. Qu'il doit être un expert de son domaine en accumulant des technologies -sans aucun recul. Bien sûr il se doit d'être un expert du système dans lequel il évolue -(connaissance du système d'exploitation, binding avec le C, du ramasse miette (garbage -collector), interaction avec les différentes librairies, gestion et optimisation de la mémoire, -architecture par microservices, threads...) mais il doit aussi être capable de prendre du recul. - -L'approche algorithmique (algorithmique de pseudo code, algorithmique algébrique et modulaire) -est un véritable moyen pour le programmeur de prendre du recul : elle commence par se placer du -côté de l'esprit humain et de ses capacités de compréhension et d'abstraction, elle autorise une -pensée rationnelle sur l'art de programmer et permet au programmeur d'effectuer les bons choix, -en connaissance de sa discipline. - -Le lien est fait ensuite avec le plus bas niveau grâce une implémentation effective -des langages à partir des paradigmes de rationalisation de la penseée (modules, -objects, généricité, polymorphisme paramétrique...) et d'un outil de communication -avec la machine qu'on appelle compilateur (dont la description est en dehors de -l'objectif de ce cours). - -La tendance générale de l'évolution des langages est de se libérer de ces -contraintes de bas niveau, un peu comme en sciences physiques où les lois physiques -dépendent de l'échelle d'en dessous (du niveau microscopique/quantique) mais qu'à -l'échelle du dessus, on n'a pas affaire à des effets de bas niveau (pas d'effets -quantiques à un niveau macroscopique en général). Ce processus d'évolution est vrai -aussi dans le monde de la technique informatique lui-même (modèle OSI, comment est -construite une trame IP, indépendances de chaque couche (transport, payload) entre -elles). Même la tendance système est à la virtualisation qui accentue encore la -tendance à s'affranchir du bas niveau (le niveau système), le séparer nettement du -haut niveau (le niveau applicatif). - -Il apparaît régulièrement de nouveaux langages. Comment s'orienter ? Quel(s) -langage(s) choisir pour un projet de développement ? Au delà de leurs disparités, la -conception et la genèse de chacun d'eux procèdent d'une motivation partagée : la -volonté d'abstraire. - -- **s'abstraire de la machine** : un langage de programmation permet de - négliger l'aspect *mécanique* de l'ordinateur. On oublie le modèle du - microprocesseur, jusqu'au système d'exploitation sur lequel sera exécuté - le programme. - -- **abstraire les erreurs** : Il s'agit ici de garantir la sûreté d'exécution; un - programme ne doit pas se terminer brutalement ou devenir incohérent en cas d'erreur. - Un des moyens pour y parvenir est le typage des programmes et la mise - en oeuvre d'un mécanisme d'exceptions. - -- **abstraire le mode opératoire** : Il s'agit de choisir une représentation, un - paradigme d'implémentation qui est indépendant du domaine considéré (paradigme - objet, modulaire, générique, composants...) - -- **abstraire les composants** : Les langages de programmation donnent la - possibilité de découper une application en différents composants logiciels, plus ou - moins indépendants et autonomes. La modularité permet une structuration de plus haut - niveau de l'ensemble d'une application complexe. Les langages à objets constituent - une autre approche de la réutilisabilité permettant la réalisation très rapide de - prototypes. - -Description des niveaux d'abstraction par rapport à la machine ---------------------------------------------------------------- - -Les langages de haut niveau simplifient le travail du -programmeur là où les langages de bas niveau permettent de produire un code -plus efficace. - -- **niveau 0** : le langage machine. Illisible, c'est une suite d'optcode. - impossible de coder dans ce langage. - -- **niveau 1** : langage d'assemblage. Il reste très dépendant de la machine - et aujourd'hui il est rare d'en faire, sauf si on code un bootloader par exemple, - la gestion de l'accès à la mémoire est en réel (le mode protégé n'apparaît que après). - Il faut gérer les ressources,le langage est très optimisé mais presque impossible - à maintenir et rendre générique. Aujourd'hui plus personne ne code en assembleur. - -- **niveau 2** : langages dits de **bas niveau** : (exemple : le C, le C++) - indépendance par rapport à la machine, grande structuration mais très verbeux - -- **niveau 3** : langages dits de **haut niveau** : le raisonnement dans ces - langages ne dépent plus de la machine, et ils implémentent des paradigmes de - programmation indépendant de l'état de la mémoire de l'ordinateur, - ils sont indépendant même du système d'exploitation. - -Qu'est-ce qu'une machine ? ---------------------------- - -Une machine, ce truc apparemment si complexe, est en fait -un assemblage de bric et de brac. - -L'assemblage des connecteurs permet de simuler un additionneur, -en prenant en compte les propriétés de **reste euclidien** -de l'addition. - -La structure électronique est composée de : - -- un ordonnanceur. -- le stockage d'un **état**. -- une pile d'instruction - -.. glossary:: - - adressage - - Dès lors qu'on dispose de ces bases électronique au dessus du processeur, - un langage d'assemblage est possible, c'est le langage de calcul sur les registres. - - registre - - machines ont un espace mémoire et un espace de calcul (registres) - -Un ordinateur, c'est très très stupide, mais ça permet de disposer de : - -- une mémoire très grande et ordonnée, -- une capacité à effectuer inlassablement des tâches répétitives -- une grande rapidité de calcul - -Apprendre à programmer, c'est-à-dire être capable de -contrôler la machine. - -.. important:: Apprendre à programmer, c'est-à-dire apprendre à penser de manière structurée, - pour pouvoir accessoirement ensuite communiquer avec une machine. - -Compilateur ------------ - -Schématiquement, un compilateur est un programme qui traduit un -programme d’un langage source vers un langage cible, en signalant -d’éventuelles erreurs. - -Quand on parle de compilation, on pense typiquement à la traduction d’un -langage de haut niveau (C, Java, Caml, ...) vers le langage machine d’un -processeur (Intel Pentium, PowerPC, ...) - -- xml (libre office, word) -> postscript (imprimante) -- postcript -> image -- syntaxe wiki -> html (Wikipédia...) - -compilation graphique - - passer une description, ça donne un dessin genre ocaml Quilt < mon_dessin.txt - passer par une api qui permet de causer avec une interface - -**transpiler** : transformation d'un langage de haut niveau vers un autre -langage de haut niveau. - -- cofee script, typescript -> javascript -- (babel) javascript -> javascript ES 6 -- python -> javascript - -Un compilateur traduit un programme P en un programme Q tel que -pour toute entrée x , la sortie de `Q(x)` soit la même que celle de `P(x)` - -Un interprète est un programme qui, étant donné un programme `P` et une -entrée x , calcule la sortie s de `P(x)` - -Le compilateur fait un travail complexe une seule fois, pour produire un -code fonctionnant pour n’importe quelle entrée -L’interprète effectue un travail plus simple, mais le refait sur chaque entrée -Autre différence : le code compilé est généralement bien plus efficace que -le code interprété - -Typiquement, le travail d’un compilateur se compose d’une phase d’analyse - -- reconnaît le programme à traduire et sa signification -- signale les erreurs et peut donc échouer (erreurs de syntaxe, de portée, de typage, etc.) - -Puis d’une phase de synthèse - -- production du langage cible -- utilise de nombreux langages intermédiaires -- n’échoue pas diff --git a/AlgoApprofondie/cours/index.txt b/AlgoApprofondie/cours/index.txt deleted file mode 100644 index aa2ef7d..0000000 --- a/AlgoApprofondie/cours/index.txt +++ /dev/null @@ -1,19 +0,0 @@ -Introduction à l'algorithmique -================================ - -.. toctree:: - :maxdepth: 2 - - presentation - fondement - langage - algo - programme - fonctions - control - donnees - apercu - modularite - modules - tp - annexes/index diff --git a/AlgoApprofondie/cours/langage.txt b/AlgoApprofondie/cours/langage.txt deleted file mode 100644 index 67f858d..0000000 --- a/AlgoApprofondie/cours/langage.txt +++ /dev/null @@ -1,336 +0,0 @@ -Les langages de programmation -============================= - -langage - - Un langage de - programmation - doit permettre d'écrire des - programmes de bonne qualité - -Un programme doit être : - -- correct -- robuste -- lisible, bien documenté -- facile à modifier, extensible - -Un langage de programmation doit permettre : - -- la programmation structurée -- la structuration avec les types -- proposer un mécanisme d’exceptions -- présenter des caractères de généricité, de polymorphisme et de surcharge - -.. important:: La structuration et l'organisation modulaire sert à maintenir de grands programmes, - Elles sont une nécessité - -Approche historique et chronologique -------------------------------------- - -- Lambda calcul (1930) -- machines de Turing (1936) -- début des langages vers les années 1950 (A0, Fortran(impératif), - Lisp(impératif et fonctionnel), Cobol) -- années 60 : Simula (classes), CPL (compilation séparée) -- années 70 : C (référence du langage impératif de bas niveau), Pascal - (procédures), Smalltalk (programmation orientée objects), Prolog - (programmation logique), Scheme (programmation fonctionnelle pure), Modula, - C++, Ada, Turbo Pascal, Common Lisp, Eiffel (programmation par contrats) -- années 80 : ML, CAML (langages fonctionnels) -- années 90 : Perl, Python, Ruby (languages de scripting multi-paradigmes) - Haskell (fonctionnel pur), Lua, Delphi, Java (orienté objet, machine - virtuelle), PHP (impératif, dédié au web), Erlang (fonctionnel+ - programmation concurrente), javascript (orienté web, objets par - prototypage), OCaml (multi-paradigme, fortement typé, orienté sécurité, - programmation générique, fonctionnelle et objets, modulaire et fonctorielle) -- 2009 : go (google, compilé, typage statique, objets par prototypage, - prgrammation concurrente), Rust (fondation mozilla, multiparadigme, programmation concurrente) - -Les langages actuellement les plus utilisés dans le monde de l'entreprise sont : - -- javascript/NodeJS (70% du code dans le dépôt github) mais victime de son - succès (chaos complet des librairies) -- le go est de plus en plus utilisé, c'est **le** langage qui monte - actuellement -- Python, Ruby, lua, autres langages de scripting (de plus en plus utilisés) -- PHP, Java (stagnants) -- C, C++ (de moins en moins utilisés) - -Approche par typologie des langages ------------------------------------ - -- **A0 (1954)** : possibilité de découpage de programmes en - sous-programmes ; - -- **ALGOL (1958)** : concept de bloc de code (pas forcément nommé) et d'imbrication - de blocs de code ; - -- **C (1971)** : syntaxe claire et simple, programme fortement structuré ; - -- **C (1980)** : le **code objet**, qui consiste à essayer de faire fonctionner - un seul jeu d'instructions sur des machines différentes. Avant, le code - d'assemblage dépendait du processeur, donc il n'y avait pas un seul et unique - jeu d'instructions ; - -- **1980** : déploiement et succès des langages à objets ; - -- **1983** : turbo pascal (Borland) qui fut le tournant du C, - propose un IDE (Environnement de Développement Intégré). - aujourd'hui le turbo pascal a pratiquement disparu mais pas totalement, - il est soutenu par une communauté open source autour de **Lazarus** ; - -- **depuis les années 90** : deux grands groupes de langages. Les langages à - objets, et les langages fonctionnels. Les deux mondes s'interpénètrent (les - avancées actuelles du web, les microservices (Erlang, Haskell), - viennent du monde fonctionnel, le NoSQL, etc). - Les grandes avancées architecturales (système d'exploitation, linux, etc...) - viennent du monde de l'impératif. - - -Approches par modèles de programmation --------------------------------------- - -- **le mécanisme d'exceptions** : il est possible de rompre l'exécution normale d'un - programme à un endroit et de la reprendre à un autre endroit du programme prévu à - cet effet. Ce mécanisme permet de gérer les situations exceptionnelles. - -- **le paradigme impératif** : les entrées-sorties, les modifications physiques de - valeurs et les structures de contrôle itératives sont possibles. - -- **le paradigme fonctionnel** : manipule les fonctions comme étant des valeurs du - langage. Celles-ci peuvent être utilisées en tant que paramètres d'autres fonctions - ou être retournées comme résultat d'un appel de fonction. - -- **le paradigme objet** : La représentation du programme colle à la réalité en - reproduisant des entités relativement proches des objets réel. Attention, le piège - est de croire qu'il s'agit *du* paradigme universel puisqu'il reproduit en miroir le - réel. **C'est en fait un processus d'abstraction comme un autre**. - -Sûreté du langage, typage -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Tri par ordre de sûreté croissant : - -0. typage très faible (presque inexistant aujourd'hui) : 42 == "42" == 42.0... -1. typage dynamique faible : (javascript) (possibilité de changer le prototype - d'un objet pendant l'éxécution du programme, c'est la fête on peut faire - n'importe quoi) -2. typage dynamique fort inféré par le comportement (behavior, duck typing) - (python, ruby, PHP) Le contenu de la variable détermine le choix du typage - `var = 0 -> type int` -3. typage statique déclaré fort (Java) - `int var = 0 ;` (pas mal mais super lourd, pas **agile** du tout) -4. langages à types statiques muni d'un moteur d'inférence de types (Ocaml) - sûreté d'exécution, agilité, sécurité. - - -La syntaxe, la lisibilité -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Importance de la lisibilité (notamment par rapport aux méthodes agiles). - -- courte (python) -- verbeuse (C) -- l'importance des mots clef du langage -- délimiteur de phrase, de blocs (parenthèses, accolades, tabulations, blocs...) - -Langages compilés ou interprétés ? ------------------------------------ - -.. glossary:: - - langage compilé - - une première passe est faite, des validations son effectuées **avant** - la génération du code objet, cette phase est faite par le compilateur. - - compilateur - - programme qui transforme un langage de haut niveau en un langage de base - niveau - - - phase d’analyse syntaxique (source -> syntaxe abstraite) - - phase de synthèse (syntaxe abstraite -> code objet) - - - scripting (langage de scripting) - - langage interprèté - - générique (langage) - - Langage à usage générique, qui peut être utilisé dans n'importe quel - domaine (par opposition au DSL) - - domain specific - - Domain Specific Language, langage destiné à être utilisé dans un - domaine prédéfini. - - paradigmes - - représentation d'une vision particulière à partir d'un modèle théorique - - impératif - - l'algorithme ressemble à une recette de cuisine, - c'est-à-dire à une succession d'instructions à exécuter - les unes à la suite des autres - - fonctionnel - - l'algorithme ne dépend plus de l'ordre d'exécution d'instructions - pas de mélange entre les données et les traitements - - objets (programmation) - - le monde est découpé en catégories - qui permettent de créer des objets - - **développement par composants** - - les objets sont organisés entre eux par composants suivant des designs patterns, - (patrons de conception) - - garbage collector (ramasse miettes) - - la gestion automatique de la mémoire apparaît en 1989 - - machine virtuelle - - portabilité du code (mais diminution en optimisation et performances) - - JIT (just in time compiler) - - code objet, programmes fonctionnant autour de machines virtuelles - - -- **le typage statique** : la vérification de la compatibilité entre les types des - paramètres formels et des paramètres d'appel est effectuée au moment de la - compilation du programme. Dès lors, il n'est pas nécessaire de faire ces - vérifications durant l'exécution du programme ce qui accroît son efficacité. En - outre, la vérification de type permet d'éliminer la plupart des erreurs introduites - par maladresse ou étourderie et contribue à la sûreté de l'exécution. - -- **le typage dynamique** : la vérification de la compatibilité entre les types des - paramètres formels et des paramètres d'appel est effectuée au moment de l'exécution - ou de l'appel à certaines parties de codes du programme. - -- **le polymorphisme paramétrique** : une fonction ou un objet qui n'explore pas la - totalité de la structure d'un de ses arguments accepte que celui-ci ait un type non - entièrement déterminé. Ce paramètre est alors dit polymorphe. Cette particularité - permet de développer un code générique utilisable pour des structures de données - différentes tant que la représentation exacte de cette structure n'a pas besoin - d'être connue par le code en question. L'algorithme de typage est à même de faire - cette distinction. - -- **l'inférence de types** : le programmeur n'a besoin de donner aucune information - de type à l'intérieur de son programme. Le langage se charge seul de déduire du code - le type le plus général des expressions et des déclarations qui y figurent. Cette - inférence est effectuée conjointement à la vérification, lors de la compilation du - programme. - -Les grands paradigmes de programmation ---------------------------------------- - -Le paradigme des objets -~~~~~~~~~~~~~~~~~~~~~~~ - -- 1962 (SIMULA) : premières notions de classes ; - -Pui, une dizaine d'années plus tard : - -- C++ : intégration des classes pour le C ; -- turbo pascal : intégration des classes pour le pascal ; - -Tous les langages actuels ont intégré des traits objets mais de manière très -différentes : - -- perl (1987) -- python (1991) -- Ruby (1993) - -- L'implémentation des objets en python est très proche des notions initiales de - classes issues du Smaltalk et présente une tentative très intéressante - d'unification des objets et des types depuis python 2.2 ; - -- Java (1995) : très grosse réussite industrielle en surfant sur la vague de la - programmation objet, et des machines virtuelles, mais en fait et avec le recul, - doté d'un support objet lourd et alambiqué. - Le monde Java est lourd, avec des outils consommant beaucoup de mémoire et - qui ne satisfont pas à la règle du KISS (Keep It Simple, Stupid) ; - - -Il n'y a pas **une** POO (Programmation Objet), il y a des POO. -Les implémentations objets dans les langages sont riches et variées : - -- objets obligatoirement construits pas des classes (Java, C++, ...) -- objets sans définition de classes (javascript, Ocaml, go, rust) -- langages à attributs (python) -- langages ou le type des objets est défini par leur classe (python, ruby) -- langages ou le type des objets est différent du type de leur classe (Ocaml) -- objets sans classes mais construits par des prototypes (javascript) -- construction d'objets possibles objets sans classe du tout (Ocaml) -- encapsulation des attributs des objets (Java, Ocaml, C++, PHP) -- pas d'encapsulation des attributs (python, ruby, javascript...) - -Le paradigme impératif -~~~~~~~~~~~~~~~~~~~~~~ - -Un programme est une suite d'états de la mémoire de l'ordinateur, -c'est la suite logique des machines de Turing. -La plupart des programmeur aujourd'hui raisonnent suivant ce paradigme, -et ont une très faible visibilité par rapport aux autres paradigmes existants. -Seuls les programmeurs cultivés sont aujourd'hui capable de raisonner -suivant différents paradigmes, ce sont des programmeurs chevronnés et -cultivés. - -Le paradigme fonctionnel -~~~~~~~~~~~~~~~~~~~~~~~~ - -La notion de fonction que possède sous une forme ou une autre la plupart des -langages est empruntée aux mathématiques et non à l'électronique. D'une manière -générale, les langages substituent des modèles formels aux conceptions purement -calculatoires. Ils y gagnent en expressivité. Certains langages fondent leur -paradigme de programmation sur l'abstraction entrée-traitement-sortie, donc sur le -**mathème fonctionnel** et pas sur la boite noire électronique. La fonction -mathématique apporte un niveau opératoire dans le traitement de l'information. - - -Approche par fonctionnalités ----------------------------- - -Plusieurs domaines de l'informatique on proposé/imposé des méthodologies, -des manières de faire. Ces modèles de programmation on fortement influencé -en retour les langages. On reconnaît aujourd'hui : - -- Le modèle client-serveur -- Le modèle de programmation concurrente (exécution de processus légers, threads) : -- Le modèle de développement d'une application de bureau (MVC, ergonomie d'interface) -- Le modèle de développement web (communiquer sur le réseau Internet, API - REST, microservices...) -- Le modèle de programmation système et réseau -- le modèle **Dev Ops** et les méthodes de développement virtualisés -- les langages présentant des **fonctionnalités agiles** - -Conclusion ------------ - -Les langages de haut niveau sont caractérisés par -des concepts tels que : - -- déclaration de valeurs, types, expressions, portée -- expressions, variables, instructions, structures de contrôle -- fonctions, procédures, fermetures -- encapsulation, modules, objets - -=========== ============ -Paradigmes Concepts -=========== ============ -impératif variables, procédures, modules -objets classes, méthodes, héritage, surcharge -fonctionnel fonctions, fermetures, modules -logique prédicats, modules -concurrent tâche/processus, communication -=========== ============ diff --git a/AlgoApprofondie/cours/modularite.txt b/AlgoApprofondie/cours/modularite.txt deleted file mode 100644 index 276d12d..0000000 --- a/AlgoApprofondie/cours/modularite.txt +++ /dev/null @@ -1,200 +0,0 @@ -La programmation structurée -============================= - -Un langage de programmation doit permettre la programmation structurée. - -.. important:: La structuration et l'organisation modulaire sert à maintenir de grands programmes, - Elles sont une nécessité - -Structuration d'un programme ------------------------------ - -La réalisation d'applications importantes oblige le programmeur ou l'équipe de -développement à se poser des questions d'organisation et de structuration. -Aujourd'hui, on dispose de deux grands modèles d'organisation dont les avantages et les -particularités sont distincts. - -L'écriture des vrais programmes consiste à les structurer pour les présenter -comme un assemblage de briques qui s'emboîtent naturellement. -Ce problème se révèle fondamental dès que la taille des programmes devient conséquente. -Si on ne prend pas garde au bon découpage des programmes en modules indépendants, -on se retrouve rapidement débordé par un grand nombre de variables, -et il devient quasiment impossible de réaliser un programme correct. - -La programmation raisonnée ---------------------------- - -Un **programme** est le codage d'un algorithme dans un langage de programmation. -La programmation consiste à modéliser un problème du monde réel sous une forme -symbolique (pour faire résoudre ce problème par un ordinateur). - -Certains problèmes sont **indécidables** ou **ouverts**. -On utilise un langage de programmation pour décrire la **solution** du programme. -La sémantique du programme est le sens de chacune des constructions du langage. -**Comment passer de l'énoncé d'un problème à un programme de bonne qualité ?** - -spécifier - - décrire de manière complète et rigoureuse le problème à résoudre - -modéliser - - proposer une représentation du réel qui soit accessible au calcul - algorithmique - -transcrire - - La transcription du modèle algorithmique se fait dans un langage - de programmation cible adapté au problème - -valider - - La validation du programme est une étape qui permet de s'assurer plus ou - moins fortement que le programme produit les résultats attendus. - La validation va de la série de tests unitaires (validation faible) - à la preuve de programme (validation mathématique forte). - -Conception descendante ------------------------ - -Une vision **centripète** : du général au particulier. - -Il s'agit d'une méthode de résolution d'un problème. On le découpe en tâches -de plus en plus fines, de plus en plus détaillées, qui aboutiront au programme final. - -On met des *trous* dans les algorithmes de plus haut niveau, -c'est-à-dire des phrases en langage naturel. - -.. ifconfig: exercice - - **Exercice** : **Calculer la date du lendemain** - -.. ifconfig: correction - - - l'algorithme de plus bas niveau - - :: - - lendemain jour = - si jour [est le dernier jour du mois] alors - resultat = [calculer le 1er janvier de l'année suivante] - sinon - resultat = lendemain_dansl'année jour - - - les algorithmes de plus bas niveau - - :: - - lendemain_dans_l'année jour = - si jour [est le dernier jour du mois] alors - resultat = [calculer le premier jour du mois suivant] - sinon - resultat = jour suivant jour - - :: - - jour_suivant jour = - jour + 1 - - et ainsi de suite jusqu'à ce que toutes les phrases soient calculables. - -Algorithme vague --------------------- - -L'algorithme vague, c'est quand on pense l'algorithme en se plaçant du côté de -l'implémentation en premier. On a le nez dans le guidon, la vue d'ensemble est -difficile. - -Voici, tiré du monde réel, un exemple d'algorithme vague -("ce que doit faire une fonction"), placé dans un bout de code -(souvent la **docstring** d'une fonction). - -.. code-block:: python - - def upsert_route(*args, **kwargs): - """ - Create or modify an existant DHCP route - param tuple (id or null, machine name, IP, MAC Adress) - return True or False with error message - """ - # si id présent alors modification sinon ajout - # récupère la liste des réservations en cours - # y cherche la variable sur la base de l'ID - # modifie les valeurs - # applique la nouvelle conf DHCP - - return True - -Voici un autre bout de code avec l'algorithme en commentaire, -et l'implémentation effective de l'algorithme - -.. code-block:: python - - def del_route(*args, **kwargs): - """ - Delete an existant DHCP route - param tuple (id, machine name, IP, MAC Adress) - return True or False with error message - """ - # récupère la liste des réservations en cours - # y cherche la variable sur l'id donné en paramètre - # supprime l'entrée avec vérification que les données fournies - # sont bien dans l'enregistrement à supprimer - # applique la nouvelle conf DHCP - route_to_del = (1, "host2","10.1.2.4","6E:FF:56:A2:AF:17") - routes = get_routes() - if route_to_del in routes: - c = creole_loader(load_extra=True, rw=True) - c_id = c.dhcp.dhcp.id_dhcp.id_dhcp.index(route_to_del[0]) - if c.dhcp.dhcp.id_dhcp.macaddress[c_id]==route_to_del[2] - and c.dhcp.dhcp.id_dhcp.ip[c_id]==route_to_del[1]: - c.dhcp.dhcp.id_dhcp.id_dhcp.pop(c_id) - config_save_values(c, MODNAME) - return True - return False - -Les deux grands paradigmes ---------------------------- - -La modularité -~~~~~~~~~~~~~~ - -Les données et les traitements sont regroupés au sein d'une même entité à deux -facettes : d'un côté le code proprement dit, de l'autre son interface. La -communication entre modules s'effectue via leur interface. La description d'un -type peut être masquée en n'apparaissant pas dans l'interface du module. Ces -types de données abstraits facilitent les modifications d'implantation à -l'intérieur d'un module sans affecter les autres modules qui s'en servent. De -plus, les modules peuvent être paramétrés par d'autres modules augmentant -ainsi leur réutilisabilité. - -Le paradigme objet -~~~~~~~~~~~~~~~~~~ - -Les descriptions des traitements et des données sont regroupées dans des -entités appelées **classes**; un objet est une instance (valeur) d'une classe. -La communication entre objets est réalisée par envoi de message, l'objet -receveur détermine à l'exécution (liaison retardée) le traitement -correspondant au message. En cela, la programmation objet est dirigée par -les données. La structuration d'un programme provient des relations entre -classes, en particulier l'héritage permet de définir une classe par extension -d'une autre. - -En programmation objet, un **programme** est une collection d’objets qui communiquent -entre eux par **message**, le **résultat** est un message envoyé à un objet particulier - -Comparaison entre les deux paradigmes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Il y a dualité entre ces deux modèles. - -- On ne peut pas augmenter les composants d'un type dans un module (pas - d'extensibilité des données), mais on peut ajouter de nouveaux traitements - (extensibilité des traitements) sur ces données. - -- En objet, on peut ajouter des sous-classes à une classe (extensibilité des - données) pour traiter des nouveaux cas, mais on ne peut pas ajouter de nouveaux - traitements visibles de la classe ancêtre (pas d'extensibilité des traitements). - -**La combinaison des deux paradigmes offre de nouvelles extensibilités pour les -traitements et les données.** diff --git a/AlgoApprofondie/cours/modules.txt b/AlgoApprofondie/cours/modules.txt deleted file mode 100644 index 5df4b5e..0000000 --- a/AlgoApprofondie/cours/modules.txt +++ /dev/null @@ -1,313 +0,0 @@ -La programmation modulaire -=========================== - -Il s'agit de décomposer un grand programme en -morceaux (**modules**) connectés entre eux par des **interfaces** bien -définies. - -Ces modules doivent être aussi indépendants que possible. - -module - - ensemble de ressources liées sémantiquement - -interface - - mode d’emploi du module, avec en plus un principe de masquage - des informations (partie publique, partie secrète) - - -Signatures, type abstrait et langage de modules : la programmation modulaire -permet d'aller très loin dans la programmation structurée. - - -Définir des fonctions dans un fichier séparé --------------------------------------------- - -Les fonctions peuvent être définies dans un fichier et le programme dans un -autre fichier séparé. Dans ce cas, pour pouvoir être exécuté directement avec -la commande python `nomfichierprogramme.py`, le fichier du programme doit -importer d’abord les fonctions du fichier dans lequel les fonctions sont -définies. - -1. Fichier de fonctions -~~~~~~~~~~~~~~~~~~~~~~~~ - -.. code-block:: python - - # Fichier foncmaxliste.py - # Recherche le premier élément maximal dans une liste ou - #dans une chaine de caractères - def max_list(L) : - k = len(L) - max, x = L[0], 0 - i = 1 - while i < k : - if max < L[i]: - max = L[i] - x = i - i = i + 1 - return max, x - -2. Fichier de programme -~~~~~~~~~~~~~~~~~~~~~~~~ - -Pour utilser les fonctions définies dans d’autres fichiers, le fichier de -programme doit commencer par les instructions qui importent ces fichiers de -fonctions ou directement les fonctions de ces fichiers. Dans la syntaxe -ci-dessous, on importe une ou toutes les fonctions du fichier `foncmaxlist.py`. - -.. code-block:: python - - # Fichier progmaxlist.py - from foncmaxliste import max_list - # ou plus simple: - # from foncmaxliste import * - print max_list([4,5,6,9,12,5,10,3,18,5,6,7]) - couple = max_list([4,5,6,9,12,5,10,3,18,5,6,7]) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - print max_list(’totovaaumarche’) - couple = max_list(’totovaaumarche’) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - -Au lieu d’importer les fonctions, on peut importer le fichier qui définit les -fonctions avec la syntaxe qui suit. Dans ce cas, le fichier de programme sera -changé comme suit : - -.. code-block:: python - - # Fichier prog2maxlist - import foncmaxliste - print foncmaxliste.max_list([4,5,6,9,12,5,10,3,18,5,6,7]) - # la syntaxe indiquant le chemin d’acces a la fonction max_list utiliser ‘‘.’’ - couple = foncmaxliste.max_list([4,5,6,9,12,5,10,3,18,5,6,7]) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - print foncmaxliste.max_list(’totovaaumarche’) - couple = foncmaxliste.max_list(’totovaaumarche’) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - -L’exécution directe du premier fichier de programme:: - - python prog max list.py - -L’exécution directe du seconde fichier de programme:: - - python prog2 max list.py - -Définition de l'implémentation d'un module -------------------------------------------- - -Tout fichier qui contient au moins une définition d’une fonction ou d’une -variable est appelé un module (une bibliothèque). Le nom du module est le nom -du fichier enlevé le suffixe `.py`. Ainsi, un fichier de programme qui contient -au moins une définition d’une fonction ou un fichier qui ne contient que des -définition de fonctions sont des modules. On peut importer un module ou des -fonctions ou variables d’un module dans un programme, comme nous avons vu dans -les exemples ci-dessus. - -.. important:: on peut importer un module, ou bien lancer un module en tant que - programme executable - -.. code-block:: python - - if __name__ == '__main__': - main() - -Pour faciliter la programmation, Python définit un certain nombre de **modules internes**, -appelés les builtins (la librairie standard). - -Par exemple : - -– Lors de l’ouverture d’une session interactive, on est dans un module interne nommé - main . Toutes les variables définies par affectation au niveau de ce module sont valides - globalement dans la session. - -– D’autres modules internes sont string, math, random - -Dans une session de travail sous l’interpréteur Python, la première importation d’un mo- -dule qui, à part des fonctions qu’elle définit, contient des instruction de programme fait -exécuter ces instructions. Dans la même session, les importations suivantes ne font pas -exécuter ces instructions. Pour les exécuter, on utilise la fonction reload(nomdumodule) -(sans sufffixe .py). - -Exemples d'interface --------------------- - -:: - - type: son type - arguments - arg1 : description de l'argument 1 - arg2 : description de l'argument 2 - préconditions: - arg1 > 10 - postconditions: - result < 19 - raises: TypeError, AssertionError, SystemError... - test: tests nominaux pour chaque cas spécifié - -- L'interface racine carrée - -:: - - racine: - type: float -> float - arguments x: float, flottant dont on veut calculer la racine - pré: x >= 0 - test: racine 25.0 -> 5.0 ; racine (-25) -> raises TypeError - -- L'interface `lendemain` - -Il faut définir auparavant un type spécifique appelé `date` - -:: - - lendemain: le lendemain est la date qui désigne - le jour suivant de la date passée en argument - type: date -> date - arguments : - d: date - description: la date dont on veut calculer le lendemain - -Le langages des modules -------------------------- - -.. code-block:: ocaml - - module type PILE = (* signature (interface) du module *) - sig - type ’a t - val create : unit -> ’a t - val push : ’a -> ’a t -> unit - val pop : ’a t -> ’a - end - - (* implémentation du module *) - module Pile : PILE = (* le module est restreint - par la signature PILE *) - struct - type ’a t = ’a list ref - let create () = ref [] - let push x p = p := x::!p - let pop p = match !p with [...] - let rec print p = match p with [...] - end - -- `struct .. end` introduit une collection de définitions, valeurs, types ou modules. - C'est une **structure**. - -- `module Nom = struct .. end` permet de donner un nom à cette structure et - c'est ça un module. C'est une structure nommée. - -- `sig ... end` introduit une signature de module : une interface pour un module. - -On restreint souvent une structure par une signature pour "cacher" certaines -définitions. Une signature de module fournit une **interface** entre l'extérieur -et l'intérieur d'un module. - -En dehors du module, on accède à ses composants grâce à la notation pointée - -.. code-block:: ocaml - - let p = Pile.create() - Pile.push 45 p - -Les foncteurs --------------- - -Si un langage possède un langage de modules, on peut aller plus loin : on peut -considérer un module comme étant une expression de base du langage. - -- La signature d'un module peut être considérée comme le type du module -- La structure du module peut être considéré comme sa valeur - -Quel est l'intérêt ? On peut alors définir des **foncteurs**. - -foncteur - - "fonction" d'une structure vers une autre structure. - On peut ainsi paramétrer un module par un autre module. - -.. code-block:: ocaml - - module Nom (M1 :S1 ) (M2 :S2 ) (M3 :S3 ) ... = - struct - ... - end - -On applique un foncteur à des paramètres modules, pour -obtenir un nouveau module : - -.. code-block:: ocaml - - module M = F (Titi) (Toto) - - -Contrainte de type par signature ------------------------------------- - -:: - - module M = - struct - type t = int * int * int ;; - let make d m y = d, m, y ;; - end ;; - - let d = M.make 8 5 8 ;; - - module type S = - sig - type t ;; - val make : int -> int -> int -> t ;; - end ;; - - module MS = (M:S) ;; - - MS.make 5 1 2 ;; - -Type et signature ------------------- - -:: - - # module type A = sig - val a: int -> int - end ;; - module type A = sig val a : int -> int end - # module B = struct - let a x = x + 1 ;; - end;; - module B : sig val a : int -> int end - # module C = (B:A) ;; - module C : A - - # C.a 2 ;; - - : int = 3 - # - -Module auquel on impose une signature ------------------------------------------ - - -:: - - module type DATE = sig - type t - val make: int -> t - val get_year: t -> int - val get_month: t -> int - end ;; - - module MR = struct - type t = int * int - let make x y = (x, y) - let get_month (x, y) = x - let get_year (x, y) = y - end ;; - - module date = (MR:DATE) ;; diff --git a/AlgoApprofondie/cours/presentation.txt b/AlgoApprofondie/cours/presentation.txt deleted file mode 100644 index 6263f9e..0000000 --- a/AlgoApprofondie/cours/presentation.txt +++ /dev/null @@ -1,72 +0,0 @@ -Avant propos -============ - -Introduction -~~~~~~~~~~~~ - -| "**Que nul n'entre ici s'il n'est géomètre**" -| Maxime apposée au porche d'entrée de l'École de Platon - - -- L'accent est mis sur l'approche **algorithmique scientifique**, dite algorithmique - algébrique. L'algorithmique est un sous-domaine de l'algèbre et des - approches modulaires (arithmétique modulaire...) - -- Le point de vue mathématique étant assez exigeant, **aucun formalisme fort** de - l'algorithmique mathématique ne sera présenté. Aucun symbole mathématique donc, et - seulement du pseudo-code. - L'approche mathématique forte utilisant le formalisme mathématique de - l'algorithmique algébrique est en général enseignée en France uniquement aux cours - des grandes écoles. - -- L'algorithmique présentée ici est donc délibérément pseudo-scientifique mais en revanche - ouverte au **multi-paradigme**. En général l'évocation d'un algorithme en pseudo code est toujours - réducteur car limité au style de programmation le plus à la mode actuellement, c'est-à-dire le - **style impératif**. Nous présenterons un éventail des plus grands paradigmes de programmation - existants. Nous nous limiterons à la **programmation impérative, fonctionnelle, modulaire, - générique et objet**. Nous envisagerons les structures de données et les structures de contrôle - spécifiques à chacun des styles évoqués. - -- Et parce qu'un honnête programmeur doit avoir une vue d'ensemble de **l'état de son art**, - nous évoquerons un panorama des différents langages existants -- historiques et contemporains -- - en les comparants les uns aux autres. - -- Durant tout le cours, nous souhaitons proposer une pédagogie par l'exemple, et nous - limiterons l'exposé à deux langages d'implémentation des algorithmes : le **Python** pour la programmation - impérative modulaire et objet, et le **OCaml**, car nous évoquerons aussi certains points - de programmation fonctionnelle et modulaire, polymorphe et teintée de généricité. - -Intérêt -------- - - -| "**Il ne suffit pas d'avoir les mains propres, il faut avoir l'esprit pur.**" -| Thalès de Milet ; Sentences - VIe s. av. J.-C. - -L'algorithmique en tant que rapport à la vérité et à la pensée juste et vraie, -en tant qu'art de découper un problème complexe en tâches élémentaires, -en tant qu'énoncés de compréhension et de sémantique, -est la seule chose vraiment profonde dans l'informatique. Le reste n'est que 0 ou 1. -Cette notion d'algorithme est profondément enracinée dans le désir humain de -transmettre des méthodes pour comprendre des problématiques, -qu'il s'agisse de processus scientifiques ou mathématiques, de secrets, -de philosophie ou de divination au sens des anciens Grecs. -De règles linguistiques, aussi, chez les Romains. - -Objectifs de ce cours -~~~~~~~~~~~~~~~~~~~~~ - -Il s'agit de : - -- maîtriser et concevoir un algorithme de base, -- choisir une représentation appropriée des données, -- décomposer en sous-problèmes et affinements successifs, -- savoir organiser son code en fonctions et en modules. - -Le développement raisonné d’algorithmes et leur implantation -permet d'acquérir les qualités suivantes : - -+ Analyser et modéliser un problème, spécifier, -+ Exprimer une problématique, une solution ou un algorithme, -+ Traduire un algorithme dans un langage de programmation, -+ Concevoir une réponse à un problème précisément posé. diff --git a/AlgoApprofondie/cours/programme.txt b/AlgoApprofondie/cours/programme.txt deleted file mode 100644 index 6133cf1..0000000 --- a/AlgoApprofondie/cours/programme.txt +++ /dev/null @@ -1,476 +0,0 @@ -Définition d'un programme -========================== - -Qu'est-ce qu'un programme ? ----------------------------- - -- Un **programme** est une suite de **phrases** ; -- Une **phrase** est une **déclaration** ou une **expression** (*statement* en anglais) ; - -Production d'un programme : - -1. on écrit le code source du programme ; -2. on demande au compilateur de le traduire en code machine : c'est la compilation du programme ; -3. on demande à la machine d'effectuer le code machine : c'est l'exécution du programme. - -.. important:: - - L'introduction à la compilation et les différentes phases de la compilation - d'un programme sont des sujets qui ne seront pas traités dans ce cours. - -Dans un programme de base, il y a deux fichiers : - -1. un fichier contenant le code : c'est le source du programme. -2. un fichier contenant le code machine : c'est l'exécutable. - -Que peut faire un programme lorsqu'il est exécuté ? -Le programme doit communiquer. S'il reste isolé, il ne pourra pas -produire quoi que ce soit. Voici les trois moyens de communication qu'a un -programme : - -1. communiquer avec l'utilisateur, -2. communiquer avec des fichiers, -3. communiquer avec d'autres programmes. - -Les expressions ----------------- - -expression - - Une expression est une valeur caculée du langage, une opération arithmétique - qui retourne une valeur (entier, texte, valeur logique...). - C'est donc une suite sémantiquement correcte de **valeurs de base** et **d'opérateurs** - -Par exemple, la ligne suivante est une expression effectuant une addition:: - - 5 + 6 - -Expressions à partir de types de base -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Autres exemples d'expressions : - -- 5 est une expression de type int -- 4.5 est une expression de type float -- 'c' est une expression de type char -- true est une expression de type bool -- print ('c') est une expression de type None -- raw_input est une expression de type string - -Les expressions se complexifient avec la complexification des données et des traitements, -mais le principe de l'expressivité d'un langage reste le même. - - -.. ifconfig:: exercice - - **Exercice** : - Le parenthésage et les opérateurs booléens:: - - Variables A, B, C, D, E en Booléen - Variable X en Entier - Début - Lire X - A <- X > 12 - B <- X > 2 - C <- X < 6 - D <- (A ET B) OU C - E <- A ET (B OU C) - Ecrire D, E - Fin - - **Que valent D et E si X = 3 ?** - - -.. ifconfig:: correction - - **Correction** : D sera VRAI alors que E sera FAUX - - - - -Les déclarations ------------------ - -Un autre exemple d'expression : - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple d'expression} - \begin{algorithmic}[1] - \BState \emph{sortie}: $l$ \Comment{C'est l'expression calculée renvoyée} - \ForAll {$v \in V(G)$} - \State $l(v) \leftarrow \infty$ - \EndFor - \State $l(u) \leftarrow 0$ - \Repeat - \For {$i \leftarrow 1, n$} - \State $min \leftarrow l(v_i)$ - \For {$j \leftarrow 1, n$} - \If {$min > e(v_i, v_j) + l(v_j)$} - \State $min \leftarrow e(v_i, v_j) + l(v_j)$ - \State $p(i) \leftarrow v_j$ - \EndIf - \EndFor - \State $l(i) \leftarrow min$ - \EndFor - \State $changed \leftarrow l \not= l’$ - \State $l \leftarrow l$ - \Until{$\neg changed$} - \end{algorithmic} - \end{algorithm} - -Exemple de déclarations : - -- `a = 1` -- `b = 'c'` - -.. important:: Le signe égal est utilisé de deux manières - - - lors d'une déclaration d'une expression - - lorsque deux expressions sont équivalentes - - Suivant les langages, il y a deux symboles différents, ou alors - ils sont identiques. - -Il s'agit de **renseigner** une valeur dans une expression nommée - -- en javascript : - -.. code-block:: javascript - - var b = "blabla" ; - -- en python : - -.. code-block:: python - - b = "blabla" - -- en java : - -.. code-block:: java - - String b = "A"; - -- en OCaml : - -.. code-block:: ocaml - - let a = 1 - -Grâce au mécanisme d'inférence de type dans OCaml, le mot-clef **let** -signifie ici véritablement l'instanciation d'une valeur au sens -mathématique du terme : soit `a` l'entier tel que a soit égal à 1... - -En OCaml comme dans tous les langages fonctionnels, tout ce que nous avons l'habitude -d'appeler des "variables" à propos des affectations, sont en fait des **constantes** -au sens du paradigme impératif de la programmation. - -.. important:: - - Par voie de conséquence, le symbole ``=`` est utilisé à la fois pour la définition des objets et pour le test d'égalité. - Pour les autres langages, on utilise `==` ou bien `===` (javascript) car - le `=` est sémantiquement déjà utilisé... - -Toutes ces notation, apparemment anodines, correspondent donc à des paradigmes de programmation - -Lorsqu'on ne déclare pas les types des symboles déclarés, c'est que soit - -- le typage est faible -- le typage est dynamique (calcul du type en fonction du contenu de la - variable) -- le typage est statique et fort mais ça ne se voit pas - (var le système les calcule automatiquement par inférence de type) - -Assigner, allouer, affecter une chose à quelqu'un ou à une autre chose. - -Exemples dans la langue française : - -- Le traitement que le budget **alloue** à ces fonctionnaires. -- Un système d'exploitation multitâche alloue le travail du processeur aux processus en attente, pour un bref laps de temps, à leur tour. - -.. glossary:: - - affectation - - Une affectation, aussi appelée assignation par anglicisme, est une structure qui permet d'attribuer une valeur à une variable. - - Il s'agit d'une structure particulièrement courante en programmation impérative, et dispose souvent pour cette raison d'une notation courte et infixée, - comme ``x = expr`` ou ``x := expr`` ou encore `x <- expr`. - Dans certains langages, le symbole est considéré comme un opérateur d'affectation, - et la structure entière peut alors être utilisée comme une expression. - D'autres langages considèrent une affectation comme une instruction et ne permettent pas cet usage. - -Voir aussi : - -- Les déclarations de types primitifs et conversions de type -- Les types de base:: - - Octets (8 bits) byte - Entiers courts (16 bits) short - Entiers (32 bits) int - Entiers longs (64 bits) long - Réels (32 bits) float - Réels longs (64 bits) double - Caractères (16 bits) char - Booléens boolean - -- Déclarations par lots:: - - x1 = e1, x2 = e2, ... xn = en; - -Exercices : algorithmes sur les affectations - -.. ifconfig:: exercice - - **Exercice** : Calculs d'affectation:: - - Variables A, B, C en Entier - Début - A <- 3 - B <- 10 - C <- A + B - B <- A + B - A <- C - Fin - -.. ifconfig:: correction - - **Correction**:: - - Après La valeur des variables est : - A <- 5 A = 5 B = ? - B <- 2 A = 5 B = 2 - A <- B A = 2 B = 2 - B <- A A = 2 B = 2 - -.. ifconfig:: exercice - - **Exercice** : Calculs d'affectation - Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ? - :: - - Variables A, B en Entier - Début - A <- 5 - B <- 2 - A <- B - B <- A - Fin - -.. ifconfig:: correction - - **Correction**:: - - Après La valeur des variables est : - A <- 5 A = 5 B = ? - B <- 2 A = 5 B = 2 - A <- B A = 2 B = 2 - B <- A A = 2 B = 2 - -.. ifconfig:: exercice - - **Exercice** : écrire un algorithme permettant d’échanger les valeurs - de deux variables A et B, et ce quel que soit leur contenu préalable. - -.. ifconfig:: correction - - **Correction**:: - - Début - A <- n - B <- p - C <- A - A <- B - B <- C - Fin - - Il faut passer par une variable dite temporaire (la variable C) - - -.. ifconfig:: exercice - - **Exercice** : - Que produit l’algorithme suivant ? - - :: - - Variables A, B, C de type entier - Début - A <- 423 - B <- 12 - C <- A + B - Fin - -.. ifconfig:: correction - - **Correction** : dans un prompt python - - .. code-block:: python - - >>> a = 423 - >>> b = 12 - >>> c = a + b - >>> c - 435 - -.. ifconfig:: exercice - - **Exercice** : - Que produit l’algorithme suivant ? - - :: - - Variables A, B, C de type texte - Début - A <- "423" - B <- "12" - C <- A + B - Fin - -.. ifconfig:: correction - - **Correction** : dans un prompt python - - .. code-block:: python - - >>> a = '423' - >>> b = '12' - >>> c = a + b - >>> c - '42312' - -Interaction avec l'utilisateur ------------------------------- - -Il est possible de communiquer de la manière suivante avec un programme : - -- lire et écrire sur l'entrée/sortie standard -- lire et écrire dans un fichier -- afficher (du texte, un nombre...) -- lire (du texte, un nombre...) -- interagir avec les prompts - - -.. code-block:: ocaml - - let x = read_int () in - let signe = - if x >= 0 - then " positif " - else " négatif " in - print_string signe - - -.. ifconfig:: exercice - - **Exercice** : écrire un algorithme qui demande le prénom d'une personne - et renvoie "bonjour, je m'appelle " - -.. ifconfig:: correction - - **Correction** : (implémentation en python) - - .. code-block:: python - - # coding: utf-8 - prenom = raw_input("quel est ton prénom ? \n") - print("bonjour, je m'appelle " + prenom.capitalize()) - - -La REPL (boucle d'interaction) -------------------------------- - -.. glossary:: - - REPL - - Read Eval Print Loop : outil principal de communication avec un programme - ou avec un système. Exemples : la console python, le prompt OCaml. - - interface - - outil de communication avec un programme. - - - interface texte - - interface graphique - -**Exemples de REPL** - -Le prompt python:: - - Python 2.7.12 (default, Nov 19 2016, 06:48:10) - [GCC 5.4.0 20160609] on linux2 - Type "help", "copyright", "credits" or "license" for more information. - >>> - >>> dir() - ['__builtins__', '__doc__', '__name__', readline', 'rlcompleter'] - >>> - -Le prompt ipython:: - - Python 2.7.12 (default, Nov 19 2016, 06:48:10) - Type "copyright", "credits" or "license" for more information. - - IPython 2.4.1 -- An enhanced Interactive Python. - ? -> Introduction and overview of IPython's features. - %quickref -> Quick reference. - help -> Python's own help system. - object? -> Details about 'object', use 'object??' for extra details. - - In [1]: - -Le prompt OCaml (utop):: - - Type #utop_help for help about using utop. - - ─( 09:21:24 )─< command 0 >── - utop # - # let x = 1 in x + 2;; - - : int = 3 - # let y = 1 + 2;; - val y : int = 3 - # y * y;; - - : int = 9 -Construire une boucle d'interaction avec l'utilisateur en python:: - - #!/usr/bin/env python3 - error = True - while error: - try: - entier = int(input('donnez un entier : ')) - error = False - except: - print('une valeur entiere est attendue') - print(entier) - -Lire et écrire dans un fichier ------------------------------- - -Les descripteurs de fichiers (file handle) - -Exemple en python - -.. code-block:: python - - >>> fh = file("test.txt", "w") - >>> fh.write("un contenu exemple") - >>> fh.close() - >>> - -.. code-block:: python - - >>> fh.read() - 'un contenu exemple' - >>> fh.close() - >>> - -Linéarisation (serialisation) de données par exemple en json - -.. code-block:: python - - import json - data = dict(a='essai', b='essai2', c=range(3)) - with open('data.txt', 'w') as outfile: - json.dump(data, outfile) diff --git a/AlgoApprofondie/cours/tp.txt b/AlgoApprofondie/cours/tp.txt deleted file mode 100644 index 3d3ebd5..0000000 --- a/AlgoApprofondie/cours/tp.txt +++ /dev/null @@ -1,101 +0,0 @@ -Travaux Pratiques -================= - -.. ifconfig:: exercice - - **travaux pratiques :** - - Ecrire un algorithme qui renvoie le résultat d’une mini-calculatrice. Cette - méthode aura - comme paramètre deux nombres et une chaîne de caractère qui vaudra « + », « - - », « * », - « / ». - -.. ifconfig:: exercice - - **travaux pratiques :** - - - Ecrire un algorithme qui renvoie si deux mots (chaîne de caractères) passés en - paramètre - sont des anagrammes l’un de l’autre. (Lettres identiques mais dans un ordre - différent) - - -.. ifconfig:: exercice - - **travaux pratiques :** - - ascii art (ligne d'étoiles) - - Concevoir un algorithme qui, pour un caractère imprimable et un nombre n - donnés, imprime une barre - horizontale de n de ces caractères. - - ``****************`` - - 2. Modifier l’algorithme pour l’impression d’une barre double. - - :: - - **************** - **************** - - 3. Modifier l’algorithme pour l’impression d’une barre d’épaisseur quelconque - donnée. - 4. (optionnel) Transformer les algorithmes ci-dessus en fonctions. - 5. Écrire un programme Java implémentant la dernière version de l’algorithme - (épaisseur quelconque). - - 3.3 - Triangle de nombres - Concevoir un algorithme qui imprime pour n donné:: - - 1 - 1 2 - 1 2 3 - 1 2 3 4 - 1 2 3 4 5 - ........... - ............. - ............... - 1 2 3 4 5 6 ... n - -.. ifconfig:: exercice - - **travaux pratiques :** - - code de césar : faire un programme pour chiffrer et déchiffrer par décalage - - exemples : Effectue une rotation de x caractères vers la droite:: - - >>> print(chiffre('bonjour', 3)) - erqmrxu - >>> print(chiffre('Bonjour les amis!', 3)) - Erqmrxu ohv dplv! - >>> print(chiffre('Erqmrxu ohv dplv!', 23)) - Bonjour les amis! - -.. ifconfig:: exercice - - **travaux pratiques :** - - :: - - écrire “Entrer un numéro de mois” - mois <- lire - selon que mois est - cas 1 : écrire “janvier (31 jours)” - cas 2 : écrire “février (28 ou 29 jours)” - cas 3 : écrire “mars (31 jours)” - cas 4 : écrire “avril (30 jours)” - cas 5 : écrire “mai (31 jours)” - cas 6 : écrire “juin (30 jours)” - cas 7 : écrire “juillet (31 jours)” - cas 8 : écrire “août (31 jours)” - cas 9 : écrire “septembre (30 jours)” - cas 10 : écrire “octobre (31 jours)” - cas 11 : écrire “novembre (30 jours)” - cas 12 : écrire “décembre (31 jours)” - défaut : écrire “numéro invalide” - fselon diff --git a/AlgoApprofondie/diapos/Makefile b/AlgoApprofondie/diapos/Makefile deleted file mode 100644 index fd60fc0..0000000 --- a/AlgoApprofondie/diapos/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -RST = python tools/rst.py - -TEXDOCUMENTS = $(basename $(wildcard *.tex)) -RSTDOCUMENTS = $(basename $(wildcard *.txt)) - -SOURCES = $(addsuffix .tex,$(TEXDOCUMENTS)) -DVI = $(addsuffix .dvi,$(TEXDOCUMENTS)) -POSTSCRIPT = $(addsuffix .ps,$(TEXDOCUMENTS)) -POSTSCRIPT_GZ = $(addsuffix .ps.gz,$(TEXDOCUMENTS)) -PDF = $(addsuffix .pdf,$(TEXDOCUMENTS)) -RSTSOURCES = $(addsuffix .txt,$(RSTDOCUMENTS)) -HTML = $(TEXDOCUMENTS) $(addsuffix .html,$(RSTDOCUMENTS)) - -all: dvi ps ps.gz html -dvi: $(DVI) -ps: $(POSTSCRIPT) -ps.gz: $(POSTSCRIPT_GZ) -pdf: $(PDF) -html: $(HTML) - - -${DVI}: %.dvi: %.tex - latex $< - latex $< - -${POSTSCRIPT}: %.ps: %.dvi - dvips -o $@ $< - -${POSTSCRIPT_GZ}: %.ps.gz: %.ps - gzip -c $< > $@ - -${PDF}: %.pdf: %.tex - rm -f $*.out $*.log $*.aux - xelatex $< - rm -f $*.out $*.log $*.aux - -%: %.tex %.dvi - latex2html -local_icons $< - touch $@ - -%.html: %.txt - $(RST) $< > $@ - - -clean: - rm -f -- *~ *.log *.aux *.out *.nav *.snm *.toc ${DVI} ${POSTSCRIPT} ${POSTSCRIPT_GZ} ${PDF} - rm -fr ${HTML} diff --git a/AlgoApprofondie/diapos/beamer.tex b/AlgoApprofondie/diapos/beamer.tex deleted file mode 100644 index 62eb264..0000000 --- a/AlgoApprofondie/diapos/beamer.tex +++ /dev/null @@ -1,268 +0,0 @@ -\documentclass[ignorenonframetext]{beamer} -\usepackage{graphicx} -% Internal links only wors with second screen on the right -% \setbeameroption{show notes on second screen} -\usetheme{Madrid} -\usecolortheme{dolphin} - -% gets rid of bottom navigation bars -\setbeamertemplate{footline}[frame number]{} - -% gets rid of navigation symbols -\setbeamertemplate{navigation symbols}{} - -%\usetheme{Warsaw} -%\usepackage[french]{babel} -%\usepackage[utf8,utf8x]{inputenc} -%\usepackage[T1]{fontenc} - - -% Replace babel -\usepackage{polyglossia} -\setdefaultlanguage{french} - -%% Require XeTeX -\usepackage{xltxtra} -\usepackage{fontspec} -\usepackage{xunicode} - -\logo{ - \hspace{120pt} - \includegraphics[width=2cm]{img/cesi.jpg}~ - \hspace{113pt} - \includegraphics[width=1cm]{img/logo-cadoles.png}~ -} - - -%%\setbeamertemplate{background}{\includegraphics[width=128mm]{beamer-skel/img/banner01.png}} - -\title[]{Algorithmique} - -\subtitle{CESI alternance} -\subtitle{promotion GMSI B3} - -\author[Gwenaël Rémond]{} - -%\institute[E.O.L.E]{\includegraphics[width=2cm]{beamer-skel/img/logo-eole.png}} -\institute[Cadoles]{\includegraphics[width=2cm]{img/cesi.jpg}} - -%\date{{\small 8 avril 2013}} - -\subject{Talks} - -\AtBeginSection[] % Add a TOC with current section highlighted -{ - \begin{frame} - \frametitle{Plan} - \tableofcontents[currentsection] - \end{frame} -} - - -\usepackage{hyperref} -\usepackage{hyperxmp} -\hypersetup{% - colorlinks=true,linkcolor=blue,urlcolor=blue,pdfpagemode=UseNone, - pdftitle={EAD3}, - pdfsubject={Présentation technique d'EWT}, - pdfauthor={EOLE}, - pdfkeywords={EOLE, J-EOLE, distribution, GNU, Linux, Éducation, - nationale, Ubuntu}, - pdflang={fr-FR}, - pdfcopyright={Copyright © 2017 Équipe EOLE }, % Require XeTeX - pdflicenseurl={http://creativecommons.org/licenses/by-nc-sa/2.0/fr/}, -} - -\parskip=0.8em - -\begin{document} - -\frame{\titlepage} - -\section{Introduction} -\begin{frame} -\frametitle{Objectifs} - -\texttt{ - "Il ne suffit pas d'avoir les mains propres, \\ - il faut aussi avoir l'esprit pur."\\ -} -\emph{Thalès ; VIe s. av. J.-C.} - -\begin{itemize} -\item<1-> maîtriser et concevoir un algorithme, -\item<2-> choisir une représentation appropriée des données, -\item<3-> décomposer en sous-problèmes et affinements successifs, -\item<4-> savoir organiser son code et faire des petits programmes en python. -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{L'art de programmer} -\texttt{GEEK SUBLIME (Vikram CHANDRA) -Une vision esthétique, littéraire, mathématique du codage} - -\begin{itemize} -\item<1-> Programmer, c'est abstraire, prendre du recul. -\item<2-> Abstraire, par rapport à quoi ? Par rapport à la machine -\item<3-> Les niveaux d'abstraction par rapport à la machine -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{Les langages de programmation} -\begin{itemize} -\item Qu'est-ce qu'un langage de programmation ? -\item Les grands paradigmes de programmation (procédural, objet, fonctionnel, modulaire, générique \dots) -\item L'historique des langages. -\end{itemize} -\end{frame} - -\section{Algorithmique} -\begin{frame} -\frametitle{Les algorithmes} -\begin{itemize} -\item définition d'un algorithme -\item implémentation d'un algorithme -\item représentation d'un algorithme dans un langage cible -\end{itemize} -\end{frame} - -\section{Algorithmique pour la programmation} - -\begin{frame} -\frametitle{Qu'est-ce qu'un programme ?} -\begin{itemize} -\item <1-> Les expressions -\item <2-> Les déclarations -\item <3-> La REPL (Read Eval Print Loop) -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{Approche générale des fonctions} -\begin{itemize} -\item Les procédures -\item La portée d'une variable -\item Les fonctions -\end{itemize} -\end{frame} - - -\begin{frame} -\frametitle{Les structures de contrôle} -\begin{itemize} -\item Le branchement conditionnel -\item L'itération -\item \dots -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{Les structures de données} -\begin{itemize} -\item Les listes -\item Les dictionnaires -\item Les arbres, les graphes \dots -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{L'état de l'art de l'agorithmique} -\begin{itemize} -\item en mathématiques - \begin{itemize} - \item algorithmique algébrique, - \item arithmétique modulaire, - \item \dots - \end{itemize} -\item en informatique - \begin{itemize} - \item en informatique fondamentale - \item en langages de programmation - \item dans touts les domaines où l'informatique intervient\dots - \end{itemize} -\item en sciences physique, en biologie -\item en sciences sociales (réseaux sociaux, auto-organisation\dots) -\end{itemize} -\end{frame} - -\section{Programmation modulaire} -\begin{frame} -\frametitle{La programmation modulaire} -\begin{itemize} -\item La programmation raisonnée -\item Le paradigme modulaire vs le paradigme objet -\item exemple de programmation modulaire en python -\end{itemize} -\end{frame} - - - - -% Not present in TOC -\appendix - -\begin{frame}[label=thanks]{Remerciements} - - Je remercie la communauté du logiciel libre pour tous ces - merveilleux logiciels sans lesquels si peu de choses existeraient. - - Cette présentation a été réalisée grâce aux logiciels libres - suivants~: - - \begin{itemize} - \item Le système de composition \LaTeX{} - \href{https://fr.wikipedia.org/wiki/TeX_Live}{TeX Live} - \item L'éditeur de texte - \href{http://www.vim.org/}{Vim} - \item L'environnement graphique - \href{http://gnome.org/}{Gnome} - \item Le système d'exploitation - \href{https://debian.org/}{Debian} - \end{itemize} - - \begin{center} - % Do not mess with graphics - \hypersetup{hidelinks} - \begin{tabular}{cccccc} - \href{http://www.gnu.org}{\includegraphics[height=1.3cm]{graphics/gnu-head.pdf}} & - \href{http://www.kernel.org}{\includegraphics[height=1.2cm]{graphics/tux.pdf}} & - \href{http://www.debian.org/}{\includegraphics[height=1cm]{graphics/debian.eps}} & - \href{https://fr.wikipedia.org/wiki/TeX_Live}{\includegraphics[height=1cm]{graphics/texlive.pdf}} - \end{tabular} - \end{center} - -\end{frame} - -\begin{frame}[label=license]{Licence} - Cette présentation est mise à disposition sous licence\\ - \href{http://creativecommons.org/licenses/by-sa/4.0}% - {Creative Commons \textsc{by-sa 4.0}} - \begin{columns}[t] - \begin{column}{5.5cm} - \begin{itemize} - \item Attribution - \end{itemize} - \end{column} - \begin{column}{6.5cm} - \begin{itemize} - \item Partage dans les mêmes conditions - \end{itemize} - \end{column} - \end{columns} - Vous pouvez obtenir une copie de la licence - \begin{block}{par Internet} - \href{http://creativecommons.org/licenses/by-nc-sa/4.0}% - {\url{http://creativecommons.org/licenses/by-nc-sa/4.0}} - \end{block} - \begin{block}{par courrier postal} - \begin{quote} - Creative Commons\\ - 444 Castro Street, Suite 900 Mountain View,\\ - California, 94041, USA. - \end{quote} - \end{block} -\end{frame} - -\end{document} diff --git a/AlgoApprofondie/diapos/graphics/Logo-EOLE.eps b/AlgoApprofondie/diapos/graphics/Logo-EOLE.eps deleted file mode 100644 index 13f4889..0000000 --- a/AlgoApprofondie/diapos/graphics/Logo-EOLE.eps +++ /dev/null @@ -1,133 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: cairo 1.14.8 (http://cairographics.org) -%%CreationDate: Tue May 16 12:20:58 2017 -%%Pages: 1 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%BoundingBox: 0 -1 232 85 -%%EndComments -%%BeginProlog -save -50 dict begin -/q { gsave } bind def -/Q { grestore } bind def -/cm { 6 array astore concat } bind def -/w { setlinewidth } bind def -/J { setlinecap } bind def -/j { setlinejoin } bind def -/M { setmiterlimit } bind def -/d { setdash } bind def -/m { moveto } bind def -/l { lineto } bind def -/c { curveto } bind def -/h { closepath } bind def -/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto - 0 exch rlineto 0 rlineto closepath } bind def -/S { stroke } bind def -/f { fill } bind def -/f* { eofill } bind def -/n { newpath } bind def -/W { clip } bind def -/W* { eoclip } bind def -/BT { } bind def -/ET { } bind def -/pdfmark where { pop globaldict /?pdfmark /exec load put } - { globaldict begin /?pdfmark /pop load def /pdfmark - /cleartomark load def end } ifelse -/BDC { mark 3 1 roll /BDC pdfmark } bind def -/EMC { mark /EMC pdfmark } bind def -/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def -/Tj { show currentpoint cairo_store_point } bind def -/TJ { - { - dup - type /stringtype eq - { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse - } forall - currentpoint cairo_store_point -} bind def -/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore - cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def -/Tf { pop /cairo_font exch def /cairo_font_matrix where - { pop cairo_selectfont } if } bind def -/Td { matrix translate cairo_font_matrix matrix concatmatrix dup - /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point - /cairo_font where { pop cairo_selectfont } if } bind def -/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def - cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def -/g { setgray } bind def -/rg { setrgbcolor } bind def -/d1 { setcachedevice } bind def -%%EndProlog -%%BeginSetup -%%EndSetup -%%Page: 1 1 -%%BeginPageSetup -%%PageBoundingBox: 0 -1 232 85 -%%EndPageSetup -q 0 -1 232 86 rectclip q -0.290196 0.247059 0.454902 rg -133.668 16.757 m 133.668 16.757 133.25 1.257 148.941 1.257 c 176.328 1.257 - l 170.723 3.749 168.633 5.874 164.891 10.585 c 150.969 10.585 l 147.234 - 10.585 145.441 13.222 145.441 17.538 c 145.441 17.538 145.492 75.363 145.414 - 75.445 c 142.301 82.999 133.668 84.519 133.668 84.519 c 133.668 83.995 -133.676 39.347 133.668 16.757 c h -133.668 16.757 m f -41.039 38.73 m 41.207 38.808 41.25 38.921 41.457 39.109 c 41.5 40.347 41.375 - 41.511 41.164 42.823 c 40.625 46.238 40.664 49.726 41.207 53.07 c 41.125 - 53.214 l 41.043 53.366 40.914 53.405 40.914 53.405 c 40.664 53.48 40.414 - 53.554 40.121 53.515 c 35.613 53.366 31.141 52.577 26.758 51.265 c 24.457 - 50.702 22.16 50.14 19.863 49.577 c 17.984 49.015 16.688 48.152 15.812 46.913 - c 16.062 46.839 16.145 46.691 16.23 46.538 c 16.48 46.464 l 16.395 46.238 - l 15.98 45.863 15.812 45.409 15.895 44.886 c 15.977 44.738 16.105 44.698 - 16.188 44.55 c 16.523 44.327 16.859 44.101 17.062 43.909 c 17.234 43.988 - 17.234 43.988 17.355 43.952 c 17.523 44.027 17.816 44.062 18.023 44.249 - c 18.316 44.288 18.445 44.249 18.57 44.21 c 24.836 43.464 30.973 41.999 - 37.027 39.933 c 37.152 39.894 37.281 39.855 37.242 39.749 c 37.324 39.597 - 37.449 39.558 37.406 39.445 c 37.91 39.296 l 38.91 38.995 39.785 38.734 - 40.75 38.698 c 40.914 38.769 40.914 38.769 41.039 38.73 c 39.117 40.687 - m 38.117 40.988 l 39.078 40.948 l 39.16 40.796 39.117 40.687 39.117 40.687 - c f -49.855 72.859 m 49.855 72.859 54.316 79.749 63.262 84.269 c 13.684 84.269 - l 0.484 84.269 0.527 73.152 0.527 73.152 c 0.527 17.499 l 0.527 17.499 -0.117 1.984 15.809 1.984 c 64.07 1.984 l 58.465 4.472 54.559 8.597 50.816 - 13.308 c 50.816 13.308 15.844 13.296 15.891 13.308 c 11.449 13.308 12.086 - 17.542 12.086 17.542 c 12.156 69.034 l 12.156 73.109 15.902 72.859 15.902 - 72.859 c f -69.723 45.148 m 69.723 45.148 66.891 28.866 79.219 23.05 c 84.949 20.351 - 89.504 19.945 95.855 22.363 c 99.852 23.882 103.457 27.659 104.977 31.769 - c 106.496 35.878 105.191 40.874 101.199 44.757 c 99.793 38.538 98.297 33.53 - 92.91 30.741 c 89.711 29.116 86.457 29.386 83.211 30.995 c 79.961 32.605 - 77.473 36.48 76.484 40.363 c 76.484 40.363 74.473 47.585 82.195 59.417 -c 75.809 56.718 70.875 52.245 69.723 45.148 c h -69.723 45.148 m f -0.945098 0.792157 0.0745098 rg -110.621 8.773 m 117.836 13.503 123.312 20.792 125.211 30.261 c 125.238 -30.429 l 126.707 37.968 125.305 45.933 121.43 52.601 c 117.527 59.308 110.711 - 64.777 102.098 65.82 c 102.074 65.831 l 96.797 66.464 90.988 64.273 86.93 - 60.507 c 82.406 55.163 80.273 51.816 80.387 44.03 c 84.254 49.132 94.043 - 54.202 100.949 53.523 c 105.414 52.984 108.629 50.445 110.898 46.542 c -113.168 42.636 114.066 37.445 113.184 33.058 c 110.383 19.085 94.641 12.073 - 81.125 15.976 c 62.398 21.382 55.426 40.464 63.086 58.038 c 72.824 73.859 - 90.422 80.905 113.074 77.519 c 105.887 85.03 93.703 83.984 93.703 83.984 - c 82.363 84.874 61.398 78.519 53.613 63.808 c 42.234 42.316 52.059 11.566 - 78.055 4.062 c 89.188 0.847 101.344 2.695 110.621 8.777 c h -110.621 8.773 m f -0.290196 0.247059 0.454902 rg -194.387 67.495 m 185.594 67.495 178.215 64.179 172.285 57.597 c 166.355 - 51.011 164.41 42.503 164.41 32.046 c 164.41 20.98 166.184 15.999 171.609 - 9.894 c 180.992 -1.075 203.68 1.32 210.367 1.402 c 217.055 1.484 219.438 - 1.644 231.012 0.57 c 228.027 5.839 220.824 9.495 218.348 10.011 c 206.766 - 12.195 193.328 8.179 181.414 15.484 c 176.691 19.57 175.734 22.14 175.559 - 29.62 c 223.012 29.62 l 223.012 35.269 l 223.012 45.374 219.598 53.257 -214.785 58.945 c 208.164 64.816 201.25 67.409 194.387 67.495 c h -194.184 58.421 m 199.434 58.421 203.531 56.702 206.484 53.245 c 209.438 - 49.788 211.941 44.956 211.984 38.745 c 175.684 38.745 l 175.715 44.808 -177.715 49.339 181.262 52.972 c 184.805 56.601 189.109 58.421 194.184 58.421 - c h -194.184 58.421 m f -Q Q -showpage -%%Trailer -end restore -%%EOF diff --git a/AlgoApprofondie/diapos/graphics/Logo-EOLE.svg b/AlgoApprofondie/diapos/graphics/Logo-EOLE.svg deleted file mode 100644 index f55c0d7..0000000 --- a/AlgoApprofondie/diapos/graphics/Logo-EOLE.svg +++ /dev/null @@ -1,1277 +0,0 @@ - - - -image/svg+xml       \ No newline at end of file diff --git a/AlgoApprofondie/diapos/graphics/Logo-EOLEienne.eps b/AlgoApprofondie/diapos/graphics/Logo-EOLEienne.eps deleted file mode 100644 index 72c3b78..0000000 --- a/AlgoApprofondie/diapos/graphics/Logo-EOLEienne.eps +++ /dev/null @@ -1,318 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: cairo 1.14.8 (http://cairographics.org) -%%CreationDate: Tue May 16 12:15:46 2017 -%%Pages: 1 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%BoundingBox: 0 -1 1660 851 -%%EndComments -%%BeginProlog -save -50 dict begin -/q { gsave } bind def -/Q { grestore } bind def -/cm { 6 array astore concat } bind def -/w { setlinewidth } bind def -/J { setlinecap } bind def -/j { setlinejoin } bind def -/M { setmiterlimit } bind def -/d { setdash } bind def -/m { moveto } bind def -/l { lineto } bind def -/c { curveto } bind def -/h { closepath } bind def -/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto - 0 exch rlineto 0 rlineto closepath } bind def -/S { stroke } bind def -/f { fill } bind def -/f* { eofill } bind def -/n { newpath } bind def -/W { clip } bind def -/W* { eoclip } bind def -/BT { } bind def -/ET { } bind def -/pdfmark where { pop globaldict /?pdfmark /exec load put } - { globaldict begin /?pdfmark /pop load def /pdfmark - /cleartomark load def end } ifelse -/BDC { mark 3 1 roll /BDC pdfmark } bind def -/EMC { mark /EMC pdfmark } bind def -/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def -/Tj { show currentpoint cairo_store_point } bind def -/TJ { - { - dup - type /stringtype eq - { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse - } forall - currentpoint cairo_store_point -} bind def -/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore - cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def -/Tf { pop /cairo_font exch def /cairo_font_matrix where - { pop cairo_selectfont } if } bind def -/Td { matrix translate cairo_font_matrix matrix concatmatrix dup - /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point - /cairo_font where { pop cairo_selectfont } if } bind def -/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def - cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def -/g { setgray } bind def -/rg { setrgbcolor } bind def -/d1 { setcachedevice } bind def -%%EndProlog -%%BeginSetup -%%BeginResource: font DejaVuSans-Bold -11 dict begin -/FontType 42 def -/FontName /DejaVuSans-Bold def -/PaintType 0 def -/FontMatrix [ 1 0 0 1 0 0 ] def -/FontBBox [ 0 0 0 0 ] def -/Encoding 256 array def -0 1 255 { Encoding exch /.notdef put } for -Encoding 32 /space put -/CharStrings 2 dict dup begin -/.notdef 0 def -/space 1 def -end readonly def -/sfnts [ -<000100000009008000030010637674203eb93108000000e8000002546670676d5b026bf00000 -033c000000ac676c7966e2f9cb840000009c0000004c686561640e24be09000003e800000036 -686865610eaf07730000042000000024686d74780796006600000444000000086c6f63610000 -00980000044c0000000c6d6178700647062d0000045800000020707265707c61a2e700000478 -000007a700020066fe96046605a400030007001fbc00040126000000060126b6010805890204 -002fc4d4ec310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f27206 -2900000001660133016600bc00e90000013d00a200fa031f00020002006601660002000200ac -015400ec00bc006201660181048501540166016d04a400020166007f04cd0000000201330062 -00710000002504a401bc00ba00e500660181018d0548055a0166016d000000000002000200f6 -05c301f0053902390058046d043d04b2048104b2016601750466048100b00466043902d1049c -047b04cf047b005801330166014c0166014c000200ac009a014a0123009a029a014401190144 -02cd00c100000166013f019a013b05cb05cb00d500d5015000ac00ac0077020a01c701f2012f -015801b2012300f600f6011f012f0135023501ee01e70133009800d10358050a009a008f0112 -009800bc00cd00e500e500f2007304000166008f05d5022b05d500c300e100d700e50000006a -01020000001d032d05d505d505f000a8006a00ec00e1010205d506140721046602f800ec0183 -02a602f80123010201020112011f031f005e03cd046004c7048900ec01bc00ba01020333031f -03420333035c0112011f05d5019a009a00e106660179046004600460047b000000ec02c302b8 -02cd00be00dd00d50000006a025c027b029a00dd01ae01ba01120000008501ae04600762041b -009a069a045800ee009a029a00d102cd019a015005cb05cb008b008b063100f6040600f0034c -016004a800c10000002505c101000121074a06120096014a078300a800000337007b00140000 -00c9010005c105c105c105c101000108061d00960427039e00ec0102027d0133009800d10358 -017900cd02390362009c009c009c009301b8009300b80073000014000326b707060504030201 -002c2010b002254964b040515820c859212d2cb002254964b040515820c859212d2c20100720 -b00050b00d7920b8ffff5058041b0559b0051cb0032508b0042523e120b00050b00d7920b8ff -ff5058041b0559b0051cb0032508e12d2c4b505820b80128454459212d2cb002254560442d2c -4b5358b00225b0022545445921212d2c45442d2cb00225b0022549b00525b005254960b02063 -68208a108a233a8a10653a2d0001000000025eb8b54203fc5f0f3cf5001f080000000000d3d9 -0a2000000000d3d90a20f772fcae0fcd096500010008000000010000000000010000076dfe1d -00001021f772f9320fcd00010000000000000000000000000000000204cd006602c900000000 -00000000004c0000004c000100000002034e002b0078000c0002001000400008000005ed0221 -0008000441840280012600fe000301250011000301240121003a0005012400fa000301230016 -000301220121003a0005012200fe00030121003a0003012000fa0003011f00bb0003011e0064 -0003011d00fe0003011c00190003011b001e0003011a00fe0003011900fe0003011800fe0003 -011700fe0003011600fe000301150114000e0005011500fe00030114000e0003011300fe0003 -011200fe0003010f010e007d0005010f00fe0003010e007d0003010d010c008c0005010d00fe -0003010d00c00004010c010b00590005010c008c0003010c00800004010b010a00260005010b -00590003010b00400004010a00260003010900fe0003010800fe00030107000c000301070080 -00040106b2972e054113010600fa0003010500fa0003010400fe0003010300190003010200fa -0003010100fa0003010040ff7d03ff3e03fefe03fcfb2c05fcfe03fb2c03fafe03f9f84705f9 -7d03f84703f7fa03f6fe03f5fe03f4fe03f3bb03f2fe03f1fe03f0fe03ef1e03eefe03edec0a -05edfe03ec0a03ec4004ebea0a05eb3203ea0a03e9fa03e8911605e8fe03e7fa03e6fa03e591 -1605e5fe03e4fe03e3fe03e2fe03e1fe03e0fe03dffe03defa03dddc1805dd6403dc1803dba0 -1e05db6403dad92505dafa03d92503d8d12505d8fa03d7d61405d71603d6d51005d61403d510 -03d4d30b05d42003d30b03d2d12505d2fa03d1911605d12503d0940c05d02303cfce1405cf26 -03cecd1205ce1403cd1203cc911605cc1d03cb1403cac9bb05cafe03c9c85d05c9bb03c98004 -c840ffc72505c85d03c84004c72503c6fe03c56403c4901005c4fe03c31c03c2fe03c1fe03c0 -bf3a05c0fa03bfad1b05bf3a03bebd1a05be3203bdbc1105bd1a03bcbb0f05bc1103bbba0c05 -bb0f03ba0c03b9911605b9fe03b8fe03b71503b61203b5fe03b4fe03b3fe03b21703b11903b0 -1603afad1b05affa03aead1b05aefa03ad911605ad1b03ac911605ac7d03abfe03aa2603a9fe -03a8fe03a7fe03a6fe03a50a03a4fe03a3a20e05a3fe03a20e03a24004a1a01e05a1fa03a091 -1605a01e039f9116059ffa039e940c059e1c039dfe039c9bbb059cfe039b9a5d059bbb039b80 -049a8f25059a5d039a400499fe0398972e0598fe03972e0396911605961e40ff0395940c0595 -2003940c0393911605934b039291160592fe03919010059116039010038f25038efe038dfe03 -8cfe038bfe038afe0389fe038887250588fe0387250386fe0385fe0384320383960382fe0381 -fe038019037f0a037efe037dfe037cfe037bfa037afa0379fe037776a60577fe0376a6037574 -1b0575fa03741b0373fa03727d0371fe03706f2c056f2c036efa036dfa036cfa036bfe036afe -0369fe0368630c0568320367fe0366320365640a0565fe03640a0364400463620a05630c0362 -0a0361601505619603600111056015035f0a035efe035dfe035c0111055cfe035b5a1b055bfe -035a0111055a1b0359fe0358fa0357fe035601110540ff56fe0355fe03541e03531403525119 -0552fa0351011105511903504f190550fa034f4e11054f19034e11034d1e034c4b14054c1503 -4b4a11054b14034a490e054a1103490e0348fa034746140547150346140345fa0344430e0544 -0f03430e034241250542fa0341011105412503403f0f0540fe033f3e0e053f0f033e0e033d3c -0d053d16033c0d033b64033afe0339140338fe0337130336351a0536250335341405351a0335 -c004340a0d0534140334800433320c05331403334004320c033130a60531fe033001110530a6 -032f0c032e13032d2c3a052dfa032c1525052c3a032b64032a640329fe032815032717110527 -1e03262003251e0324231105402b241e0323110322000d0522fa03210f032140042014031f0a -031e1e031d1c19051d25031c0f13051c19031cb801004091041b0d031a194b051a7d03190111 -05194b0318fe031711031615250516fa031501110515250314640313110312fe031101110511 -fe031064030f0e10050f13030fc0040e10030e80040d0111050dfa030c32030b0a0d050b1603 -0b80040a0d030a400409fe0308fe0307fe0306050a0506fe03050a0305400404fa0303640302 -01110502fe0301000d05011103000d0301b80164858d012b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1d0000> -] def -/f-0-0 currentdict end definefont pop -%%EndResource -%%BeginResource: font DejaVuSans -11 dict begin -/FontType 42 def -/FontName /DejaVuSans def -/PaintType 0 def -/FontMatrix [ 1 0 0 1 0 0 ] def -/FontBBox [ 0 0 0 0 ] def -/Encoding 256 array def -0 1 255 { Encoding exch /.notdef put } for -Encoding 32 /space put -/CharStrings 2 dict dup begin -/.notdef 0 def -/space 1 def -end readonly def -/sfnts [ -<0001000000090080000300106376742000691d39000000e0000001fe6670676d7134766a0000 -02e0000000ab676c7966f9f1ddd70000009c00000044686561640d13be360000038c00000036 -686865610d9f076f000003c400000024686d747807580066000003e8000000086c6f63610000 -0088000003f00000000c6d617870046f0671000003fc00000020707265703b07f1000000041c -0000056800020066fe96046605a400030007001a400c04fb0006fb0108057f0204002fc4d4ec -310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f2720629013500b8 -00cb00cb00c100aa009c01a600b800660000007100cb00a002b20085007500b800c301cb0189 -022d00cb00a600f000d300aa008700cb03aa0400014a003300cb000000d9050200f4015400b4 -009c01390114013907060400044e04b4045204b804e704cd0037047304cd04600473013303a2 -055605a60556053903c5021200c9001f00b801df007300ba03e9033303bc0444040e00df03cd -03aa00e503aa0404000000cb008f00a4007b00b80014016f007f027b0252008f00c705cd009a -009a006f00cb00cd019e01d300f000ba018300d5009803040248009e01d500c100cb00f60083 -0354027f00000333026600d300c700a400cd008f009a0073040005d5010a00fe022b00a400b4 -009c00000062009c0000001d032d05d505d505d505f0007f007b005400a406b80614072301d3 -00b800cb00a601c301ec069300a000d3035c037103db0185042304a80448008f013901140139 -0360008f05d5019a0614072306660179046004600460047b009c00000277046001aa00e90460 -0762007b00c5007f027b000000b4025205cd006600bc00660077061000cd013b01850389008f -007b0000001d00cd074a042f009c009c0000077d006f0000006f0335006a006f007b00ae00b2 -002d0396008f027b00f600830354063705f6008f009c04e10266008f018d02f600cd03440029 -006604ee00730000140000960000b707060504030201002c2010b002254964b040515820c859 -212d2cb002254964b040515820c859212d2c20100720b00050b00d7920b8ffff5058041b0559 -b0051cb0032508b0042523e120b00050b00d7920b8ffff5058041b0559b0051cb0032508e12d -2c4b505820b0fd454459212d2cb002254560442d2c4b5358b00225b0022545445921212d2c45 -442d2cb00225b0022549b00525b005254960b0206368208a108a233a8a10653a2d0000010000 -00025eb862af5a3e5f0f3cf5001f080000000000d3d90a2c00000000d3d90a2cf7d6fc4c0e59 -09dc00000008000000010000000000010000076dfe1d00000efef7d6fa510e59000100000000 -00000000000000000000000204cd0066028b0000000000000000004400000044000100000002 -0354002b0068000c000200100099000800000415021600080004b8028040fffbfe03fa1403f9 -2503f83203f79603f60e03f5fe03f4fe03f32503f20e03f19603f02503ef8a4105effe03ee96 -03ed9603ecfa03ebfa03eafe03e93a03e84203e7fe03e63203e5e45305e59603e48a4105e453 -03e3e22f05e3fa03e22f03e1fe03e0fe03df3203de1403dd9603dcfe03db1203da7d03d9bb03 -d8fe03d68a4105d67d03d5d44705d57d03d44703d3d21b05d3fe03d21b03d1fe03d0fe03cffe -03cefe03cd9603cccb1e05ccfe03cb1e03ca3203c9fe03c6851105c61c03c51603c4fe03c3fe -03c2fe03c1fe03c0fe03bffe03befe03bdfe03bcfe03bbfe03ba1103b9862505b9fe03b8b7bb -05b8fe03b7b65d05b7bb03b78004b6b52505b65d40ff03b64004b52503b4fe03b39603b2fe03 -b1fe03b0fe03affe03ae6403ad0e03acab2505ac6403abaa1205ab2503aa1203a98a4105a9fa -03a8fe03a7fe03a6fe03a51203a4fe03a3a20e05a33203a20e03a16403a08a4105a096039ffe -039e9d0c059efe039d0c039c9b19059c64039b9a10059b19039a1003990a0398fe0397960d05 -97fe03960d03958a410595960394930e05942803930e0392fa039190bb0591fe03908f5d0590 -bb039080048f8e25058f5d038f40048e25038dfe038c8b2e058cfe038b2e038a8625058a4103 -89880b05891403880b03878625058764038685110586250385110384fe038382110583fe0382 -110381fe0380fe037ffe0340ff7e7d7d057efe037d7d037c64037b5415057b25037afe0379fe -03780e03770c03760a0375fe0374fa0373fa0372fa0371fa0370fe036ffe036efe036c21036b -fe036a1142056a530369fe03687d036711420566fe0365fe0364fe0363fe0362fe03613a0360 -fa035e0c035dfe035bfe035afe0359580a0559fa03580a035716190557320356fe0355541505 -55420354150353011005531803521403514a130551fe03500b034ffe034e4d10054efe034d10 -034cfe034b4a13054bfe034a4910054a1303491d0d05491003480d0347fe0346960345960344 -fe0343022d0543fa0342bb03414b0340fe033ffe033e3d12053e14033d3c0f053d12033c3b0d -053c40ff0f033b0d033afe0339fe033837140538fa033736100537140336350b05361003350b -03341e03330d0332310b0532fe03310b03302f0b05300d032f0b032e2d09052e10032d09032c -32032b2a25052b64032a2912052a25032912032827250528410327250326250b05260f03250b -0324fe0323fe03220f03210110052112032064031ffa031e1d0d051e64031d0d031c1142051c -fe031bfa031a42031911420519fe031864031716190517fe031601100516190315fe0314fe03 -13fe031211420512fe0311022d05114203107d030f64030efe030d0c16050dfe030c0110050c -16030bfe030a100309fe0308022d0508fe030714030664030401100504fe03401503022d0503 -fe0302011005022d0301100300fe0301b80164858d012b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b1d00> -] def -/f-1-0 currentdict end definefont pop -%%EndResource -%%EndSetup -%%Page: 1 1 -%%BeginPageSetup -%%PageBoundingBox: 0 -1 1660 851 -%%EndPageSetup -q 0 -1 1660 852 rectclip q -0 g -BT -115.200005 0 0 115.200005 1659.494566 0.0000456218 Tm -/f-0-0 1 Tf -( )Tj -ET -0.945098 0.792157 0.0745098 rg -158.102 787.356 m 160.379 829.535 l 190.289 799.809 l h -158.102 787.356 m f -21.06434 w -0 J -0 j -[] 0.0 d -4 M q 0.380357 -1 -0.775998 -0.295156 0 1266.965088 cm -471.528 27.38 m 435.436 6.755 l 471.344 -14.188 l h -471.528 27.38 m S Q -58.695 757.856 m 80.516 721.688 l 39.07 729.465 l h -58.695 757.856 m f -18.464385 w -q -1 0.699805 0.543047 0.775998 0 1266.965088 cm --278.556 -404.865 m -310.193 -422.942 l -278.719 -441.304 l h --278.556 -404.865 m S Q -10.25 623.512 m 41.414 613.496 l 14.113 596.141 l h -10.25 623.512 m f -17.112694 w -q -1 -0.121862 -0.110002 0.811158 0 1266.965088 cm -75.757 -781.871 m 46.436 -798.623 l 75.608 -815.637 l h -75.757 -781.871 m S Q -101.438 509.071 m 70.375 498.742 l 82.148 528.875 l h -101.438 509.071 m f -12.576204 w -q 1 0.937579 0.772771 -0.802194 0 1266.965088 cm --330.318 558.711 m -351.867 546.4 l -330.429 533.894 l h --330.318 558.711 m S Q -0.290196 0.247059 0.454902 rg -161.094 604.578 m 161.094 604.578 152.773 561.961 192.316 543.309 c 210.699 - 534.641 225.316 533.344 245.688 541.098 c 258.508 545.977 270.074 558.094 - 274.949 571.278 c 279.824 584.461 275.645 600.489 262.836 612.942 c 258.316 - 592.989 253.516 576.926 236.242 567.981 c 225.973 562.762 215.535 563.629 - 205.117 568.793 c 194.703 573.957 186.715 586.391 183.539 598.844 c 183.539 - 598.844 177.09 622.012 201.859 659.969 c 182.059 644.739 164.789 627.348 - 161.094 604.578 c h -161.094 604.578 m f -0.945098 0.792157 0.0745098 rg -293.059 497.508 m 316.207 512.684 333.766 536.067 339.859 566.434 c 339.953 - 566.977 l 344.664 591.156 340.164 616.715 327.734 638.102 c 315.219 659.625 - 293.348 677.164 265.715 680.52 c 265.637 680.531 l 248.703 682.571 230.078 - 675.531 217.055 663.453 c 202.543 646.313 195.703 635.578 196.059 610.594 - c 208.465 626.961 239.875 643.227 262.027 641.047 c 276.348 639.321 286.664 - 631.18 293.949 618.653 c 301.23 606.125 304.105 589.465 301.281 575.391 - c 292.289 530.563 241.789 508.082 198.43 520.598 c 138.359 537.934 116.312 - 599.153 133.5 657.778 c 160.254 711.746 268.816 729.453 286.945 734.754 - c 280.277 744.656 213.539 742.957 213.539 742.957 c 180.559 734.364 130.008 - 728.141 104.754 682.086 c 53.828 589.199 105.188 506.442 188.582 482.371 - c 224.301 472.059 263.293 477.992 293.055 497.504 c h -293.059 497.508 m f -0 g -BT -32.000001 0 0 32.000001 1361.895445 368.012451 Tm -/f-1-0 1 Tf -( )Tj -ET -Q Q -showpage -%%Trailer -end restore -%%EOF diff --git a/AlgoApprofondie/diapos/graphics/Logo-EOLEienne.svg b/AlgoApprofondie/diapos/graphics/Logo-EOLEienne.svg deleted file mode 100644 index 7a2c713..0000000 --- a/AlgoApprofondie/diapos/graphics/Logo-EOLEienne.svg +++ /dev/null @@ -1,779 +0,0 @@ - - - -image/svg+xml    \ No newline at end of file diff --git a/AlgoApprofondie/diapos/graphics/Logo-MENESR.jpg b/AlgoApprofondie/diapos/graphics/Logo-MENESR.jpg deleted file mode 100644 index 02d6870..0000000 Binary files a/AlgoApprofondie/diapos/graphics/Logo-MENESR.jpg and /dev/null differ diff --git a/AlgoApprofondie/diapos/graphics/Logo-PCLL.eps b/AlgoApprofondie/diapos/graphics/Logo-PCLL.eps deleted file mode 100644 index f151afd..0000000 --- a/AlgoApprofondie/diapos/graphics/Logo-PCLL.eps +++ /dev/null @@ -1,927 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: cairo 1.14.8 (http://cairographics.org) -%%CreationDate: Tue May 16 12:27:36 2017 -%%Pages: 1 -%%DocumentData: Clean7Bit -%%LanguageLevel: 3 -%%BoundingBox: 0 -1 300 165 -%%EndComments -%%BeginProlog -save -50 dict begin -/q { gsave } bind def -/Q { grestore } bind def -/cm { 6 array astore concat } bind def -/w { setlinewidth } bind def -/J { setlinecap } bind def -/j { setlinejoin } bind def -/M { setmiterlimit } bind def -/d { setdash } bind def -/m { moveto } bind def -/l { lineto } bind def -/c { curveto } bind def -/h { closepath } bind def -/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto - 0 exch rlineto 0 rlineto closepath } bind def -/S { stroke } bind def -/f { fill } bind def -/f* { eofill } bind def -/n { newpath } bind def -/W { clip } bind def -/W* { eoclip } bind def -/BT { } bind def -/ET { } bind def -/pdfmark where { pop globaldict /?pdfmark /exec load put } - { globaldict begin /?pdfmark /pop load def /pdfmark - /cleartomark load def end } ifelse -/BDC { mark 3 1 roll /BDC pdfmark } bind def -/EMC { mark /EMC pdfmark } bind def -/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def -/Tj { show currentpoint cairo_store_point } bind def -/TJ { - { - dup - type /stringtype eq - { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse - } forall - currentpoint cairo_store_point -} bind def -/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore - cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def -/Tf { pop /cairo_font exch def /cairo_font_matrix where - { pop cairo_selectfont } if } bind def -/Td { matrix translate cairo_font_matrix matrix concatmatrix dup - /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point - /cairo_font where { pop cairo_selectfont } if } bind def -/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def - cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def -/g { setgray } bind def -/rg { setrgbcolor } bind def -/d1 { setcachedevice } bind def -%%EndProlog -%%BeginSetup -%%EndSetup -%%Page: 1 1 -%%BeginPageSetup -%%PageBoundingBox: 0 -1 300 165 -%%EndPageSetup -q 0 -1 300 166 rectclip q -0.32549 0.286275 0.529412 rg -197.438 160.944 m 171.461 160.944 148.402 148.244 134.059 128.76 c 154.211 - 128.76 l 165.531 139.28 180.707 145.713 197.438 145.713 c 214.016 145.713 - 229.07 139.405 240.355 129.057 c 260.641 129.057 l 246.285 148.385 223.293 - 160.944 197.438 160.944 c h -132.855 37.463 m 147.086 17.01 170.703 3.549 197.438 3.549 c 223.234 3.549 - 246.145 16.073 260.508 35.323 c 240.219 35.323 l 228.949 25.041 213.953 - 18.772 197.438 18.772 c 179.809 18.772 163.918 25.92 152.438 37.463 c h -132.855 37.463 m f* -4.26191 w -2 J -0 j -[] 0.0 d -5 M q 1 0 0 -1 0 164.490509 cm -197.438 3.547 m 171.461 3.547 148.402 16.246 134.059 35.73 c 154.211 35.73 - l 165.531 25.211 180.707 18.777 197.438 18.777 c 214.016 18.777 229.07 -25.086 240.355 35.434 c 260.641 35.434 l 246.285 16.105 223.293 3.547 197.438 - 3.547 c h -132.855 127.027 m 147.086 147.48 170.703 160.941 197.438 160.941 c 223.234 - 160.941 246.145 148.418 260.508 129.168 c 240.219 129.168 l 228.949 139.449 - 213.953 145.719 197.438 145.719 c 179.809 145.719 163.918 138.57 152.438 - 127.027 c h -132.855 127.027 m S Q -q -0 164.491 300 -165 re W n -% Fallback Image: x=0 y=0 w=300 h=165 res=300ppi size=2580000 -[ 0.24 0 0 0.24 0 -0.629491 ] concat -/DeviceRGB setcolorspace -8 dict dup begin - /ImageType 1 def - /Width 1250 def - /Height 688 def - /Interpolate false def - /BitsPerComponent 8 def - /Decode [ 0 1 0 1 0 1 ] def - /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def - /ImageMatrix [ 1 0 0 -1 0 688 ] def -end -image -Gb"-V#C$t`_Z+TWTnl<<&Yt88b,Xs2W2ka,:g=(M65>*n8eDZ2(mhN?N"B_H["+5p+.A - <))6]`'+5R]f?:_V:#om[bNcc\tLR=!98HgXVBTBGt8j6i'dBCB!VHZ0u - LnW#DWd,0R#dci1=3U^ZdGoX-LFj.hBC\rto0E=uRLJqe*Nd:%%]!1bkYap\`u6@:BmK-Uc - 5g>UMEJ*k$.Wb'gn1*Bef>o]]:Gf<3sE'j1,Z"98E%!&0DO@_$gHB)L'Jd6!Aj>dd-Z_$Ql - d+#\((^Rd`c/[fRU`nI`_piL1([`;HJIf)B3o]8[)<\0UO[:\OWQsK50rk*LSHE-6H(]XO9 - !:U!!3I)DRYO1(c,'*K$Z_hXXmCRIJh`4t(:28U0V"0sgfaIn(XcMmBtP)dsQq(cBtn\H2 - -ejdIEsMkN,QH!<<*"5Y>p3hSflS@s5hHL[>Ke]mN)Ki3l?M/+8!@)GsdeGPc7$nF4f8>B` - KSSN1h\h?j5_!!(_jVI]&NHW"r`s,kM$opdIgQ1As^O41hr(fC25`[kI<^ACIfRIp,&e]/a - 3!!!!592!Ng4*5X76qkD[jh8;)k1N:RG:Uc1kEcj;q^`)F]/=2%HqJFjlE^Qm!!!#c/gi%@ - k`Kr0(@N15CNtoc;jI)4o!!?so'>tn[.0o?O'M\)ab5S"4;\%u!'n8<1F6O,FSrf0c%?8Fj - borfRLUph%NDc/FRI]^HVa4c?iU0,!&!GT;Y&uCZ%2qf'L1K:!!z$G*=?SD2;1:qmR5>? - \hkb/8-_Y@)?*Lf5KZ.nB9C#ljr*TE%PGHZe#)BHQ^=D85";1#r@Lhe^MUT1*Nrm_,-TXSQ - `:!!!"\5NV!0iXVLg$/3n@lZD57Lq$9qm6#N'i49#;:Zgg#WBQ4@!!!#/]GoJO2Qf2&k1B) - 4/]T=/42duEWO;d$OisIW*PRrY2cp(\!!$-aE`2IcLmUL,6Tc=`.;q-jT;?\jOi%AU=M&>* - NU,@D(]XO9J - ohRAcLRgDP:kZfrGDT8!!&\9okUP$(C]Lr3H^deULXE.,!3.KX1X&r@PAfc`s% - E.*j[@\0@-Bh4Tk`b!5KRecWln:gP13,3Dk(^+N3Dao:!="p6J>fY,d"9!<<*"YYf"Ep82s - ;#PAU)hCiD[R\;JBBQ:DLB.AT!&3^)l,t59S%`Vn??rFk`(ojnoFD@d - 4IL.[ot(Y5!!'f%V5It.MqmLOH^=4,6&^9n:J!!&s/Yup]fs#FoB6I/-dCB>[%e&oSSDs625qbC>)+#!Zp!8puDkuhe'mH - `SN](0/mL_HZ;5GtW>Lri36;Z0>o!!!#i^Vk1pB22aU1J\>)NL-RCXQ^ZV?+cm->mgW4!9? - qrNh#\[]%F?OTCTrc+YK#1NCWi+>]qm]U?ZqV!!!"\J&E?g45=J2o$ooI/tG<,6=P,Wo9E; - U!!'fH\N+r)2oP^B@tsR94X'VJ"*t,hgN"PmO0T)m!!$+E1F%6X6qm>M;j8s"$-AP0[e&"i - jaUfPjf!X3!rr<$c7V7CCJ!`MYM+q:^5OEbhrgV=:0\jSS$!(u!!#,X7XEY6d%0f-66)LJm - /rY-h49t%Xniq9!!!!YMp..H'bN00WN:KX:.Tq1kI)&@_fjI.!<<*r^sPpaEN4E:ApigtXm - 'PfWilj3!!%PEAS'sS>J."XgBl#hjb/_Bd\U6bb%5p?EcP/e-NF,H!(Y,RZYW`bTUXPDj\' - S[Ldl]4T"8LN+U\f_"TSNf^33oQahHZX<5/8WKG[DODSPRpMGnrbzb]bTjEQF44PV9QR+ZA - Cg5Kl<=n?hJ]#QOi)@#d%@0)H)`XF-F1#a('j,G.,I=nNL5!!!#'h2U`7;^XuAo'fSl\gE) - tP1GU_cBtmq,ro9(eHGpQ!3f49:>UkaR#[cuPV9$C+f<;\Q%+&2:2U+A!!!"#&[O"e].SZW - (XdsJ]B9!ne+^j-W4q*g!!!"&cCDI.CsYN1Me>A4_r)*YUl1,X1)Vcg_$D!!!"tOI;4oHcF(V:&'Mt+YJil%bt*S-DT],DpHSNd'2X86!'!!%QIn']/o_gN:L?N:a+>TtDA??A1V=nQnF!!!# - p;dQ&,q9n*dRuL:ZmNmOr:cbs#]6_G&m]$Bi!!%)24`f^lIHN"cmLhik1d_Jk4eHsnop#pc - !!)g\DJid*fZpp"7k7s.&jfhai\D--GAD(kT'E?p!!!"(f]eSkhS!PN?ec8\nkJuRS='q<6 - 1qVp!!!#%-RU9#FRE0N1d_O'4lX>a0I07qA5lq!!!!#W1/@amnV8/APV6SS+o++rH3Tp(Q) - +7k#64`(B4nLI[3?flm2)O^Y@%Y[q**e9'-=S<09?#1!WW5Y_3-G,)"Q]LjU5-V8:eq!^2k - oGqd0='!8M3W<1K;Q^[h%I+f#+86d'Ib=7&q7'a+L:J?qe\OZ)Kk--DRRKTH6VE?Ps],Loj - `!!!!I[O:pt0'rb*Y>,BI7&3JfJA$:B<*pFB!!&Z]G'<;t^ic6.e?;M:Ia7,V-U:ogihA8B - k/Q2H4Or%S!!!!Ye:khV"*t,$?]Gaca91JYB@b$0f2Z0,!<<,X+PSdrl-OI@nl7(]eu"/d# - nTV(UZ]/S;/rV>QN.!cYck.0S>d/GPqP<-+iId,,thLQ<*q]f!!$CCB2;n6U&,8[CJI2%Yp - t15s*!PSA^sjY!!!"dCua4Om@0)4^=ji#8bf6gX%-F/2Qr0AI2rIk!.[)8ZZE%'?_r.48I- - K&R6G>-:/7tWCFT;a!2Nl1SFTUNfuhp4KFhTb#4r8:FRb+N.k:T"!,QarhoX/\-R`>%&jhD - 2&XTnXqbO3*^&e97^cE7S?f?od[drod^7HU'&CVjVDW,"c`J"d%!!"Vp,<]hdn8RL484!Te - CI\67-oEkLobA8C!!#(*S[n<>fBLFZO+\)(J;DD)q8@'KYIac7!-kI@J"6$!oN/bE,_Q_a` - N,:(J\_XbG4>Q1]RM@J[9gurmm'!.UNXJr0.[C`dZMcd(@W*@07=))'1ta6KIJ - N)]-cV^+pmEmAbS3Rh"nCMA(pJ"+*fj`*^$AJeRj3DShl0!/..ma))cEf`jH%?KbS\#b2nlSX;nVqG%O5;V$kn9`?jr/NaKD=hn - kJR8`NkJ%M%mTrAQnr5\u?C#*=\pKa\T2EEX5h27#UQsK - 5p:0l/hbZ9/kg+G6?j2@Q+GATFQD"4[mP?*V8g>f4_SrM77eATHR/stGh(B=HNIaZ\#LCIL - ]I+:`W/a]$ena82Kd^U%N@6:6.*(rD<2)i!0/B]itZf7%:hmiBqlkpa2DscCqMXk7CS1m;8 - /kAX[<.21V!!)(I=0JFllT%o>HB1$Q\p7!knaiLNZa]:WMA)Q1_M9'0^\"nWj$sd7YMMKZq - M&F2(4OeG]^g\DS0:,hQuV5.MX&Y(!!"-K3HOJk-mm).Tp[1UD:ZH54G'EmglE9NpI[e!If/M0C++<.9Zu8-?h]T11PodL(F!8o - Wp"`IGUKHk**Q&"7Y!HV=1`*?&0Ye:H>/]\o^=48He_)Bb2>oo@qPhQ(OA\L5[&`OdhiU.uR(]CH[TYps(Ordb*4EJM - i>5(2@2//F.'0uW>(TuC-q-RuAN@tod%k"o"X!'igt<^^D&UjR#K%&S1-Oi)UaG!s;\BBQ9 - YGMqgC1U8sCO8\l]$ToAJT-]iG.,Uj8<<*"qOGUBlB]#Z/=(T<@\p'SU*k(\:[8b[h%:%5U - M`3t7DYgBXGibhX0bV6pMfWq6CFB/_:_8J@3c`jcjm+Xq)^"PE]=&gAc74p?Q'J[ac%5lO" - Xu[4M/Gf]Z@q\F!W[b&7T>t!IM'_(@RMGXRuRsq^&6B:9<(c'j>RD8(BO[_`,UXKJo4 - pd/S2_&0 - YOaH*@aD]ji#X7#OKb!N4q=@DRQ+n-VrL#NkKBfcF!!'fp_WG]6^>^>\Vfe2c'?@7H4F:*$ - W<)q;Z+.^a5;2SDV#IJ^m`ta`>?%45!!!"BZ#!"=o!K7DPI=hWRPo0YV$kmTT,5;V:7\mOc - 7boW#>\KFU+BWT?1iID!!$E4[4D"Aq[k2Iqds>iVld^[,t7Ju!GFKcG\sbdau2s`.=]O&gK - Ck'YNh;Q!!'ek4/1^s)t@\Up$'hDgt^g^2m0'X4sL'&/ghskS@Z/r(N`[MC$"<_F5'RBB*8 - 27J-fZqS772O4RJSt%LLjRH8@q]klB?[l-bQA1!BC90'*Z]o0WaXX$.O(!!&gb5+1Knl*#J - GIs5JN_eHqdV&1YaAEoVj+d - -N[\Q_m*kReT[&E2ci:?QhCFrcLViZ!!'h-,i;/iY"PGYePq*ZGFr#n&+[P!jBL"nNqMg$? - 25GA^o$;H;m0P(`m*!!!!9P+.[0bM\)s=&9&SS_Hnq>lKM'rDfHkJE(0OjXck8X^0E'b27 - ^Q0]H!&S'(s?!!'NZ^kn2rf1lK$SrNXL7P@P/:02l5!B%#b:(_CFjmU+hQmq&sWBU(W!!#' - GK^M[NC+`_c(]Oh=IFnQ#!<*M6-LB/E5l"$OJ7LpKi+$bS`#$d?@.25+H!63&d\U6bV2I93+* - .D^JH&5;bP\'S%-;9#Je0S2s2a;On.B$CTU_P-Y^,!W1`<.fc!(b-]A%8'W>V^s3<0&pIi_ - bV4![f$lDPh9\51c-.k.J/38f*XT1g0M.p2UO\0,>7TS<;$)?9b6DJ%ffjm/Xg+"pFiNGB' - )51G)jbK\:9'"Xk*(]71]m[5q\KBf3@!!!A5bo:,WYDDatHj>F5:.eQ8W.Fm)6K5Br"6M(_ - ;s4$o=E?b#T`tJs"]Rhd"`EU@f6$X)[s$:c$_O!mb[[n[`7q;?o.eDFi;#?L\`GIE!)VYN[ - FD?"-RiC1jl?+G$,(AIDkR5UOa-Nc)GkOa"cZ - +>=%^7mM`NhURG?[6B@^cd44"!*O=7pP;!!!2A[#(hX=MoNhIM([pnaW3sY>>7T3LOic2pY - I2>Gd?dV>:H"!.Y,Z?0"32/"_3WL[^?PC!J&(O/e!!))$7us0 - Ue"jcDb/"S&"n()adZN0iRju$<;ROA,H - `6X?>P1*DQ?D*t'S%Y"ZTNWEl2 - qCo!:lCbEJ^feN)[O4a\VFK\L]lq;tY\Fn6d]el+[X5W;JuETCSU-W#k%.WW3%7*2tkQ\p' - U;I"dc&,*ltZ=7&q7;uu4(bHlj)D=VM=rh>Nndc7AWia4+6%kI\\E-W5B?R(=X;80K\2sJa - S+R\`%eOL@);*1N3g,C+Kr6g^G,6!;5(K:D8J>AGB1!3QTq'Ot3B3i'lH2*)Km8SKr!D'ItrXs-[^8>X;\p7$4+jg8i^]n;(LFZ`RjF_Phm=/O48_ - "%ZJ2qd@`I6EKXRZ`l5)A+C`I'rd!!$,4c-!`Bf.d"C5BNN;iV[iK#8;WU:7k5Fd@%2;RZQ - W(q1:'r!&3\K_PO\87k7r^\9^US>EY,?V>=R$0]2P=W<7GM/&008HJ11nFo5pIl@TBC!*m< - h^5i%!?UpC+oZ:n>o(Y$\ODftKV=3>=jd-le:\RUH5nsA"kR/6@>kttMV;p6B7-NF.WXgE+T"V0#(]mOucf5hQZjT - ]Z3HEpapBfjfWW3%WNi7qmPcmkf2uS%,?+YD]oe?TBhM(RQ^ZuN2r1`8`q0ctal=1)"!1^o - [`+pAsN`3YOERFQ+cVI3Y<.,/U3/a7T)2%d@.).ULB_[0/!!!S9ZZ>p8$rXepERB^a&WrWT - X83Y7E%[QHfo,!2$OPNTCrklVHW;.Q!!&[Z=:Yi('hiF7aNR?o^-`&(zzzzzzzzzzzzzzzz - zzzzz!",`i-SDNWL`s2Qma,+e#7q'dPq+:f2]X6R-13I*>6"X'Vm^Ni$3-.2Li(hVl%nU,L - k=j:itmrPr2uMhbP%kuJ,fQLcpCBj#qZlacr+FA9*G:qE,r*V#Zr@#*!%190Pm - K#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P=4F<@5 - (P!!)H.cH]HR"oJT1iZ>I+RF"j*">*V#Zr@$UEr5Rtqr!);cC[>ii9b,fAK(*[MsAin(G8t&d/PDLWa.!&gGX!,4DNBEc - CI&3rV#!,5Q5o$qp8705tdIL/JUn);Ir0f"TTqb'bs`K<2ht8Uft0@#mgq3gYBf.)t,FJZr - G(mrUndM%g4KW*jen7cr-P?/QF.);uhFuU,,",fOO[*PH%W`*^>,/ITrVE3WiQc[:lNpTqt - '^>,k80W;loE181O2$!O?&BW1t3`sW=c/R#N - [7S,%5[VU&-[-?>AV)eodWjQN>181O2$!O?&BW1uncX^X"?G#=IV+ZZ%M7h+=t5c0V94IW$32\(0/)ehn`(2n&X+S/!TW_@**:kFu_'3Zjc\:fD8#JU01gS/C#lurZE]=X!X.L+e9AP6 - oYY.aR=il$[kDJiM";!dc)S[r'3ZlMTV]eaQ3mUE_#Z.\[_d_+[r1"_ - 2E'.Aq0RI8CM`Y-Vk5"cA4Z7M`?4dYMA@eT@)2p?C!]bK">//-ZrEI?;P=4F<@5(P!,r5SC - T4eR]=[h%djHFf7=OA7Ma\&NZ)u`fCS*_7;Z+WW4*FT%:uPi4X@SHt1M>!tS.%""8^LA;78 - &mP/JUn);Ir0f"TXnIi0J[nN>a\Jn)#cYo<)B2C2BV5M\`:kWH\@2fs>>We>`&D5O@Op2LY - FDRE-q7scr-P?/QF.);ugkD8m5u'>;n3=\T4Ojbbn1)p:ueZjn/9?cHFDCkKdd - OA9`BF4n(s6PUNeZlW0Fqcr-D;/_+%3<12*2T`crI-F?_PE!`OJC8"kfE6Xh/16_J&n[X.n - OH:$5*uR:lr&kRl&c["$U.$idpktI'1h`l>U8?"cQ3npOWA:0D!ek/^Y?nm\*?@:]hRjq[r:.JphU?`9bJOGd"j-* - t7Ri-9YHR^sX+!Z7gX"3l@^4!jq@6]/PG"aUMj>h+=t5c0V94IW$32\E\#"QQq<(cf.,*[^ - =gQt0isk$#[;tBO3B9*Cg-NcPV)eodWjQN>181O2$!O?&BW2!i&km5CG:Zn&Ug1HN#)d4a7 - "i,Jj^>Gp-UCD5(+iN5ZrAG>99ff8'`_KjrE?5jkF[6)WD^]+95W7]R>F#eGdLEt5teU$/Q - F.)<%(%*PmK#W!*k+]>H4oWs*c3M<%V+MPW_5&S"6*umFjE&I%8ig>3beHf@/0r*4@l*iX@ - F3k09C;aiX85MHOVl181O2$!O?&BW2!i'("FPKn''e?b.ghLlRL]gsD<:9'03Y_r[;+511hb7JGOP%jE)Bme[ri48/bSc#dm68c?[_Ut>Aq2tcWum0GiB%W - g01n!20S?=?+Y:%ge1e,KS5#H1M?FKgUC%T7Wn"GH1AiiT7?k9>.&+Ys8MmiRPYm=B[H>3b - :d5:I.r[]^86^.l1S9S_$;'H044_HD3ZYT;B5GNN>qcipoIW)`nDAZ3hq,G^'oO;FG^Z[u'p.n\l<=Y3+m/9((MPNc1n2Bkc - %n9mc?BpY=QZ%.89"b*Dkumk7kH\MGtr\T?q_q;mq]2/3u].<3^!rqPLk1M5GAoqfQ0Wi5h - -&J="R.TWX<_:QGDl-`mE?:H"#lU\B^RF"j*">*V#Zr@$E#nCXJ_FG\rUq;BUp@bqnD3m[Yn'\%*;GrZ\o.cA@d,06BN - KM!)\=_u8!sT/F#?:S]agY6-`A2f6lk`uQ_5Puh:s\LH<.N3d*=(7?1b=A)r-C/qZVe`:rMM'nl#%1P1+8u< - 0MDq_R4O$33(r2satCoKpb*3!/OY5C+E'E@gAs)$>jnn$0GAO9%D'!tW+cr'n[,rhcu:7aR - NGMV,gH#nV5M+6Ogk?#04@JR3JLRXd&\$rikXhb#i2('bAP^VSamkphhs8M#sPan,RPa%D% - N>e4p?Q*HYlKm31++bBr%[qe)OLAn7k4o - Q1TS&!L26]p^cl@bWJPm+kPq1G`7DCh\r9ma@qig:Jh?^3mJ7mFq9d[0O"JV>C#`fjd3glI - <@jor>PUWE!W2181O2$!O?&BW2!i&ff@uVb`qf]3H-];0SP[e5RZ"EL$(YVk8hjD!__d[A@ - JHAVjRCDjPtMkpMt`-7L5ejioaA[,8%BcaK-Sn35C2q=s!2*Up;/LS:QeKU)rkBW3b\V#l0 - ?E(inF5('m.>.n4RG1qRN/=+kh>FX+N[!6nC>5L<^qmFqd]Y([igY-e"h;$d$04&JLoONao - \ODDlG29S'g!EVE9UK5V=nV1:f,h-"&[YN*cr-P?/QF.);ugkDNbPJ`3d&kVW;#N'6[K@d+ - !6\-J\KO,7pEBRp1pWP7Z;<%r]^/=PP71ae,^Q9rpFE999"gd1B)qORh[P\Gh]ZDG']^ed8 - FOB98+"c<12*2!Pg!@VPP3A/a_2q@l6`3M2?4rG;m8&J)Z;4hLGS([VacVo%U$9RsObmM>t - QiNu'HUr5]I#et7,#WFE%?5*eXeS52BJ<0Z^qd*Sn![r0j&@EtB'rVH2f<2l%s?1-:GRgh0 - \g"E]EXh>C1fU"XAl?IPu1i:sRDV_nM5QAA*pQDh^V-^cWX\+j.#"O.0[F]eRHpU.d`5s.5 - mD=PbI=6NZeZ*3Ma(s;0XlKl,ZrEI?;P=4F<@5(P!,r5SBW9apD)8Ii?bUp`_a__lbr'`u* - Dp$E[VWK``JXO7JLUj9h5t\W`^[r[hL"]Sj83MNQ7=r=)fNAtA?)Ar*^4uH@=sBm<1uV^h* - FFL5(3:7[?It#]6LplG^]4;F_0r[\9:[eIL@,I=[@B6uVX@8^Y?j(aGl.-tA*kOY - ',MHtj?Z-#md@g'^A%Y]_u7NqoBWTpQ75a%G>.$K2)[ADaKP&Zp$.g-Q)-WCDJlV>&&#aNe - lr@AAg1EY9PCD%JsIl"=t0N^"FIW-8WtLc0$Xj\H61,E7M$m-fk6r-*MGfR$@i'NVnlO'fs - Bl3`uinR;`$Rg".J(EF)l;CpKDYej#pQ[eX'Tg8UJ6njiSI?K^ukVqJ4n'?PN#!n8PF_]mT - X]mYb\iV7(-h8p?GN#7i^PROG1*DADiKhhg(u/QF.)<%(%*PmK#W!*k+]>O(:kP7?Ao`n/i - :@=s5fL?eb_WD]Q&*&q?Vgt&T3BB2!_#4H89H:senJ%k@+rr);8>;^#7FL:HgY?\WdW\J@0 - oB&alhamG7pU=T#f3a#5HWYnPou)\#\u0Fu"q@ZF(\G+Nf6"bS4D<(a)tmG>/QF.)<%(%*P - mK#W!*k,H>,iupiWlk]^8"f8@M^Y%Gh>j]^]2%9#iisd[pbGJqtAP\\RW[?7YW\3V:M\K:O - BmD?@'_Jhg9P2dRAN8n%\nZg+f]E&e^r9ZJ0aW+gY@P\$rj?39$_sFm>4!dgHKidN2HL6Nq - X"99ff8'hZhNAO9#n!1.)&9?kT#M2mT;3HF12YIpSmjukbLmej:D',)%%n)Gl)TP^<"9h@q - (rS?%7O$/f#Sut/>\Lgg'G29?=cBp?(L0`ZJGH^_E[;+6t@9BQIq'<'O:Goi1XHm&'H?JUp - ^AdtE)l>".-1-%R(F`8Cg9k]SN,1:RW_@**:kFu_'3Zjc\-1WRqX1uam^^Z@9q0_9>8J%j( - ).JDj5\Uf;lBKbl\e*-4k'RjT+Y/r@FL]$AW#m]F6:]OH1sgi*j%N_6id[C:u+-Yc=NpP(Jb55OKfRl>3@rr"eE+V*0Wk/ToaPAO^$!qe - 4ZgV;t:L621!$X]r9#).1+S?Fb*q][tRI'e31EGm19<99ff8'hZhNAO9#n!12X%QMT!!+!! - =[^u4"fNutPg>-VPUjBmK)ltkKllTY$]`0NH$g,(@u]d>*&<`>>qkro9&(b)A"2;KqTdD;K&BM\7=.aLhT*U - 8?"cQ3npOWA:0D!ec8MdGE6+&L4YQ0X - 7J>G&r"Ws8D\g?dXY/O%M+>>0AmD,R0#&Xc_9>-q7scr-P?/QF.);ug - kDVRP&QV+T:==0H8_T(D-k^Nf:CbhR;EC5j,h9R.4"O'S/6`k^Sc1^t - rT1cqn%ooGu(%&.'r:A5ij3+p]p$:5!pKH;1n])`,k80WDJ24.MGu8!4 - W0fQ>5%/XD-/^L8HEWi60BieU9Vq?soZ$+==Nrh0VWES!TJ.oS`QB[;+7?hKnA1SRog-DlG - HG1$608[P7#glitj8AO9%D'!tW+cr'n[,rfs=SMtJYmZLoNTrYbfP*0pr&fr*s4c"qH2'aG - 8H`4f8$ig"^O5>&dAB>J+QW1kX++C0%GER.eQ>``M:7TZP60Qt+U]"O!ET>'\]E6ZYV94IW - $70Ab181NGJ4jkDQ>5KeQdO4.P$9[34iG$\pM(4J@S>5l8iV>"]]H1N6I!P,DFm[m_EYGQZ\(9D([;+66#;NK[k2k^hhT\VKCUp!:-8[PYHe3q]F6D7>^*tZ - ,dn`3Y*i+)Qju1Q4g!EW.6;*"FZrEI?;?=QZ3-e/6e>SN'oZEFLQ]mVCoD#;aWOeA!uiI!+[LJ,KE_l(fK?ks/TnjZ!SW0j-rD0K3SEOd3Ybhu9PCD%J - sIl"=t0N^"=J,eUIL6k/N'S1YI8`Sfs>>WN^%7+,i*H^>H1\aG1CG$DJj@^naSO+[6bXe7J - HD\@df=!5Ao6NVR4j/L^/mWSnm]3P*Z>FPZ>&$Z%9$sA%[E!R - lq<'Oi1MrVW;k^&1KU)rkBW3b\V#l0?E:T;E]_q?D\ts#`RPd!^4CcA>h2t.l0f%8PmG#%h - .8ls4<`YO&M.L4.PV-6FHU'MK[k1gmfW`uMrVl]_\hC\J4553QDG!P:55F7Qh+c,UIVH?CM/`mP>e;M(#?R(>.*Xl9:)_#goQf&B?hLQ)&=Z!AEhO=f"V41KpF - 2%=t5c0V94IW$32]pq-0ktT=Vd>'L)Nkj,Ap*K4A6&I_Bplg:CdOm2@OjVb`r9*UW0r^G`g - XHhQgR*Di\@]mpBF]*BM^.$r^)'h;$em7 - k7iSn:hAkN:41BrJb`BjH2sPN#?-sNK,Z!^-$Q'%qXs0d]=WtCT/1,?nNAbKjN3Spm[C)*c'gLo^OCTSG..+3\[f8^ - ^EPVn;FQl%I9c4]O$32=f99ff8'`_Kj9=.YA4?VD,?RU$^F-s(6\+]Fb'BO#kb*B;GcQ58tGe8.db*FVpI$"0qk? - Bg]k09A7**IBU[VacV]"2Lu)H!"^`pD6VQgkC>);N-IUOW=C@eTs,!uELj0Q#ONZ"(fa*BL - QOn(nKm2QTr]gASe[rR\g`-$Oa<-5tu-n%st,L(.jH6 - ocP>jb4LW0R`EXf;r+2M'HN*A&jTmqWO[afXnauePZQj-9,C6jiWjpdu1;cQ7&&A0qHImOjabKMZXuoN^1MWTe>XW\MHI9[8sLmj%N?3#BB82PP$WJ!-(BpOXDXDOq'6:/PqcTZ.5 - M+'j%g#M2E78&mP/JUn);Ir0f"TXnI=tTEN>JIIkrqYaEe.eo^W?QDmg[jUS)gQhQ*W>j-1 - H=r[%3'3BB#f@0@q0B4ECmKKc+7XO*jHEA5Y6f@;ekJh3Pan3k6,j:6:f*8DOcLMEB&ji52@Bm#PMC@")`MZ9>e. - 0=p?iFF>,m[SSF#M)BtoMtl-m].Qdd-]W_@**:kFu_'3Zjc\-,lLWBs?TcJZNkc2%U6)!@f - hI`fgU11b>R=0=CT:"&7hBWFTt92"mMp+BCIQmmB1&*"1U[?E+BY&rsYakiZh[CN+@(5q:` - hgRBV,U7(Br:mbcBW3b\V*YJlW_@**!8nJp[&)Up)]LIJ).G\T>/#Rql*4 - <12*2T`crI-F?_PE!aY.ak&B&pA7%o'2o>M%dquSUIK5:^#8_LT,51KcC?mQ4DVqpU&aW=^ - HXD+Y\2:R*ZcBk^AG(s-DJ(0D;*L(nc/CENsQIHZu=k$Dh%YRp8rk;HKqI?5Q"?b^WDZe7n - #kCV59S8!W1!`bn]jBp%<1W\8dc`I%d2=BO5(V+\cl+$+Kl,9oSKeElV_`JXs2*8%T1O4`Reldq&ELl[Tm8kN"STG\DS - AS!/5,`"SreQ(t,peUG+7un]+s5UM&f::pR_)H8e&8.H!fVVB4`$D+QUZ:@ncC[=nR[U7&C - (Ed,PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P - =4F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.);ucmu-V$gp#qZlacr+FA9*G - :qE,r*V#Zr@#*!%190PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff - 8'hZhNAO9#n!!$tYZrEI?;P=4F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.) - ;ucmu-V$gp#qZlacr+FA9*G:qE,r*V#Zr@#*!%190PmK#W9$gII6;%I^!,utc< - 12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P=4F<@5(P!!!!H7n]*R/JUn);I - r0f"TSOAEjSf6cr-P?/QF.);ucmu-V$gp#qZlacr+FA9*G:qE,r*V#Zr@#*!%1 - 90PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P=4 - F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.);ucmu-V$gp#qZlacr+FA9*G:q - E,r*V#Zr@#*!%190PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8' - hZhNAO9#n!!$tYZrEI?;P=4F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.);u - cmu-V$gp#qZlacr+FA9*G;3Fm7>NjQ'k%ZN/nhZrEI?;P=4F<@5(P!,t@E)&_nWqsGDA]TJ - GCUj=Wnm#IA]'3ZlMTV]eaQ3mUEa'u;qkg6$M/N%=p4EKYDl59W,03YALBW4g[Q7*V#Zr@$E/W1Du/mPo*U&V0@q==FVm8H/*!;8`P - PmK#W9$gII6;%I^(\5TgIm!SkUP0bb9URZj[V\r+5lc'o99ff8'hZhNAO9#n!*=1>r;"L#. - mL84hH$pmaiMOoe^FY/5$Fs[BW4g[Q7GV8cTeJ%.0/te;Ir0fKb - CalRF"h4_"h+aQ8WU6:f2cFMj>h+=t5c0V94IWMYo%h4oNa$6[SOn=gr9SA7VM2cY_FFM>q - nmjN6cTCt5ioN#FZpTPd3kp%;6If9,h4S+N - OP2>$N]mBA:%3%4lhnT2C"Ug>45H]>#^k7>qL:Xq+Bq3E,ruF=Q]]s24YTm>O9PCD%JsIl" - =t9)uoB4FqQnY4?]mBE;Tu4AI'e4=hcsb4i3B(j2:q]63Ir4)W]m0),g(ebYUe.Sa$,F8gW - A:0D64$hq9PCDEFaNiKC#?XQd@s'H/uSFo;5-J%Q7\l+U/^S$$G'06:6dJ>?K59B;PZj&E3 - KGAZ$Q*.0k84Fl-^k=3niG[")pJ.W_@**:kFu_'3Zkj='T"ckF[6A@QD-ZHgeYg""9j88kM - _Cg9n==C.LmOl.\p+9O,&Eh>$O#]6h+=t5c0V94IW$(P"\rB1hA9OHTlF6O.opK.OsQuD[r1$5g2@4".\Hnr<@5(P-p^Lk - #qZlE-S@#Hq\Mr'gV%sClCCCqo>;)'BUk:*M\hG1Lp4pChgG#imC*0L'i9LJ.MGu8Pb=kqK - U)ts&f)6`Z=HO*4/e1+?@#39:8>U]N/Z7G-cK:tmFnskg,(ArE)*c>RF"j*">*V#ZrFPs=g - M_N]=XQd61k[+2GEdmUVP!rc0aB$qZBX87j!/$_hJWogGCJsE)*c>RF"j*">*V#ZrFOBIt) - t87n23bfO@06K'HW3!TiM-GL$Ru\od0W4*K8!UU4"93RL`96;*"FZrEI?;W/6T6:0``Wk5l - iM%V,9qN8@3l`/fa'PP>!_08(-:o6pS?+Y:5H],71^cBe?AO9%D'!tW+cr/j#eui:o_sMh? - +nb?o(ccWtqXs/MT0Ag8RsSe`o^qdN7urQ-IDUXD?[r#sN>aYq2@+O$KlYA&/UQQ@8'7)I[ - t"F,#AfEd$90D:W_@**:kFu_'3ZlUgk?+PSppNMX8;)\r6PDeS2p2\N>omHEoP#oET>(;rU - 56Nq_tsX)IL4+fm^O;(pnGOf#*7R4(_^(<5:NA;Ir0fKbCalRF"jjbUaN&_hJV[pXAEXX8i - 1rmkS)]Fk,*qpNA3-d\M_&3s)o!=t8I#BW3b\V*YJlW_@**E+Un))FFW35TfX#5:OX!BEdaDY1ccO:cO,k)EX^Ah,.On'g_p - P5L1G^i3R_0*tm&ZSuY$JZXc>MCF:&M>bVqR!`,;1_=jN3U$euY8sCY"_!;Z["%VG3Nq()F - >ga,UND/ss@5-Z>te=]pLj+'uBlfl+Y(2IXIUWDf^PGEDU'qtBDM:/4hIX5!*6ZY.UAdn.3 - g`EBQ^djB'(mG>N\r:@I?kJTYc27IpCA7WWu`emi6p?^Jl6lJ:=r9_sIq=.H[C8@p"(d"[f#3M:[6H/oBE0F[Vjp4H - hZr\"q;4.f]LGJ*C$faTr#nbQ3npOWA:0D_Dto8HM,ZU+#VJE7u\F`HEoTM$"q155aoflIDpO.oo@@V(Q,h]SD - 8tGeqAacH'%(gpeNYT3]'PIH?_q*dF#`2`J4gPq+e1g2tQ+0uo=s\)71V3,p-)4T*fdW+rHhWt/Y#A4rk005@?Ua/mIq`qc:mHW,r9=]*)Zk(jG*e4+XO$EVgi4smo=0?X1Oae3OW_@ - **:kFu_'3ZlUP?OD0\`]P?^)X^Y<"H5<^3&V&=YgYjbl\1\L_[3 - t-]=8TSO[YQ7P&+>KA3nUirccUQ'Jb%nRAcWe6TZC1M4=HogG,\V-\V#04):>k0U#%+44lH - PURi`Z\%Ct?[_UtmbPM:-YA%a:trEqXa9XCn`Rk:j_k=(gJVlBGOA_j-Bjpg]4fTdpYL8Cg - +A2r1N_j-.p&lE^)DLWHLL4X^OO+R$16HS'.m>W]i4.GWW(1)mfWk#Mg('VoX(/PHa[kM^/ - d+s]2bk1WF*DhU9<34J_8W-YJ:(JABC!8D-+BkU=/J_A*3VU>Zepi=K>ISgKob!8sLn!jd0 - =lgU>AF\J[e.PmK#W9$gII6;*"Gb08'dnr6VRnhKo44ibaea:O8?Z(@(\%R'C(,JAHu[d&u - 9%ho]l<46UGR@-02e##hQ',0hN-oj;5q!d7n4uqgJFm@HgL"b[[4am2!M_DeXedgQ3If9+? - ;,NL36UQ6K]SD8tbRBCD.FPP8:RU+@3_rCS]mB?E0>/X;h(iQa9URY)jqiWuVb`ZZ>E4IN* - AA`a`9+UE]6a.M3"rCl]8d+GcC\LFQ9%Y[kigRJH - XQpmn1]7uDiWU;\DO`/ - H6E"(qC.q<[D)60dQC8:O]e=-^16-=Ka)HYB>b#s - Hsl=EJqJ[tHgEIc[U-+A\VGTL_]WrM1B"Bpeui:/1F:f&;Ir0fKbCalRF"jjKY4t1F;G609 - 9usNGF*,(HLtnHcNN)l1o%d5qrZu#fJY%f[a[XQ9''8q]k-W!@[BN!ZXIM6h,8/)'u7b!C0 - FeEZY%J+SRI?f-,RR;D4$:QQ?qoM1"1Uk?EID=KS0II?4@.H<2!pKRV(BM7pI@Q]tM[]hQU - G+N)(QX41fRscK7ke>Z$-*Jo#d"Q7lVE^b<[M&6C7.s'ieM>,k80WDJ24.MGu8S5!$bQBAr - VmaS5"lC$MP@^5Rie&U8*d+t-IBk#i1BC4MQmA+^[_D^1EehJbad&kXFcC-W6L;S"l)`MZI - s8MohQsm7/`Ki)[B'juq[a]a&p6k\K^q3UK>4pCE;qAZ$NbPIZX]i-nMpKY;2a@)q"4QGAI - J\2?'1bnpDqqk-kn>IelY6tN*,P!M,#5%+*dP]rajdCpe(U4WJsIl"=t5c0V94IW$>6\^gG - U;BK[#uFX.JRhHM6]>qJtd@/R,ZjiCe>Hg/MBV&$YMEh5:4VR;3>DIQUaVi# - ei=JGic`ue>V8RY8OO,oY*;R8 - 'q?647>-t5.Qi4"eXI!:CfcDs>o('*Z-qU,/b(Q&f-"s85Tr#WZN#=E@GEG_)>WLtmrnqYR - a,d^MEp.rS#7e+aDQ__lL$md/>ICetCoN,+rC1qod\YM9OkW8MC!iZ/]k@,W$SR;gCj]9`> - 3_qWQ`=&dB)8Cnnb(L@>BPlEfi!MA1M0`H]fX0Ce>cM!HVCD1P9pLsd&gM2HVE@8'e31mHM - +;Sq#gg'fP)7f-;Cf50M/"8b(Q&f-"s85Tr#WZ(g1XRqQ&t@4U_++ghn^C8u)5!1WQ7>Lm[5U$ - njH2rIe>Q6PC/s*Qr8(/\IB:!pO+U[%dn`3!P*0:%H?U3RFI*HT=__IK$Pk:tC05JlXB;a% - 316n^&\>fnB?89>1]E^^cTLem_hJW>aBcE$mG,7YVl+0["q=mep!niR@DM#0P=_LFb(Q&f- - "s85Tr#WZ<3KV6G>Vf?%:JQH,9rsqc'ej'6\PmaY#hg`kg?.A/R#MugU8+aFt?q1<3-1+Zt - N=26j\Ku<3BKZWlNTP[T"t3Z.f6AUQ<.bk*mM]LA:ZCc^H`WpYUI-Z=M(Q8X'#Ckp,dmY$/ - 5Jp$:3_+"]Y2"tT$E]X,:kB^c'gM - !R6>idA2-"r0eSV:ph`Dp/pn?n2iX^sV[^\ATG - PA+;X$T->`!P"o;^\V0`]R\H"G:d-j1p3J7RMiE_HSNpXnU;<>_55F9'ic6<)fA.O'\T[A/\1AKp\?_TngV/+5FJgDX89Z - KP#5n2LD`(!W:J]l]HabsYT7?k9SaX%FT5q`"DBF\#.MGu8Pb=kqKU)tCP+.qVA@Z:==7,@ - sf@SWqi_$:a]63F_k006KN?]4qU(81/DPHkCT:p-qmEq\amN<)R&QV&.7MJ!M5JOO;cTZ/1 - nUDGSp"@MA^MJ:1F^(kJ-Q=$q*"M")dh)2jp`tQJ%3+Sm.GbH,9&I:,o3m9-V>g,OdiX);E - S[>&qsHOu'@Uft2Vc_QgXW?+`Bho-L%=?Kc^m:(UL5Dr-hloV96VB7pYUHZ3&fZZqYg0GlO - G*Ke%0\f%,M6DWjDZ->JGplqqqEkAE6(d*cSc5k>'hf;c6N3qn6:IG0`>GS<69ZjK@k/![t - 3-g7Qu&Y[Bc-EohCuC>HJ/mZ_f(>`BXZNZL?`43el+D)d"Bph-4Ip76Ea1&b,6U8?"cQ3np - OWA:0D_Ps%hIG2bW-R0j'oh>DOb*=KR9:+5#F30Rk=05Y;AAF0D2]DJtg`qkBP*hVME0@** - <8k]J$^E2Ad[cjUZh*>(1\g:9T76W.GLORK_WOI^6rJuI+_oN7YGiFQqf<,u2EbFa*?@#1J*/oh7HLtn,d2FiT?uU"\[+*iNEcO3am& - 3!)_5\$-04)Ya;/8q@s*]EOWm4Nrqbq=h-1 - =-C$YL,#P$076T4k8.;5\9Tqt'^>,k80WGj=k[VX>sDE[U81TIAK^BP2iX?0jq68M_&DVMC - (6h00TFbfAA^V@Scc"a5-h)[g4/(3$UHd2?2k2k\Bq&NC9=I?o*c#'GhBDC;,hs&FjO>W)a - XC&`Vp/$GN(LFRgSaf9@6q$66cerkc*8FGq>e-U+2;=!'.pfl5dJ0*dIf$88bA6V94\T[kJ - ).^%ll0lUTfo(,n*b165`\gU:tRVYcL=;56Tp&# - 0$.L_iHsVq%H:b(Q&f-"s85Tr#W*)#:jq-oJ$&q-RUUC#ms-e##jGG3#%Ghf?gm7f'Z0t>oD;3Y"BH&mJe/cfih*!e[ - g8[^_Q]R<%gF0i7nk3bRmGG[np6ahjeK3]&B:m`LnJ>P[dFLH]M3]V)=t5c0V94IW$E#Xlc - 5bY/=2Tb%e-R`K(]Z#%)*OJ%4tR,ZrAG>99ff8'i&>oZt[+0Y%GqIWLi7%[;4AhGIG,-n$[*&f[s<^ - cdoOg>WYM*Kt]= - V]fB'PD?QBnD]O+hKMda5-UV#?qcq&eu1FRIr;[ZP\?G^+JC`fJ`P=&8_6D19^66F9^[cr- - P?/QF.)<&bU;:QRF4EB(SQcHb"SDj'X.ofsUJpn@EV@Z?hJSut/8\Lgg+qsCl##OKm8McBl - Uqtk.>=K5=LK1"=qV2?M#H^Eb?Sp3U!6bb?11"miX2W(*;`/##Z,>Xab8Tt_9[T)(stR9#_t!j/0-B*=6Fj - $(&]&T17;S.,>W]ab=VG402E;fY+\pKm9S8;^aqmBD>gY5qVSpU5"eJKGP+@,hEX&lKBoCR - .>o@Ua'GMPP)fi":rBqi9mCX:5:%3.?(HZ14E9s[>_c-4B_>e%$3YhHi?]WGDIDVB`--rE> - .aY/fD6US7/:pt1C,N%""+Peu^p:gllgt/]DeZ*E9XKcVg9$gII6;*"FZrEI?;W1TP:S4f% - [.sFVO&]!I5E'tLq8A+'17Pdnj+cu:G3$`,]&T17;K_GQo>rAP=>f%,j2Z:Lbk(#D)]?f$/ - bS&aks/$k1W,I)LgQ\q - AY1V$^5&<7)b1p?^JDK=q3[le6tJDVWm!\Ja#&?U*oaI/`s)2@lCJR]8N\p4HqcD;1rdj*, - `mGhDKQ;Wa^Mb(Q&f-"s85Tr#W*(qG!VjMtrY@cSRinlsMT[u?Hq5F^M-FUusUDng/>J/K4 - B\mN=6O,l4TP[.L.?='5kP=`Objr99l?@2&sm2n:d'U&>>-RW[??F+6q+mf,eJds'tL\^oBHhp2(OkXKa([B^@=U\&>5%` - $:-SHP^JIJA&s/5XhrN?j#b)n%JII_2_e5"@T9^ZMEY(qsij"XI7W4m'V*+labm<]]ZM3rF - RqMhKuAm\T9(H`_P9sD1r@Zr.]>$_@n=(hd?lt6`jP"KZd!r3UL*W>U7NsAkZU3EWSl;>_& - Zn#qQgY'J(c^<2icLGFAKM_SSXL:.9X'mFehDn5bu9D+\Y5ED&HDr4$]u2/:VPgJdB"0J%/ - --*(j]"R=dcJ,]8A^rORD>57-X;PZhqC'T`1W@TRjW(N*l4fCfLA?"(f-5S48+Pai_Vba94 - 'YAsX=K5H+/n0%*JFHHA-Vp_&Zn#qQgY'ULI[V@Fl/( - GF(Gbl8m"C4%qJG6"U="nT@p^6@H1=A->HiIZ$$A]pASgJdAu03>;]@;/5K9-$*;XDn'eW` - @7/ZOmc]_Oi[e8P)Lj*Aj4]Z@!sp.d#mUe07nue,]XU#WFhjnmp\pLk/GcW9W_7#(qL'c'$ - fUqtga;aYF>&=)$6efo@(7<1P(5!jGWaJY`E#^f'7sQ3p:mlAKd60M\F=.b+,ZVG3O,Ik0# - ?O)sF*7;YG49;PB]._u82PURj4k/E5p=kZa-;Q1$l$@IauX?lWf7R6b3Vdq#U.a+=;Wm[V1 - $YkeR=mF(j,DDVX0O]QP$S:TfWHt1qNfFm[YLS3(i?9?fe@0W*q!Pc_aN]q=NHcZJ99g/m. - c:@Zj(7Imq)1)?]=:Tq:)H?jcB2^lKF.oiSpgnop1.W - s./I/3>Ep0!]Z1t&ilfOrUn - e:n)(1T=+u4%apBU6Dul7S-a6QXC.t6`SN9^u;l0tG&fA$M0(h2>eh$W$Tg%'UnB5)eYZ.$ - uV1nc9l8RUJPM'TZ5Ok4%DdI/`Zd'6!*BSG?(2:(?\o-=bC'Rb0r5TMCp_E\cD.mVHUe-b\ - :AXV=GMbQ5r`l;5.L[k.:11&O$aHJ# - V8tfD/#CsDk:qFV+R#qm'H0;]bCCHg6=!_K%`Mc=mGkVl]'BZbimfj0==?7[FD<_[o,:)'G - Mgd2F_.b@RTQu(!)t0HX^HYKZ].PY#qr\\eMOP'e32Pp%;=4QVrC2apBU6Dul7S-a6QXC64 - RCR@+q8S1o?cE5$J'C=Pqd67XQ:q-3[\YJ5b"_QkpG/6-;!Bc0'[ZuGp8lIF)EZRh;mX]r: - &Q"gk)VKU="Q?r>q@GqY-*^4tMhVS&&nKYG4PI8n]kKZs!SsPe1K\G'-;P]+f!V>L#=7>Xl - If3GFnHOX)baC7m\oc&^1FI<@B&o:cISk6.WilIsPnR7LhuYH0:11':"DQGg)0M%&042FhT - 0@6GP.KX]Pq#epDhYbQg9tikD$6.SZaR6JB[K/VI7m4+JWE_O'OS.VM4F.te#6+giX82[m8Y`'5p@Ks*$$%M.o$jX;e-_6Y5;$R^2fIQKDSk5cS_=Q)D_3gT,5%g6'DR54"&p$7bkPRhnJalU^4/%)Ksh7Mm=LN#`Y9KGoD(8dpJH?!!,9s$B*Z#V_?/;\NKaKA*_,=jqQ@cq\T[ - !pKW`1G+Y>&?9GTkiD@IW3kdOJ3!Wr%_l0g_jV;&X]Y_?tfs7G/97j"_#qQg1!L>2_YZ,#!&4[rP7NI+mqssUHSiqG1'M2R - WL+mi>>\T2PgY5XGB3ad-Q7B5L'Sn@J\"&FpEK_Jor)'s9E_:\)H:f\c5*I?i(+ue9oB&Y^ - MoFA!pu."lk\-g$-l,ai<.BCIlC/B2o&T?7p6JMu,LgYsZ5NVG=9Vj5A;P9WW`QBAb^*ZrE - WSl;>_&Zn#qQgY/=SP7U5j_$0JbM+EH*^^L%!m3U]-L>042H&Dr6Fh3?TGpA^8C:2f>k,#" - t4a>On,a9e'/C,ht.`hnFNgVP[%T6>`W?j2Sa]N-at[7_sY(E,b<@7>pTjV-G./QBp%S>.8B$C'kOs7-UFjSJQ8eCms*>,Ba285n$_AQ/54=AbHqV/G/&R - :Yh=?+O!%OXpV>#3O'nMcrBpVG3h[U/\-YK36g'[jC;(%[H\od2R\7S$);Guu?]ij'"?ORO4R[/ - ?snm/hK8Q9PeNfG[R+oB+uD;2Lq[RU&n - ]1P$mtI5<#RG,$^-,,)`5gP\BS3-nUg(n?-'/\od0lET0BkT4M._Z:U6,TqS10VT;ndk007bkKaP6c.ojN)>?Vfg9hG33[A - -rb1Eh(4$#D\CY%jnOX$SaB]>>Hbk;*b$E[OA^3B%;W&d:468i]7FR@d>J\QL(ll#K8LD7J - ujr5Mf&fqjMLkn$0i'?bf]a"ub`;Z`QgU?qRq2*p.>0+a<]2ke&)*.)B"dUVcYZ/CA=K7n, - ;LsZ<*ZeX_7Ld@G=B`"CcX*YQXeA+;g=b0HhS#BeQ-!.ombPKVY$<.MR>c8IDVVa0_#eCfl - fQH](G&ZBZZ`;9IQi#GJE<1X6N6oY7un]c$HQnphVR,_,E - hIb3b!eUc^l.5AdnPK))uT.W;]t'=g?RMLA+*%af(]!-^fC"6EZR-[r8mh\_5]jeu`.8Fd] - $irqJi[@>&(,L9X]XZ=HO9cl'TF+Vd1jrd;bH*W>m0s7Y2cZ[MXE5[\Z/o!2iMZL86s##hE - p4ad%/^V>81D3FpUW:ATLCBk7bOEUFmicLoBEX@6gCTaJ/ - ,\$DdNusuSF(U=G/Q1HJS2G)JE"+@6Au1Y<:EJMbY-+pg*^.[4$O>*/:J]=(gUBtK33dJ`` - i4m5e?3)HEOWm)`/ru8A"&mV]=YZgcXm#^.WKHJSN:m+m`Y(6s":`_3P\PS"I9D)!)&Rj== - Q"QaJas,-B!2SbhU)7@o*N.48%pkn'Iaqa,V/Z2/;d>GMe8R3"[--3tR_#6D6`".TNKJZ!t - \"q=9C@Ck2Wk`;XNCiPUGF7>jd:1OoE%5Q:Ff]mB?T[r+p!K:GKns".*B6tUrKrV,3-4Vh\ - US.Sb!\T6fQC##R[Rt_@k8\c^m9N:T?oT7sfK*r;?04eG@;O_/t>E!g - Y;`YZ/CA=K7n,;Lp/SHhONDG>JDt^nsQ`t - Dc5#JLh98;QUgpA=Q,uG2.=K#$RPEShr/Uiu)N>mf0'q2@+K!i"oE]Y^5eZ)WE(-jKJ`^`X - 3o'G$cQ6"uKkkN\hP:M[7G_ZbLL(>@iCXt$u4$*ZP#P,pr5EKA<@).hr(DDWU!*[5>3+g"j]9MA-4"q?gO:]H'8R2O3/eSEa;;5 - o)Q*&qnfAV]pBdmrdtIer:V;9)3kYZ*W6V#i9b;WS%I$8f]ggUBVb^SV^(o?TOKr`n"Eo&n - >KqXeJ.q[Jjk*fV'qqY^/qfZp?\N/;,*)k!p+#G"Ir@Udf`9bja\S:oCOP!.L0F__.>qGjJ - XR&*5%QC@__VB^+>.^u&LLO]@&Q_fE_99uMU5Uq[-/Rk\InV7-#Eqo-4Z,]B^YZ*W6V#i9b - ;WS%I$FE5u:f+cImF32+Un^81$B2a7]Qis5V-d2[(+jjk_?FX8%@4",N>jgB0O\Zb(+rk53 - (p8.,Y[f&Gl%%]qrCURg:)"HZ;DgG*BSFDC85-)e5ndOZIIqg'0E7jq-1=GAZW`$ffX\o^MO-6cH@&ZDd":#0m))EUXhRokK7e5`g5A\uVf<8P>Wf7Fnh;-mcf&2W]Y$ANYR - $6X.0EGR\b!M+>qbKlOKS>*lj[ia"6U?2!nOL]$H$OZaAK:&Dod#$4IU;P_HVt\@E[5uLR^ - :KX4?YimIJVRDdSa$FdF$A&[\Lk@\Nk]Ie0eJ_baG7$G#N,*Wg26$aHQal.OVH"^]di?SA8 - $RV?mY>,\*NGV+N0u%O#`B[VacY)`P&R>EBa%rr0@7[`!55f.^aV&32tKV?0Cb$ZXAm#7`S - +ekGkb^'Y`$:S0gVc<3Hp`JYPML(.XbAQ5%]KiTMDSs5P^aN-r:-HVZd]6sGFe##k:o]_Rl - 9qORqp5_H;:h3W=b*FXVcThGcP%BVVC@[]MMmmW^?F+66-kH?(O":kOgiO,],.3=4g!O - R<'TB_C/kF&YeLhnHcJ>>,:4-dS;CPAr#k21VOG#qQg1!L>2_YZ.7taEWXP?2j]d0554qV* - [B&X]r8/Rl1ET#:idnnRr.4#F;4\;Q3^!g4BJ97*Y6GN4Z]K)aRN->Uc\h=0Gp:2b74^0d? - c)$kR&-o1@]fPhBOPt3FeudQ-?QTjl+gtb+q"XBSMi5cNJ,Un5%>u# - UDIHs.J,]B;kKagX<2uaEJ:KY$k1$A/LTq7D1UHrNl]Y3Ec'pYUP*4mBRN0e%oB+T(=&818 - X=;>Qo]ah;p$1*%mbK*H$F-)W]QpjQBt7j#)@8Q1[r.aUZd-kA&t7&Ng%1O_>oGkP["O:l. - TWWAY"Dbsfc&V5:#AVoO]0.:R145(!"iP:'.\LPI['OkdaoD>ZWuq2\F3j, - aqXHhZsh4I!/oj9&&?'3HaB!\@>H@&ZD(q"jjTfs>>6PUSbAoOu[Ka`lWjQZ8Of2fE"HUs5 - Af-SdQ.r-0u+4EKYD^V@P;Kl,YWp$]ZqDV)$30dBRuTgFG?(+`RnABCiOWtHKtQ;*+P@\57 - Wl!V!M<'Ga,FQ15q"Uc*uf[u9oH,kpc]63Gj^OL`;>?`I&VfV%H.JWnA=Q8B$n(bI[G4!ui - './f\Empm[M6-[NKpjl7P5gl=3TRps1M.'C,uQ48=]5(jq=u$nG`ZV!Y[PG*%MP[RfW\eB( - +hRhkWjN7e>Q6)NfI2D>Z"=Z;^%`Qp?^HY99t\=P0K-Veui:?AT.MEo?X4ep?gW/mbN6GUubKF]"qXp%":[Zc6(V'Y"Y?sNUn<$p!\Qojl,q!cV.p?fJ:n`%HA&,Z1unLj`hJ>LBp//<+)Q7=8d; - uhH?J>E;IF9sKu:11&O$aq;?6 - d/"I:MbYZ/CA=K7n,;?6cD!gX/ncm>nq3J"".0#1BH"I9ApckEW_!.Z\QV90)q'lX2>.OVH - "!.^YkV#gX=#qT(O@&\YaYZ*W6V#gYh"=t8fTM&[lEWSl;>_&Zn#qQekTI4-H!!$:+99g/m - .c:@ZWgpk&!<@G_f@RLD+@CkliE[Z.!/LiF.OVH"^]di?SA8#'z9H707SA8#'( - LX4_!_W[s!!!!QEF>bd!_W]%J>LBp//8-b!!'gQJYgKq//<+)Q7=8d;ucmu!!!Z;Q7=8d<5 - 8Z>Wgpk&!<<*"!)+A7Wgpk&!>f.CEWSl;z0QCL"EWSl;>_&Zn#qQek!!!#7`.=c-#qQg1!L - >2_YZ(T&!!!!4#F6heYZ/CA=K7n,;?6at!!#\4=K7n,;?7SAWH&&5"TSN&!&/D#WH&&5"^H - SSapBU6z^r1f#apBU6Dul7S-a6PMz'*jgQ-a6Rc"^%dp^et15!!!!m**B52^et1L@&\/J9* - G:q!!"]m@&\/J9*JRNV90)q'`\46!5QO(V90)q'lX2>.OVH"z!##U'.OVH"^]di?SA8#'z9 - H707SA8#'(LX4_!_W[s!!!!QEF>bd!_W]%J>LBp//8-b!!'gQJYgKq//<+)Q7=8d;ucmu!! - !Z;Q7=8d<58Z>Wgpk&!<<*"!)+A7Wgpk&!>f.CEWSl;z0QCL"EWSl;>_&Zn#qQek!!!#7`. - =c-#qQg1!L>2_YZ(T&!!!!4#F6heYZ/CA=K7n,;?6at!!#\4=K7n,;?7SAWH&&5"TSN&!&/ - D#WH&&5"^HSSapBU6!!$!8f@Tchl-kZQNl-S\Z`p[l>n0\nW2M+?:X?.I[n`JT[:@7;#7hm - :>nPF&YZ*W6V#i9b;WS%I$31'`&/#UrjiS;S(RMo:rjtmo2C2"^ba+!%^\sIBJNtsLio2"B - HK=&D0miW\mbPM,XBF#rbUi/?hR$u1mi$c6J>LBp//<+)Q7=8d;ufUXf\"h4B?o/agJ=4mA - a.X>QS2]@8kS)KP]Zj$r*3N5kKK>MCY#Qr)`G?UpPsGd9(M&bPAGid;G@:7&RE"lD:u4+;l - - @oU'V8<*B\RccC?oDp*E4h*.@_XrUf=fn*6,L9\om*) - am9#\g=ihk"\T$=#F6heYZ/CA=K7n,;?8I/gt^\<#Jaq`B%O4nk?TDJ#(rUPZY%)1C!`N(V - OqBo!L@K[>e>/2h5d:gEHcV>C^l[;N"7I>:11&O$aE_(F\dqWcV3]SiW8\8c#E^=9,\LNfS8JYf6]Ub - )2]Pq,NE/s]8EG3rE.o)%mjo<) - %FYgdc^PbgQlqNU6=b*MG9OWuCd_GYsTJYaQ:%4i5[1`'8/(*kRf:ggPe[XPq0I]Xh9M@!dEp8\oOJP6F.PO&j<(*p@V':`X!_^e,=B\m+O6NH3 - PB`G9`9Z$YF6Ch#gm=NkF*`1[o<)%FYgdc^Pbf!>:7OkWVdmc-N30ooJan;f,'j\L'gXYm= - DHFJq=EdfBESfYeZ)V:6UQ-cai_JS$\cpQ=gM`1Y#,4-WTc)o9-oouPq#de&($4N0,RoGV# - oZZ91AIk==So90!NhVbO+&nbEXUPeYDs3cTf0io7hI?iZK<=e]4&`B?rbenmo`T.SUmbC-# - &5;NnlnZ;3*FY?"Q0CtW%%DQu,(9*N[XO6RF'=-H1U1KW)4f$+;1BK=0LK - 'Pq-?R@X+4dKfaMHo^(8;8"^#M#@& - ^eS"F:09MWcq%"^#M#@&^eS"F:09MWcq%"^#M#@&^eS"F:09MWc - q%"^#M#@&^eS"F:09MWcq%4*N;>4 - IgW#'OkN\/mc1]cE8c?+\1?Ct:_M - +1$:F>8#Xf^u\3HJ6(>e+Fh(=IVOF&7%U/;t3dg_l_hSbf?2Z6*/rn_ - "aM1>7LCPVSr^MkcV-KVQg?d:d&%Tr&gU>?@meeC;//?QJ@&XF+\`hI>,9e>QpoS,NQ8s$K - UfL6h:n[q.4$A&jfU,)s7n<%(]=3"QhIXlrALTC"6A5csX]p"bJ-!i[00ascHq6eaKWQUK- - ?c:Q7[OO+G/oU`mFntkT0GPM2pKRjaJb8H3pC-P;Nc"r`:8QY68W&K^5rBbSiqE]GOCt[Dd - J`i<39>hN5f5;GThRc`j+%Gf[u`VGENH%/mXpBKB.\27uF7c`f1poOr+T3q)'j8JsK$i9DD - J6rqncd;iI"\+!4;(s+(7WQ7>m,q!W:baAK^$rE6I=&XcXuq[!Q8[r:/IE,b$oZY,OQj7(aM#/[SN>i?k3VI4o]]:g>:6m;ik/gNN;"27h"f&%nac8)[r:0dc'ug\B[3,.$Pk:4 - EcN@jfZB=)("[O&^etcX#*t,hRZ#HB2)$_'p?^I$MA0J=)PuJ\?[a/N*4:RTY@#$c4*GFk! - X5A7R1\FE6\Z"hF`i-(jpbf0A7S>M$!h2m-8f@M1_haq$`75RnQ,'fhO5@Y0n<`(. - >/Rl>7@2FY#QH[C*[EKr(XP5XU?5]jDDa,YB4hGpT-`3tJLR@BZrEa'c+9CZ.Q7Og7>$:7TtLH#ou=P@Hm2R5Sp99U[ePn(tb#5(+RT==U&s^etb4F4#uD - '($m<'Lg#4^]!l\UIUBp-o*2!B[itX6s/Ldq,MnBoiLkC7;YbrV%Tb4]6:=;D[b&kUIG]DD - &L/faT/VO\T0HPOXEqrfs><=,U>p]5s7ju(^qoqXAJDUP<]*F;d(KAaPrL8'4PU&qXfpA(i - XS=oTUe'W`5slCgg>EkDI(c^m;sl)107$k1RH.p&n8bEjaVU[%:']4Lu;8B#[%e]5^c'Vf' - f`f(c[YW5]82(C(jnDM+ip8)otefR,*PYd3/Q5U>Id@io4"Zo8B3HM'N9#Ld(Pu"AWV(Q)e - .'9ft5($2%Uji:=0bt<:(M@5f_ueu`/!lI8\2P.Gf%8h37UYZ+#oJYaQHk - +VrN4`]USTgFHt)B5K+W(h)EXS`E^&e5j=9T9D.@3V"0]V%ZL'$>BWpkZ^$e[*c@^qfg>lR - U_VCgVW0Q8%ch)O=!UEkQel'^su=_hZ33+otfG,37%?Hi*O(&j!(VV39#iAa%S&+MWcq%: - S(PS*R@]rG3pdTd9g>`D;2L!]>@OW>O&1dVfLtGXa%UL1he/H>r=/j/1aKJa2g'bWDb0AVj - ?>.3dpjH2>T`Gq'($k6suu$OuI=9J,fIK<+jace=8O?;SO%oJ"Y6!/#eX(a\@q0-]iiTe0s - 86_hXtHKi5]a&\SC7MBJ@GFtM8!gUhF`_J0Ji1,ZB\I - /,mMnqd.8R@+rifJ40P%hGo[Q75b0=gM]\4*DT!A4ZI_h7Igq7`;WB`JTU=)00>)GH/Tpm[jm69O=gR7@!<]2mR:9fA2f[iqhS"9B^Qr - *2B[M?\!62%'[FC<`8$_lOe60P8rDp%(2/_3:\4jGRjmqNVQe^nWq>W/DpkFQjP$+dGr#3AhgbYh - j(HJO'OKqS?naEOdY,:NG0#BWIMA"MQAXl`YZ(bQ>Vp2pAB;U^cTN-[=^,+&3HHN"/hUuKD - r/-0]65e'P`3"beREn+/;9ai+SHlm.p&mdGk#6oj_m][NupT`5+fsE;AUrjaOjVsnJqi>#; - 7a6F9dL2*Ze(2nP2hS`6_G[6maf[>ol=897?Ku(#u@&mFnu>o^pA[!nk8B%NQbeb0gP->K4 - Mo[+*a\=I(tf.TNLU@`=4k0>I(=HW!bie#-!NDr5GBA!='n7MA-kC'rjGo*m^taUO6b-.;c - 0qXNUdgUD)S>-s+aokJO0^O?!FYsK4!D;;Y+Xf^u^4aT_:kq;&8`'g>NLCYIRG7P&hMj.ja - KV'k&$k-ZoKVi>(QIi9FbLcmLkc%LY)Dl-Cd`?q>!sFK)s/`F]Oohn/nrH>jVG/!fCe,%+l - -cC3Q;T"qc$0L.#F:8226^$_d9O%lWFVZ"Y[Bb_JO/2-I>+$c+=$7_)`Ed4*_U:ocHbcFNZ - C3IV+i]l,eh:.JEFRoqh/26AZ&)Zl?)\hf6fn:DpJ^ - CM0OY$j.<71"mV2nWp&+XW_G0.5O^lLr-1$[5^3fTl`f(d(MA.3UN/39tr00l_WB^=MK9MK - 4FW)lQUYEG,1S`k+p"*Q0's^pkfed2SjCIlQnfkPeJ\N'dHoQ8,`;[2]fcp@62qcd[q=CR[ - jiWi]^tJVWksK<=>`r$`:;(`3:<&bcWUT#mQc.e'+4RK$5OEbX&n\FI$(8r7!$bMV - :sSS;!T:KSNE1C_7Op[ZM^k)[VT*dKk\WDL?3D:@WnYFT4[Q%a]^1SZ_RKrpS\!?.LcP5p" - $6Le;fbC?8Ne@mQ6[Q"s8G1 - AV\BB%MWcq%#_h=.*M1CkI,6^=BZpoHtlSJA(c?39YiP;Pmjft - -K,h)Gd-8.P,TjCWE*&#_G0.5Ob9Spkf/RC&JIH^//30N>,U;7N0e3HO&jH - WP#r7A5sB;Q'65Pq/3.L[kBAo2">24Zkj*N>U,BT07NJTpnLUQ7ATFkih5NjiRn=S0LN6QD - pdABrPufDSd>:GCF6:!;,R,9=X)+ldfYFeGfFDKg0_<^]E,Zjo?qId;*-h#bnkCb>Nb9I"[ - !5,'<(t7<89)%:n_&XfX1_&U/GC29I_hV;Ah.O4oW%[C(\5MF&ab,s+r5SUUP68ZQgb[V`l - 5Nu^T\$r:k9jQM^==POVR> - 6A7WMC+3]B!LAW,26^$_d9O%iWT;rbC*hAtIG5`Ug_/q_CZHN;C(XE& - aYmXV9YJbLYC%U>IPl"dS(A6\Z!]/u*+-U5[RjAd3A]RJcmP$S7f?4?'Usl;NiCgS,!XlL2Lf0&4ND5Q)k0Z_C: - 7;Qj?9,2.AR< - /(\I#qWQ5;IQJHmFoGE;jSA%cr - *)Wr(-cD/_cV9rVH9WDmDU-_GV]33G[1siPos$bXqcQcY/V:I4;RGl-aV+DqVFmE;LMS9dM - lV3h$f9LZI$^i%2o2c@D>I2,>IB!]*BW9)^0D_M3I'uCt%YkQ::/">l - Dr1i9;C0r*B?qXaY4MA\(2h'(Q:c;bC=T?+\Mes:q.J[[^O"D.;kg,8TL"2T7ujOW%[XK:; - A$SHQAQfRMhWc?0JJSl`nnCUj_osd# - Mu-.T`cX&["r59D.rLUqVVRNj<6>&mp_YbHVu$;C0pd%$\?hcCI$Egka?/Fl:&de.&D"TgO - Sjb&`f8J;"Q&*;&4J.XDV_nRm\n9b'.8G`<7XqR'.-D7:a^8;DV_lAg&A\m/6-_] - iSibF?+4tB/JE#q5_0!"4"CY,/=$'"Y1 - aHM'!>&N99"mhCso,9jFV1!Y.\`/3mrh_N@G2b(8r7!$b;V4K_jMHYbHV3kab?.OV9YPh:Ul*6A]dR3X=+dfe?WZ/;YQ$Jm,#E[\3e.dPn4iP>-D6q3Fs!Z - >^4u0Be2&,.h4+1:8uaBc^$4k0&2'+/=$(gW7n=W[k>#@W6`cq5cu+H)]P!0SICgAkV]SD" - OUI2A?!V0*M\o4'GMgB6cZl)[7A5O6(+WFE\k - c;EpqNZ&5RoXDRi*\EM\`_0[nfOcOALI<@&\0=V4R1"G':_S(sPsZA=Mp0.2 - IqOX!Ao:7WZVWi%DP<(*p@V':`XU*3/mGO?HYN&P\3aPTh+G3ssld]H`_bW`XbokNcB7.RS - ,e1?kG2Che-PdI$>71i0-?I.+,S3;4"\3cH32>PDug>pa8=KnIB0!o<>6BUFK(kJMUY*0iF - lD(B?Z4_&nBU27r`CXo/4?S9IFE_p^:nW?/9p!7IB[EDJT0CBS?#kIl,'j\L'gXYm%9_uhl - dr+IgqS>Gre?k#D_A\frr)_,p=W``G#=1qq!k,d_G&3Pa[$_\+`H5MdX!AY74bioq=<$`U+ - /*>g^pVb4\JKm+&g\S]T\i``!L>4G:6sRs2Jh"ggka?/[:-t-e.&D"Z"( - hQ7='<-P<6"m%?\76q3OkU*g7!`("$f)Wq="\NoQbV"F!D>lR)H\J@B - J(4/e>T;oC)PMSs/?QXbF:Gon5^MK*&@E$YHKUeaMj&R9<6=e/G8)GPLN(7]Y(%_p@u'.&L8n=Y:0LJoR*:)W9!7d4TgR=87o_@o=YEc_XoRKL\pW - MU#tmoaC"*(po&Rn[?*%'Q@&\rg"%u&obsb!c8gn#Y\8W=\7urtHM>R&9;`cN-NY8b@2Jq/ - =X3K-Fp$q(_e4*tDnA9u*Q9&j70]>Ki1hgEP^'J+?921+F&VCM[bu1H8T.[dA8sLmJhhpF7Gq>Y.iPL.sJ]=l2QAXl`YZ(bQ>dS(A^]4;FE#HFgn - r(^d\@T7L48\Bt1P$=cc-:r,SiqGoQS52j/PXJf8L%2[))Z/nKV"&i&PI7gF;/Vg:n^3FT# - 3H,>V%`9EYFg#F!gQ!R'[PZ>#anNBjdp'l_NC7^An1ZC*Q3Se8u - -$oB+!`J,hU!kgZSqn0SJY/o33Y"Bnp - ?GVO>b$,"q@J>l[$J\'?CR5/=d',)[68s<&/>pKG'/WS-)`mT - Ksb^JW`foadS(ALCYK(iJ"U4#5SQiW&G4!ui2r`r\74g8bNZ8ig?5 - -V8$!QVm;5:)WS2bLTCer$ELo!R/6r8[,K*Mof].X4^/[\EK6:N@J4?VE=`eL#$e3d"o9@Z - XBWR?Z/Y[@KS^F`ToK\DI6/2\RoTlAu-_AhdmZ(q4+)$0:="SEN)<2NE]C?4qnWJFj_919E - :79c&r'buue?U!F@lIDp_r*-'!e>6.NCY#S\[_oD^?c@m;hn=@aW]Us%eG]:=;qj%DkYVpb - -+%@56F`RKH1JUmnNuX2A-UR^F6:\\Zsle%4@rg$Z=qX[Wn%/CPu&X7Mj>kpNk4,\]tLC>) - 9l%cSND$2hN4.nR;qA(;hUo9O-VA%QFchUeu``K_I0@!?3?P - +.g(sdG+B-J\o]_RelIin"41--h7-YKe99i>IXfX0tVq%_CK;C#,>,mL=$[#\7%]ROXN5N\ - s+7%O^0AIeHhFMrW5=1`Q#n=3,kO3kKZ)/k+oFtHqPc-ldh'L<9;8f.8Ai',/:?m"uN.W,31"(L)*,G%P - GBQ'sRGNZC44_80R'Q7]8BY2hf@S2dcBM\[iGZW+G:lB*;]=DI0KT`[#e`q%'BPbf#H[V\\ - )$Sg=?]6:1'(BIX($m%ELUbPLd4'&j4lC+2_J>J.'mJd(]`JPD*mP/b.#n@GWC!`659'G*C - 2g'2pZY(Z[?DY)D"M/^>,2=D`e;RN@//?QJ@&XF+\S08d$1$3HVq.(!bNk7K^Y`n`\<5nI" - X9,re('Vd)0&-33Yd=+V37G$W`=tR]O--`jis8RN"q4:5tbdWkr7@`_=36m,NLD)6(InnN> - l=k7=Dm2=0>fJ*7bT:0L3.>HhZs-[rke&HXR-h*2$%lPesqMiu$N-ZDIQtn%XepjS%ieLJb - Fn$Fr<+]66oJZA"u)>\iC6(m^'C26^$_d9MpAe2ha;FAmb:T0Hti-QsY,>.&)r@hn!gkK]V - 3kZU5:^qbL'=dgQ$h7Hb3Y0m9I:l-aY8b^'6f4aZ5XhS!uSGOO.e+&N6.,q7=5o?TX"X"%,LeG8_!W - D,O(qGbu9#1Dd^rVEqG9aJODWPAE*S)X1=0k846q.7>e=ag2(:m-* - VTh7#;OTVbRu71:S'?Tr$Oc\uSeV?qH7_KT.'J>FH9%4i5[1`)u><@' - C>0:b7QQ@7;olIDpKQ+1el!Z@;ZKn]@!qN?CR)3+:Vh4+79:b(Vijq=O$5(ITc$FR.L0173I^lBS9FkG:hqMD^;UqF\jiX!VA5 - #WBgEJR24$1&!7ujC8G`Nn/+t"GBd9XJ6H2$a_j2[4a;Pf8LY,tp;Nd^pHhbr@EGse-*3\< - @4jJZ:lmdT2Qf<8OWG1#^3\">m7:3I5[`ejYVs+Xdb;l37Qe>ZBC8sRhQQMd.i1#rE1nF2P - 8<=ebb)cEo1p;I)+7J%L#.Y;=d)RWNGOTM;C;5d;7acjNM]=YCCI&%%\/1hbjc]F6?:h82K%:uW\>M:+-q,LdmF$tisXQO*^'5_+-RAggt\D:l\ZE-[VacBq!d5u?Tt[;UIPhlS#B5]9#a>V*NR\b<6 - WS1aD!<9GG9Va.RhIB,mDl;ap]ng8r/FbCtc7qgA>FMi5*9AUjXO4/`b-ZZkY))=Us4r4AR<=utFrqhH]+%k2c]IYr9Ml?XSqsUQQ(?+H,hnFN>l - IN:i=V<,2-qK?2-NG\4d;*-h#bnkCh,4RJhnO*^YbC'GcCI&+PEV1CpQ,?*GhgE)-ic>OccZhk`n)FhFj1fak>X3^f - '8ZcCaXea2c0<8`'Jp/N&6!gU<@q;*q*bjQl-$fle`;R\\A$;]u)[8@p\!"I=r/26^$_d9Q - `3If1+Q;VP(UZ*CS*k05DUW0#4JP"MWISMJr - cg6S3*ASGFcC[569E[fP0'T*\[/p[;,@Y--=#A8E^RX@rb?DOD_JH@2pSs6dp):>piG3RFD - ]e96^qsX:Jhj:nR9u0_k^H@qapYUHN50%p,_M&0M12,@HV6ZR`9A-U^7BQ3^+L"g5YCWMoL - utEZ925C@2=$8C4+@%j-OJNO5%SMFlf[FYoff'1F6Cg`mK38iZpq:L'M'Hik0/rJaV?fm`" - 3*,pI;C:']-NM7ns]m^YKSU>-pYP%Qen&'UTMjKnP*^GB\7^R:M+SBDf#Nl-cC`ld(OD[;/ - !QoLM`<7%nNl2&H`4+$Lt5G3@/A1Rk=5/4ATGo]X+tK.nW]W@.SfiRCe:1D;)F - 8lfR=Vn6KV:Kq+C(7ZA>!'K$boMWd"'#cTo_/&]B - E:i@S9TBa:T3ub_?OBW1)g_`JC>VG/)*\h,WZa97U#7jq&%"@a+"lo4JU*0J>OYT+MrbR6. - Po6f*7'D0<,)GBu@]>eC,UDI!V+X2ck0BMZA]b]B"rK::gl*+,*$$&\*'*TVfeXi`U*N+k/ - 68j>n0$oL\T>F,Um$n%5a7.jlK[Y,Ne3gmh9;9Cao>YQAe"QS%N[`'#)^n6#>GH_AM7E),g - tu?k-f$TWmpIf_al1j7073TNC9kM!\#^SduB=BHF/9)1`TJi@W - )>eG=/h;*MPlIBF;baLD)n`%M_:/5$&DEW+*&G_q^I/"hdnUQ,idLL8*7(8r7!!pUC' - '%(5[D@CHM-R9b67Yb3&m;(X1,S4h(Lm?rqsZh&)lL+]^#X77#?n_]mBA:qXs/%:7TtKGOI - crr3J\A#'K4\q=+j#C=R(S\8durD7XoXC27Us@Ddhh2fG/C"U.OfoGUg]JnQd@<)#&rrd=" - _o&IcOk?TD7!!!H191AIk==So90!J=JLlRMPZ=Sslkt7J9S>^Ko&WF%_,ldoF]`LhqoGUg] - JnQd@<;!bIodZ*Er;#sYmbN6ep?`LL4F6MT60HOa=l+(s=gOu+VL\dK!+;82;A$SHQAQfR$ - S5:@*#osH\Ra6j<ch=kV]SD"OUI^WTqm;B29;Zbagh>d@s'&Pq)IO2rCiTBj,9&XI503^q72Y!!'A8//? - QJ@&XF+\\M+nUI'YAd]?@]AnGWk04*_qlR)H\J@BJ-Mg2 - )#jU`JYO6_bY@:c>@E8*>fX7]8HXh!;$IH("$f)W - FrRs4Pj7'D0<,)G@_9*G:q!'i:j("$r-Wq//8-b!!!/j-be?k/nV5q?J - Omp#17i?5Bt6GnktB)Y6*99*]KWL0&^_-Lctl5"TSN&zTIR3$na)*n:Z,M3zzzzzzzzzzzz - zzzz!!'gALl.-Si,Ji2Q(X2s]T4!3z!!)5KFXp70CUY-hccCZQ"8tT4+#a0"z!73*u1%Ab/ - \o:_8D.UWcVZ;N&z!!!"t_lFUQ4Y6!2X.Qge7+M;>6ko\%z!*$dEqc3(@Vn(_%<<*"!z:^M - cjnB[nIgq?L)qT,,nVj-!WuTCG*q!!#sVr94Ggk=]jX9\Yu"AD - hkE!<<*"?n,u95/VerU=&V?>]TMs'A`s*!5KJ)+aM\jbM;PWgEG_'@*];=LCjLd!!"@gTtNCqO&\$-V$m";a!L4=MuWk< - &JG"edTBT=2]kb,i@GLe`mG!!"]eJj2[4m'20>\4+lO*P!=I+H6&W"9>CD_u"?W=Q+-H.m5HNT0C9\Vu - Qet!2+DnW]0[GMq0\_V^%L*"[L+5^[ea5Vkr0e2-S=grKqd=zXK5TOK_st%lQIM*X-^%W%0 - /HMJB&,#0eGW`oCh-c;ucmu!3d+O)*;T[>4,l;XbVjFp[#DE@2K!U+X&#VH.<5hpD+c[eDP - J3TCFrlz`:;o^:\XR+gda+\Lr5qhYqbd]O!aom/g8''ViT`PrKa11o]isI`Np)fO!ao-!!" - jtG1VZ-#;c4tpqJ]jqM4W*ScAcTGX(^=g35FKRu'=Lr:""K`tJFQ!!$1K0d19%hcL+[R1/B - Fq!e8ehM2dF+GEb7me*ql_YlBeO"=L[JG8R:!!!"L[L)R:*RGg"/LZf(*UJh.]YjW.!WYV" - +.p'onMp9TLMem$g,UVq.nTmD!!#8:[r4CLCmGE?\_Y)hkW%Eh'`^M^;c(D3>BfKo%Gdg]V - kpS(#4OgVzcjfkVl>J - pEJTX3R!;ucmu!3"&3*S7e3Gk@=d?'_$GI@p8="X$I%R#n[to*$WPHkE9(cCX[fI:9es%IM:(><\6JOqsXXe!!#:a6q51T*U:LijJ0o - r20ds+a7"9q@0!SKQd.bZf@>HLjfcjd)mqCY-D'rD"onW'5aK4SI;j\:jkRm@\r;o.h'V;@ - #mlI$%l+.]-TX;+e^>\tYBmlo@#l'%+$t5pA,lT0!+[8@gjFYh\CA]tZ**QQ"n=dt!9fgu% - t-nX=i^JMf5#\SY^bU(QM3ZL!!!!aQ=KAYbbV%DH?WP=o\^aB_8,q-"/%S^A)]GL4,r^^<6 - _[8GBk9CzA4;;=/RNmeqcHDHR5TMPYKnTQLDg0knDp:h(i*dPQaXW7g>OIKisYnf!._.D>[ - 5.AZ*)kP7/BZ^:.l+Bgdk&SO/`3$,!%2sPOf[iKW93mNSb?jO#QA*!!!#7PbFB\pcL!7SpE04`IH&+3M7f#b`k - 2gHKdzJFjZeaXc]gE??W@SIFqoo%^5A=K2RUFMu2;Dg/hGX!:q<0OC8NTAY.M!<<*"!5;2p - 6K7>\41L?RXoCUmf>=XjekmS6GLidKkgz1*n,,HL+HEm\?X1 - 'e>3]X-Oe5$]X.on,_I(T5QF2-19Ap*);&HH%.qdl/F19BB%:I,T*O$43Zg3bnn$R56+0i?nbhFo - 3c6=bi6ehIChPQIMoru'EA+5!!!SHod`hM\$tB]NlmfY1Nga->I460d)U+^B)r"Tj8Ho?k+lkLYHf\uEdP?EiA' - f-z!'ha?[p@rVTZYFABt;0-eVVZ"8DY]q!6X6co4cmP"'-380m3;"?!<<*"!'i.@K>D!D!U_0_A8n` - ;L\BP]NK*+L7K=QkM"#*P%Hi%[>0?df6In1=2]-e3&-)\1!!#WQOH;GGqG-J=.thG(n!/\% - hMdGFWr`_A()jU:ojY[RbILt>#`8MmI7["L;ucmu!9f4%kd\`a]5f!)+XquC!YZsFA,)pDV - u(RB`r0@4;Y&/pmI>0&][$rczKaA9JZ5KouqcF4tc/;nYp[#C*q)O3(W<'g7_s`$CRcVS9= - P@i25`jJhrnB:[17%[6!<<*"!2'ZB_4SbM4*)K`+_fE/X+U;(F2=ImGb6!!X7Q1!^mFkD0g - Ch8A]!Y*T-Ni2('"=7!;&t3a7)rYf5VmV+mIG(ElhM*j1[^LGb6*$/+W>[qh;@=YeH&&`b* - /DYg=fT-O9\P!!%Q7"T!n6(uW>\oS$fad=_]'m.S$b#1Ieu,ES"KGicg&C#c[A5P(#@ArO- - =8FU9KV[3>'!!%P3nFm;.eo*G?0c6'V`X[,OHLME1XT9m`)A7>2j2UTfCUg#%87i_o^aUr[ - N;&_Az?rZ!t$Q@f9-23N=,*5)R*OiRc#kSYhIBikOnDp:(_kI7#*6H,T]`/mTp](9o!6CVA - GniBauJl@8S9/=OcOrbM!R.KBGK!'gm0?O%)*NH\>ZQ9dYS2` - [LUrA&otklXV8KS7:u2kD[j^TXQs'(2YG+t=fA3;J'>];P]0!!!$!%ptr)R.XOUYo19)pU2 - Ror'GY#7"?XKDhGK9^4]W!fIj!rr<$!"]@/Wgiof=!qlKEo8j)VU5VQK>IGAYPZ?2 - UPIb7eOaRHC^:K,jF(V@zBE056Ih,o4IJegJQjKNHmr6&6gtRmW%e&usLa+&dn_^s^SQDGf - m^%fJM1d:E.5l&UiR,\Tm)E&oaN,4TB,M7)cp.0h8 - M>if#PqXVkC2,-MJ(5AS^Gi)][&>5zNBp$1A/rR:/;L0gmd9D=NSh$WlfG%*h^9`tnNPdEI - u+Gl^4,mWoBI!6VH;YXZ=#oJ3sGZb!!&)b)+Q8_G_#[I%T,=d\h1C\]D'BtgTOrg,UME3@& - ">NQf*#Tc.:,U-B3/UZEWA<1*C=EXlFD+AH2]1!!%$^UFGA+-b,6'&>Q):eac/8pDht0o=; - >;@KM!g4<4NZG^CEp;O;f$<'3/7SNZ=Y)b@k6CB2&HDe2!'jU*3H,of - 1THWTTA'C>b3f-+Xt2ko\Q-??_$a*S.lRVY^WY1]F*SFc2mtG!!)4&^\>Qo%E:.@#ZH%l>[fK - uKAG=rS"7kFhLFkFjepFrp]c6EX9j65NfN^V)g(i*b7dB.[r/pa_Z%o@$!W2X>D&>g&]TbK - \M<;X3:@Luz+A37])DuB%480=0U>>IGZl_$e0A!rk17o?MODI - #`T+N`bk[be - GmX)`Na!4%bT+^7m9I-:)^AT^4&WAPs%1\F71$An#T]9,U"=npO*q[!!!!Ab@*(AL_4SJ%3 - c(0Qqj_6(@Tt'=UU:t!rr<$!9f^^7m-=bPk!4fG6%u$A5)Ge9Ddkz!%;*coV>:GA_ - ]e:889j/&q['EIbg=I^%IQ_*>\\U!!!!Qn`ki.L]L9+a,gRY+=^sXaGkY__7]6Ez!'g\G@8 - ZWnn)QZq6kBJu4HB,j@UnDChdlfg!!!"LBTeMe41AJ'ZEW@QUdPas;'\:Um>i:!bPUE/z!+ - ^*!G"#U2:8VJHbPNT>LH"TS - N&!!%lg+.p("knNl3-6b[A0c8#IZ*IKEA^gIn`$F46;#gRr!!&ZSQS1JhgXUlPQkMasKJA+ - *3b#W;z!.Enno4c)*c.kg\#_F2Kbau*bpsWm4G>/&;!!!"l3q;`sS"7l-=n!Mb+p^&N_DuD - /7gJoS40BG0#2])Iz!+7oODnd:?HR8Ek."WR4\r7Kao^pOXhY0P@z^k'joaEc6YEZ^Df#_J - klIbqfb&M^reNW9%Z!!%Ng#".st4Z@^k0&\uN71^`&VbcJe-]WHB^*s*`zPMkPDs"W*MgrH - ?!Jn3P.Z$#Yb+3aUg#QXZ"g:R*W.-j$Hj8WGuR - J;+a,*2&-Or2FGEgK^qGR/hH@0cCT$Q1T+qB%Jdm3HHl=G7hL0@msI=*m'?[GK(Sa0D^mg/ - O\1dk\]KopmAN#,j%oaVpg)-=m;oUlJkrM3`^o]n.?8i<5tM%Vr/pcF^63/(nC^f>Af&QmO - ZmOVHM^(%GlRi'%]<+2k"Lg?T490YA94>Is(,,Uk]746J5N2AVq6j,P(pD9er"-,[Ek9B!8 - rEVh@Q/6D-cYQ<`0./?rlgnk0'Go2#mVG]t5qtHMjtB#;21)Rm';fj,).G)#sZ)j4r>]"ga - )=cao9oWenXdKbi"hde_5=ct=0q!#[2I(t_]*Cs)PNi7#*0;:4IpH0(lFrVajbV\]=5RB4* - (F32;)i7"m*&`+I"._`ZF/bFl'!5Ot`8e(4ErPeELP*NXnrP>)[5%k-#J7-Y]?[d"Ok2ghH6,AV%o)cJ1MisPk&#]esOpR8api7#!-i@L.W]4()XY-+AC-P-7Xr4 - \KZmhX7(&q"_c1^q(.FPEXMSY8h"!!'NaA27/3i,$^2B^cU;dR.beG#A49kpoLGPG-;>!!%6Tf<9=`6u+-/b7-X=9DXQ8Z>u]DeQk,I"Vh# - f;6R+0j3=FT6B0P06dPI(#.3CW?/Jre3V6GU!!#CNe;8)[cJBCcfTpVd^%QJlm&MY1cOU!U - GUS`seDWd>o:FYII.3GDcPFj]Er'<^k[O\p!$8_&JRhJtj0LNKK+Hq(I^aSuD5d?mgu.*uk - gKS5!/=9V?[pVH-_I!92Y]Nil.9sQ8#n.9H%[gN!+T%lT%LILZg>c%i5<)^`d;ku@oFsL9T)s>4CL - GX!.[;\fA"&apD:/KHFB"/&=].p<)_W:rMKVqn0b&fkC`Z#SpT1(ejr0`id"bn4unrL8;4e - $!kIPA!!)L)%1Wl>q4dQLIr#WZj@c8Q860X-ZJ?=+ - 5DHn;!<=7k[($!5\8'pN$2MEXIVDcG^0-?Febo3[NR7DP!!$Q8?b5[lW&XMCPdS>/!,9B;1 - HeoJ>'K"QGNeo=!!(#r6t2h_^tD05Z7>g&Y:lk7h@N=,4WFb.!5`Dbm>)NW:EH,EHomDk2K - _@cb2noFHjTiR,K.hG[s)]hCi4Dnn7CQBH6i,i5T.sj:N*2eH(t1:4S2nb!!)rJi8A!a;u= - `!Q'95L#2^GsLYA!_q9.[LFhAl`9)3-%cVdZCqWp;X+n:]Adb-hMf - k!!(fH<9h4OX[W\uV`e&lI'\q6@X$^TR_GR&]lj__!2EfnXn[I\B3okW/GPs5i@)%hn/KJQ - n`iahe5SC#o^mmPP5kT5+nklrCEI@Uo'D=Pi2_WTcPFg_\81tSSK2"0mi)6,i8I;)#+JAs7 - 9<#f[hmI3uN!!'eGqPj(QrDdKr]tS"Qhu#U@ma4ssfNapl&rBnSjg#VhqM14+)AFHB6jRYJ0;FA` - K)sr8tn1aZ\sER8IEoDB8Y.S5l*7Gh;'%HH3=3Jpn'(o>s#:bbj#pi4EDt3S"!]jIeCFMLK - eZQ\/kFW!rr>2[uRLp7r$AP?bQL8S - kPK%nCdKjU1q#"3"-n?aJq5!.hHX!Bq+9;HB@ngF1H7`uLm77__6=1<)!!"67It.%;`Qn=tkKC?c/ULu_k6;H6Of[=A3@26)I(ZS_^ - >VUUHX!DU'EA-k^@_'i``fMbg>B8K6g_LhJ$`TaZ.E4[A4Cp;#APd^k^e/!heK/H[YR`&*?!b5%@oG9lK#!Aei(pUge1Iebbg - Hn(VnE]oAo(jfY(9U&Xoh!!)f#;Q7JOf=P6?>\uOXmZ_OS'[3O7CjibY:`uAJXC7B"=)_6-(fN)$[?e.O - hIpos] - -Q -Q Q -showpage -%%Trailer -end restore -%%EOF diff --git a/AlgoApprofondie/diapos/graphics/Logo-PCLL.svg b/AlgoApprofondie/diapos/graphics/Logo-PCLL.svg deleted file mode 100644 index d42bd44..0000000 --- a/AlgoApprofondie/diapos/graphics/Logo-PCLL.svg +++ /dev/null @@ -1,585 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - -   - -       - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AlgoApprofondie/diapos/graphics/debian.eps b/AlgoApprofondie/diapos/graphics/debian.eps deleted file mode 100644 index ff431ef..0000000 --- a/AlgoApprofondie/diapos/graphics/debian.eps +++ /dev/null @@ -1,318 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%BoundingBox: 262 316 372 461 -%................................ -%%Creator: GNU Ghostscript 510 (epswrite) -%%CreationDate: 1999/12/10 21:20:34 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%EndComments -%%BeginProlog -% This copyright applies to everything between here and the %%EndProlog: -% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved. -%%BeginResource: procset GS_pswrite_ProcSet -/GS_pswrite_ProcSet 40 dict dup begin -/!{bind def}bind def/X{load def}! -/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X -/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X -/m/moveto X/l/lineto X/c/curveto X/h/closepath X -/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}! -/re{4 -2 roll m exch dup lx exch ly neg lx h}! -/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}! -/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}! -/@/currentfile X/|{string readstring pop}! -/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}! -/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}! -/Ic{Ix false 1 colorimage}! -/@85{@/ASCII85Decode filter}! -end def -%%EndResource -%%EndProlog -%%Page: 1 1 -%%BeginPageSetup -save GS_pswrite_ProcSet begin 0.1 0.1 scale -%%EndPageSetup -0.843137 0.027451 0.317647 rg -0 0 m -6120 0 l -6120 7920 l -0 7920 l -Y -3233.33 4125.86 m -3218.39 4125.66 3236.15 4118.18 3255.66 4115.17 c -3261.06 4119.39 3265.94 4123.63 3270.29 4127.77 c -3258.15 4124.8 3245.79 4124.73 3233.33 4125.86 c -f -3313.52 4145.85 m -3322.43 4158.14 3328.92 4171.58 3331.2 4185.48 c -3329.19 4175.58 3323.84 4167.03 3318.76 4157.99 c -3290.83 4140.4 3316.12 4168.43 3318.74 4179.1 c -3288.72 4141.27 3314.61 4156.42 3313.52 4145.85 c -f -3343.14 4222.89 m -3344.95 4249.8 3337.84 4241.28 3335.46 4231.03 c -3338.23 4229.57 3340.44 4212.05 3343.14 4222.89 c -f -3176.66 4590.68 m -3184.64 4589.26 3193.91 4588.16 3192.58 4586.25 c -3201.32 4588.18 3203.3 4589.92 3176.66 4590.68 c -f -3192.58 4586.25 m -3186.96 4585.08 l -3192.21 4585.56 l -3192.58 4586.25 l -f -3441.26 4212.69 m -3442.16 4188.53 3434.21 4176.79 3427.02 4156.03 c -3414.1 4149.6 l -3403.54 4129.06 3415.15 4136.56 3407.57 4120.23 c -3391.05 4105.56 3357.51 4074.34 3346.77 4071.48 c -3338.92 4071.65 3352.08 4080.74 3353.8 4084.29 c -3331.71 4069.13 3336.06 4061.53 3302.29 4052.3 c -3301.3 4054.51 l -3218 4015.31 3102.28 4092.98 3103.8 4198.94 c -3102.92 4192.22 3101.27 4193.9 3099.43 4191.2 c -3095.13 4245.71 3124.61 4300.46 3174.33 4322.85 c -3222.96 4346.91 3279.97 4337.05 3314.79 4304.56 c -3295.66 4329.62 3257.58 4356.19 3212.45 4353.73 c -3168.24 4353.01 3126.88 4324.92 3113.07 4294.41 c -3090.43 4280.16 3087.79 4239.45 3077.93 4231.99 c -3064.64 4134.39 3102.9 4092.24 3167.63 4042.63 c -3177.79 4035.77 3170.49 4034.72 3171.85 4029.5 c -3150.35 4039.56 3130.67 4054.76 3114.47 4073.37 c -3123.07 4060.8 3132.34 4048.58 3144.33 4038.98 c -3124.04 4045.83 3096.95 4088.11 3089.06 4089.83 c -3124.01 4027.25 3230.84 3980.08 3286.81 4003.49 c -3260.92 4002.53 3228.03 4002.96 3198.94 4013.71 c -3186.7 4020 3170.1 4033.01 3173.07 4035.44 c -3249.42 4006.93 3328.29 4013.86 3394.36 4066.81 c -3411.16 4079.91 3429.52 4102.18 3434.83 4102.48 c -3426.85 4090.46 3436.2 4096.7 3430.07 4086.09 c -3446.8 4113.1 3422.78 4097.09 3447.37 4132.73 c -3456.46 4120.23 l -3453.07 4142.67 3484.31 4169.89 3481.12 4205.35 c -3488.29 4216.19 3489.11 4193.67 3481.51 4168.73 c -3492.06 4196.4 3484.31 4200.85 3487 4223.69 c -3489.92 4216.01 3493.78 4207.86 3495.75 4199.75 c -3488.88 4226.5 3502.78 4244.78 3506.24 4260.33 c -3502.82 4261.83 3495.64 4248.51 3493.98 4280.09 c -3494.23 4293.81 3497.8 4287.28 3499.17 4290.66 c -3496.49 4292.21 3489.42 4302.73 3485.13 4322.9 c -3488.22 4327.65 3493.45 4310.61 3497.69 4309.92 c -3494.96 4325.95 3490.26 4338.18 3490.07 4350.49 c -3477.67 4376.39 3485.67 4347.03 3475.64 4361.61 c -3462.44 4402.75 3486.57 4371.16 3488.21 4389.84 c -3508.19 4360.89 3519.59 4315.99 3524.83 4297.4 c -3520.83 4320.07 3514.39 4342.04 3506.49 4363.29 c -3512.59 4360.72 3496.72 4409.92 3514.4 4377.34 c -3495.52 4446.79 3433.62 4511.69 3376.67 4542.13 c -3383.62 4535.76 3392.42 4527.76 3389.27 4526.5 c -3360.94 4543.35 3365.92 4544.68 3361.85 4551.8 c -3338.8 4561.19 3337.27 4551.03 3322 4551.78 c -3278.52 4574.86 3270.13 4572.4 3230.1 4586.85 c -3231.91 4578.33 l -3203.1 4587.93 3198.34 4574.71 3167.21 4578.31 c -3165.32 4579.78 3177.19 4583.67 3186.96 4585.08 c -3159.11 4581.4 3160.41 4590.58 3133.15 4584.07 c -3139.86 4588.78 3146.98 4591.91 3154.14 4595.91 c -3131.43 4594.53 3099.9 4582.69 3109.63 4593.47 c -3072.58 4576.93 3006.77 4553.72 2969.84 4519.09 c -2968.68 4526.85 l -2951.76 4506.54 2894.89 4466.19 2890.36 4439.86 c -2885.83 4438.81 l -2877.04 4423.9 2871.33 4407.01 2864.35 4391.68 c -2852.84 4372.05 2847.47 4384.12 2849.11 4381.04 c -2826.46 4335.12 2815.19 4296.54 2805.48 4264.88 c -2812.4 4254.53 2805.65 4202.56 2808.26 4160.97 c -2796.9 3955.53 2952.44 3756.07 3122.46 3710.04 c -3147.38 3701.11 3184.43 3701.44 3215.96 3700.55 c -3178.77 3711.19 3173.97 3706.17 3137.73 3718.81 c -3111.6 3731.13 3105.88 3745.18 3087.36 3761.25 c -3094.69 3748.3 l -3058.39 3761.15 3073.58 3764.2 3044.04 3773.55 c -3051.87 3783.77 l -3040.1 3784.67 3020.7 3803.59 3015.4 3814.1 c -3002.52 3813.59 l -2987.06 3832.66 2978.81 3846.43 2979.42 3857.09 c -2975.26 3849.67 l -2970.55 3857.75 2918.35 3921.25 2945.43 3906.47 c -2940.4 3911.05 2933.71 3913.94 2926.46 3927.13 c -2931.97 3933.42 l -2918.96 3950.19 2907.99 3971.68 2908.83 3978.84 c -2915.78 3969.46 2920.6 3967.7 2925.38 3966.09 c -2892.47 4047.73 2890.62 3970.58 2865.71 4049.19 c -2870.97 4049.61 l -2866.94 4055.72 2864.47 4062.31 2861.23 4068.8 c -2863.53 4091.65 l -2839.85 4119.01 2856.91 4208.1 2860.34 4256.95 c -2862.69 4276.81 2880.11 4297.96 2893.34 4331.13 c -2885.28 4332.51 l -2900.7 4359.39 2973.3 4440.5 3006.94 4436.34 c -3023.23 4456.8 3003.7 4436.42 3000.51 4441.56 c -3036.3 4478.59 3047.55 4467.72 3071.7 4474.39 c -3097.73 4489.84 3049.35 4468.35 3061.69 4480.28 c -3106.72 4491.77 3093.59 4506.42 3152.32 4512.25 c -3158.52 4508.73 3137.95 4506.81 3132.79 4502.24 c -3170.29 4520.6 3251.48 4516.41 3304.23 4492.06 c -3365.41 4463.45 3434.17 4378.92 3436.89 4299.39 c -3439.97 4298.56 l -3438.41 4266.94 3444.81 4230.37 3433.71 4196.79 c -3441.26 4212.69 l -f -3070.23 4105.36 m -3068.12 4094.89 l -3077.95 4081.54 3085.75 4067.08 3098.28 4056.68 c -3089.26 4074.27 3082.57 4081.54 3070.23 4105.36 c -f -3093.44 4106.26 m -3088.24 4112.02 3085.18 4118.94 3081.72 4125.82 c -3085.02 4113.71 3091.78 4103.3 3098.05 4092.7 c -3093.44 4106.26 l -f -3504.27 4195.56 m -3502.08 4190.04 l -3498.06 4161.46 3489.36 4133.18 3476.03 4106.95 c -3490.75 4134.62 3500.25 4164.89 3504.27 4195.56 c -f -3179.63 4597.85 m -3189.73 4601.54 3204.45 4599.88 3215.19 4602.31 c -3201.21 4601.14 3187.3 4600.44 3173.57 4598.69 c -3179.63 4597.85 l -f -2824.92 4409.23 m -2827.25 4387.69 2808.72 4379.32 2829.02 4393.54 c -2839.92 4418.08 2824.78 4400.31 2824.92 4409.23 c -f -2801.04 4309.49 m -2805.73 4323.86 2806.57 4332.48 2808.36 4340.81 c -2795.43 4324.27 2802.4 4320.74 2801.04 4309.49 c -f -0 g -2758.02 3347.25 m -2757.57 3346.78 2757.57 3272.19 2756.64 3252.72 c -2755.72 3236.97 2754.32 3203.15 2720.96 3203.15 c -2686.67 3203.15 2678.33 3242.54 2675.55 3259.67 c -2672.31 3278.67 2672.31 3294.43 2672.31 3301.37 c -2672.31 3323.61 2673.7 3385.72 2726.06 3385.72 c -2741.82 3385.72 2750.62 3381.07 2757.57 3377.38 c -2758.02 3347.25 l -h -2623.65 3292.56 m -2623.65 3161.9 2693.16 3161.9 2703.35 3161.9 c -2732.08 3161.9 2750.62 3177.66 2758.49 3204.98 c -2759.42 3163.75 l -2768.23 3164.22 2777.03 3165.14 2791.39 3165.14 c -2796.49 3165.14 2800.65 3165.14 2804.37 3164.67 c -2808.08 3164.67 2811.78 3164.22 2815.95 3163.75 c -2808.54 3178.57 2802.98 3211.93 2802.98 3284.24 c -2802.98 3354.67 2802.98 3473.75 2809 3509.9 c -2792.33 3502.01 2777.95 3496.91 2746.44 3494.14 c -2758.95 3480.7 2758.95 3473.75 2758.95 3412.6 c -2750.16 3415.37 2739.03 3418.61 2720.03 3418.61 c -2637.09 3418.61 2623.65 3346.33 2623.65 3292.56 c -f -2874.95 3316.21 m -2875.42 3354.67 2883.3 3388.97 2916.19 3388.97 c -2952.34 3388.97 2955.1 3349.12 2954.18 3316.21 c -2874.95 3316.21 l -h -3000.05 3311.56 m -3000.05 3365.78 2989.4 3419.08 2920.82 3419.08 c -2826.3 3419.08 2826.3 3314.35 2826.3 3292.11 c -2826.3 3198.05 2868.46 3160.98 2939.36 3160.98 c -2970.85 3160.98 2986.16 3165.6 2994.5 3167.93 c -2994.04 3184.61 2996.35 3195.27 2999.15 3209.63 c -2989.4 3203.59 2976.89 3195.72 2949.09 3195.72 c -2876.8 3195.72 2875.87 3261.54 2875.87 3284.24 c -2999.15 3284.24 l -3000.05 3311.56 l -f -3150.8 3291.64 m -3150.8 3248.55 3142.93 3190.62 3089.18 3190.62 c -3081.76 3190.62 3072.5 3192.03 3066.48 3193.42 c -3065.55 3210.1 3065.55 3238.83 3065.55 3272.19 c -3065.55 3312.05 3069.71 3332.87 3072.97 3343.09 c -3082.69 3375.98 3104.47 3376.44 3108.63 3376.44 c -3143.85 3376.44 3150.8 3327.77 3150.8 3291.64 c -h -3017.82 3241.13 m -3017.82 3206.84 3017.82 3187.38 3012.26 3172.56 c -3031.26 3165.14 3054.88 3160.98 3083.16 3160.98 c -3101.23 3160.98 3153.59 3160.98 3181.85 3218.89 c -3195.29 3245.76 3199.92 3281.91 3199.92 3309.26 c -3199.92 3325.94 3198.07 3362.54 3184.63 3385.72 c -3171.66 3407.48 3150.8 3418.61 3128.57 3418.61 c -3084.08 3418.61 3071.11 3381.54 3064.17 3362.54 c -3064.17 3386.17 3064.62 3468.65 3068.32 3510.82 c -3038.21 3496.91 3019.66 3494.61 2999.75 3492.75 c -3017.82 3485.35 3017.82 3454.75 3017.82 3355.12 c -3017.82 3241.13 l -f -3288.99 3163.75 m -3279.73 3165.14 3273.22 3166.07 3259.78 3166.07 c -3244.98 3166.07 3234.77 3165.14 3224.12 3163.75 c -3228.75 3172.56 3230.6 3176.74 3231.99 3206.84 c -3233.85 3248.09 3234.32 3358.38 3231.07 3381.54 c -3228.75 3399.16 3224.59 3401.93 3218.1 3406.56 c -3256.09 3410.27 3266.76 3413.05 3284.35 3421.39 c -3280.65 3401.02 3280.18 3390.8 3280.18 3359.77 c -3279.26 3199.88 3278.79 3182.75 3288.99 3163.75 c -f -3437.37 3294.9 m -3436.46 3265.7 3435.99 3245.31 3428.1 3229.1 c -3418.37 3208.24 3402.16 3202.23 3390.11 3202.23 c -3362.29 3202.23 3356.28 3225.39 3356.28 3248.09 c -3356.28 3291.64 3395.21 3294.9 3412.8 3294.9 c -3437.37 3294.9 l -h -3309.93 3237.89 m -3309.93 3208.69 3318.74 3179.51 3344.7 3166.99 c -3356.28 3161.9 3367.86 3161.9 3371.57 3161.9 c -3414.21 3161.9 3428.56 3193.42 3437.37 3212.87 c -3436.9 3192.48 3437.37 3179.98 3438.76 3163.75 c -3447.1 3164.22 3455.44 3165.14 3469.35 3165.14 c -3477.22 3165.14 3484.64 3164.22 3492.51 3163.75 c -3487.41 3171.62 3484.64 3176.27 3483.23 3194.34 c -3482.31 3211.93 3482.31 3229.55 3482.31 3254.1 c -3482.78 3348.63 l -3482.78 3383.87 3473.51 3418.61 3403.99 3418.61 c -3358.14 3418.61 3331.26 3404.71 3317.82 3397.75 c -3323.39 3387.56 3328.02 3378.77 3332.18 3358.83 c -3350.26 3374.59 3373.9 3382.93 3397.98 3382.93 c -3436.46 3382.93 3436.46 3357.44 3436.46 3321.31 c -3427.65 3321.76 3420.22 3322.68 3407.71 3322.68 c -3348.86 3322.68 3309.93 3300 3309.93 3237.89 c -f -3704.27 3209.63 m -3704.74 3193.87 3704.74 3177.19 3711.22 3163.75 c -3701.02 3164.67 3694.99 3166.07 3676.01 3166.07 c -3664.87 3166.07 3658.86 3165.14 3650.05 3163.75 c -3651.89 3169.77 3652.84 3172.09 3653.76 3179.98 c -3655.15 3190.62 3656.08 3226.31 3656.08 3238.83 c -3656.08 3288.87 l -3656.08 3310.65 3656.08 3342.17 3654.68 3353.28 c -3653.76 3361.15 3651.46 3382.46 3624.56 3382.46 c -3598.15 3382.46 3589.36 3363.01 3586.1 3347.25 c -3582.41 3331.03 3582.41 3313.42 3582.41 3244.84 c -3582.86 3185.53 3582.86 3179.98 3587.49 3163.75 c -3579.62 3164.67 3569.89 3165.6 3555.99 3165.6 c -3544.85 3165.6 3537.45 3165.14 3528.19 3163.75 c -3531.44 3171.17 3533.29 3174.88 3534.21 3200.82 c -3535.15 3226.31 3537 3351.43 3532.8 3381.07 c -3530.5 3399.16 3525.85 3403.32 3520.77 3407.95 c -3558.31 3409.8 3570.34 3415.84 3581.94 3421.85 c -3581.94 3372.73 l -3587.49 3387.11 3599.07 3419.08 3645.42 3419.08 c -3703.35 3419.08 3703.8 3376.91 3704.27 3349.12 c -3704.27 3209.63 l -f -0.843137 0.027451 0.317647 rg -3292.9 3486.97 m -3254.53 3448.61 l -3216.17 3486.97 l -3254.53 3525.33 l -3292.9 3486.97 l -f -end showpage restore -%%PageTrailer -%%Trailer -%%Pages: 1 diff --git a/AlgoApprofondie/diapos/img/cesi.jpg b/AlgoApprofondie/diapos/img/cesi.jpg deleted file mode 100644 index dafbe55..0000000 Binary files a/AlgoApprofondie/diapos/img/cesi.jpg and /dev/null differ diff --git a/AlgoApprofondie/diapos/img/logo-cadoles.png b/AlgoApprofondie/diapos/img/logo-cadoles.png deleted file mode 100644 index de8ddc0..0000000 Binary files a/AlgoApprofondie/diapos/img/logo-cadoles.png and /dev/null differ diff --git a/algorithmique/INFAL58-algorithimique.pdf b/algorithmique/INFAL58-algorithimique.pdf deleted file mode 100644 index 57a688b..0000000 Binary files a/algorithmique/INFAL58-algorithimique.pdf and /dev/null differ diff --git a/algorithmique/cours/Makefile b/algorithmique/cours/Makefile deleted file mode 100644 index 8b94f17..0000000 --- a/algorithmique/cours/Makefile +++ /dev/null @@ -1,216 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = _build - -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " applehelp to make an Apple Help Book" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - @echo " coverage to run coverage check of the documentation (if enabled)" - -.PHONY: clean -clean: - rm -rf $(BUILDDIR)/* - -.PHONY: html -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -.PHONY: dirhtml -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -.PHONY: singlehtml -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -.PHONY: pickle -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -.PHONY: json -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -.PHONY: htmlhelp -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -.PHONY: qthelp -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Algorithmique.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Algorithmique.qhc" - -.PHONY: applehelp -applehelp: - $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp - @echo - @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." - @echo "N.B. You won't be able to view it unless you put it in" \ - "~/Library/Documentation/Help or install it in your application" \ - "bundle." - -.PHONY: devhelp -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/Algorithmique" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Algorithmique" - @echo "# devhelp" - -.PHONY: epub -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -.PHONY: latex -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -.PHONY: latexpdf -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: latexpdfja -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: text -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -.PHONY: man -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -.PHONY: texinfo -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -.PHONY: info -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -.PHONY: gettext -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -.PHONY: changes -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -.PHONY: linkcheck -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -.PHONY: doctest -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -.PHONY: coverage -coverage: - $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage - @echo "Testing of coverage in the sources finished, look at the " \ - "results in $(BUILDDIR)/coverage/python.txt." - -.PHONY: xml -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." - -.PHONY: pseudoxml -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/algorithmique/cours/_static/cesi.jpg b/algorithmique/cours/_static/cesi.jpg deleted file mode 100644 index dafbe55..0000000 Binary files a/algorithmique/cours/_static/cesi.jpg and /dev/null differ diff --git a/algorithmique/cours/algo.txt b/algorithmique/cours/algo.txt deleted file mode 100644 index c2f8ed7..0000000 --- a/algorithmique/cours/algo.txt +++ /dev/null @@ -1,291 +0,0 @@ -Algorithmique -============= - -Al-Kharezmi, auteur du traité "Kitab al jabr w'al-muqabala", est l'inventeur -des manipulations algébriques (algèbre = **al jabr**). -C'est Léonard de Pise, dit Fibonacci, qui emprunta le nom du célèbre -mathématicien arabe du 9ème siècle, mais l'algèbre existe -depuis bien plus longtemps (Depuis Babylone, puis ensuite l'Egypte ancienne). - -.. glossary:: - - - algorithme - - terme désignant une suite d'opérations constituant un schéma de calcul - ou de résolution d'un problème. C'est un processus systématique de - résolution d'un problème permettant de décrire précisément des étapes. - C'est une suite finie d'instructions permettant de donner la réponse à un - problème. - -L'algorithmique est l'étude et la production de règles et de techniques -qui sont impliquées dans la définition d'algorithmes. - -Implémentation d'un algorithme ------------------------------- - -.. glossary:: - - implémentation - - Adaptation de la méthodologie de calculabilité au calcul effectif - sur une machine abstraite ou via un langage formel. - -Il n’y a pas de parcours à sens unique de l’algorithme vers l’implantation. -La quête d’une implantation efficace nous amène souvent à effectuer -un retour vers les algorithmes eux-mêmes, et à en modifier des points -essentiels. L’aspect théorique de réflexion sur les algorithmes, -et l’aspect pratique de l'implémentation sont donc en symbiose. - -Un existant émerge de la décomposition structurale d'un -domaine de base. Le fait essentiel, c'est la genèse des genres de l'existant les -uns à partir des autres. - -L'essence d'une forme (un algorithme) se réalise au sein d'une matière qu'elle créée -(un langage). L'origine d'une matière fait naître les formes (concepts) -que sa structure dessine. - -- Notion structurale de non-contradiction -- Notion extensive de "réalisation dans un champ donné" - -Deux aspects réciproques : l'essence d'une forme se réalise au sein d'une -matière qu'elle crée, l'essence d'une matière faisant naître les formes que sa -structure dessine. - -Abandonner l'idée trop simpliste de domaines concrets et d'opérations abstraites -qui posséderaient en eux-mêmes comme une nature de matière et une nature de -forme ; cette conception tendrait, en effet, à stabiliser les existants -mathématiques dans certains rôles immuables et ignorerait le fait que les -existants abstraits qui naissent de la structure d'un domaine plus concret -peuvent à leur tour servir de domaine de base pour la genèse d'autres existants. - -L'algorithme comme généralisation de la calculabilité ------------------------------------------------------- - -L'importance croissante de l'informatique comme outil scientifique -impose d'élaborer un nouveau mode de description des méthodes de calcul (appelées algorithmes) -susceptible de satisfaire à la fois le critère de sécurité (maîtrise du résultat) et la possibilité -d'implémenter les calculs sur un ordinateur. - -Exemple d'algorithme ---------------------- - -.. raw:: latex - - \begin{algorithm} - \caption{L'alorithme de Bellman-Kalaba} - \begin{algorithmic}[1] - \Procedure {BellmanKalaba}{$G$, $u$, $l$, $p$} - \ForAll {$v \in V(G)$} - \State $l(v) \leftarrow \infty$ - \EndFor - \State $l(u) \leftarrow 0$ - \Repeat - \For {$i \leftarrow 1, n$} - \State $min \leftarrow l(v_i)$ - \For {$j \leftarrow 1, n$} - \If {$min > e(v_i, v_j) + l(v_j)$} - \State $min \leftarrow e(v_i, v_j) + l(v_j)$ - \State $p(i) \leftarrow v_j$ - \EndIf - \EndFor - \State $l(i) \leftarrow min$ - \EndFor - \State $changed \leftarrow l \not= l’$ - \State $l \leftarrow l$ - \Until{$\neg changed$} - \EndProcedure - \Statex - \Procedure {FindPathBK}{$v$, $u$, $p$} - \If {$v = u$} - \State \textbf{Write} $v$ - \Else - \State $w \leftarrow v$ - \While {$w \not= u$} - \State \textbf{Write} $w$ - \State $w \leftarrow p(w)$ - \EndWhile - \EndIf - \EndProcedure - \end{algorithmic} - \end{algorithm} - -Exemple d'algorithme avec son implémentation ---------------------------------------------- - -Soit l'algorithme de factorielle suivant, - -.. raw:: latex - - \begin{algorithm} - \caption{Algorithme de la factorielle d'un nombre}\label{factorielle} - \begin{algorithmic}[1] - \Function{factorielle}{$n$}\Comment{La fonction récursive factorielle} - \BState \emph{parametre} : $n$ entier - \If{$n = 1$} - \BState \emph{Sortie} : 1 - \Else - \BState \emph{Sortie} : $n * \Call{factorielle}{n-1}$ \Comment{On appelle la fonction dans l'algorithme lui-même} - \EndIf - \EndFunction - \end{algorithmic} - \end{algorithm} - -et son implémentation en python : - -.. literalinclude:: code/factorielle.py - :language: python - -En voici une autre implémentation (en OCaml) : - -.. literalinclude:: code/factorielle.ml - :language: ocaml - -On remarque que le **pseudocode** est très proche de -la syntaxe du python : - -.. function:: factorielle(n:int) - -:: - - if n=1 - return 1 - else - return n * factorielle(n-1) - end if - -Qualité d'un algorithme ------------------------ - -- correction d'un algorithme -- complétude d'un algorithme - -Sémantique - - Étude du sens, de la signification d'un langage - Définir la sémantique d’un langage formel consiste à lui donner une - signification mathématique. - -Sémantique opérationnelle - - on définit la sémantique par sa mise en œuvre sur - une machine abstraite. - -Sémantique dénotationnelle - - on associe à chaque construction syntaxique un - objet mathématique - -Sémantique axiomatique - - chaque construction est décrite par la manière dont - elle transforme des propriétés ou des prédicats. - -Proposition - - une proposition est un énoncé qui est soit vrai, soit faux - -**exemple** : ``2 + 3 = 5``. Proposition vraie. - -Prédicats - - Une proposition dont la valeur de vérité dépend de la valeur d’une ou plusieurs variables - -**Exemple** : ``n est pair`` : vrai pour n = 4 mais faux pour n = 9 - - -Axiome - - une proposition qui est supposée vraie - -Un ensemble d’axiomes est consistant s’il n’existe pas de proposition -dont on peut démontrer qu’elle est à la fois vraie et fausse. - -Un ensemble d’axiomes est complet si, pour toute proposition, il est -possible de démontrer qu’elle est vraie ou fausse. - -Théorème d’incomplétude de Gödel (1931) : tout ensemble -consistant d’axiomes pour l’arithmétique sur les entiers est -nécessairement incomplet. - -**Les concepts de base en algorithmique sont les axiomes** - -inférence - - règles d’inférence, règles permettant de combiner des axiomes et des - propositions vraies pour établir de nouvelles propositions vraies. - -Démonstration - - vérification d’une proposition par une séquence de déductions logiques - à partir d’un ensemble d’axiomes. - -Lorsque le champ donné (le domaine) ne contient qu'un nombre fini d'individus, -on peut définir un choix de valeur des variables permettant de vérifier la -proposition obtenue par la *conjonction* de tous les axiomes du système proposé. -On dit alors que ce choix *réalise* un système d'axiomes. - - -Il ne s'agit plus de savoir si la définition entraîne l'existence, mais de -chercher si la structure d'un système d'axiomes (*règles*) peut donner naissance -à un champ d'individus qui soutiennent entre eux les relations définies pas les -axiomes. - -Concret et abstrait --------------------- - -Il est possible qu'un même genre d'existant joue dans un schéma de genèse le -rôle d'abstrait par rapport à un concret de base, et soit au contraire dans une -autre genèse le concret de base d'un nouvel abstrait. - -Une pareille présentation des choses implique un tel renversement par rapport -aux habitudes de pensée classiques, qu'il faut encore insister sur le sens -nouveau que reçoivent ici les expressions de "concret" et "d'abstrait". - -Les systèmes d'axiomes sont souvent conçus comme des structures purement -formelles, abstraites. Ces structures sont si profondément engagées dans la -genèse de leurs réalisations, qu'il valait mieux désigner par ces termes les -structures de base. - -Un système d'axiome *peut* devenir le concret de base. - -Ceci permet d'exprimer non seulement l'engagement du concret dans la genèse de -l'abstrait, mais encore les relations d'imitation qui peuvent exister entre la -structure de cet abstrait et celle du concret de base. - -Dans certains cas, la genèse de l'abstrait à partir d'un concret de base -s'affirme jusqu'à réaliser une imitation de structure entre ces genres -d'existants qui naissent l'un de l'autre. - -**C'est pourquoi on représente souvent un algorithme en pseudo-code**, -c'est-à-dire en fait dans le mode de représentation (issu du langage préféré de la -personne qui l'exprime) dominant chez la personne qui exprime un algorithme. - -Comment rendre un algorithme lisible ------------------------------------- - -- Le bon algorithme utilise des identifiants explicites. -- Le bon algorithme est structuré. -- Le bon algorithme est indenté. - -Complexité d'un algorithme --------------------------- - -On peut approximer la complexité des algorithmes. -C'est utile pour pouvoir comparer des algorithmes. - -complexité - - estimer la complexité d'un algorithme, c'est estimer le nombre de calculs qu'il utilise. - -Si f est la fonction caractérisant exactement le coût d’un algorithme et n -la taille des données, on s’intéresse à la façon dont augment f(n) lorsque n augmente -on va montrer que f(n) n'augmente pas plus vite qu’une autre fonction -g(n). Du point de vue mathématique, on dit que la fonction f est dominée -asymptotiquement par la fonction g ce qui se note f = O(g) - -- Complexité temporelle : c’est le nombre d’op«erations effectuées par - une machine qui exécute l’algorithme. - -- Complexité spatiale : c’est le nombre de positions mémoire utilisées par - une machine qui exécute l’algorithme. diff --git a/algorithmique/cours/annexes/agile.txt b/algorithmique/cours/annexes/agile.txt deleted file mode 100644 index 5884c11..0000000 --- a/algorithmique/cours/annexes/agile.txt +++ /dev/null @@ -1,83 +0,0 @@ -La planification agile -======================== - -Le mode itératif ------------------ - -- livrer des versions successives et utilisables qui convergent vers - la version finale - -- ne pas perdre d'énergie à maintenir des specs détaillées non nécessaires - -- de nouvelles orientations fonctionnelles sont possibles, même tard - -- les specs détaillées sont écrites "juste à temps" - - -La planification agile ------------------------ - -- chaque livraison est un projet qui est planifié en tant que tel -- utiliser l'expérience acquise pour affiner les estimations -- préservation de l'écologie du projet au quotidien (code, tests...) - -La confiance, feedback ------------------------ - -- livraisons régulières -- progrès visibles par tous (pas d'effet tunnel) -- pilotage du projet par choix du contenu des livraisons -- investissement du Product Owner -- chercher la collaboration plutôt que la confrontation - -L'agilité ----------- - -- le projet n'est pas joué d'avance -- cultiver la souplesse -- révolution douce -- sortir de la confrontation, jouer le "nous collectif" - mettre tout le monde sur le mme pont et amener tout le monde à bon port - -Les outils agiles ------------------- - -- planification par itérations de 4 semaines -- entrepot de source partagé -- intégration continue -- tests automatisés -- pair programming sur points cruciaux -- sprints -- extranet : - - - hitoires utilisateurs - - test cases - - gestion du backolog et des tickets - - suivi de l'avancement - - documentation - -Le product owner ------------------ - -idéalement, - -- connaissance du métier à informatiser -- fibre projet -- dispo à 100% - -Les tests ---------- - -- automatiser -- viser l'exhaustivité -- tester une cible mouvante -- migrer les tests d'une release à l'autre - -Questions importantes en environnement agile ----------------------------------------------- - -- quelle durée d'itération ? -- comment découper en itérations ? -- que faire lorsque le product owner se retrouve sur le chemin critique ? -- la planification est faite en mode "juste à temps" et "juste assez" -- on ne s'échine plus à blâmer, au contraire on cherche à gagner ensemble diff --git a/algorithmique/cours/annexes/exercices.txt b/algorithmique/cours/annexes/exercices.txt deleted file mode 100644 index 1597a02..0000000 --- a/algorithmique/cours/annexes/exercices.txt +++ /dev/null @@ -1,19 +0,0 @@ -Exercices complémentaires --------------------------- - -+ **Manipulation de chaînes de caractères**: - (création, accès à un caractère, concaténation), listes (création, ajout - d’un élément, suppression d’un élément, accès à un élément, extraction d’une partie de liste), tableaux à une ou plusieurs dimensions. - - + traitement des chaines de caractères - + s.replace() - + s1 + s2 - + un exemple de regexp simple - -+ **Fichiers** : - notion de chemin d’accès, lecture et écriture de données numériques ou de type chaîne de caractères depuis ou vers un fichier. - On encourage l’utilisation de fichiers en tant que supports de données ou de résultats avant divers traitements, par exemple graphiques. - -+ **Piles** - Algorithmes de manipulation : fonctions 'push' et 'pop'. On utilise des listes - (ou tableaux à 1 dimension) pour leur implantation. diff --git a/algorithmique/cours/annexes/index.txt b/algorithmique/cours/annexes/index.txt deleted file mode 100644 index dc5acf1..0000000 --- a/algorithmique/cours/annexes/index.txt +++ /dev/null @@ -1,10 +0,0 @@ -Annexes -========= - -.. toctree:: - :maxdepth: 2 - - exercices - surete - agile - scrum diff --git a/algorithmique/cours/annexes/scrum.txt b/algorithmique/cours/annexes/scrum.txt deleted file mode 100644 index 3777780..0000000 --- a/algorithmique/cours/annexes/scrum.txt +++ /dev/null @@ -1,176 +0,0 @@ -scrum -===== - -.. glossary:: - - scrum - - Scrum est une méthode agile pour la gestion de projets - Le terme Scrum est emprunté au rugby et signifie mêlée. - Ce processus s'articule en effet autour d'une équipe soudée, - qui cherche à atteindre un but, comme c'est le cas en rugby - pour avancer avec le ballon pendant une mêlée. - - -Scrum définit trois rôles principaux : - -- le responsable de produit -- Product Manager, -- le faciliteur -- ScrumMaster -- le développeur - -et bien sûr, l'équipe (auto-gérée). - -Des intervenants peuvent s'intégrer également au projet -de façon plus ponctuelle. - -responsable de produit - - Le responsable de produit (Product Manager) est le représentant des - clients et utilisateurs. - C'est lui qui définit l'ordre dans lequel les fonctionnalités - seront développées et qui prend les décisions importantes - concernant l'orientation du projet. - -Le terme responsable n'est d'ailleurs pas à prendre au sens hiérarchique -du terme, mais dans le sens de l'orientation. - -équipe, développement - - outes les décisions sont prises ensemble et personne ne donne d'ordre - à l'équipe sur sa façon de procéder - -facilitateur - - est chargé de protéger l'équipe de tous les éléments perturbateurs - -planification --------------- - -Scrum utilise une planification à trois niveaux : - -- release/projet -- sprint -- quotidien -- ScrumMeeting - -quotidien - - Au quotidien, une réunion, le ScrumMeeting (pas plus de 15 min) - permet à l'équipe et au ScrumMaster de faire un point d'avancement sur - les tâches et sur les difficultés rencontrées. - répondre à trois questions : - * Qu'est-ce que j'ai fait hier ? - * Qu'est-ce que je compte faire aujourd'hui ? - * Quelles difficultés est-ce que je rencontre ? - -sprint - - Scrum est un processus itératif : les itérations sont appelées des sprints - et durent en théorie 30 jours calendaires. - En pratique, les itérations durent généralement entre 2 et 4 semaines. - Chaque sprint possède un but et on lui associe une liste d'items - de fonctionnalités à réaliser. - Ces items sont décomposés par l'équipe en tâches élémentaires - de quelques heures, les items de fonctionnalités de sprint. - - Pendant un sprint, les items de fonctionnalités de sprint à réaliser - ne peuvent pas être changés. - Les changements éventuels seront éventuellement réalisés - dans les sprints suivants. - -releases - - pour améliorer la lisibilité du projet, - on regroupe généralement des itérations en releases. - En effet, comme chaque sprint doit aboutir à la livraison - d'un produit partiel, une release permet de marquer la livraison - d'une version aboutie, susceptible d'être mise en exploitation - -gestion des besoins -------------------- - -tâches (backlog de sprint) -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Lorsqu'on démarre un sprint, on choisit quels items des fonctionnalités -seront réalisés dans ce sprint. - -L'équipe décompose ensuite chaque item en liste de tâches élémentaires -(techniques ou non), chaque tâche étant estimée en heures -et ne devant pas durer plus de 2 jours. -On constitue ainsi le backlog de sprint. - -Les items de backlog de produit sont les fonctionnalités qui deviendront -les items du baclog d'un sprint. -Ces fonctionnalités sont estimées en points relatifs, sans unité. - -planning poker - - façon ludique et efficace de produire des estimations - sur la complexité des fonctionnalités à développer - - pour évaluer les scénarios utilisateurs (user stories) - du carnet de produit (product backlog). - -à la fin d'un sprint : - -- revue de sprint -- rétrospective de sprint - -comprendre ce qui n'a pas bien marché dans le sprint, -les erreurs commises et de prendre des décisions pour s'améliorer - -mise en oeuvre --------------- - -Scrum peut être mis en pratique avec trois fois rien : deux listes suffisent. -La liste des items du backlog de produit et la liste des items du backlog -de sprint. La saisie et la mise à jour des données est simplement -un peu moins agréable. - -glossaire ---------- - -Directeur de produit (Product Owner) (responsable produit) - - personne responsable de produire et maintenir à jour le backlog de produit. - C'est lui qui en détermine les priorités et qui prend les décisions - concernant l'orientation du projet. - -ScrumMaster (facilitateur) - - membre de l'équipe dont l'objectif principal est de la protéger - des perturbation extérieures. - Il est complètement transparent pour la communication entre l'équipe - et les clients et n'a aucun pouvoir hiérarchique sur l'équipe. - C'est en revanche un facilitateur pour les problèmes non techniques - de l'équipe. - -Backlog de produit (Product Backlog) (fonctionnalités) - - liste des fonctionnalités qui devront être réalisées par le logiciel. - -Backlog de sprint (Sprint Backlog) (tâches) - - liste des tâches à accomplir pendant un sprint. - Elles correspondent à la réalisation des items de backlog - du produit affectés au sprint. - -Mêlée quotidienne (Daily Scrum) (quotidien) - - réunion quotidienne de 15 minutes qui a pour but de faire le point - sur ce qui a été fait depuis la dernière mêlée, - ce qui est prévu de faire jusqu'à la prochaine - et quelles sont les embûches rencontrées durant le travail. - -Sprint (sprint) - - nom d'une itération dans Scrum. - Cette itération dure 30 jours calendaires en théorie, - mais en pratique on utilise plutôt entre 2 et 4 semaines. - Pendant une itération, l'équipe doit développer une liste d'items - du backlog de produit qui a été définie au début de ce sprint. - -Graphique d'avancement (Burndown Chart) (avancement) - - graphique qui montre la tendance du reste à faire total de jour en jour - (pour les sprints) ou de sprint en sprint (pour les releases). diff --git a/algorithmique/cours/annexes/surete.txt b/algorithmique/cours/annexes/surete.txt deleted file mode 100644 index 44da9b7..0000000 --- a/algorithmique/cours/annexes/surete.txt +++ /dev/null @@ -1,93 +0,0 @@ -Outils de sureté d'un programme --------------------------------------- - -La preuve de programme -~~~~~~~~~~~~~~~~~~~~~~ - -Le niveau maximum de sûreté d'exécution d'un programme est la preuve. Qu'est-ce que la preuve -formelle d'un programme ? Selon la définition de Wikipédia, ce sont "des techniques permettant de -raisonner rigoureusement, à l'aide de logique mathématique, sur des programmes informatiques ou -du matériel électroniques, afin de démontrer leur validité par rapport à une certaine -spécification." Bref c'est un raisonnement logique sur un programmme qui permet d'être sûr que le -programme est valide et ne va pas planter. - -La preuve de programme est très peu utilisée dans l'industrie, car très coûteuse et très -difficile à mettre en place. Elle quand même utilisée, mais dans des secteurs où le risque doit -absolument être évacué et où il n'y a aucun droit à l'erreur. Par exemple, le secteur médical -(informatique en bloc opératoire), militaire (peu d'informations nous parviennent dans ce -domaine), l'aviation civile (le logiciel Astrée pour Airbus), la fusée Ariane (depuis le bug qui -avait fait crasher Ariane 5 ces questions sont prises très au sérieux), et le milieu bancaire -(surtout le domaine des décisions boursières : un programme chargé de lancer des décisions -d'achat ou de vente à la bourse qui comporte un bug peut en quelque centièmes de secondes faire -perdre des millions, voire des milliards d'euros à une banque. Le programme ne doit tout simplement pas -bugger). - -Le model checking -~~~~~~~~~~~~~~~~~~ - -Le model checking, l'analyse statique et l'interprétation abstraite procèdent d'une méthodologie -moins lourde de validation des programmes. Ces méthodes analysent exhaustivement l'évolution du -système lors de ses exécutions possibles et permetent de dire si globalement, dans un contexte -donné, le programme va fonctionner correctement. Encore très lourdes, ces techniques ne sont -utilisées que dans un contexte industriel de haute sécurité. - -Les tests d'acceptation -~~~~~~~~~~~~~~~~~~~~~~~ - -Il y a plusieurs types de tests - -- unitaires -- fonctionnels -- acceptation - -Très utilisés dans l'industrie, les tests unitaires et fonctionnels ne testent que certaines -parties du programme et permettent de dire que le programme va marcher grosso-modo à peu près. -Beaucoup moins coûteux à installer, ce sont des éléments cléfs des méthodes agiles. - -Les Outils de linting (validation) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- vérifications syntaxiques -- vérification sémantiques -- vérification sur les imports inutiles ou mal formés (imports croisés - -Exemple en python : pylint - - -La dette technique -~~~~~~~~~~~~~~~~~~ - -Au bout d'un moment le code devient du code spaghetti et les techniques sont obsolètes. -Les tests permettent de solder la dette technique plus facilement. - -**avoir le courage de payer une dette technique, et affronter une dette technique -sinon il peut y avoir un coût à payer qui sera pohibitoire.** - -On solde la dette technique parce que à un moment ça va devenir beaucoup trop -cher à payer. - -Les méthodologies agiles -~~~~~~~~~~~~~~~~~~~~~~~~ - -La manière dont le code est produit importe énormément. Par exemple, une -méthodologie ou le **refactoring** (réécriture de code) est permis et même conseillé -a plus de chance de produire du code organisé. - -Les méthodologies agiles produisent en général du code mieux organisé. Ce sont les -méthodes de travail les plus en vogue aujourd'hui, elles mettent l'accent sur : - -- Du logiciel fonctionnel plutôt que de la documentation exhaustive -- La réponse au changement plutôt que le suivi d'un plan -- Le logiciel fonctionnel est la principale mesure d'avancement -- Une attention continue à l'excellence technique et à une bonne - conception améliore l'agilité -- La simplicité est essentielle (il est facile de faire, il est - difficile de faire simple) - -Le principe de base de la méthodologie Scrum par exemple est de focaliser l'équipe de façon -itérative sur un ensemble de fonctionnalités à réaliser, dans des itérations de durée fixe de une -à quatre semaines, appelées **sprints**. Chaque sprint possède un but à atteindre, défini par le -responsable de produit, à partir duquel sont choisies les fonctionnalités à implémenter dans ce -sprint. Un sprint aboutit toujours sur la livraison d'un produit partiel fonctionnel. Pendant ce -temps, le facilitateur a la charge de réduire au maximum les perturbations extérieures et de -résoudre les problèmes non techniques de l'équipe. diff --git a/algorithmique/cours/apercu.txt b/algorithmique/cours/apercu.txt deleted file mode 100644 index ea09668..0000000 --- a/algorithmique/cours/apercu.txt +++ /dev/null @@ -1,79 +0,0 @@ -Aperçu des algorithmes fondamentaux -=================================== - -Les algorithmes sont partout. Absolument partout aujourd'hui. -Il n'est pas un domaine de nos activités qui ne soit liés à tel ou tel algorithme. - -En mathématiques ------------------ - -- l'algèbre (étude des structures de données) -- l'arithmétique modulaire (théorie des nombres) -- la géométrie (affine, algébrique, invariants topologiques...) -- les diagrammes (diagrammes de Venn...) -- les colorisation d'une carte -- comportements stochastiques - -En informatique ----------------- - -- les algorithmes sur la manipulation des structures de données - Exemple : les algorithmes de tri, de recherche dans un arbre... -- les parcours de graphes (chemins le plus court, voyageur de commerce...) -- la cryptologie (code gray) -- les stratégies de jeux - -Tirés du monde réel --------------------- - -- les jeux (casse-tête, dominos, échiquiers...) -- énigmes, logique et paradoxes -- problèmes de raisonnements. Il n'existe pas beaucoup de méthodes - ou de moyens simples pour traiter et résoudre les énoncés de logique de raisonnement. -- La "marche de l'ivrogne" : processus de progression discrète (pas à pas) - dont l'étape suivante est lié à l'état présent et pas du tout à la mémoire du passé proche. - Il revêt seulement un caractère de type probabilité (stochastique) dit markovien. -- algorithmes de colonies de fourmis (chemins optimal pour arriver à la nourriture) - -Le voyageur de commerce -~~~~~~~~~~~~~~~~~~~~~~~~ - -Le problème du voyageur de commerce, consiste en la recherche d’un trajet minimal permettant à un -voyageur de visiter n villes. En règle générale on cherche à minimiser le temps de parcours total ou la -distance totale parcourue. - -Il suffit de construire tous les chemins possibles et de calculer leurs longueurs. -Avec ``n`` villes il y a ``(n-1)!/2`` chemins possibles. -Avec 36 villes on trouve : 5166573983193072464833325668761600000000, -si le nombre de villes augmente, ça devient vite rédibitoire. - -Résolution par - -- algorithme de parcours de graphes -- algorithme glouton -- algorithmes génétiques - -Les algorithmes génétiques s’appuient sur un principe de sélection des individus d’une population qui présen- -tent des caractéristiques se rapprochant au mieux de ce que l’on recherche; cette population évoluant par -ailleurs selon des critères d’évolution génétique à choisir. Dans le contexte du problème du voyageur de -commerce, un individu est une tournée, un chemin et une population un ensemble de tournées. Il s’agit -maintenant de dé...nir un critère de sélection ainsi que des règles d’évolution de la population. - -- approches métaheuristiques (exemples: colonies de fourmis) - -Exemple de résolution - -.. raw:: latex - - \begin{algorithm} - \caption{Algorithme du voyageur de commerce}\label{commerce} - \begin{algorithmic}[1] - - \BState \emph{Données} : $L$ \Comment{Liste des villes à parcourir avec les distances entre les villes} - \BState \emph{Données} : $L'$ \Comment{Liste du parcours des villes à effectuer} - \State \emph{début} - \BState ... - \State \emph{fin} - - \end{algorithmic} - \end{algorithm} diff --git a/algorithmique/cours/cesar.py b/algorithmique/cours/cesar.py deleted file mode 100644 index c3d25ac..0000000 --- a/algorithmique/cours/cesar.py +++ /dev/null @@ -1,61 +0,0 @@ -# coding: utf-8 -minuscules = 'abcdefghijklmnopqrstuvwxyz' -majuscules = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - -def rotation(chaine, x): - """ - Effectue une rotation de x caractères vers la droite: - >>> rotation('abcde', 2) - 'cdeab' - """ - return chaine[x:] + chaine[:x] - -def index(c, chaine): - """ - Trouve l'index de c dans la chaine: - >>> index('n', 'bonjour') - 2 - """ - for i in range(len(chaine)): - if (c == chaine[i]): - return i - return -1 - -def chiffre_minuscules(chaine, x): - """ - Chiffre une chaîne composée de minuscules - >>> chiffre_minuscules('bonjour', 3) - 'erqmrxu' - """ - r = rotation(minuscules, x) - resultat = '' - for lettre in chaine: - resultat = resultat + r[index(lettre, minuscules)] - return resultat - -def chiffre(chaine, x): - """ - Chiffre une chaîne quelconque - >>> chiffre('Bonjour les amis!', 3) - 'Erqmrxu ohv dplv!' - """ - r_min = rotation(minuscules, x) - r_maj = rotation(majuscules, x) - resultat = '' - for lettre in chaine: - if lettre in minuscules: - resultat = resultat + r_min[index(lettre, minuscules)] - elif lettre in majuscules: - resultat = resultat + r_maj[index(lettre, majuscules)] - else: - resultat = resultat + lettre - return resultat - -############################################################################# -# Programme principal -############################################################################# -print(chiffre_minuscules('bonjour', 3)) -print(chiffre('Bonjour les amis!', 3)) -print(chiffre('Erqmrxu ohv dplv!', 23)) -print(chiffre('Eudyr, yrxv dyhc ilql fhw hahuflfh!', 23)) - diff --git a/algorithmique/cours/code/factorielle.ml b/algorithmique/cours/code/factorielle.ml deleted file mode 100644 index 5065a2c..0000000 --- a/algorithmique/cours/code/factorielle.ml +++ /dev/null @@ -1,17 +0,0 @@ -let rec fact = function - |1 -> 1 - | n -> n * fact (n-1) ;; - -let print_fact n = - Printf.printf "factorielle %i = %i\n" n (fact n) - -let main () = - begin - print_fact 5 ; - print_newline () ; - exit 0 ; - end - -let _ = main () - - diff --git a/algorithmique/cours/code/factorielle.py b/algorithmique/cours/code/factorielle.py deleted file mode 100644 index 734719f..0000000 --- a/algorithmique/cours/code/factorielle.py +++ /dev/null @@ -1,12 +0,0 @@ -def factorielle(n): - if (n > 1): - r = n*factorielle(n-1) - else: - r = 1 - return r - -def print_fact(n): - print "factorielle {} = {}\n".format(5, factorielle(5)) - -if __name__ == '__main__': - print_fact(5) diff --git a/algorithmique/cours/conf.py b/algorithmique/cours/conf.py deleted file mode 100644 index b115013..0000000 --- a/algorithmique/cours/conf.py +++ /dev/null @@ -1,370 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Algorithmique documentation build configuration file, created by -# sphinx-quickstart on Thu Mar 16 16:07:00 2017. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx.ext.pngmath', 'sphinx.ext.ifconfig', -] - -# ajout des cours avec solution des exercices ou non -def setup(app): - app.add_config_value('correction', False, 'env') - app.add_config_value('exercice', False, 'env') - -exercice = False -correction = False - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# source_suffix = ['.rst', '.md'] -source_suffix = '.txt' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'Algorithmique' -copyright = u'2017, Gwen' -author = u'Gwen' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = u'1' -# The full version, including alpha/beta/rc tags. -release = u'1' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = 'fr' - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -today_fmt = '%d/%m/%Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -default_role = 'literal' - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -#keep_warnings = False - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'alabaster' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (relative to this directory) to use as a favicon of -# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -#html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -html_show_sphinx = False - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -html_show_copyright = False - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' -#html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# Now only 'ja' uses this config value -#html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -#html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. -htmlhelp_basename = 'Algorithmiquedoc' - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -'papersize': 'a4paper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -'preamble': """\usepackage{amsmath} -\usepackage{algorithm} -\usepackage[noend]{algpseudocode} -\makeatletter -\def\BState{\State\hskip-\ALG@thistlm} -\makeatother - -""" - -# Latex figure (float) alignment -#'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'Algorithmique.tex', u'Cours d\'algorithmique', - u'promotion GMSI B3', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -latex_logo = '_static/cesi.jpg' - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = False - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'algorithmique', u'Algorithmique Documentation', - [author], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'Algorithmique', u'Algorithmique Documentation', - author, 'Algorithmique', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -#texinfo_no_detailmenu = False - - -# -- Options for Epub output ---------------------------------------------- - -# Bibliographic Dublin Core info. -epub_title = project -epub_author = author -epub_publisher = author -epub_copyright = copyright - -# The basename for the epub file. It defaults to the project name. -#epub_basename = project - -# The HTML theme for the epub output. Since the default themes are not -# optimized for small screen space, using the same theme for HTML and epub -# output is usually not wise. This defaults to 'epub', a theme designed to save -# visual space. -#epub_theme = 'epub' - -# The language of the text. It defaults to the language option -# or 'en' if the language is not set. -#epub_language = '' - -# The scheme of the identifier. Typical schemes are ISBN or URL. -#epub_scheme = '' - -# The unique identifier of the text. This can be a ISBN number -# or the project homepage. -#epub_identifier = '' - -# A unique identification for the text. -#epub_uid = '' - -# A tuple containing the cover image and cover page html template filenames. -#epub_cover = () - -# A sequence of (type, uri, title) tuples for the guide element of content.opf. -#epub_guide = () - -# HTML files that should be inserted before the pages created by sphinx. -# The format is a list of tuples containing the path and title. -#epub_pre_files = [] - -# HTML files that should be inserted after the pages created by sphinx. -# The format is a list of tuples containing the path and title. -#epub_post_files = [] - -# A list of files that should not be packed into the epub file. -epub_exclude_files = ['search.html'] - -# The depth of the table of contents in toc.ncx. -#epub_tocdepth = 3 - -# Allow duplicate toc entries. -#epub_tocdup = True - -# Choose between 'default' and 'includehidden'. -#epub_tocscope = 'default' - -# Fix unsupported image types using the Pillow. -#epub_fix_images = False - -# Scale large images. -#epub_max_image_width = 0 - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#epub_show_urls = 'inline' - -# If false, no index is generated. -#epub_use_index = True diff --git a/algorithmique/cours/control.txt b/algorithmique/cours/control.txt deleted file mode 100644 index 7770490..0000000 --- a/algorithmique/cours/control.txt +++ /dev/null @@ -1,294 +0,0 @@ -Les structures de contrôle -========================== - -L'instruction de saut ----------------------- - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de saut conditionnel}\label{saut} - \begin{algorithmic}[1] - \Procedure{Euclide}{} \Comment{c'est l'algorithme d'Euclide} - \State $\textit{stringlen} \gets \text{length of }\textit{string}$ - \State $i \gets \textit{patlen}$ - \BState \emph{top}: - \If {$i > \textit{stringlen}$} \Return false - \EndIf - \State $j \gets \textit{patlen}$ - \BState \emph{loop}: \Comment{C'est le label (l'étiquette)} \label{etiquette} - \If {$\textit{string}(i) = \textit{path}(j)$} - \State $j \gets j-1$. - \State $i \gets i-1$. - \State \textbf{goto} \emph{loop}. \label{goto} - \State \textbf{close}; - \EndIf - \State $i \gets - i+\max(\textit{delta}_1(\textit{string}(i)),\textit{delta}_2(j))$. - \State \textbf{goto} \emph{top}. \Comment{C'est l'instruction de saut} - \EndProcedure - \end{algorithmic} - \end{algorithm} - - -.. raw:: latex - - Ligne \ref{etiquette}, le bloc `loop` est aussi un label (une étiquette), - c'est-à-dire une marque posée qu'il est possible de retrouver dans le programme. \\ - -.. raw:: latex - - Ligne \ref{goto}, l'instruction \texttt{goto} (aller à ) est le saut vers le label. \\ - -Description générique d'une instruction de saut:: - - Instruction 1 - Saut Label1 - Instruction 2 - ... - Label1: - Instruction n - -.. important:: les sauts conditionnels sont à éviter, même s'ils sont implémentés - dans le langage cible, car c'est le meilleur moyen d'aboutir à - du **code spaghetti**. - -L'instruction de branchement conditionnel ------------------------------------------- - -On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non. - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple d'instruction de test} - \begin{algorithmic}[1] - \BState \emph{entrée}: $quality\gets 0$ \Comment{C'est cette valeur qui sera testée} - \BState \emph{locale}: $a\gets ""$ - \BState \emph{sortie}: $a$ \Comment{La sortie est la valeur de $a$} - \BState \emph{corps}: - \If{$quality\ge 9$} - \State $a\gets perfect$ - \ElsIf{$quality\ge 7$} - \State $a\gets good$ - \ElsIf{$quality\ge 5$} - \State $a\gets medium$ - \ElsIf{$quality\ge 3$} - \State $a\gets bad$ - \Else - \State $a\gets unusable$ - \EndIf - \end{algorithmic} - \end{algorithm} - - - -.. ifconfig:: exercice - - **Exercice** : Compacter l'algorithme suivant en une seule condition de test:: - - Si il fait trop chaud Alors - Si il ne pleut pas Alors - Ouvrir la fenêtre - Sinon - Fermer la fenêtre - Finsi - Sinon - Fermer la fenêtre - Finsi - -.. ifconfig:: correction - - **Correction** : - - :: - - Si il fait trop chaud ET il ne pleut pas Alors - Ouvrir la fenêtre - Sinon - Fermer la fenêtre - Finsi - - -L'instruction switch --------------------- - -L'instruction switch permet de faire plusieurs tests de valeurs sur le contenu d'une même variable. -Ce branchement conditionnel simplifie beaucoup le test de plusieurs valeurs d'une variable. - -Les instructions d'itérations (boucles) ---------------------------------------- - -.. important:: Toutes les boucles concernent le paradigme de programmation impératif - et ne sont pas valides dans le paradigme de programmation fonctionnel - (puisque l'ordre d'évaluation importe) - -- arrêt conditionnel (break) -- passage d'un pas (continue) - -Répéter ... jusqu'à -~~~~~~~~~~~~~~~~~~~ - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de répéter ... jusqu'à} - \begin{algorithmic}[1] - \BState \emph{locales}: $i \gets 1$ \Comment{déclaration et initialisation de i} - \Repeat \Comment{c'est le label de début du répéter} - \State $i \gets \textit{i+1}$ - \Until{i == 100} \Comment{condition de fin de la boucle} - \end{algorithmic} - \end{algorithm} - -La boucle **pour** (for) -~~~~~~~~~~~~~~~~~~~~~~~~ - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de boucle for} - \begin{algorithmic}[1] - \BState \emph{locales}: $sum\gets 0$ - \For{$i\gets 1, n$} - \State $sum\gets sum+i$ - \EndFor - \end{algorithmic} - \end{algorithm} - - - - - -.. ifconfig:: exercice - - **Exercice** : Ecrire un algorithme qui demande successivement 20 nombres à l’utilisateur, - et qui lui dise ensuite quel était le plus grand parmi ces 20 nombres - -.. ifconfig:: correction - - **Correction** : - :: - - Variables N, i, PG en Entier - Debut - PG <- 0 - Pour i <- 1 à 20 - Ecrire "Entrez un nombre : " - Lire N - Si i = 1 ou N > PG Alors - PG <- N - FinSi - Ecrire "Le nombre le plus grand était : ", PG - Fin - - -.. attention:: ne jamais manipuler le compteur dans une boucle - -:: - - Variable Truc en Entier - Début - Pour Truc <- 1 à 15 - Truc <- Truc * 2 - Ecrire "Passage numéro : ", Truc - Truc Suivant - Fin - -La boucle tant que (while) -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de boucle while} - \begin{algorithmic}[1] - \BState \emph{locales}: $sum\gets 0$ - \State $i\gets 1$ - \While{$i\le n$} - \State $sum\gets sum+i$ - \State $i\gets i+1$ - \EndWhile - \end{algorithmic} - \end{algorithm} - -.. ifconfig:: exercice - - **Exercice** : Ecrire un algorithme de validation d'une entrée utilisateur - - :: - - "Voulez vous un café ? (O/N)" - -.. ifconfig:: correction - - **Correction** : deux solutions possibles, une - - :: - - Variable Rep en Caractère - Début - Rep <- "" - Ecrire "Voulez vous un café ? (O/N)" - TantQue Rep <> "O" et Rep <> "N" - Lire Rep - Si Rep <> "O" et Rep <> "N" Alors - Ecrire "Saisie Erronée, Recommencez" - FinSi - FinTantQue - Fin - - :: - - Variable Rep en Caractère - Début - Ecrire "Voulez vous un café ? (O/N)" - Lire Rep - TantQue Rep <> "O" et Rep <> "N" - Ecrire "Vous devez répondre par O ou N. Recommencez" - Lire Rep - FinTantQue - Ecrire "Saisie acceptée" - Fin - -.. ifconfig:: exercice - - **Exercice** : "C'est plus, C'est moins", c'est-à-dire Ecrire un algorithme qui demande à l’utilisateur - un nombre compris entre a et b jusqu’à ce que la réponse convienne. - -.. ifconfig:: correction - - **Correction** : - - :: - - Variable N en Entier - Debut - N <- 0 - Ecrire "Entrez un nombre entre 10 et 20" - TantQue N < 10 ou N > 20 - Lire N - Si N < 10 Alors - Ecrire "Plus grand !" - SinonSi N > 20 Alors - Ecrire "Plus petit !" - FinSi - FinTantQue - Fin - -Et les autres boucles : répéter... jusqu'à, etc... - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de boucle répéter} - - \begin{algorithmic}[1] - \State $sum\gets 0$ - \State $i\gets 1$ - \Repeat - \State $sum\gets sum+i$ - \State $i\gets i+1$ - \Until{$i>n$} - \end{algorithmic} - \end{algorithm} diff --git a/algorithmique/cours/donnees.txt b/algorithmique/cours/donnees.txt deleted file mode 100644 index 990629e..0000000 --- a/algorithmique/cours/donnees.txt +++ /dev/null @@ -1,577 +0,0 @@ -Les structures de données -=========================== - -.. glossary:: - - ATD - - Abstract Data Type, structure de données abstraites. - La représentation des données est forcément un choix. - Il est impossible de rendre compte globalement d'un élément du réel, - il faut en faire une interprétation abstraite. - -**Exemple**: - -- Un être humain peut être représenté par les données présentes dans sa - carte d'identité. Mais un être humain n'est pas sa carte d'identité. -- Un être humain peut être représenté par les données présentes dans ses préférences - de surf sur internet. Mais un être humain **n'est pas** l'ensemble de ses logs de surf sur le net. - -Les séquences -------------- - -Les types séquences (listes) - -.. code-block:: ocaml - - # 4::1::5::8::1::[];; - - : int list = [4 ;1 ;5 ;8 ;1] - - -Un ensemble de valeurs portant le même nom de variable et repérées par un nombre, s’appelle un tableau, ou encore une liste, ou une variable indicée. -Le nombre qui, au sein d’un tableau, sert à repérer chaque valeur s’appelle l’indice. -Chaque fois que l’on doit désigner un élément du tableau, on fait figurer le nom du tableau, suivi de l’indice de l’élément. - -**manipulation** : - -- `insert()` -- `append()` -- `remove()` -- `find()` -- `print()` -- ... - -.. code-block:: python - - zoo = ['bear', 'lion', 'panda', 'zebra'] - print(zoo) - - # But these list elements are not - biggerZoo = ['bear', 'lion', 'panda', 'zebra', ['chimpanzees', 'gorillas', 'orangutans', 'gibbons']] - print(biggerZoo) - -- Lists Versus Tuples : types mutables, immutables -- Lists Versus Sets : non ordonné, collection simple - -- Recherche dans une liste, recherche du maximum dans une liste -- Recherche d’un mot dans une chaîne de caractères. - -Algorithme de la longueur d'une liste --------------------------------------- - -.. code-block:: ocaml - - # let rec longueur l = - match l with - [] -> 0 - | ::s -> 1 + (longueur s);; - -Cette fonction est prédéfinie en Ocaml : `List.length` - -.. ifconfig:: exercice - - **Exercice** : écrire un algorithme qui déclare et - remplisse un tableau de 7 valeurs numériques en les mettant toutes à zéro. - -.. ifconfig:: correction - - **Correction** : - :: - - Tableau Truc(6) en Numérique - Variable i en Numérique - Debut - Pour i <- 0 à 6 - Truc(i) <- 0 - i Suivant - Fin - - exemple d'implémentation en python - - .. code-block: python - - >>> liste = [] - >>> for i in range(6): - ... liste.append(i) - ... - >>> liste - [0, 1, 2, 3, 4, 5] - >>> - - -.. ifconfig:: exercice - - **Exercice** : Calcul du premier élément maximal dans une liste, - proposer une implémentation en python qui renvoie le maximum et - la position du max dans la liste. - -.. ifconfig:: correction - - **Correction** : - - .. code-block: python - - def max_list(L) : - k = len(L) - max, x = L[0], 0 - i = 1 - while i < k : - if max < L[i]: - max = L[i] - x = i - i = i + 1 - return max, x - - couple = max_list([4,5,6,9,12,5,10,3,18,5,6,7]) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - - Exemple de généricité : ce code fonctionne avec une chaîne de caractères. - - .. code-block: python - - couple = max_list(’totovaaumarche’) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - -.. glossary:: - - Matrice - - Tableaux de dimension multiple, c'est un tableau de tableau - -.. ifconfig:: exercice - - **Exercice** : Écrivez un algorithme remplissant un tableau de 6 sur 13, avec des zéros. - -.. ifconfig:: correction - - **Correction** : - - implémentation en python - - .. code-block:: python - - >>> matrice = [] - >>> for i in range(12): - ... matrice.append([0 for i in range(5)]) - ... - >>> from pprint import pprint - >>> pprint(matrice) - [[0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0]] - >>> - -Algorithmes de tri ------------------- - -On désigne par "tri" l'opération consistant à ordonner un ensemble d'éléments en fonction de clés sur lesquelles est définie une relation d'ordre. - -Les algorithmes de tri ont une grande importance pratique. -Ils sont fondamentaux dans certains domaines (exemples : map-reduce en database non relationnelle). - -L'étude du tri est également intéressante en elle-même, c'est un des domaines de l'algorithmique très étudié et connu. - -Tri par insertion -~~~~~~~~~~~~~~~~~~ - -Cet algorithme de tri suit de manière naturelle la structure récursive des -listes. Soit l une liste à trier : - -- si l est vide alors elle est déjà triée -- sinon, l est de la forme x::s et on trie récursivement la suite s et on obtient une liste triée s’ - on insert x au bon endroit dans s’ et on obtient une liste triée - -Description de l'algorithme - -- la fonction inserer permet d’insérer un élément x dans une liste l -- si la liste l est triée alors x est inséré au bon endroit - -.. code-block:: ocaml - - # let rec inserer x l = - match l with - [] -> [x] - | y::s -> if x<=y then x::l else y::(inserer x s);; - val inserer : ’a -> ’a list -> ’a list - # inserer 5 [3 ;7 ;10];; - - : int list = [3 ; 5 ; 7 ; 10] - -Tri rapide -~~~~~~~~~~~~ - -soit une liste l à trier : - -- si l est vide alors elle est triée -- sinon, choisir un élément p de la liste (le premier par exemple) - nommé le **pivot** -- partager l en deux listes g et d contenant les autres éléments de l - qui sont plus petits (resp. plus grands) que la valeur du pivot p -- trier récursivement g et d, on obtient deux listes g’ et d’ triées - -.. code-block:: ocaml - :caption: fonction de partage d'une liste - - #let rec partage p l = - match l with - [] -> ([] , []) - |x::s -> let g,d = partage p s in - if x<=p then (x::g , d) else (g , x::d) ;; - val partage : ’a -> ’a list -> ’a list * ’a list = - # partage 5 [1 ;9 ;7 ;3 ;2 ;4];; - - : int list * int list = ([1 ; 3 ; 2 ; 4], [9 ; 7]) - -.. code-block:: ocaml - :caption: algorithme de tri rapide - - # let rec tri rapide l = - match l with - [] -> [] - | p::s -> let g , d = partage p s in - (tri rapide g)@[p]@(tri rapide d) ;; - val tri rapide : ’a list -> ’a list = - # tri rapide [5 ; 1 ; 9 ; 7 ; 3 ; 2 ; 4];; - - : int list = [1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 9] - - -Définition d'un itérateur -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. code-block:: python - - >>> l = range(10) - >>> for i in l: - ... print l[i] - ... - 0 - ... - 8 - 9 - >>> l.__iter__() - - - -Les listes chaînées -~~~~~~~~~~~~~~~~~~~~ - -.. code-block:: ocaml - - typedef struct list{ - int elt ; - struct list* suivant ; - } ; - - -**Outils de manipulation** : - -- `next()` -- `pointer()` -- `insert(l, a)` -- `remove(a, n)` - - -Les piles ----------- - -**manipulation** - -- `insert()` : insérer un élément à la fin de la pile -- `dequeue()` : (remove and return) : retirer un élément du haut de la pile -- FIFO : "first in first out" - - -Traduction d'une structure de données dans une autre ------------------------------------------------------ - -.. code-block:: python - - >>> listOfStrings = ['One', 'Two', 'Three'] - >>> strOfStrings = ' '.join(listOfStrings) - >>> print(strOfStrings) - One Two Three - >>> - >>> # List Of Integers to a String - ... listOfNumbers = [1, 2, 3] - >>> strOfNumbers = ''.join(str(n) for n in listOfNumbers) - >>> print(strOfNumbers) - 123 - >>> - -.. code-block:: python - - >>> l = [('host1', '10.1.2.3', '6E:FF:56:A2:AF:18'), ('host3', '10.1.2.5', '6E:FF:56:A2:AF:19')] - >>> result = [] - >>> for hostname, ip, macaddress in l: - ... result.append(dict(hostname=hostname, ip=ip, macaddress=macaddress)) - ... - >>> result - [{'hostname': 'host1', 'ip': '10.1.2.3', 'macaddress': '6E:FF:56:A2:AF:18'}, - {'hostname': 'host3', 'ip': '10.1.2.5', 'macaddress': '6E:FF:56:A2:AF:19'}] - >>> - - -.. ifconfig:: exercice - - **Exercice** : Proposer un algorithme de traduction de cette structure de donnée - - .. code-block:: python - - [ - { - 'address': '192.168.0.0', - 'mask': '255.255.255.0', - 'dynamicRanges': [ - { 'low': '192.168.0.5', 'high': '192.168.0.12', 'only_unknown': True }, - { 'low': '192.168.0.50', 'high': '192.168.0.55', 'only_unknown': False }, - ], - }, - { - 'address': '192.168.0.0', - 'mask': '255.255.255.0', - 'dynamicRanges': [ - { 'low': '192.168.0.12', 'high': '192.168.0.45', 'only_unknown': True }, - { 'low': '192.168.0.8', 'high': '192.168.0.35', 'only_unknown': False }, - ], - }, - { - 'address': '192.168.0.1', - 'mask': '255.255.255.0', - 'dynamicRanges': [ - { 'low': '192.168.0.5', 'high': '192.168.0.12', 'only_unknown': True }, - { 'low': '192.168.0.50', 'high': '192.168.0.55', 'only_unknown': False }, - ], - }, - - ] - - En cette structure de données : - - .. code-block:: python - - [ - { - address: '192.168.0.0', - mask: '255.255.255.0', - dynamicRanges: [ - { low: '192.168.0.5', high: '192.168.0.12', only_unknown: true }, - { low: '192.168.0.50', high: '192.168.0.55', only_unknown: false },j - ], [ - { low: '192.168.0.12', high: '192.168.0.45', only_unknown: true }, - { low: '192.168.0.8', high: '192.168.0.35', only_unknown: false }, - ], - }, - { - 'address': '192.168.0.1', - 'mask': '255.255.255.0', - 'dynamicRanges': [ - { 'low': '192.168.0.5', 'high': '192.168.0.12', 'only_unknown': True }, - { 'low': '192.168.0.50', 'high': '192.168.0.55', 'only_unknown': False }, - ], - }, - ] - -.. ifconfig:: correction - - **Correction** : - - .. code-block:: python - - >>> from pprint import pprint - pprint(l) - [{'address': '192.168.0.0', - 'dynamicRanges': [{'high': '192.168.0.12', - 'low': '192.168.0.5', - 'only_unknown': True}, - {'high': '192.168.0.55', - 'low': '192.168.0.50', - 'only_unknown': False}], - 'mask': '255.255.255.0'}, - {'address': '192.168.0.0', - 'dynamicRanges': [{'high': '192.168.0.45', - 'low': '192.168.0.12', - 'only_unknown': True}, - {'high': '192.168.0.35', - 'low': '192.168.0.8', - 'only_unknown': False}], - 'mask': '255.255.255.0'}] - >>> newdata = [] - >>> for i in l: - ... if i['address'] not in [j['address'] for j in newdata]: - ... newdata.append(i) - ... else: - ... for k in newdata: - ... if k['address'] == i['address']: - ... k['dynamicRanges'].extend(i['dynamicRanges']) - ... - >>> pprint(newdata) - [{'address': '192.168.0.0', - 'dynamicRanges': [{'high': '192.168.0.12', - 'low': '192.168.0.5', - 'only_unknown': True}, - {'high': '192.168.0.55', - 'low': '192.168.0.50', - 'only_unknown': False}, - {'high': '192.168.0.45', - 'low': '192.168.0.12', - 'only_unknown': True}, - {'high': '192.168.0.35', - 'low': '192.168.0.8', - 'only_unknown': False}], - 'mask': '255.255.255.0'}, - {'address': '192.168.10.0', - 'dynamicRanges': [{'high': '192.168.0.12', - 'low': '192.168.0.5', - 'only_unknown': True}, - {'high': '192.168.0.55', - 'low': '192.168.0.50', - 'only_unknown': False}], - 'mask': '255.255.255.0'}] - >>> - -.. ifconfig:: exercice - - **Exercice** : Proposer un algorithme qui permette de récupérer la liste - des adresses IP disponibles - - .. code-block:: python - - { - "local": { - "leases": [ - { - "mac": "02:00:c0:a8:00:66", - "name": "pcxubuntu", - "address": "192.168.0.200" - }, - { - "mac": "02:00:c0:a8:00:67", - "name": "pcxubuntu", - "address": "192.168.0.201" - }, - { - "mac": "02:00:c0:a8:00:68", - "name": "pcxubuntu", - "address": "192.168.0.202" - } - ] - } - } - -.. ifconfig:: correction - - **Correction** : - - .. code-block:: python - - >>> l = { - ... "local": { - ... "leases": [ - ... { - ... "mac": "02:00:c0:a8:00:66", - ... "name": "pcxubuntu", - ... "address": "192.168.0.200" - ... }, - ... { - ... "mac": "02:00:c0:a8:00:67", - ... "name": "pcxubuntu", - ... "address": "192.168.0.201" - ... }, - ... { - ... "mac": "02:00:c0:a8:00:68", - ... "name": "pcxubuntu", - ... "address": "192.168.0.202" - ... } - ... ] - ... } - ... } - >>> leases = l["local"]["leases"] - >>> from pprint import pprint - >>> pprint(leases) - [{'address': '192.168.0.200', 'mac': '02:00:c0:a8:00:66', 'name': 'pcxubuntu'}, - {'address': '192.168.0.201', 'mac': '02:00:c0:a8:00:67', 'name': 'pcxubuntu'}, - {'address': '192.168.0.202', 'mac': '02:00:c0:a8:00:68', 'name': 'pcxubuntu'}] - >>> addresses = [lease['address'] for lease in leases] - >>> addresses - ['192.168.0.200', '192.168.0.201', '192.168.0.202'] - >>> - - - -Structures de données complexes -------------------------------- - -Les types produits nommés -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -On les appelle enregistrements, dictionnaires ou tables de hachage. - -:: - - algorithme monAlgorithme - // déclaration d'un enregistrement - enregistrement Personne - chaine nom; - chaine prenom; - entier age; - réel taille; - finenregistrement - ... - Personne[50] t; - début - // Initialisation - t[0].nom <- "Duchmol"; - t[0].prenom <- "Robert"; - t[0].age <- 24; - t[0].taille <- 1.80; - ... - fin - -.. code-block:: ocaml - - # type adresse = { rue : string ; ville : string ; cp : int};; - # type fiche = { - nom : string ; - prenom : string ; - adresse : adresse ; - date naissance : int * int * int ; - tel fixe : string ; - portable : string - };; - # let v1 = { a = 1 ; b = false ; c = 'r'};; - - - - -- les sommes (constructeurs) - -.. code-block:: ocaml - - # type couleur = Pique | Coeur | Carreau | Trefle;; - # let v = (Pique , Coeur);; - val v : couleur * couleur = (Pique , Coeur) - -.. code-block:: ocaml - - type nombre = - Ent of int | Reel of float | Cplx of float × float - Ent, Reel, Cplx sont les constructeurs du type. - -Autres structures de données complexes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- arbres -- graphes -- dates - -- le parcours de graphes -- les calculs de dates diff --git a/algorithmique/cours/fonctions.txt b/algorithmique/cours/fonctions.txt deleted file mode 100644 index 330cbca..0000000 --- a/algorithmique/cours/fonctions.txt +++ /dev/null @@ -1,588 +0,0 @@ -Les fonctions et les procédures -================================ - -Préliminaire : rappel de théorie de cybernétique -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Théorie de l'information (Claude Shannon, 1949), (ou théorie de la communication) - -Canal de transmission:: - - entrée -> récepteur -> émetteur -> sortie - -.. glossary:: - - cybernétique - - étude des fonctions de réflexes conditionnés du cerveau humain - utilisation au mieux en PNL ("programmation neuro-linguistique") - ou en analyse transactionnelle, ou au pire en ingérinerie sociale. - -La matérialité physique est considérée comme le hardware, le génétique (le -réseau neuronal) étant assimilé au network hardware. - -Les objets mentaux (fonctionnements psychologiques et épigénétiques du -cerveaux) est assimilé au logiciel, au software. - -IFTTT ("if this then that") : la causalité mondaine est ramenée à un ordre de -comportement affecté à un assimilé-machine. - -L'humain est ramené à une machine. -C'est articulation entre "déclencheur contextuel" et "action en réponse de" -n'est pas une "black box" mais un "feedback" qui, pour l'humain, -loin d'être ramené à une entrée/sortie, constitue un **feedback** -utile pour la connaissance de soi. - -A la place, la communication est ramenée à une **boucle de rétroaction** -(comme dans un prompt) entre un système comportemental et son environnement. -La représentation sujet/objet (la perspective traditionnelle) est remplacée -par le clivage intérieur/extérieur. Behaviorisme, procédural. - -L'humain est donc ramené à - -- un ordonnanceur -- un comportement intrinsèque (boîte noire) - -- un stimuli pavlovien (déclencheur, trigger) est considéré comme un paramètre -d'entrée -- une instruction comportementale est considérée comme une action de - traitement -- le résultat est observé. - -Cette articulation entre "déclencheur contextuel" et "action en réponse" -est très exactement une forclusion de la profondeur monadique (Leibniz) de -l'humain à la black box informationnelle (et cybernétique). - -Pour quoi faire ? Pour pirater. Pour manipuler. -Le piratage consiste à - -- isoler les constantes (les procédures répétitives, les algorithmes) -- les observer (collecter les données) - -afin de - -- les réécrire (influence toxique, pishing - hammeçonnage) -- les détruire (attaque en règle) - - -Description d'une procédure -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -En programmation impérative, un programme est une suite d’instructions qui font -évoluer l’état mémoire, le résultat est dans l’état final de la mémoire. - -- une procédure peut prendre des paramètres -- elle modifie l'état courant du système - -- Déclaration des paramètes -- Déclaration du corps -- Appel de la procédure - -.. raw:: latex - - \begin{algorithm} - \caption{Procédure de permutation de deux entiers}\label{permutation} - \begin{algorithmic}[1] - \Procedure{permuter}{$a,b$}{} - \BState \emph{parametres}: - \State $a: \textit{int}$ - \State $b: \textit{int}$ - \BState \emph{locales}: - \State $z: \textit{int}$ \Comment{Une variable intermédiaire est nécessaire} - \BState \emph{corps}: - \State $z \gets a$ - \State $a \gets b$ - \State $b \gets z$ - \EndProcedure - \State \Call{permuter}{10, 12} \Comment{appel de la procédure} - \end{algorithmic} - \end{algorithm} - -effet de bord - - toute modification de la mémoire ou modification d'un support externe - -instruction - - commande ou phrase en mesure de modifier l'état du programme ou de la machine hôte - (allocation mémoire, support externe, disque, écran...) - -Une procédure ne renvoie pas de valeur, mais provoque un 'effet de bord' (écriture dans une globale, dans un flux sortant etc.). - -Une procédure permet de créer une instruction nouvelle qui deviendra une primitive pour le programmeur. -Cela permet de structurer le texte source du programme et améliorer sa -lisibilité. Cela permet aussi d'appeler plusieurs fois, et à plusieurs endroit -dans le code, cette primitive. - -Appel d'une procédure -~~~~~~~~~~~~~~~~~~~~~ - -(ex: pseudo-pascal) - -**déclaration de procédure** - -.. raw:: latex - - \begin{algorithm} - \caption{Procédure de permutation de deux entiers}\label{appelpermutation} - \begin{algorithmic}[1] - \Procedure{permuter}{$a,b$}{} - \BState \emph{parametres}: - \State $a: \textit{int}$ \Comment{paramètres formels de la procédure} - \State $b: \textit{int}$ - \BState \emph{locales}: - \State $z: \textit{int}$ \Comment{les variables locales de la procédure} - \BState \emph{corps}: - \State ... \Comment{Le corps de la procedure} - \EndProcedure - \State \Call{permuter}{10, 12} \Comment{l'appel de la procédure} - \end{algorithmic} - \end{algorithm} - - -- les variables x1,...,xn sont appelées *paramètres formels* de p -- les variables v1,...,vm sont appelées *les variables locales* de p - -les valeurs effectivement passées en paramètres, ici `10, 12` -sont appelées **paramètres effectifs** de p - -signature - - C'est l'ensemble paramètre formel + resultat de l'appel - -fermeture - - L'ensemble procédure + variables locales + signature + parametres effectifs - est appelé une **fermeture**. C'est la procédure + son contexte qui permet - de l'instancier dans un programme. - -Environnement - - Contexte d’évaluation d'une expression ou d'une fonction - -Portée - - La portée d'un identifiant (une variable) est sa condition d'utilisation dans un contexte donné - (utilisation locale uniquement, ou bien globale, ou bien locale et globale) - La portée d’une liaison est la portion du code dans laquelle cette - liaison est valide (i.e. où un identifiant est lié à une expression). - -.. ifconfig:: exercice - - **Exercice** : Que donne ce code ? - - .. code-block:: ocaml - - # let x = 42 in - let y = x - 1 in x - y ;; - -.. ifconfig:: correction - - **Correction** : - - .. code-block:: ocaml - - - : int = 1 - - -.. code-block:: ocaml - - let a = 3 (* première liaison pour l'identifiant a *) - let b = 5 and c = 6 - let somme = a + b + c - val somme : int = 14 - let a = 45 (* deuxième liaison pour l'identifiant a *) - somme - val a : int = 45 - -.. ifconfig:: exercice - - **Exercice** : Que donne ce code ? - - .. code-block:: ocaml - - let a = 3 and b = 4 and c = 8 ;; - let somme = a + b + c ;; - val somme : int = ??? - let a = 44 - let b = 5 - let c = 1 - somme - - : int = ??? - -.. ifconfig:: correction - - .. code-block:: ocaml - - let a = 3 and b = 4 and c = 8 ;; - - : int = 15 - let somme = a + b + c ;; - val somme : int = 15 - let a = 44 - let b = 5 - let c = 1 - somme - - : int = 15 - - Même code en python - - .. code-block:: python - - >>> a = 1 - >>> b = 2 - >>> c = 3 - >>> somme = a + b + c - >>> somme - 6 - >>> a = 56 - >>> b = 5678 - >>> c = 56789 - >>> somme - 6 - >>> - -Portée locale dans une expression - -.. code-block:: ocaml - - # let a = 2 and b = 3 and c = 4 in - let somme = a+b+c in - somme - - : int = 9 - # somme ;; - Error: Unbound value somme - # a ;; - Error: Unbound value a - -.. important:: - - L’ordre d’évaluation dans un let ... in ... est bien déterminé, - sans grande importance dans un cadre purement fonctionnel, mais important - en cas d’effets de bord - - -Exemple de variable globale modifiée localement (**attention, mauvaise pratique** !) : - -.. code-block:: python - - >>> a = 5 - >>> def print_a(): - ... print("La variable a = {0}.".format(a)) - ... - >>> print_a() - La variable a = 5. - >>> a = 8 - >>> print_a() - La variable a = 8. - >>> - - - -niveau - - Le niveau d’une déclaration (de variable ou de procédure) est le nombre - de procédures sous lesquelles elle est déclarée. Le programme principal - a le niveau 0. - -.. code-block:: python - :linenos: - - def _get_config(name): - # return config value - if not isfile(CONFIG_FILE): - raise Exception("Fichier de configuration non existant") - from ConfigParser import ConfigParser - cfg = ConfigParser(allow_no_value=True) - cfg.read(CONFIG_FILE) - - if name == "SUBNETS": - return eval(cfg.get('eole', 'subnets')) - elif name == "LEASES_FILE": - DHCP_PATH = cfg.get('eole', 'container_path_dhcp') - return join('/', DHCP_PATH, 'var/lib/dhcp/dhcpd.leases') - def get_routes(*args, **kwargs): - """ - Send list of reserved IP - return list of tuple (id, machine name, IP, MAC Adress) - """ - cfg = creole_loader(load_extra=True, rw=False, owner=MODNAME, - mandatory_permissive=False) - return zip(cfg.dhcp.dhcp.id_dhcp.id_dhcp, cfg.dhcp.dhcp.id_dhcp.hostname, - cfg.dhcp.dhcp.id_dhcp.ip, cfg.dhcp.dhcp.id_dhcp.macaddress) - -On voit que l'objet `cfg` ligne 6 et 7 a le même nom que l'objet `cfg` ligne 19. -C'est autorisé et les espaces de nommages sont différents. - - -Description d'une fonction -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Une fonction renvoie une valeur et ne modifie pas l'état courant du programme -en cours d'exécution ni ne réalise d'effets de bord. Elle renvoie -**toujours** quelque chose (même la valeur ``None`` qui n'est pas rien) - -- une procédure peut prendre des paramètres -- elle modifie l'état courant du système - -- Déclaration des paramètes -- Déclaration du corps -- Appel de la fonction - -En programmation fonctionnelle, programme est un ensemble de définitions de fonctions, -un résultat est l'application d’une fonction à une structure de données effective. - -- composant de base : la fonction -- opération de base : l’application - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de fonction}\label{fonction} - \begin{algorithmic}[1] - \Function{permuter}{$a,b$}{} \Comment{définition de la fonction} - \BState \emph{parametres}: \Comment{déclaration (noms, types) des paramètres formels} - \State $a: \textit{int}$ - \State $b: \textit{int}$ - \BState \emph{locales}: \Comment{déclaration (noms, types) des valeurs locales} - \State $z: \textit{int}$ - \BState \emph{corps}: - \State $z \gets a$ - \State $a \gets b$ - \State $b \gets z$ - \BState \emph{return}: \Comment{La valeur, le résulat renvoyé par la fonction} - \EndFunction - \State \Call{permuter}{10, 12} \Comment{appel de la fonction} - \BState \emph{result}: - \State (12, 10) \Comment{Le résultat effectif de la fonction après appel} - \end{algorithmic} - \end{algorithm} - -.. ifconfig:: exercice - - **Exercice** : factoriser le code suivant - :: - - Ecrire "Etes-vous marié ?" - Rep1 <- "" - TantQue Rep1 <> "Oui" et Rep1 <> "Non" - Ecrire "Tapez Oui ou Non" - Lire Rep1 - FinTantQue - ... - Ecrire "Avez-vous des enfants ?" - Rep2 <- "" - TantQue Rep2 <> "Oui" et Rep2 <> "Non" - Ecrire "Tapez Oui ou Non" - Lire Rep2 - FinTantQue - -.. ifconfig:: correction - - **Correction** : - - :: - - Fonction RepOuiNon() en caractère - Truc <- "" - TantQue Truc <> "Oui" et Truc <> "Non" - Ecrire "Tapez Oui ou Non" - Lire Truc - FinTantQue - Renvoyer Truc - Fin - - Ecrire "Etes-vous marié ?" - Rep1 <- RepOuiNon() - ... - Ecrire "Avez-vous des enfants ?" - Rep2 <- RepOuiNon() - - -Définition mathématique -~~~~~~~~~~~~~~~~~~~~~~~~~ - -fonction - - Une fonction f d’un ensemble E vers un ensemble F est une - correspondance qui associe à chaque élément de E au plus - un élément de F. - -- E est appelé le domaine de définition -- F est appelé codomaine -- la **signature** de la fonction : `E → F (int -> int = )` - - -Exemple de signature d'une fonction - -:: - - Fonction RepOuiNon(Msg en Caractère) en Caractère - Ecrire Msg - Truc <- "" - TantQue Truc <> "Oui" et Truc <> "Non" - Ecrire "Tapez Oui ou Non" - Lire Truc - FinTantQue - Renvoyer Truc - Fin Fonction - - ... - Rep1 <- RepOuiNon("Etes-vous marié ?") - ... - Rep2 <- RepOuiNon("Avez-vous des enfants ?") - ... - - -curryfication - - évaluation de l'application d'une fonction - -- évaluter `(f x y)` -- peut donner une **valeur fonctionnelle** -- évaluation de la valeur fonctionnelle sur une valeur des types de base - -:: - - let g = function n -> (function p -> p + 1) n;; - -Typage d'une fonction -~~~~~~~~~~~~~~~~~~~~~ - -.. code-block:: ocaml - - # let f x y z = if x > 0 then y + x else z - x;; - val f : int -> int -> int -> int = - -c’est en fait une fonction à un argument qui retourne une fonction:: - -.. code-block:: ocaml - - val f : int -> (int -> (int -> int)) = - -application de f à trois valeurs - -.. code-block:: ocaml - - # f 1 2 3;; - - : int = 3 - -en programmation fonctionnelle, -les fonctions sont des valeurs comme les autres - - -.. code-block:: ocaml - - # fun x -> x * x;; - - : int -> int = - -Récursivité -~~~~~~~~~~~~ - -.. code-block:: ocaml - - let rec fact n = - if n=0 then 1 else n * fact (n-1) - - -équivalent impératif utilisant une boucle - -.. code-block:: c - - int fact(int n){ - int f = 1 ; - int i = n ; - while (i>0){ - f = f * i; - i-- ; - } ; - return f ; - } - -Définitions par cas -~~~~~~~~~~~~~~~~~~~ - -.. code-block:: ocaml - - let rec fact n = - match n with - 0 -> 1 - | -> n * fact (n-1) - -**exemple** : la fonction puissance - -.. code-block:: ocaml - - let rec puissance x n = match n with - 0 -> 1 - | -> x * puissance x (n-1) - - - -.. ifconfig:: exercice - - **Portée locale dans une fonction** - Quelles sera la valeur de la variable `a` ? - - .. code-block:: python - - >>> a = 1 - >>> def myfunc(): - ... a = 2 - ... return a + 1 - ... - >>> a = myfunc() + a - - -.. ifconfig:: correction - - Correction: - - .. code-block:: python - - >>> a = 1 - >>> def myfunc(): - ... a = 2 - ... return a + 1 - ... - >>> a = myfunc() + a - >>> a - 4 - >>> - - -.. ifconfig:: exercice - - **Exercice** : Portée locale dans une fonction avec variable globale - Quelles sera la valeur de la variable `a` ? - - .. code-block:: python - - >>> a = 1 - >>> def myfunc(): - ... global a - ... a = 2 - ... return a + 1 - ... - >>> a = myfunc() + 3 - >>> - -.. ifconfig:: correction - - **Correction** : - - .. code-block:: python - - >>> a = 1 - >>> def myfunc(): - ... global a - ... a = 2 - ... return a + 1 - ... - >>> myfunc() - 3 - >>> a - 2 - >>> a = myfunc() + 3 - >>> a - 6 - >>> diff --git a/algorithmique/cours/fondement.txt b/algorithmique/cours/fondement.txt deleted file mode 100644 index 874365c..0000000 --- a/algorithmique/cours/fondement.txt +++ /dev/null @@ -1,198 +0,0 @@ -Présentation de l'art de programmer -==================================== - -Qu'est-ce que la programmation ? --------------------------------- - -programmation - - Description d’un calcul (traitement) dans - un langage compréhensible par la machine - (langage de programmation) - -Le processus d'abstraction --------------------------- - -Débuter en programmation n'est pas une chose aisée. Aujourd'hui, la tendance est au -"bas niveau". Souvent, on se jette dans le grand bain : - -- soit en s'approchant au maximum de la machine (admin système et réseau, noyau - linux, langage C) - -- soit en faisant du dev web côté backend, ce qui ramène à une administration réseau - de bas niveau (microservices, monde nodeJS/javascript, etc...) - -Soit on suit un cursus scolaire traditionnel qui commence souvent par une -explication du fonctionnement d'une machine abstraite de bas niveau, puis en -allant de plus en plus haut, mais étant sous-entendu qu'il faut rester connecté au -bas niveau (comprendre comment ça se passe derrière la scène). - -Dans ces deux cas, il est sous-entendu qu'on apprend plus de choses et plus rapidement en mettant -les mains dans le cambouis, ce qui est vrai bien sûr. Mais cela sous-entend qu'un développeur doit -rester le nez dans le guidon. Qu'il doit être un expert de son domaine en accumulant des technologies -sans aucun recul. Bien sûr il se doit d'être un expert du système dans lequel il évolue -(connaissance du système d'exploitation, binding avec le C, du ramasse miette (garbage -collector), interaction avec les différentes librairies, gestion et optimisation de la mémoire, -architecture par microservices, threads...) mais il doit aussi être capable de prendre du recul. - -L'approche algorithmique (algorithmique de pseudo code, algorithmique algébrique et modulaire) -est un véritable moyen pour le programmeur de prendre du recul : elle commence par se placer du -côté de l'esprit humain et de ses capacités de compréhension et d'abstraction, elle autorise une -pensée rationnelle sur l'art de programmer et permet au programmeur d'effectuer les bons choix, -en connaissance de sa discipline. - -Le lien est fait ensuite avec le plus bas niveau grâce une implémentation effective -des langages à partir des paradigmes de rationalisation de la penseée (modules, -objects, généricité, polymorphisme paramétrique...) et d'un outil de communication -avec la machine qu'on appelle compilateur (dont la description est en dehors de -l'objectif de ce cours). - -La tendance générale de l'évolution des langages est de se libérer de ces -contraintes de bas niveau, un peu comme en sciences physiques où les lois physiques -dépendent de l'échelle d'en dessous (du niveau microscopique/quantique) mais qu'à -l'échelle du dessus, on n'a pas affaire à des effets de bas niveau (pas d'effets -quantiques à un niveau macroscopique en général). Ce processus d'évolution est vrai -aussi dans le monde de la technique informatique lui-même (modèle OSI, comment est -construite une trame IP, indépendances de chaque couche (transport, payload) entre -elles). Même la tendance système est à la virtualisation qui accentue encore la -tendance à s'affranchir du bas niveau (le niveau système), le séparer nettement du -haut niveau (le niveau applicatif). - -Il apparaît régulièrement de nouveaux langages. Comment s'orienter ? Quel(s) -langage(s) choisir pour un projet de développement ? Au delà de leurs disparités, la -conception et la genèse de chacun d'eux procèdent d'une motivation partagée : la -volonté d'abstraire. - -- **s'abstraire de la machine** : un langage de programmation permet de - négliger l'aspect *mécanique* de l'ordinateur. On oublie le modèle du - microprocesseur, jusqu'au système d'exploitation sur lequel sera exécuté - le programme. - -- **abstraire les erreurs** : Il s'agit ici de garantir la sûreté d'exécution; un - programme ne doit pas se terminer brutalement ou devenir incohérent en cas d'erreur. - Un des moyens pour y parvenir est le typage des programmes et la mise - en oeuvre d'un mécanisme d'exceptions. - -- **abstraire le mode opératoire** : Il s'agit de choisir une représentation, un - paradigme d'implémentation qui est indépendant du domaine considéré (paradigme - objet, modulaire, générique, composants...) - -- **abstraire les composants** : Les langages de programmation donnent la - possibilité de découper une application en différents composants logiciels, plus ou - moins indépendants et autonomes. La modularité permet une structuration de plus haut - niveau de l'ensemble d'une application complexe. Les langages à objets constituent - une autre approche de la réutilisabilité permettant la réalisation très rapide de - prototypes. - -Description des niveaux d'abstraction par rapport à la machine ---------------------------------------------------------------- - -Les langages de haut niveau simplifient le travail du -programmeur là où les langages de bas niveau permettent de produire un code -plus efficace. - -- **niveau 0** : le langage machine. Illisible, c'est une suite d'optcode. - impossible de coder dans ce langage. - -- **niveau 1** : langage d'assemblage. Il reste très dépendant de la machine - et aujourd'hui il est rare d'en faire, sauf si on code un bootloader par exemple, - la gestion de l'accès à la mémoire est en réel (le mode protégé n'apparaît que après). - Il faut gérer les ressources,le langage est très optimisé mais presque impossible - à maintenir et rendre générique. Aujourd'hui plus personne ne code en assembleur. - -- **niveau 2** : langages dits de **bas niveau** : (exemple : le C, le C++) - indépendance par rapport à la machine, grande structuration mais très verbeux - -- **niveau 3** : langages dits de **haut niveau** : le raisonnement dans ces - langages ne dépent plus de la machine, et ils implémentent des paradigmes de - programmation indépendant de l'état de la mémoire de l'ordinateur, - ils sont indépendant même du système d'exploitation. - -Qu'est-ce qu'une machine ? ---------------------------- - -Une machine, ce truc apparemment si complexe, est en fait -un assemblage de bric et de brac. - -L'assemblage des connecteurs permet de simuler un additionneur, -en prenant en compte les propriétés de **reste euclidien** -de l'addition. - -La structure électronique est composée de : - -- un ordonnanceur. -- le stockage d'un **état**. -- une pile d'instruction - -.. glossary:: - - adressage - - Dès lors qu'on dispose de ces bases électronique au dessus du processeur, - un langage d'assemblage est possible, c'est le langage de calcul sur les registres. - - registre - - machines ont un espace mémoire et un espace de calcul (registres) - -Un ordinateur, c'est très très stupide, mais ça permet de disposer de : - -- une mémoire très grande et ordonnée, -- une capacité à effectuer inlassablement des tâches répétitives -- une grande rapidité de calcul - -Apprendre à programmer, c'est-à-dire être capable de -contrôler la machine. - -.. important:: Apprendre à programmer, c'est-à-dire apprendre à penser de manière structurée, - pour pouvoir accessoirement ensuite communiquer avec une machine. - -Compilateur ------------ - -Schématiquement, un compilateur est un programme qui traduit un -programme d’un langage source vers un langage cible, en signalant -d’éventuelles erreurs. - -Quand on parle de compilation, on pense typiquement à la traduction d’un -langage de haut niveau (C, Java, Caml, ...) vers le langage machine d’un -processeur (Intel Pentium, PowerPC, ...) - -- xml (libre office, word) -> postscript (imprimante) -- postcript -> image -- syntaxe wiki -> html (Wikipédia...) - -compilation graphique - - passer une description, ça donne un dessin genre ocaml Quilt < mon_dessin.txt - passer par une api qui permet de causer avec une interface - -**transpiler** : transformation d'un langage de haut niveau vers un autre -langage de haut niveau. - -- cofee script, typescript -> javascript -- (babel) javascript -> javascript ES 6 -- python -> javascript - -Un compilateur traduit un programme P en un programme Q tel que -pour toute entrée x , la sortie de `Q(x)` soit la même que celle de `P(x)` - -Un interprète est un programme qui, étant donné un programme `P` et une -entrée x , calcule la sortie s de `P(x)` - -Le compilateur fait un travail complexe une seule fois, pour produire un -code fonctionnant pour n’importe quelle entrée -L’interprète effectue un travail plus simple, mais le refait sur chaque entrée -Autre différence : le code compilé est généralement bien plus efficace que -le code interprété - -Typiquement, le travail d’un compilateur se compose d’une phase d’analyse - -- reconnaît le programme à traduire et sa signification -- signale les erreurs et peut donc échouer (erreurs de syntaxe, de portée, de typage, etc.) - -Puis d’une phase de synthèse - -- production du langage cible -- utilise de nombreux langages intermédiaires -- n’échoue pas diff --git a/algorithmique/cours/index.txt b/algorithmique/cours/index.txt deleted file mode 100644 index aa2ef7d..0000000 --- a/algorithmique/cours/index.txt +++ /dev/null @@ -1,19 +0,0 @@ -Introduction à l'algorithmique -================================ - -.. toctree:: - :maxdepth: 2 - - presentation - fondement - langage - algo - programme - fonctions - control - donnees - apercu - modularite - modules - tp - annexes/index diff --git a/algorithmique/cours/langage.txt b/algorithmique/cours/langage.txt deleted file mode 100644 index 67f858d..0000000 --- a/algorithmique/cours/langage.txt +++ /dev/null @@ -1,336 +0,0 @@ -Les langages de programmation -============================= - -langage - - Un langage de - programmation - doit permettre d'écrire des - programmes de bonne qualité - -Un programme doit être : - -- correct -- robuste -- lisible, bien documenté -- facile à modifier, extensible - -Un langage de programmation doit permettre : - -- la programmation structurée -- la structuration avec les types -- proposer un mécanisme d’exceptions -- présenter des caractères de généricité, de polymorphisme et de surcharge - -.. important:: La structuration et l'organisation modulaire sert à maintenir de grands programmes, - Elles sont une nécessité - -Approche historique et chronologique -------------------------------------- - -- Lambda calcul (1930) -- machines de Turing (1936) -- début des langages vers les années 1950 (A0, Fortran(impératif), - Lisp(impératif et fonctionnel), Cobol) -- années 60 : Simula (classes), CPL (compilation séparée) -- années 70 : C (référence du langage impératif de bas niveau), Pascal - (procédures), Smalltalk (programmation orientée objects), Prolog - (programmation logique), Scheme (programmation fonctionnelle pure), Modula, - C++, Ada, Turbo Pascal, Common Lisp, Eiffel (programmation par contrats) -- années 80 : ML, CAML (langages fonctionnels) -- années 90 : Perl, Python, Ruby (languages de scripting multi-paradigmes) - Haskell (fonctionnel pur), Lua, Delphi, Java (orienté objet, machine - virtuelle), PHP (impératif, dédié au web), Erlang (fonctionnel+ - programmation concurrente), javascript (orienté web, objets par - prototypage), OCaml (multi-paradigme, fortement typé, orienté sécurité, - programmation générique, fonctionnelle et objets, modulaire et fonctorielle) -- 2009 : go (google, compilé, typage statique, objets par prototypage, - prgrammation concurrente), Rust (fondation mozilla, multiparadigme, programmation concurrente) - -Les langages actuellement les plus utilisés dans le monde de l'entreprise sont : - -- javascript/NodeJS (70% du code dans le dépôt github) mais victime de son - succès (chaos complet des librairies) -- le go est de plus en plus utilisé, c'est **le** langage qui monte - actuellement -- Python, Ruby, lua, autres langages de scripting (de plus en plus utilisés) -- PHP, Java (stagnants) -- C, C++ (de moins en moins utilisés) - -Approche par typologie des langages ------------------------------------ - -- **A0 (1954)** : possibilité de découpage de programmes en - sous-programmes ; - -- **ALGOL (1958)** : concept de bloc de code (pas forcément nommé) et d'imbrication - de blocs de code ; - -- **C (1971)** : syntaxe claire et simple, programme fortement structuré ; - -- **C (1980)** : le **code objet**, qui consiste à essayer de faire fonctionner - un seul jeu d'instructions sur des machines différentes. Avant, le code - d'assemblage dépendait du processeur, donc il n'y avait pas un seul et unique - jeu d'instructions ; - -- **1980** : déploiement et succès des langages à objets ; - -- **1983** : turbo pascal (Borland) qui fut le tournant du C, - propose un IDE (Environnement de Développement Intégré). - aujourd'hui le turbo pascal a pratiquement disparu mais pas totalement, - il est soutenu par une communauté open source autour de **Lazarus** ; - -- **depuis les années 90** : deux grands groupes de langages. Les langages à - objets, et les langages fonctionnels. Les deux mondes s'interpénètrent (les - avancées actuelles du web, les microservices (Erlang, Haskell), - viennent du monde fonctionnel, le NoSQL, etc). - Les grandes avancées architecturales (système d'exploitation, linux, etc...) - viennent du monde de l'impératif. - - -Approches par modèles de programmation --------------------------------------- - -- **le mécanisme d'exceptions** : il est possible de rompre l'exécution normale d'un - programme à un endroit et de la reprendre à un autre endroit du programme prévu à - cet effet. Ce mécanisme permet de gérer les situations exceptionnelles. - -- **le paradigme impératif** : les entrées-sorties, les modifications physiques de - valeurs et les structures de contrôle itératives sont possibles. - -- **le paradigme fonctionnel** : manipule les fonctions comme étant des valeurs du - langage. Celles-ci peuvent être utilisées en tant que paramètres d'autres fonctions - ou être retournées comme résultat d'un appel de fonction. - -- **le paradigme objet** : La représentation du programme colle à la réalité en - reproduisant des entités relativement proches des objets réel. Attention, le piège - est de croire qu'il s'agit *du* paradigme universel puisqu'il reproduit en miroir le - réel. **C'est en fait un processus d'abstraction comme un autre**. - -Sûreté du langage, typage -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Tri par ordre de sûreté croissant : - -0. typage très faible (presque inexistant aujourd'hui) : 42 == "42" == 42.0... -1. typage dynamique faible : (javascript) (possibilité de changer le prototype - d'un objet pendant l'éxécution du programme, c'est la fête on peut faire - n'importe quoi) -2. typage dynamique fort inféré par le comportement (behavior, duck typing) - (python, ruby, PHP) Le contenu de la variable détermine le choix du typage - `var = 0 -> type int` -3. typage statique déclaré fort (Java) - `int var = 0 ;` (pas mal mais super lourd, pas **agile** du tout) -4. langages à types statiques muni d'un moteur d'inférence de types (Ocaml) - sûreté d'exécution, agilité, sécurité. - - -La syntaxe, la lisibilité -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Importance de la lisibilité (notamment par rapport aux méthodes agiles). - -- courte (python) -- verbeuse (C) -- l'importance des mots clef du langage -- délimiteur de phrase, de blocs (parenthèses, accolades, tabulations, blocs...) - -Langages compilés ou interprétés ? ------------------------------------ - -.. glossary:: - - langage compilé - - une première passe est faite, des validations son effectuées **avant** - la génération du code objet, cette phase est faite par le compilateur. - - compilateur - - programme qui transforme un langage de haut niveau en un langage de base - niveau - - - phase d’analyse syntaxique (source -> syntaxe abstraite) - - phase de synthèse (syntaxe abstraite -> code objet) - - - scripting (langage de scripting) - - langage interprèté - - générique (langage) - - Langage à usage générique, qui peut être utilisé dans n'importe quel - domaine (par opposition au DSL) - - domain specific - - Domain Specific Language, langage destiné à être utilisé dans un - domaine prédéfini. - - paradigmes - - représentation d'une vision particulière à partir d'un modèle théorique - - impératif - - l'algorithme ressemble à une recette de cuisine, - c'est-à-dire à une succession d'instructions à exécuter - les unes à la suite des autres - - fonctionnel - - l'algorithme ne dépend plus de l'ordre d'exécution d'instructions - pas de mélange entre les données et les traitements - - objets (programmation) - - le monde est découpé en catégories - qui permettent de créer des objets - - **développement par composants** - - les objets sont organisés entre eux par composants suivant des designs patterns, - (patrons de conception) - - garbage collector (ramasse miettes) - - la gestion automatique de la mémoire apparaît en 1989 - - machine virtuelle - - portabilité du code (mais diminution en optimisation et performances) - - JIT (just in time compiler) - - code objet, programmes fonctionnant autour de machines virtuelles - - -- **le typage statique** : la vérification de la compatibilité entre les types des - paramètres formels et des paramètres d'appel est effectuée au moment de la - compilation du programme. Dès lors, il n'est pas nécessaire de faire ces - vérifications durant l'exécution du programme ce qui accroît son efficacité. En - outre, la vérification de type permet d'éliminer la plupart des erreurs introduites - par maladresse ou étourderie et contribue à la sûreté de l'exécution. - -- **le typage dynamique** : la vérification de la compatibilité entre les types des - paramètres formels et des paramètres d'appel est effectuée au moment de l'exécution - ou de l'appel à certaines parties de codes du programme. - -- **le polymorphisme paramétrique** : une fonction ou un objet qui n'explore pas la - totalité de la structure d'un de ses arguments accepte que celui-ci ait un type non - entièrement déterminé. Ce paramètre est alors dit polymorphe. Cette particularité - permet de développer un code générique utilisable pour des structures de données - différentes tant que la représentation exacte de cette structure n'a pas besoin - d'être connue par le code en question. L'algorithme de typage est à même de faire - cette distinction. - -- **l'inférence de types** : le programmeur n'a besoin de donner aucune information - de type à l'intérieur de son programme. Le langage se charge seul de déduire du code - le type le plus général des expressions et des déclarations qui y figurent. Cette - inférence est effectuée conjointement à la vérification, lors de la compilation du - programme. - -Les grands paradigmes de programmation ---------------------------------------- - -Le paradigme des objets -~~~~~~~~~~~~~~~~~~~~~~~ - -- 1962 (SIMULA) : premières notions de classes ; - -Pui, une dizaine d'années plus tard : - -- C++ : intégration des classes pour le C ; -- turbo pascal : intégration des classes pour le pascal ; - -Tous les langages actuels ont intégré des traits objets mais de manière très -différentes : - -- perl (1987) -- python (1991) -- Ruby (1993) - -- L'implémentation des objets en python est très proche des notions initiales de - classes issues du Smaltalk et présente une tentative très intéressante - d'unification des objets et des types depuis python 2.2 ; - -- Java (1995) : très grosse réussite industrielle en surfant sur la vague de la - programmation objet, et des machines virtuelles, mais en fait et avec le recul, - doté d'un support objet lourd et alambiqué. - Le monde Java est lourd, avec des outils consommant beaucoup de mémoire et - qui ne satisfont pas à la règle du KISS (Keep It Simple, Stupid) ; - - -Il n'y a pas **une** POO (Programmation Objet), il y a des POO. -Les implémentations objets dans les langages sont riches et variées : - -- objets obligatoirement construits pas des classes (Java, C++, ...) -- objets sans définition de classes (javascript, Ocaml, go, rust) -- langages à attributs (python) -- langages ou le type des objets est défini par leur classe (python, ruby) -- langages ou le type des objets est différent du type de leur classe (Ocaml) -- objets sans classes mais construits par des prototypes (javascript) -- construction d'objets possibles objets sans classe du tout (Ocaml) -- encapsulation des attributs des objets (Java, Ocaml, C++, PHP) -- pas d'encapsulation des attributs (python, ruby, javascript...) - -Le paradigme impératif -~~~~~~~~~~~~~~~~~~~~~~ - -Un programme est une suite d'états de la mémoire de l'ordinateur, -c'est la suite logique des machines de Turing. -La plupart des programmeur aujourd'hui raisonnent suivant ce paradigme, -et ont une très faible visibilité par rapport aux autres paradigmes existants. -Seuls les programmeurs cultivés sont aujourd'hui capable de raisonner -suivant différents paradigmes, ce sont des programmeurs chevronnés et -cultivés. - -Le paradigme fonctionnel -~~~~~~~~~~~~~~~~~~~~~~~~ - -La notion de fonction que possède sous une forme ou une autre la plupart des -langages est empruntée aux mathématiques et non à l'électronique. D'une manière -générale, les langages substituent des modèles formels aux conceptions purement -calculatoires. Ils y gagnent en expressivité. Certains langages fondent leur -paradigme de programmation sur l'abstraction entrée-traitement-sortie, donc sur le -**mathème fonctionnel** et pas sur la boite noire électronique. La fonction -mathématique apporte un niveau opératoire dans le traitement de l'information. - - -Approche par fonctionnalités ----------------------------- - -Plusieurs domaines de l'informatique on proposé/imposé des méthodologies, -des manières de faire. Ces modèles de programmation on fortement influencé -en retour les langages. On reconnaît aujourd'hui : - -- Le modèle client-serveur -- Le modèle de programmation concurrente (exécution de processus légers, threads) : -- Le modèle de développement d'une application de bureau (MVC, ergonomie d'interface) -- Le modèle de développement web (communiquer sur le réseau Internet, API - REST, microservices...) -- Le modèle de programmation système et réseau -- le modèle **Dev Ops** et les méthodes de développement virtualisés -- les langages présentant des **fonctionnalités agiles** - -Conclusion ------------ - -Les langages de haut niveau sont caractérisés par -des concepts tels que : - -- déclaration de valeurs, types, expressions, portée -- expressions, variables, instructions, structures de contrôle -- fonctions, procédures, fermetures -- encapsulation, modules, objets - -=========== ============ -Paradigmes Concepts -=========== ============ -impératif variables, procédures, modules -objets classes, méthodes, héritage, surcharge -fonctionnel fonctions, fermetures, modules -logique prédicats, modules -concurrent tâche/processus, communication -=========== ============ diff --git a/algorithmique/cours/modularite.txt b/algorithmique/cours/modularite.txt deleted file mode 100644 index 276d12d..0000000 --- a/algorithmique/cours/modularite.txt +++ /dev/null @@ -1,200 +0,0 @@ -La programmation structurée -============================= - -Un langage de programmation doit permettre la programmation structurée. - -.. important:: La structuration et l'organisation modulaire sert à maintenir de grands programmes, - Elles sont une nécessité - -Structuration d'un programme ------------------------------ - -La réalisation d'applications importantes oblige le programmeur ou l'équipe de -développement à se poser des questions d'organisation et de structuration. -Aujourd'hui, on dispose de deux grands modèles d'organisation dont les avantages et les -particularités sont distincts. - -L'écriture des vrais programmes consiste à les structurer pour les présenter -comme un assemblage de briques qui s'emboîtent naturellement. -Ce problème se révèle fondamental dès que la taille des programmes devient conséquente. -Si on ne prend pas garde au bon découpage des programmes en modules indépendants, -on se retrouve rapidement débordé par un grand nombre de variables, -et il devient quasiment impossible de réaliser un programme correct. - -La programmation raisonnée ---------------------------- - -Un **programme** est le codage d'un algorithme dans un langage de programmation. -La programmation consiste à modéliser un problème du monde réel sous une forme -symbolique (pour faire résoudre ce problème par un ordinateur). - -Certains problèmes sont **indécidables** ou **ouverts**. -On utilise un langage de programmation pour décrire la **solution** du programme. -La sémantique du programme est le sens de chacune des constructions du langage. -**Comment passer de l'énoncé d'un problème à un programme de bonne qualité ?** - -spécifier - - décrire de manière complète et rigoureuse le problème à résoudre - -modéliser - - proposer une représentation du réel qui soit accessible au calcul - algorithmique - -transcrire - - La transcription du modèle algorithmique se fait dans un langage - de programmation cible adapté au problème - -valider - - La validation du programme est une étape qui permet de s'assurer plus ou - moins fortement que le programme produit les résultats attendus. - La validation va de la série de tests unitaires (validation faible) - à la preuve de programme (validation mathématique forte). - -Conception descendante ------------------------ - -Une vision **centripète** : du général au particulier. - -Il s'agit d'une méthode de résolution d'un problème. On le découpe en tâches -de plus en plus fines, de plus en plus détaillées, qui aboutiront au programme final. - -On met des *trous* dans les algorithmes de plus haut niveau, -c'est-à-dire des phrases en langage naturel. - -.. ifconfig: exercice - - **Exercice** : **Calculer la date du lendemain** - -.. ifconfig: correction - - - l'algorithme de plus bas niveau - - :: - - lendemain jour = - si jour [est le dernier jour du mois] alors - resultat = [calculer le 1er janvier de l'année suivante] - sinon - resultat = lendemain_dansl'année jour - - - les algorithmes de plus bas niveau - - :: - - lendemain_dans_l'année jour = - si jour [est le dernier jour du mois] alors - resultat = [calculer le premier jour du mois suivant] - sinon - resultat = jour suivant jour - - :: - - jour_suivant jour = - jour + 1 - - et ainsi de suite jusqu'à ce que toutes les phrases soient calculables. - -Algorithme vague --------------------- - -L'algorithme vague, c'est quand on pense l'algorithme en se plaçant du côté de -l'implémentation en premier. On a le nez dans le guidon, la vue d'ensemble est -difficile. - -Voici, tiré du monde réel, un exemple d'algorithme vague -("ce que doit faire une fonction"), placé dans un bout de code -(souvent la **docstring** d'une fonction). - -.. code-block:: python - - def upsert_route(*args, **kwargs): - """ - Create or modify an existant DHCP route - param tuple (id or null, machine name, IP, MAC Adress) - return True or False with error message - """ - # si id présent alors modification sinon ajout - # récupère la liste des réservations en cours - # y cherche la variable sur la base de l'ID - # modifie les valeurs - # applique la nouvelle conf DHCP - - return True - -Voici un autre bout de code avec l'algorithme en commentaire, -et l'implémentation effective de l'algorithme - -.. code-block:: python - - def del_route(*args, **kwargs): - """ - Delete an existant DHCP route - param tuple (id, machine name, IP, MAC Adress) - return True or False with error message - """ - # récupère la liste des réservations en cours - # y cherche la variable sur l'id donné en paramètre - # supprime l'entrée avec vérification que les données fournies - # sont bien dans l'enregistrement à supprimer - # applique la nouvelle conf DHCP - route_to_del = (1, "host2","10.1.2.4","6E:FF:56:A2:AF:17") - routes = get_routes() - if route_to_del in routes: - c = creole_loader(load_extra=True, rw=True) - c_id = c.dhcp.dhcp.id_dhcp.id_dhcp.index(route_to_del[0]) - if c.dhcp.dhcp.id_dhcp.macaddress[c_id]==route_to_del[2] - and c.dhcp.dhcp.id_dhcp.ip[c_id]==route_to_del[1]: - c.dhcp.dhcp.id_dhcp.id_dhcp.pop(c_id) - config_save_values(c, MODNAME) - return True - return False - -Les deux grands paradigmes ---------------------------- - -La modularité -~~~~~~~~~~~~~~ - -Les données et les traitements sont regroupés au sein d'une même entité à deux -facettes : d'un côté le code proprement dit, de l'autre son interface. La -communication entre modules s'effectue via leur interface. La description d'un -type peut être masquée en n'apparaissant pas dans l'interface du module. Ces -types de données abstraits facilitent les modifications d'implantation à -l'intérieur d'un module sans affecter les autres modules qui s'en servent. De -plus, les modules peuvent être paramétrés par d'autres modules augmentant -ainsi leur réutilisabilité. - -Le paradigme objet -~~~~~~~~~~~~~~~~~~ - -Les descriptions des traitements et des données sont regroupées dans des -entités appelées **classes**; un objet est une instance (valeur) d'une classe. -La communication entre objets est réalisée par envoi de message, l'objet -receveur détermine à l'exécution (liaison retardée) le traitement -correspondant au message. En cela, la programmation objet est dirigée par -les données. La structuration d'un programme provient des relations entre -classes, en particulier l'héritage permet de définir une classe par extension -d'une autre. - -En programmation objet, un **programme** est une collection d’objets qui communiquent -entre eux par **message**, le **résultat** est un message envoyé à un objet particulier - -Comparaison entre les deux paradigmes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Il y a dualité entre ces deux modèles. - -- On ne peut pas augmenter les composants d'un type dans un module (pas - d'extensibilité des données), mais on peut ajouter de nouveaux traitements - (extensibilité des traitements) sur ces données. - -- En objet, on peut ajouter des sous-classes à une classe (extensibilité des - données) pour traiter des nouveaux cas, mais on ne peut pas ajouter de nouveaux - traitements visibles de la classe ancêtre (pas d'extensibilité des traitements). - -**La combinaison des deux paradigmes offre de nouvelles extensibilités pour les -traitements et les données.** diff --git a/algorithmique/cours/modules.txt b/algorithmique/cours/modules.txt deleted file mode 100644 index 5df4b5e..0000000 --- a/algorithmique/cours/modules.txt +++ /dev/null @@ -1,313 +0,0 @@ -La programmation modulaire -=========================== - -Il s'agit de décomposer un grand programme en -morceaux (**modules**) connectés entre eux par des **interfaces** bien -définies. - -Ces modules doivent être aussi indépendants que possible. - -module - - ensemble de ressources liées sémantiquement - -interface - - mode d’emploi du module, avec en plus un principe de masquage - des informations (partie publique, partie secrète) - - -Signatures, type abstrait et langage de modules : la programmation modulaire -permet d'aller très loin dans la programmation structurée. - - -Définir des fonctions dans un fichier séparé --------------------------------------------- - -Les fonctions peuvent être définies dans un fichier et le programme dans un -autre fichier séparé. Dans ce cas, pour pouvoir être exécuté directement avec -la commande python `nomfichierprogramme.py`, le fichier du programme doit -importer d’abord les fonctions du fichier dans lequel les fonctions sont -définies. - -1. Fichier de fonctions -~~~~~~~~~~~~~~~~~~~~~~~~ - -.. code-block:: python - - # Fichier foncmaxliste.py - # Recherche le premier élément maximal dans une liste ou - #dans une chaine de caractères - def max_list(L) : - k = len(L) - max, x = L[0], 0 - i = 1 - while i < k : - if max < L[i]: - max = L[i] - x = i - i = i + 1 - return max, x - -2. Fichier de programme -~~~~~~~~~~~~~~~~~~~~~~~~ - -Pour utilser les fonctions définies dans d’autres fichiers, le fichier de -programme doit commencer par les instructions qui importent ces fichiers de -fonctions ou directement les fonctions de ces fichiers. Dans la syntaxe -ci-dessous, on importe une ou toutes les fonctions du fichier `foncmaxlist.py`. - -.. code-block:: python - - # Fichier progmaxlist.py - from foncmaxliste import max_list - # ou plus simple: - # from foncmaxliste import * - print max_list([4,5,6,9,12,5,10,3,18,5,6,7]) - couple = max_list([4,5,6,9,12,5,10,3,18,5,6,7]) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - print max_list(’totovaaumarche’) - couple = max_list(’totovaaumarche’) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - -Au lieu d’importer les fonctions, on peut importer le fichier qui définit les -fonctions avec la syntaxe qui suit. Dans ce cas, le fichier de programme sera -changé comme suit : - -.. code-block:: python - - # Fichier prog2maxlist - import foncmaxliste - print foncmaxliste.max_list([4,5,6,9,12,5,10,3,18,5,6,7]) - # la syntaxe indiquant le chemin d’acces a la fonction max_list utiliser ‘‘.’’ - couple = foncmaxliste.max_list([4,5,6,9,12,5,10,3,18,5,6,7]) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - print foncmaxliste.max_list(’totovaaumarche’) - couple = foncmaxliste.max_list(’totovaaumarche’) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - -L’exécution directe du premier fichier de programme:: - - python prog max list.py - -L’exécution directe du seconde fichier de programme:: - - python prog2 max list.py - -Définition de l'implémentation d'un module -------------------------------------------- - -Tout fichier qui contient au moins une définition d’une fonction ou d’une -variable est appelé un module (une bibliothèque). Le nom du module est le nom -du fichier enlevé le suffixe `.py`. Ainsi, un fichier de programme qui contient -au moins une définition d’une fonction ou un fichier qui ne contient que des -définition de fonctions sont des modules. On peut importer un module ou des -fonctions ou variables d’un module dans un programme, comme nous avons vu dans -les exemples ci-dessus. - -.. important:: on peut importer un module, ou bien lancer un module en tant que - programme executable - -.. code-block:: python - - if __name__ == '__main__': - main() - -Pour faciliter la programmation, Python définit un certain nombre de **modules internes**, -appelés les builtins (la librairie standard). - -Par exemple : - -– Lors de l’ouverture d’une session interactive, on est dans un module interne nommé - main . Toutes les variables définies par affectation au niveau de ce module sont valides - globalement dans la session. - -– D’autres modules internes sont string, math, random - -Dans une session de travail sous l’interpréteur Python, la première importation d’un mo- -dule qui, à part des fonctions qu’elle définit, contient des instruction de programme fait -exécuter ces instructions. Dans la même session, les importations suivantes ne font pas -exécuter ces instructions. Pour les exécuter, on utilise la fonction reload(nomdumodule) -(sans sufffixe .py). - -Exemples d'interface --------------------- - -:: - - type: son type - arguments - arg1 : description de l'argument 1 - arg2 : description de l'argument 2 - préconditions: - arg1 > 10 - postconditions: - result < 19 - raises: TypeError, AssertionError, SystemError... - test: tests nominaux pour chaque cas spécifié - -- L'interface racine carrée - -:: - - racine: - type: float -> float - arguments x: float, flottant dont on veut calculer la racine - pré: x >= 0 - test: racine 25.0 -> 5.0 ; racine (-25) -> raises TypeError - -- L'interface `lendemain` - -Il faut définir auparavant un type spécifique appelé `date` - -:: - - lendemain: le lendemain est la date qui désigne - le jour suivant de la date passée en argument - type: date -> date - arguments : - d: date - description: la date dont on veut calculer le lendemain - -Le langages des modules -------------------------- - -.. code-block:: ocaml - - module type PILE = (* signature (interface) du module *) - sig - type ’a t - val create : unit -> ’a t - val push : ’a -> ’a t -> unit - val pop : ’a t -> ’a - end - - (* implémentation du module *) - module Pile : PILE = (* le module est restreint - par la signature PILE *) - struct - type ’a t = ’a list ref - let create () = ref [] - let push x p = p := x::!p - let pop p = match !p with [...] - let rec print p = match p with [...] - end - -- `struct .. end` introduit une collection de définitions, valeurs, types ou modules. - C'est une **structure**. - -- `module Nom = struct .. end` permet de donner un nom à cette structure et - c'est ça un module. C'est une structure nommée. - -- `sig ... end` introduit une signature de module : une interface pour un module. - -On restreint souvent une structure par une signature pour "cacher" certaines -définitions. Une signature de module fournit une **interface** entre l'extérieur -et l'intérieur d'un module. - -En dehors du module, on accède à ses composants grâce à la notation pointée - -.. code-block:: ocaml - - let p = Pile.create() - Pile.push 45 p - -Les foncteurs --------------- - -Si un langage possède un langage de modules, on peut aller plus loin : on peut -considérer un module comme étant une expression de base du langage. - -- La signature d'un module peut être considérée comme le type du module -- La structure du module peut être considéré comme sa valeur - -Quel est l'intérêt ? On peut alors définir des **foncteurs**. - -foncteur - - "fonction" d'une structure vers une autre structure. - On peut ainsi paramétrer un module par un autre module. - -.. code-block:: ocaml - - module Nom (M1 :S1 ) (M2 :S2 ) (M3 :S3 ) ... = - struct - ... - end - -On applique un foncteur à des paramètres modules, pour -obtenir un nouveau module : - -.. code-block:: ocaml - - module M = F (Titi) (Toto) - - -Contrainte de type par signature ------------------------------------- - -:: - - module M = - struct - type t = int * int * int ;; - let make d m y = d, m, y ;; - end ;; - - let d = M.make 8 5 8 ;; - - module type S = - sig - type t ;; - val make : int -> int -> int -> t ;; - end ;; - - module MS = (M:S) ;; - - MS.make 5 1 2 ;; - -Type et signature ------------------- - -:: - - # module type A = sig - val a: int -> int - end ;; - module type A = sig val a : int -> int end - # module B = struct - let a x = x + 1 ;; - end;; - module B : sig val a : int -> int end - # module C = (B:A) ;; - module C : A - - # C.a 2 ;; - - : int = 3 - # - -Module auquel on impose une signature ------------------------------------------ - - -:: - - module type DATE = sig - type t - val make: int -> t - val get_year: t -> int - val get_month: t -> int - end ;; - - module MR = struct - type t = int * int - let make x y = (x, y) - let get_month (x, y) = x - let get_year (x, y) = y - end ;; - - module date = (MR:DATE) ;; diff --git a/algorithmique/cours/presentation.txt b/algorithmique/cours/presentation.txt deleted file mode 100644 index 6263f9e..0000000 --- a/algorithmique/cours/presentation.txt +++ /dev/null @@ -1,72 +0,0 @@ -Avant propos -============ - -Introduction -~~~~~~~~~~~~ - -| "**Que nul n'entre ici s'il n'est géomètre**" -| Maxime apposée au porche d'entrée de l'École de Platon - - -- L'accent est mis sur l'approche **algorithmique scientifique**, dite algorithmique - algébrique. L'algorithmique est un sous-domaine de l'algèbre et des - approches modulaires (arithmétique modulaire...) - -- Le point de vue mathématique étant assez exigeant, **aucun formalisme fort** de - l'algorithmique mathématique ne sera présenté. Aucun symbole mathématique donc, et - seulement du pseudo-code. - L'approche mathématique forte utilisant le formalisme mathématique de - l'algorithmique algébrique est en général enseignée en France uniquement aux cours - des grandes écoles. - -- L'algorithmique présentée ici est donc délibérément pseudo-scientifique mais en revanche - ouverte au **multi-paradigme**. En général l'évocation d'un algorithme en pseudo code est toujours - réducteur car limité au style de programmation le plus à la mode actuellement, c'est-à-dire le - **style impératif**. Nous présenterons un éventail des plus grands paradigmes de programmation - existants. Nous nous limiterons à la **programmation impérative, fonctionnelle, modulaire, - générique et objet**. Nous envisagerons les structures de données et les structures de contrôle - spécifiques à chacun des styles évoqués. - -- Et parce qu'un honnête programmeur doit avoir une vue d'ensemble de **l'état de son art**, - nous évoquerons un panorama des différents langages existants -- historiques et contemporains -- - en les comparants les uns aux autres. - -- Durant tout le cours, nous souhaitons proposer une pédagogie par l'exemple, et nous - limiterons l'exposé à deux langages d'implémentation des algorithmes : le **Python** pour la programmation - impérative modulaire et objet, et le **OCaml**, car nous évoquerons aussi certains points - de programmation fonctionnelle et modulaire, polymorphe et teintée de généricité. - -Intérêt -------- - - -| "**Il ne suffit pas d'avoir les mains propres, il faut avoir l'esprit pur.**" -| Thalès de Milet ; Sentences - VIe s. av. J.-C. - -L'algorithmique en tant que rapport à la vérité et à la pensée juste et vraie, -en tant qu'art de découper un problème complexe en tâches élémentaires, -en tant qu'énoncés de compréhension et de sémantique, -est la seule chose vraiment profonde dans l'informatique. Le reste n'est que 0 ou 1. -Cette notion d'algorithme est profondément enracinée dans le désir humain de -transmettre des méthodes pour comprendre des problématiques, -qu'il s'agisse de processus scientifiques ou mathématiques, de secrets, -de philosophie ou de divination au sens des anciens Grecs. -De règles linguistiques, aussi, chez les Romains. - -Objectifs de ce cours -~~~~~~~~~~~~~~~~~~~~~ - -Il s'agit de : - -- maîtriser et concevoir un algorithme de base, -- choisir une représentation appropriée des données, -- décomposer en sous-problèmes et affinements successifs, -- savoir organiser son code en fonctions et en modules. - -Le développement raisonné d’algorithmes et leur implantation -permet d'acquérir les qualités suivantes : - -+ Analyser et modéliser un problème, spécifier, -+ Exprimer une problématique, une solution ou un algorithme, -+ Traduire un algorithme dans un langage de programmation, -+ Concevoir une réponse à un problème précisément posé. diff --git a/algorithmique/cours/programme.txt b/algorithmique/cours/programme.txt deleted file mode 100644 index 6133cf1..0000000 --- a/algorithmique/cours/programme.txt +++ /dev/null @@ -1,476 +0,0 @@ -Définition d'un programme -========================== - -Qu'est-ce qu'un programme ? ----------------------------- - -- Un **programme** est une suite de **phrases** ; -- Une **phrase** est une **déclaration** ou une **expression** (*statement* en anglais) ; - -Production d'un programme : - -1. on écrit le code source du programme ; -2. on demande au compilateur de le traduire en code machine : c'est la compilation du programme ; -3. on demande à la machine d'effectuer le code machine : c'est l'exécution du programme. - -.. important:: - - L'introduction à la compilation et les différentes phases de la compilation - d'un programme sont des sujets qui ne seront pas traités dans ce cours. - -Dans un programme de base, il y a deux fichiers : - -1. un fichier contenant le code : c'est le source du programme. -2. un fichier contenant le code machine : c'est l'exécutable. - -Que peut faire un programme lorsqu'il est exécuté ? -Le programme doit communiquer. S'il reste isolé, il ne pourra pas -produire quoi que ce soit. Voici les trois moyens de communication qu'a un -programme : - -1. communiquer avec l'utilisateur, -2. communiquer avec des fichiers, -3. communiquer avec d'autres programmes. - -Les expressions ----------------- - -expression - - Une expression est une valeur caculée du langage, une opération arithmétique - qui retourne une valeur (entier, texte, valeur logique...). - C'est donc une suite sémantiquement correcte de **valeurs de base** et **d'opérateurs** - -Par exemple, la ligne suivante est une expression effectuant une addition:: - - 5 + 6 - -Expressions à partir de types de base -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Autres exemples d'expressions : - -- 5 est une expression de type int -- 4.5 est une expression de type float -- 'c' est une expression de type char -- true est une expression de type bool -- print ('c') est une expression de type None -- raw_input est une expression de type string - -Les expressions se complexifient avec la complexification des données et des traitements, -mais le principe de l'expressivité d'un langage reste le même. - - -.. ifconfig:: exercice - - **Exercice** : - Le parenthésage et les opérateurs booléens:: - - Variables A, B, C, D, E en Booléen - Variable X en Entier - Début - Lire X - A <- X > 12 - B <- X > 2 - C <- X < 6 - D <- (A ET B) OU C - E <- A ET (B OU C) - Ecrire D, E - Fin - - **Que valent D et E si X = 3 ?** - - -.. ifconfig:: correction - - **Correction** : D sera VRAI alors que E sera FAUX - - - - -Les déclarations ------------------ - -Un autre exemple d'expression : - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple d'expression} - \begin{algorithmic}[1] - \BState \emph{sortie}: $l$ \Comment{C'est l'expression calculée renvoyée} - \ForAll {$v \in V(G)$} - \State $l(v) \leftarrow \infty$ - \EndFor - \State $l(u) \leftarrow 0$ - \Repeat - \For {$i \leftarrow 1, n$} - \State $min \leftarrow l(v_i)$ - \For {$j \leftarrow 1, n$} - \If {$min > e(v_i, v_j) + l(v_j)$} - \State $min \leftarrow e(v_i, v_j) + l(v_j)$ - \State $p(i) \leftarrow v_j$ - \EndIf - \EndFor - \State $l(i) \leftarrow min$ - \EndFor - \State $changed \leftarrow l \not= l’$ - \State $l \leftarrow l$ - \Until{$\neg changed$} - \end{algorithmic} - \end{algorithm} - -Exemple de déclarations : - -- `a = 1` -- `b = 'c'` - -.. important:: Le signe égal est utilisé de deux manières - - - lors d'une déclaration d'une expression - - lorsque deux expressions sont équivalentes - - Suivant les langages, il y a deux symboles différents, ou alors - ils sont identiques. - -Il s'agit de **renseigner** une valeur dans une expression nommée - -- en javascript : - -.. code-block:: javascript - - var b = "blabla" ; - -- en python : - -.. code-block:: python - - b = "blabla" - -- en java : - -.. code-block:: java - - String b = "A"; - -- en OCaml : - -.. code-block:: ocaml - - let a = 1 - -Grâce au mécanisme d'inférence de type dans OCaml, le mot-clef **let** -signifie ici véritablement l'instanciation d'une valeur au sens -mathématique du terme : soit `a` l'entier tel que a soit égal à 1... - -En OCaml comme dans tous les langages fonctionnels, tout ce que nous avons l'habitude -d'appeler des "variables" à propos des affectations, sont en fait des **constantes** -au sens du paradigme impératif de la programmation. - -.. important:: - - Par voie de conséquence, le symbole ``=`` est utilisé à la fois pour la définition des objets et pour le test d'égalité. - Pour les autres langages, on utilise `==` ou bien `===` (javascript) car - le `=` est sémantiquement déjà utilisé... - -Toutes ces notation, apparemment anodines, correspondent donc à des paradigmes de programmation - -Lorsqu'on ne déclare pas les types des symboles déclarés, c'est que soit - -- le typage est faible -- le typage est dynamique (calcul du type en fonction du contenu de la - variable) -- le typage est statique et fort mais ça ne se voit pas - (var le système les calcule automatiquement par inférence de type) - -Assigner, allouer, affecter une chose à quelqu'un ou à une autre chose. - -Exemples dans la langue française : - -- Le traitement que le budget **alloue** à ces fonctionnaires. -- Un système d'exploitation multitâche alloue le travail du processeur aux processus en attente, pour un bref laps de temps, à leur tour. - -.. glossary:: - - affectation - - Une affectation, aussi appelée assignation par anglicisme, est une structure qui permet d'attribuer une valeur à une variable. - - Il s'agit d'une structure particulièrement courante en programmation impérative, et dispose souvent pour cette raison d'une notation courte et infixée, - comme ``x = expr`` ou ``x := expr`` ou encore `x <- expr`. - Dans certains langages, le symbole est considéré comme un opérateur d'affectation, - et la structure entière peut alors être utilisée comme une expression. - D'autres langages considèrent une affectation comme une instruction et ne permettent pas cet usage. - -Voir aussi : - -- Les déclarations de types primitifs et conversions de type -- Les types de base:: - - Octets (8 bits) byte - Entiers courts (16 bits) short - Entiers (32 bits) int - Entiers longs (64 bits) long - Réels (32 bits) float - Réels longs (64 bits) double - Caractères (16 bits) char - Booléens boolean - -- Déclarations par lots:: - - x1 = e1, x2 = e2, ... xn = en; - -Exercices : algorithmes sur les affectations - -.. ifconfig:: exercice - - **Exercice** : Calculs d'affectation:: - - Variables A, B, C en Entier - Début - A <- 3 - B <- 10 - C <- A + B - B <- A + B - A <- C - Fin - -.. ifconfig:: correction - - **Correction**:: - - Après La valeur des variables est : - A <- 5 A = 5 B = ? - B <- 2 A = 5 B = 2 - A <- B A = 2 B = 2 - B <- A A = 2 B = 2 - -.. ifconfig:: exercice - - **Exercice** : Calculs d'affectation - Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ? - :: - - Variables A, B en Entier - Début - A <- 5 - B <- 2 - A <- B - B <- A - Fin - -.. ifconfig:: correction - - **Correction**:: - - Après La valeur des variables est : - A <- 5 A = 5 B = ? - B <- 2 A = 5 B = 2 - A <- B A = 2 B = 2 - B <- A A = 2 B = 2 - -.. ifconfig:: exercice - - **Exercice** : écrire un algorithme permettant d’échanger les valeurs - de deux variables A et B, et ce quel que soit leur contenu préalable. - -.. ifconfig:: correction - - **Correction**:: - - Début - A <- n - B <- p - C <- A - A <- B - B <- C - Fin - - Il faut passer par une variable dite temporaire (la variable C) - - -.. ifconfig:: exercice - - **Exercice** : - Que produit l’algorithme suivant ? - - :: - - Variables A, B, C de type entier - Début - A <- 423 - B <- 12 - C <- A + B - Fin - -.. ifconfig:: correction - - **Correction** : dans un prompt python - - .. code-block:: python - - >>> a = 423 - >>> b = 12 - >>> c = a + b - >>> c - 435 - -.. ifconfig:: exercice - - **Exercice** : - Que produit l’algorithme suivant ? - - :: - - Variables A, B, C de type texte - Début - A <- "423" - B <- "12" - C <- A + B - Fin - -.. ifconfig:: correction - - **Correction** : dans un prompt python - - .. code-block:: python - - >>> a = '423' - >>> b = '12' - >>> c = a + b - >>> c - '42312' - -Interaction avec l'utilisateur ------------------------------- - -Il est possible de communiquer de la manière suivante avec un programme : - -- lire et écrire sur l'entrée/sortie standard -- lire et écrire dans un fichier -- afficher (du texte, un nombre...) -- lire (du texte, un nombre...) -- interagir avec les prompts - - -.. code-block:: ocaml - - let x = read_int () in - let signe = - if x >= 0 - then " positif " - else " négatif " in - print_string signe - - -.. ifconfig:: exercice - - **Exercice** : écrire un algorithme qui demande le prénom d'une personne - et renvoie "bonjour, je m'appelle " - -.. ifconfig:: correction - - **Correction** : (implémentation en python) - - .. code-block:: python - - # coding: utf-8 - prenom = raw_input("quel est ton prénom ? \n") - print("bonjour, je m'appelle " + prenom.capitalize()) - - -La REPL (boucle d'interaction) -------------------------------- - -.. glossary:: - - REPL - - Read Eval Print Loop : outil principal de communication avec un programme - ou avec un système. Exemples : la console python, le prompt OCaml. - - interface - - outil de communication avec un programme. - - - interface texte - - interface graphique - -**Exemples de REPL** - -Le prompt python:: - - Python 2.7.12 (default, Nov 19 2016, 06:48:10) - [GCC 5.4.0 20160609] on linux2 - Type "help", "copyright", "credits" or "license" for more information. - >>> - >>> dir() - ['__builtins__', '__doc__', '__name__', readline', 'rlcompleter'] - >>> - -Le prompt ipython:: - - Python 2.7.12 (default, Nov 19 2016, 06:48:10) - Type "copyright", "credits" or "license" for more information. - - IPython 2.4.1 -- An enhanced Interactive Python. - ? -> Introduction and overview of IPython's features. - %quickref -> Quick reference. - help -> Python's own help system. - object? -> Details about 'object', use 'object??' for extra details. - - In [1]: - -Le prompt OCaml (utop):: - - Type #utop_help for help about using utop. - - ─( 09:21:24 )─< command 0 >── - utop # - # let x = 1 in x + 2;; - - : int = 3 - # let y = 1 + 2;; - val y : int = 3 - # y * y;; - - : int = 9 -Construire une boucle d'interaction avec l'utilisateur en python:: - - #!/usr/bin/env python3 - error = True - while error: - try: - entier = int(input('donnez un entier : ')) - error = False - except: - print('une valeur entiere est attendue') - print(entier) - -Lire et écrire dans un fichier ------------------------------- - -Les descripteurs de fichiers (file handle) - -Exemple en python - -.. code-block:: python - - >>> fh = file("test.txt", "w") - >>> fh.write("un contenu exemple") - >>> fh.close() - >>> - -.. code-block:: python - - >>> fh.read() - 'un contenu exemple' - >>> fh.close() - >>> - -Linéarisation (serialisation) de données par exemple en json - -.. code-block:: python - - import json - data = dict(a='essai', b='essai2', c=range(3)) - with open('data.txt', 'w') as outfile: - json.dump(data, outfile) diff --git a/algorithmique/cours/tp.txt b/algorithmique/cours/tp.txt deleted file mode 100644 index 3d3ebd5..0000000 --- a/algorithmique/cours/tp.txt +++ /dev/null @@ -1,101 +0,0 @@ -Travaux Pratiques -================= - -.. ifconfig:: exercice - - **travaux pratiques :** - - Ecrire un algorithme qui renvoie le résultat d’une mini-calculatrice. Cette - méthode aura - comme paramètre deux nombres et une chaîne de caractère qui vaudra « + », « - - », « * », - « / ». - -.. ifconfig:: exercice - - **travaux pratiques :** - - - Ecrire un algorithme qui renvoie si deux mots (chaîne de caractères) passés en - paramètre - sont des anagrammes l’un de l’autre. (Lettres identiques mais dans un ordre - différent) - - -.. ifconfig:: exercice - - **travaux pratiques :** - - ascii art (ligne d'étoiles) - - Concevoir un algorithme qui, pour un caractère imprimable et un nombre n - donnés, imprime une barre - horizontale de n de ces caractères. - - ``****************`` - - 2. Modifier l’algorithme pour l’impression d’une barre double. - - :: - - **************** - **************** - - 3. Modifier l’algorithme pour l’impression d’une barre d’épaisseur quelconque - donnée. - 4. (optionnel) Transformer les algorithmes ci-dessus en fonctions. - 5. Écrire un programme Java implémentant la dernière version de l’algorithme - (épaisseur quelconque). - - 3.3 - Triangle de nombres - Concevoir un algorithme qui imprime pour n donné:: - - 1 - 1 2 - 1 2 3 - 1 2 3 4 - 1 2 3 4 5 - ........... - ............. - ............... - 1 2 3 4 5 6 ... n - -.. ifconfig:: exercice - - **travaux pratiques :** - - code de césar : faire un programme pour chiffrer et déchiffrer par décalage - - exemples : Effectue une rotation de x caractères vers la droite:: - - >>> print(chiffre('bonjour', 3)) - erqmrxu - >>> print(chiffre('Bonjour les amis!', 3)) - Erqmrxu ohv dplv! - >>> print(chiffre('Erqmrxu ohv dplv!', 23)) - Bonjour les amis! - -.. ifconfig:: exercice - - **travaux pratiques :** - - :: - - écrire “Entrer un numéro de mois” - mois <- lire - selon que mois est - cas 1 : écrire “janvier (31 jours)” - cas 2 : écrire “février (28 ou 29 jours)” - cas 3 : écrire “mars (31 jours)” - cas 4 : écrire “avril (30 jours)” - cas 5 : écrire “mai (31 jours)” - cas 6 : écrire “juin (30 jours)” - cas 7 : écrire “juillet (31 jours)” - cas 8 : écrire “août (31 jours)” - cas 9 : écrire “septembre (30 jours)” - cas 10 : écrire “octobre (31 jours)” - cas 11 : écrire “novembre (30 jours)” - cas 12 : écrire “décembre (31 jours)” - défaut : écrire “numéro invalide” - fselon diff --git a/algorithmique/diapos/Makefile b/algorithmique/diapos/Makefile deleted file mode 100644 index fd60fc0..0000000 --- a/algorithmique/diapos/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -RST = python tools/rst.py - -TEXDOCUMENTS = $(basename $(wildcard *.tex)) -RSTDOCUMENTS = $(basename $(wildcard *.txt)) - -SOURCES = $(addsuffix .tex,$(TEXDOCUMENTS)) -DVI = $(addsuffix .dvi,$(TEXDOCUMENTS)) -POSTSCRIPT = $(addsuffix .ps,$(TEXDOCUMENTS)) -POSTSCRIPT_GZ = $(addsuffix .ps.gz,$(TEXDOCUMENTS)) -PDF = $(addsuffix .pdf,$(TEXDOCUMENTS)) -RSTSOURCES = $(addsuffix .txt,$(RSTDOCUMENTS)) -HTML = $(TEXDOCUMENTS) $(addsuffix .html,$(RSTDOCUMENTS)) - -all: dvi ps ps.gz html -dvi: $(DVI) -ps: $(POSTSCRIPT) -ps.gz: $(POSTSCRIPT_GZ) -pdf: $(PDF) -html: $(HTML) - - -${DVI}: %.dvi: %.tex - latex $< - latex $< - -${POSTSCRIPT}: %.ps: %.dvi - dvips -o $@ $< - -${POSTSCRIPT_GZ}: %.ps.gz: %.ps - gzip -c $< > $@ - -${PDF}: %.pdf: %.tex - rm -f $*.out $*.log $*.aux - xelatex $< - rm -f $*.out $*.log $*.aux - -%: %.tex %.dvi - latex2html -local_icons $< - touch $@ - -%.html: %.txt - $(RST) $< > $@ - - -clean: - rm -f -- *~ *.log *.aux *.out *.nav *.snm *.toc ${DVI} ${POSTSCRIPT} ${POSTSCRIPT_GZ} ${PDF} - rm -fr ${HTML} diff --git a/algorithmique/diapos/beamer.tex b/algorithmique/diapos/beamer.tex deleted file mode 100644 index 62eb264..0000000 --- a/algorithmique/diapos/beamer.tex +++ /dev/null @@ -1,268 +0,0 @@ -\documentclass[ignorenonframetext]{beamer} -\usepackage{graphicx} -% Internal links only wors with second screen on the right -% \setbeameroption{show notes on second screen} -\usetheme{Madrid} -\usecolortheme{dolphin} - -% gets rid of bottom navigation bars -\setbeamertemplate{footline}[frame number]{} - -% gets rid of navigation symbols -\setbeamertemplate{navigation symbols}{} - -%\usetheme{Warsaw} -%\usepackage[french]{babel} -%\usepackage[utf8,utf8x]{inputenc} -%\usepackage[T1]{fontenc} - - -% Replace babel -\usepackage{polyglossia} -\setdefaultlanguage{french} - -%% Require XeTeX -\usepackage{xltxtra} -\usepackage{fontspec} -\usepackage{xunicode} - -\logo{ - \hspace{120pt} - \includegraphics[width=2cm]{img/cesi.jpg}~ - \hspace{113pt} - \includegraphics[width=1cm]{img/logo-cadoles.png}~ -} - - -%%\setbeamertemplate{background}{\includegraphics[width=128mm]{beamer-skel/img/banner01.png}} - -\title[]{Algorithmique} - -\subtitle{CESI alternance} -\subtitle{promotion GMSI B3} - -\author[Gwenaël Rémond]{} - -%\institute[E.O.L.E]{\includegraphics[width=2cm]{beamer-skel/img/logo-eole.png}} -\institute[Cadoles]{\includegraphics[width=2cm]{img/cesi.jpg}} - -%\date{{\small 8 avril 2013}} - -\subject{Talks} - -\AtBeginSection[] % Add a TOC with current section highlighted -{ - \begin{frame} - \frametitle{Plan} - \tableofcontents[currentsection] - \end{frame} -} - - -\usepackage{hyperref} -\usepackage{hyperxmp} -\hypersetup{% - colorlinks=true,linkcolor=blue,urlcolor=blue,pdfpagemode=UseNone, - pdftitle={EAD3}, - pdfsubject={Présentation technique d'EWT}, - pdfauthor={EOLE}, - pdfkeywords={EOLE, J-EOLE, distribution, GNU, Linux, Éducation, - nationale, Ubuntu}, - pdflang={fr-FR}, - pdfcopyright={Copyright © 2017 Équipe EOLE }, % Require XeTeX - pdflicenseurl={http://creativecommons.org/licenses/by-nc-sa/2.0/fr/}, -} - -\parskip=0.8em - -\begin{document} - -\frame{\titlepage} - -\section{Introduction} -\begin{frame} -\frametitle{Objectifs} - -\texttt{ - "Il ne suffit pas d'avoir les mains propres, \\ - il faut aussi avoir l'esprit pur."\\ -} -\emph{Thalès ; VIe s. av. J.-C.} - -\begin{itemize} -\item<1-> maîtriser et concevoir un algorithme, -\item<2-> choisir une représentation appropriée des données, -\item<3-> décomposer en sous-problèmes et affinements successifs, -\item<4-> savoir organiser son code et faire des petits programmes en python. -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{L'art de programmer} -\texttt{GEEK SUBLIME (Vikram CHANDRA) -Une vision esthétique, littéraire, mathématique du codage} - -\begin{itemize} -\item<1-> Programmer, c'est abstraire, prendre du recul. -\item<2-> Abstraire, par rapport à quoi ? Par rapport à la machine -\item<3-> Les niveaux d'abstraction par rapport à la machine -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{Les langages de programmation} -\begin{itemize} -\item Qu'est-ce qu'un langage de programmation ? -\item Les grands paradigmes de programmation (procédural, objet, fonctionnel, modulaire, générique \dots) -\item L'historique des langages. -\end{itemize} -\end{frame} - -\section{Algorithmique} -\begin{frame} -\frametitle{Les algorithmes} -\begin{itemize} -\item définition d'un algorithme -\item implémentation d'un algorithme -\item représentation d'un algorithme dans un langage cible -\end{itemize} -\end{frame} - -\section{Algorithmique pour la programmation} - -\begin{frame} -\frametitle{Qu'est-ce qu'un programme ?} -\begin{itemize} -\item <1-> Les expressions -\item <2-> Les déclarations -\item <3-> La REPL (Read Eval Print Loop) -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{Approche générale des fonctions} -\begin{itemize} -\item Les procédures -\item La portée d'une variable -\item Les fonctions -\end{itemize} -\end{frame} - - -\begin{frame} -\frametitle{Les structures de contrôle} -\begin{itemize} -\item Le branchement conditionnel -\item L'itération -\item \dots -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{Les structures de données} -\begin{itemize} -\item Les listes -\item Les dictionnaires -\item Les arbres, les graphes \dots -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{L'état de l'art de l'agorithmique} -\begin{itemize} -\item en mathématiques - \begin{itemize} - \item algorithmique algébrique, - \item arithmétique modulaire, - \item \dots - \end{itemize} -\item en informatique - \begin{itemize} - \item en informatique fondamentale - \item en langages de programmation - \item dans touts les domaines où l'informatique intervient\dots - \end{itemize} -\item en sciences physique, en biologie -\item en sciences sociales (réseaux sociaux, auto-organisation\dots) -\end{itemize} -\end{frame} - -\section{Programmation modulaire} -\begin{frame} -\frametitle{La programmation modulaire} -\begin{itemize} -\item La programmation raisonnée -\item Le paradigme modulaire vs le paradigme objet -\item exemple de programmation modulaire en python -\end{itemize} -\end{frame} - - - - -% Not present in TOC -\appendix - -\begin{frame}[label=thanks]{Remerciements} - - Je remercie la communauté du logiciel libre pour tous ces - merveilleux logiciels sans lesquels si peu de choses existeraient. - - Cette présentation a été réalisée grâce aux logiciels libres - suivants~: - - \begin{itemize} - \item Le système de composition \LaTeX{} - \href{https://fr.wikipedia.org/wiki/TeX_Live}{TeX Live} - \item L'éditeur de texte - \href{http://www.vim.org/}{Vim} - \item L'environnement graphique - \href{http://gnome.org/}{Gnome} - \item Le système d'exploitation - \href{https://debian.org/}{Debian} - \end{itemize} - - \begin{center} - % Do not mess with graphics - \hypersetup{hidelinks} - \begin{tabular}{cccccc} - \href{http://www.gnu.org}{\includegraphics[height=1.3cm]{graphics/gnu-head.pdf}} & - \href{http://www.kernel.org}{\includegraphics[height=1.2cm]{graphics/tux.pdf}} & - \href{http://www.debian.org/}{\includegraphics[height=1cm]{graphics/debian.eps}} & - \href{https://fr.wikipedia.org/wiki/TeX_Live}{\includegraphics[height=1cm]{graphics/texlive.pdf}} - \end{tabular} - \end{center} - -\end{frame} - -\begin{frame}[label=license]{Licence} - Cette présentation est mise à disposition sous licence\\ - \href{http://creativecommons.org/licenses/by-sa/4.0}% - {Creative Commons \textsc{by-sa 4.0}} - \begin{columns}[t] - \begin{column}{5.5cm} - \begin{itemize} - \item Attribution - \end{itemize} - \end{column} - \begin{column}{6.5cm} - \begin{itemize} - \item Partage dans les mêmes conditions - \end{itemize} - \end{column} - \end{columns} - Vous pouvez obtenir une copie de la licence - \begin{block}{par Internet} - \href{http://creativecommons.org/licenses/by-nc-sa/4.0}% - {\url{http://creativecommons.org/licenses/by-nc-sa/4.0}} - \end{block} - \begin{block}{par courrier postal} - \begin{quote} - Creative Commons\\ - 444 Castro Street, Suite 900 Mountain View,\\ - California, 94041, USA. - \end{quote} - \end{block} -\end{frame} - -\end{document} diff --git a/algorithmique/diapos/graphics/Logo-EOLE.eps b/algorithmique/diapos/graphics/Logo-EOLE.eps deleted file mode 100644 index 13f4889..0000000 --- a/algorithmique/diapos/graphics/Logo-EOLE.eps +++ /dev/null @@ -1,133 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: cairo 1.14.8 (http://cairographics.org) -%%CreationDate: Tue May 16 12:20:58 2017 -%%Pages: 1 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%BoundingBox: 0 -1 232 85 -%%EndComments -%%BeginProlog -save -50 dict begin -/q { gsave } bind def -/Q { grestore } bind def -/cm { 6 array astore concat } bind def -/w { setlinewidth } bind def -/J { setlinecap } bind def -/j { setlinejoin } bind def -/M { setmiterlimit } bind def -/d { setdash } bind def -/m { moveto } bind def -/l { lineto } bind def -/c { curveto } bind def -/h { closepath } bind def -/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto - 0 exch rlineto 0 rlineto closepath } bind def -/S { stroke } bind def -/f { fill } bind def -/f* { eofill } bind def -/n { newpath } bind def -/W { clip } bind def -/W* { eoclip } bind def -/BT { } bind def -/ET { } bind def -/pdfmark where { pop globaldict /?pdfmark /exec load put } - { globaldict begin /?pdfmark /pop load def /pdfmark - /cleartomark load def end } ifelse -/BDC { mark 3 1 roll /BDC pdfmark } bind def -/EMC { mark /EMC pdfmark } bind def -/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def -/Tj { show currentpoint cairo_store_point } bind def -/TJ { - { - dup - type /stringtype eq - { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse - } forall - currentpoint cairo_store_point -} bind def -/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore - cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def -/Tf { pop /cairo_font exch def /cairo_font_matrix where - { pop cairo_selectfont } if } bind def -/Td { matrix translate cairo_font_matrix matrix concatmatrix dup - /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point - /cairo_font where { pop cairo_selectfont } if } bind def -/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def - cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def -/g { setgray } bind def -/rg { setrgbcolor } bind def -/d1 { setcachedevice } bind def -%%EndProlog -%%BeginSetup -%%EndSetup -%%Page: 1 1 -%%BeginPageSetup -%%PageBoundingBox: 0 -1 232 85 -%%EndPageSetup -q 0 -1 232 86 rectclip q -0.290196 0.247059 0.454902 rg -133.668 16.757 m 133.668 16.757 133.25 1.257 148.941 1.257 c 176.328 1.257 - l 170.723 3.749 168.633 5.874 164.891 10.585 c 150.969 10.585 l 147.234 - 10.585 145.441 13.222 145.441 17.538 c 145.441 17.538 145.492 75.363 145.414 - 75.445 c 142.301 82.999 133.668 84.519 133.668 84.519 c 133.668 83.995 -133.676 39.347 133.668 16.757 c h -133.668 16.757 m f -41.039 38.73 m 41.207 38.808 41.25 38.921 41.457 39.109 c 41.5 40.347 41.375 - 41.511 41.164 42.823 c 40.625 46.238 40.664 49.726 41.207 53.07 c 41.125 - 53.214 l 41.043 53.366 40.914 53.405 40.914 53.405 c 40.664 53.48 40.414 - 53.554 40.121 53.515 c 35.613 53.366 31.141 52.577 26.758 51.265 c 24.457 - 50.702 22.16 50.14 19.863 49.577 c 17.984 49.015 16.688 48.152 15.812 46.913 - c 16.062 46.839 16.145 46.691 16.23 46.538 c 16.48 46.464 l 16.395 46.238 - l 15.98 45.863 15.812 45.409 15.895 44.886 c 15.977 44.738 16.105 44.698 - 16.188 44.55 c 16.523 44.327 16.859 44.101 17.062 43.909 c 17.234 43.988 - 17.234 43.988 17.355 43.952 c 17.523 44.027 17.816 44.062 18.023 44.249 - c 18.316 44.288 18.445 44.249 18.57 44.21 c 24.836 43.464 30.973 41.999 - 37.027 39.933 c 37.152 39.894 37.281 39.855 37.242 39.749 c 37.324 39.597 - 37.449 39.558 37.406 39.445 c 37.91 39.296 l 38.91 38.995 39.785 38.734 - 40.75 38.698 c 40.914 38.769 40.914 38.769 41.039 38.73 c 39.117 40.687 - m 38.117 40.988 l 39.078 40.948 l 39.16 40.796 39.117 40.687 39.117 40.687 - c f -49.855 72.859 m 49.855 72.859 54.316 79.749 63.262 84.269 c 13.684 84.269 - l 0.484 84.269 0.527 73.152 0.527 73.152 c 0.527 17.499 l 0.527 17.499 -0.117 1.984 15.809 1.984 c 64.07 1.984 l 58.465 4.472 54.559 8.597 50.816 - 13.308 c 50.816 13.308 15.844 13.296 15.891 13.308 c 11.449 13.308 12.086 - 17.542 12.086 17.542 c 12.156 69.034 l 12.156 73.109 15.902 72.859 15.902 - 72.859 c f -69.723 45.148 m 69.723 45.148 66.891 28.866 79.219 23.05 c 84.949 20.351 - 89.504 19.945 95.855 22.363 c 99.852 23.882 103.457 27.659 104.977 31.769 - c 106.496 35.878 105.191 40.874 101.199 44.757 c 99.793 38.538 98.297 33.53 - 92.91 30.741 c 89.711 29.116 86.457 29.386 83.211 30.995 c 79.961 32.605 - 77.473 36.48 76.484 40.363 c 76.484 40.363 74.473 47.585 82.195 59.417 -c 75.809 56.718 70.875 52.245 69.723 45.148 c h -69.723 45.148 m f -0.945098 0.792157 0.0745098 rg -110.621 8.773 m 117.836 13.503 123.312 20.792 125.211 30.261 c 125.238 -30.429 l 126.707 37.968 125.305 45.933 121.43 52.601 c 117.527 59.308 110.711 - 64.777 102.098 65.82 c 102.074 65.831 l 96.797 66.464 90.988 64.273 86.93 - 60.507 c 82.406 55.163 80.273 51.816 80.387 44.03 c 84.254 49.132 94.043 - 54.202 100.949 53.523 c 105.414 52.984 108.629 50.445 110.898 46.542 c -113.168 42.636 114.066 37.445 113.184 33.058 c 110.383 19.085 94.641 12.073 - 81.125 15.976 c 62.398 21.382 55.426 40.464 63.086 58.038 c 72.824 73.859 - 90.422 80.905 113.074 77.519 c 105.887 85.03 93.703 83.984 93.703 83.984 - c 82.363 84.874 61.398 78.519 53.613 63.808 c 42.234 42.316 52.059 11.566 - 78.055 4.062 c 89.188 0.847 101.344 2.695 110.621 8.777 c h -110.621 8.773 m f -0.290196 0.247059 0.454902 rg -194.387 67.495 m 185.594 67.495 178.215 64.179 172.285 57.597 c 166.355 - 51.011 164.41 42.503 164.41 32.046 c 164.41 20.98 166.184 15.999 171.609 - 9.894 c 180.992 -1.075 203.68 1.32 210.367 1.402 c 217.055 1.484 219.438 - 1.644 231.012 0.57 c 228.027 5.839 220.824 9.495 218.348 10.011 c 206.766 - 12.195 193.328 8.179 181.414 15.484 c 176.691 19.57 175.734 22.14 175.559 - 29.62 c 223.012 29.62 l 223.012 35.269 l 223.012 45.374 219.598 53.257 -214.785 58.945 c 208.164 64.816 201.25 67.409 194.387 67.495 c h -194.184 58.421 m 199.434 58.421 203.531 56.702 206.484 53.245 c 209.438 - 49.788 211.941 44.956 211.984 38.745 c 175.684 38.745 l 175.715 44.808 -177.715 49.339 181.262 52.972 c 184.805 56.601 189.109 58.421 194.184 58.421 - c h -194.184 58.421 m f -Q Q -showpage -%%Trailer -end restore -%%EOF diff --git a/algorithmique/diapos/graphics/Logo-EOLE.svg b/algorithmique/diapos/graphics/Logo-EOLE.svg deleted file mode 100644 index f55c0d7..0000000 --- a/algorithmique/diapos/graphics/Logo-EOLE.svg +++ /dev/null @@ -1,1277 +0,0 @@ - - - -image/svg+xml       \ No newline at end of file diff --git a/algorithmique/diapos/graphics/Logo-EOLEienne.eps b/algorithmique/diapos/graphics/Logo-EOLEienne.eps deleted file mode 100644 index 72c3b78..0000000 --- a/algorithmique/diapos/graphics/Logo-EOLEienne.eps +++ /dev/null @@ -1,318 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: cairo 1.14.8 (http://cairographics.org) -%%CreationDate: Tue May 16 12:15:46 2017 -%%Pages: 1 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%BoundingBox: 0 -1 1660 851 -%%EndComments -%%BeginProlog -save -50 dict begin -/q { gsave } bind def -/Q { grestore } bind def -/cm { 6 array astore concat } bind def -/w { setlinewidth } bind def -/J { setlinecap } bind def -/j { setlinejoin } bind def -/M { setmiterlimit } bind def -/d { setdash } bind def -/m { moveto } bind def -/l { lineto } bind def -/c { curveto } bind def -/h { closepath } bind def -/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto - 0 exch rlineto 0 rlineto closepath } bind def -/S { stroke } bind def -/f { fill } bind def -/f* { eofill } bind def -/n { newpath } bind def -/W { clip } bind def -/W* { eoclip } bind def -/BT { } bind def -/ET { } bind def -/pdfmark where { pop globaldict /?pdfmark /exec load put } - { globaldict begin /?pdfmark /pop load def /pdfmark - /cleartomark load def end } ifelse -/BDC { mark 3 1 roll /BDC pdfmark } bind def -/EMC { mark /EMC pdfmark } bind def -/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def -/Tj { show currentpoint cairo_store_point } bind def -/TJ { - { - dup - type /stringtype eq - { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse - } forall - currentpoint cairo_store_point -} bind def -/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore - cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def -/Tf { pop /cairo_font exch def /cairo_font_matrix where - { pop cairo_selectfont } if } bind def -/Td { matrix translate cairo_font_matrix matrix concatmatrix dup - /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point - /cairo_font where { pop cairo_selectfont } if } bind def -/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def - cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def -/g { setgray } bind def -/rg { setrgbcolor } bind def -/d1 { setcachedevice } bind def -%%EndProlog -%%BeginSetup -%%BeginResource: font DejaVuSans-Bold -11 dict begin -/FontType 42 def -/FontName /DejaVuSans-Bold def -/PaintType 0 def -/FontMatrix [ 1 0 0 1 0 0 ] def -/FontBBox [ 0 0 0 0 ] def -/Encoding 256 array def -0 1 255 { Encoding exch /.notdef put } for -Encoding 32 /space put -/CharStrings 2 dict dup begin -/.notdef 0 def -/space 1 def -end readonly def -/sfnts [ -<000100000009008000030010637674203eb93108000000e8000002546670676d5b026bf00000 -033c000000ac676c7966e2f9cb840000009c0000004c686561640e24be09000003e800000036 -686865610eaf07730000042000000024686d74780796006600000444000000086c6f63610000 -00980000044c0000000c6d6178700647062d0000045800000020707265707c61a2e700000478 -000007a700020066fe96046605a400030007001fbc00040126000000060126b6010805890204 -002fc4d4ec310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f27206 -2900000001660133016600bc00e90000013d00a200fa031f00020002006601660002000200ac -015400ec00bc006201660181048501540166016d04a400020166007f04cd0000000201330062 -00710000002504a401bc00ba00e500660181018d0548055a0166016d000000000002000200f6 -05c301f0053902390058046d043d04b2048104b2016601750466048100b00466043902d1049c -047b04cf047b005801330166014c0166014c000200ac009a014a0123009a029a014401190144 -02cd00c100000166013f019a013b05cb05cb00d500d5015000ac00ac0077020a01c701f2012f -015801b2012300f600f6011f012f0135023501ee01e70133009800d10358050a009a008f0112 -009800bc00cd00e500e500f2007304000166008f05d5022b05d500c300e100d700e50000006a -01020000001d032d05d505d505f000a8006a00ec00e1010205d506140721046602f800ec0183 -02a602f80123010201020112011f031f005e03cd046004c7048900ec01bc00ba01020333031f -03420333035c0112011f05d5019a009a00e106660179046004600460047b000000ec02c302b8 -02cd00be00dd00d50000006a025c027b029a00dd01ae01ba01120000008501ae04600762041b -009a069a045800ee009a029a00d102cd019a015005cb05cb008b008b063100f6040600f0034c -016004a800c10000002505c101000121074a06120096014a078300a800000337007b00140000 -00c9010005c105c105c105c101000108061d00960427039e00ec0102027d0133009800d10358 -017900cd02390362009c009c009c009301b8009300b80073000014000326b707060504030201 -002c2010b002254964b040515820c859212d2cb002254964b040515820c859212d2c20100720 -b00050b00d7920b8ffff5058041b0559b0051cb0032508b0042523e120b00050b00d7920b8ff -ff5058041b0559b0051cb0032508e12d2c4b505820b80128454459212d2cb002254560442d2c -4b5358b00225b0022545445921212d2c45442d2cb00225b0022549b00525b005254960b02063 -68208a108a233a8a10653a2d0001000000025eb8b54203fc5f0f3cf5001f080000000000d3d9 -0a2000000000d3d90a20f772fcae0fcd096500010008000000010000000000010000076dfe1d -00001021f772f9320fcd00010000000000000000000000000000000204cd006602c900000000 -00000000004c0000004c000100000002034e002b0078000c0002001000400008000005ed0221 -0008000441840280012600fe000301250011000301240121003a0005012400fa000301230016 -000301220121003a0005012200fe00030121003a0003012000fa0003011f00bb0003011e0064 -0003011d00fe0003011c00190003011b001e0003011a00fe0003011900fe0003011800fe0003 -011700fe0003011600fe000301150114000e0005011500fe00030114000e0003011300fe0003 -011200fe0003010f010e007d0005010f00fe0003010e007d0003010d010c008c0005010d00fe -0003010d00c00004010c010b00590005010c008c0003010c00800004010b010a00260005010b -00590003010b00400004010a00260003010900fe0003010800fe00030107000c000301070080 -00040106b2972e054113010600fa0003010500fa0003010400fe0003010300190003010200fa -0003010100fa0003010040ff7d03ff3e03fefe03fcfb2c05fcfe03fb2c03fafe03f9f84705f9 -7d03f84703f7fa03f6fe03f5fe03f4fe03f3bb03f2fe03f1fe03f0fe03ef1e03eefe03edec0a -05edfe03ec0a03ec4004ebea0a05eb3203ea0a03e9fa03e8911605e8fe03e7fa03e6fa03e591 -1605e5fe03e4fe03e3fe03e2fe03e1fe03e0fe03dffe03defa03dddc1805dd6403dc1803dba0 -1e05db6403dad92505dafa03d92503d8d12505d8fa03d7d61405d71603d6d51005d61403d510 -03d4d30b05d42003d30b03d2d12505d2fa03d1911605d12503d0940c05d02303cfce1405cf26 -03cecd1205ce1403cd1203cc911605cc1d03cb1403cac9bb05cafe03c9c85d05c9bb03c98004 -c840ffc72505c85d03c84004c72503c6fe03c56403c4901005c4fe03c31c03c2fe03c1fe03c0 -bf3a05c0fa03bfad1b05bf3a03bebd1a05be3203bdbc1105bd1a03bcbb0f05bc1103bbba0c05 -bb0f03ba0c03b9911605b9fe03b8fe03b71503b61203b5fe03b4fe03b3fe03b21703b11903b0 -1603afad1b05affa03aead1b05aefa03ad911605ad1b03ac911605ac7d03abfe03aa2603a9fe -03a8fe03a7fe03a6fe03a50a03a4fe03a3a20e05a3fe03a20e03a24004a1a01e05a1fa03a091 -1605a01e039f9116059ffa039e940c059e1c039dfe039c9bbb059cfe039b9a5d059bbb039b80 -049a8f25059a5d039a400499fe0398972e0598fe03972e0396911605961e40ff0395940c0595 -2003940c0393911605934b039291160592fe03919010059116039010038f25038efe038dfe03 -8cfe038bfe038afe0389fe038887250588fe0387250386fe0385fe0384320383960382fe0381 -fe038019037f0a037efe037dfe037cfe037bfa037afa0379fe037776a60577fe0376a6037574 -1b0575fa03741b0373fa03727d0371fe03706f2c056f2c036efa036dfa036cfa036bfe036afe -0369fe0368630c0568320367fe0366320365640a0565fe03640a0364400463620a05630c0362 -0a0361601505619603600111056015035f0a035efe035dfe035c0111055cfe035b5a1b055bfe -035a0111055a1b0359fe0358fa0357fe035601110540ff56fe0355fe03541e03531403525119 -0552fa0351011105511903504f190550fa034f4e11054f19034e11034d1e034c4b14054c1503 -4b4a11054b14034a490e054a1103490e0348fa034746140547150346140345fa0344430e0544 -0f03430e034241250542fa0341011105412503403f0f0540fe033f3e0e053f0f033e0e033d3c -0d053d16033c0d033b64033afe0339140338fe0337130336351a0536250335341405351a0335 -c004340a0d0534140334800433320c05331403334004320c033130a60531fe033001110530a6 -032f0c032e13032d2c3a052dfa032c1525052c3a032b64032a640329fe032815032717110527 -1e03262003251e0324231105402b241e0323110322000d0522fa03210f032140042014031f0a -031e1e031d1c19051d25031c0f13051c19031cb801004091041b0d031a194b051a7d03190111 -05194b0318fe031711031615250516fa031501110515250314640313110312fe031101110511 -fe031064030f0e10050f13030fc0040e10030e80040d0111050dfa030c32030b0a0d050b1603 -0b80040a0d030a400409fe0308fe0307fe0306050a0506fe03050a0305400404fa0303640302 -01110502fe0301000d05011103000d0301b80164858d012b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1d0000> -] def -/f-0-0 currentdict end definefont pop -%%EndResource -%%BeginResource: font DejaVuSans -11 dict begin -/FontType 42 def -/FontName /DejaVuSans def -/PaintType 0 def -/FontMatrix [ 1 0 0 1 0 0 ] def -/FontBBox [ 0 0 0 0 ] def -/Encoding 256 array def -0 1 255 { Encoding exch /.notdef put } for -Encoding 32 /space put -/CharStrings 2 dict dup begin -/.notdef 0 def -/space 1 def -end readonly def -/sfnts [ -<0001000000090080000300106376742000691d39000000e0000001fe6670676d7134766a0000 -02e0000000ab676c7966f9f1ddd70000009c00000044686561640d13be360000038c00000036 -686865610d9f076f000003c400000024686d747807580066000003e8000000086c6f63610000 -0088000003f00000000c6d617870046f0671000003fc00000020707265703b07f1000000041c -0000056800020066fe96046605a400030007001a400c04fb0006fb0108057f0204002fc4d4ec -310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f2720629013500b8 -00cb00cb00c100aa009c01a600b800660000007100cb00a002b20085007500b800c301cb0189 -022d00cb00a600f000d300aa008700cb03aa0400014a003300cb000000d9050200f4015400b4 -009c01390114013907060400044e04b4045204b804e704cd0037047304cd04600473013303a2 -055605a60556053903c5021200c9001f00b801df007300ba03e9033303bc0444040e00df03cd -03aa00e503aa0404000000cb008f00a4007b00b80014016f007f027b0252008f00c705cd009a -009a006f00cb00cd019e01d300f000ba018300d5009803040248009e01d500c100cb00f60083 -0354027f00000333026600d300c700a400cd008f009a0073040005d5010a00fe022b00a400b4 -009c00000062009c0000001d032d05d505d505d505f0007f007b005400a406b80614072301d3 -00b800cb00a601c301ec069300a000d3035c037103db0185042304a80448008f013901140139 -0360008f05d5019a0614072306660179046004600460047b009c00000277046001aa00e90460 -0762007b00c5007f027b000000b4025205cd006600bc00660077061000cd013b01850389008f -007b0000001d00cd074a042f009c009c0000077d006f0000006f0335006a006f007b00ae00b2 -002d0396008f027b00f600830354063705f6008f009c04e10266008f018d02f600cd03440029 -006604ee00730000140000960000b707060504030201002c2010b002254964b040515820c859 -212d2cb002254964b040515820c859212d2c20100720b00050b00d7920b8ffff5058041b0559 -b0051cb0032508b0042523e120b00050b00d7920b8ffff5058041b0559b0051cb0032508e12d -2c4b505820b0fd454459212d2cb002254560442d2c4b5358b00225b0022545445921212d2c45 -442d2cb00225b0022549b00525b005254960b0206368208a108a233a8a10653a2d0000010000 -00025eb862af5a3e5f0f3cf5001f080000000000d3d90a2c00000000d3d90a2cf7d6fc4c0e59 -09dc00000008000000010000000000010000076dfe1d00000efef7d6fa510e59000100000000 -00000000000000000000000204cd0066028b0000000000000000004400000044000100000002 -0354002b0068000c000200100099000800000415021600080004b8028040fffbfe03fa1403f9 -2503f83203f79603f60e03f5fe03f4fe03f32503f20e03f19603f02503ef8a4105effe03ee96 -03ed9603ecfa03ebfa03eafe03e93a03e84203e7fe03e63203e5e45305e59603e48a4105e453 -03e3e22f05e3fa03e22f03e1fe03e0fe03df3203de1403dd9603dcfe03db1203da7d03d9bb03 -d8fe03d68a4105d67d03d5d44705d57d03d44703d3d21b05d3fe03d21b03d1fe03d0fe03cffe -03cefe03cd9603cccb1e05ccfe03cb1e03ca3203c9fe03c6851105c61c03c51603c4fe03c3fe -03c2fe03c1fe03c0fe03bffe03befe03bdfe03bcfe03bbfe03ba1103b9862505b9fe03b8b7bb -05b8fe03b7b65d05b7bb03b78004b6b52505b65d40ff03b64004b52503b4fe03b39603b2fe03 -b1fe03b0fe03affe03ae6403ad0e03acab2505ac6403abaa1205ab2503aa1203a98a4105a9fa -03a8fe03a7fe03a6fe03a51203a4fe03a3a20e05a33203a20e03a16403a08a4105a096039ffe -039e9d0c059efe039d0c039c9b19059c64039b9a10059b19039a1003990a0398fe0397960d05 -97fe03960d03958a410595960394930e05942803930e0392fa039190bb0591fe03908f5d0590 -bb039080048f8e25058f5d038f40048e25038dfe038c8b2e058cfe038b2e038a8625058a4103 -89880b05891403880b03878625058764038685110586250385110384fe038382110583fe0382 -110381fe0380fe037ffe0340ff7e7d7d057efe037d7d037c64037b5415057b25037afe0379fe -03780e03770c03760a0375fe0374fa0373fa0372fa0371fa0370fe036ffe036efe036c21036b -fe036a1142056a530369fe03687d036711420566fe0365fe0364fe0363fe0362fe03613a0360 -fa035e0c035dfe035bfe035afe0359580a0559fa03580a035716190557320356fe0355541505 -55420354150353011005531803521403514a130551fe03500b034ffe034e4d10054efe034d10 -034cfe034b4a13054bfe034a4910054a1303491d0d05491003480d0347fe0346960345960344 -fe0343022d0543fa0342bb03414b0340fe033ffe033e3d12053e14033d3c0f053d12033c3b0d -053c40ff0f033b0d033afe0339fe033837140538fa033736100537140336350b05361003350b -03341e03330d0332310b0532fe03310b03302f0b05300d032f0b032e2d09052e10032d09032c -32032b2a25052b64032a2912052a25032912032827250528410327250326250b05260f03250b -0324fe0323fe03220f03210110052112032064031ffa031e1d0d051e64031d0d031c1142051c -fe031bfa031a42031911420519fe031864031716190517fe031601100516190315fe0314fe03 -13fe031211420512fe0311022d05114203107d030f64030efe030d0c16050dfe030c0110050c -16030bfe030a100309fe0308022d0508fe030714030664030401100504fe03401503022d0503 -fe0302011005022d0301100300fe0301b80164858d012b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b1d00> -] def -/f-1-0 currentdict end definefont pop -%%EndResource -%%EndSetup -%%Page: 1 1 -%%BeginPageSetup -%%PageBoundingBox: 0 -1 1660 851 -%%EndPageSetup -q 0 -1 1660 852 rectclip q -0 g -BT -115.200005 0 0 115.200005 1659.494566 0.0000456218 Tm -/f-0-0 1 Tf -( )Tj -ET -0.945098 0.792157 0.0745098 rg -158.102 787.356 m 160.379 829.535 l 190.289 799.809 l h -158.102 787.356 m f -21.06434 w -0 J -0 j -[] 0.0 d -4 M q 0.380357 -1 -0.775998 -0.295156 0 1266.965088 cm -471.528 27.38 m 435.436 6.755 l 471.344 -14.188 l h -471.528 27.38 m S Q -58.695 757.856 m 80.516 721.688 l 39.07 729.465 l h -58.695 757.856 m f -18.464385 w -q -1 0.699805 0.543047 0.775998 0 1266.965088 cm --278.556 -404.865 m -310.193 -422.942 l -278.719 -441.304 l h --278.556 -404.865 m S Q -10.25 623.512 m 41.414 613.496 l 14.113 596.141 l h -10.25 623.512 m f -17.112694 w -q -1 -0.121862 -0.110002 0.811158 0 1266.965088 cm -75.757 -781.871 m 46.436 -798.623 l 75.608 -815.637 l h -75.757 -781.871 m S Q -101.438 509.071 m 70.375 498.742 l 82.148 528.875 l h -101.438 509.071 m f -12.576204 w -q 1 0.937579 0.772771 -0.802194 0 1266.965088 cm --330.318 558.711 m -351.867 546.4 l -330.429 533.894 l h --330.318 558.711 m S Q -0.290196 0.247059 0.454902 rg -161.094 604.578 m 161.094 604.578 152.773 561.961 192.316 543.309 c 210.699 - 534.641 225.316 533.344 245.688 541.098 c 258.508 545.977 270.074 558.094 - 274.949 571.278 c 279.824 584.461 275.645 600.489 262.836 612.942 c 258.316 - 592.989 253.516 576.926 236.242 567.981 c 225.973 562.762 215.535 563.629 - 205.117 568.793 c 194.703 573.957 186.715 586.391 183.539 598.844 c 183.539 - 598.844 177.09 622.012 201.859 659.969 c 182.059 644.739 164.789 627.348 - 161.094 604.578 c h -161.094 604.578 m f -0.945098 0.792157 0.0745098 rg -293.059 497.508 m 316.207 512.684 333.766 536.067 339.859 566.434 c 339.953 - 566.977 l 344.664 591.156 340.164 616.715 327.734 638.102 c 315.219 659.625 - 293.348 677.164 265.715 680.52 c 265.637 680.531 l 248.703 682.571 230.078 - 675.531 217.055 663.453 c 202.543 646.313 195.703 635.578 196.059 610.594 - c 208.465 626.961 239.875 643.227 262.027 641.047 c 276.348 639.321 286.664 - 631.18 293.949 618.653 c 301.23 606.125 304.105 589.465 301.281 575.391 - c 292.289 530.563 241.789 508.082 198.43 520.598 c 138.359 537.934 116.312 - 599.153 133.5 657.778 c 160.254 711.746 268.816 729.453 286.945 734.754 - c 280.277 744.656 213.539 742.957 213.539 742.957 c 180.559 734.364 130.008 - 728.141 104.754 682.086 c 53.828 589.199 105.188 506.442 188.582 482.371 - c 224.301 472.059 263.293 477.992 293.055 497.504 c h -293.059 497.508 m f -0 g -BT -32.000001 0 0 32.000001 1361.895445 368.012451 Tm -/f-1-0 1 Tf -( )Tj -ET -Q Q -showpage -%%Trailer -end restore -%%EOF diff --git a/algorithmique/diapos/graphics/Logo-EOLEienne.svg b/algorithmique/diapos/graphics/Logo-EOLEienne.svg deleted file mode 100644 index 7a2c713..0000000 --- a/algorithmique/diapos/graphics/Logo-EOLEienne.svg +++ /dev/null @@ -1,779 +0,0 @@ - - - -image/svg+xml    \ No newline at end of file diff --git a/algorithmique/diapos/graphics/Logo-MENESR.jpg b/algorithmique/diapos/graphics/Logo-MENESR.jpg deleted file mode 100644 index 02d6870..0000000 Binary files a/algorithmique/diapos/graphics/Logo-MENESR.jpg and /dev/null differ diff --git a/algorithmique/diapos/graphics/Logo-PCLL.eps b/algorithmique/diapos/graphics/Logo-PCLL.eps deleted file mode 100644 index f151afd..0000000 --- a/algorithmique/diapos/graphics/Logo-PCLL.eps +++ /dev/null @@ -1,927 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: cairo 1.14.8 (http://cairographics.org) -%%CreationDate: Tue May 16 12:27:36 2017 -%%Pages: 1 -%%DocumentData: Clean7Bit -%%LanguageLevel: 3 -%%BoundingBox: 0 -1 300 165 -%%EndComments -%%BeginProlog -save -50 dict begin -/q { gsave } bind def -/Q { grestore } bind def -/cm { 6 array astore concat } bind def -/w { setlinewidth } bind def -/J { setlinecap } bind def -/j { setlinejoin } bind def -/M { setmiterlimit } bind def -/d { setdash } bind def -/m { moveto } bind def -/l { lineto } bind def -/c { curveto } bind def -/h { closepath } bind def -/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto - 0 exch rlineto 0 rlineto closepath } bind def -/S { stroke } bind def -/f { fill } bind def -/f* { eofill } bind def -/n { newpath } bind def -/W { clip } bind def -/W* { eoclip } bind def -/BT { } bind def -/ET { } bind def -/pdfmark where { pop globaldict /?pdfmark /exec load put } - { globaldict begin /?pdfmark /pop load def /pdfmark - /cleartomark load def end } ifelse -/BDC { mark 3 1 roll /BDC pdfmark } bind def -/EMC { mark /EMC pdfmark } bind def -/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def -/Tj { show currentpoint cairo_store_point } bind def -/TJ { - { - dup - type /stringtype eq - { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse - } forall - currentpoint cairo_store_point -} bind def -/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore - cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def -/Tf { pop /cairo_font exch def /cairo_font_matrix where - { pop cairo_selectfont } if } bind def -/Td { matrix translate cairo_font_matrix matrix concatmatrix dup - /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point - /cairo_font where { pop cairo_selectfont } if } bind def -/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def - cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def -/g { setgray } bind def -/rg { setrgbcolor } bind def -/d1 { setcachedevice } bind def -%%EndProlog -%%BeginSetup -%%EndSetup -%%Page: 1 1 -%%BeginPageSetup -%%PageBoundingBox: 0 -1 300 165 -%%EndPageSetup -q 0 -1 300 166 rectclip q -0.32549 0.286275 0.529412 rg -197.438 160.944 m 171.461 160.944 148.402 148.244 134.059 128.76 c 154.211 - 128.76 l 165.531 139.28 180.707 145.713 197.438 145.713 c 214.016 145.713 - 229.07 139.405 240.355 129.057 c 260.641 129.057 l 246.285 148.385 223.293 - 160.944 197.438 160.944 c h -132.855 37.463 m 147.086 17.01 170.703 3.549 197.438 3.549 c 223.234 3.549 - 246.145 16.073 260.508 35.323 c 240.219 35.323 l 228.949 25.041 213.953 - 18.772 197.438 18.772 c 179.809 18.772 163.918 25.92 152.438 37.463 c h -132.855 37.463 m f* -4.26191 w -2 J -0 j -[] 0.0 d -5 M q 1 0 0 -1 0 164.490509 cm -197.438 3.547 m 171.461 3.547 148.402 16.246 134.059 35.73 c 154.211 35.73 - l 165.531 25.211 180.707 18.777 197.438 18.777 c 214.016 18.777 229.07 -25.086 240.355 35.434 c 260.641 35.434 l 246.285 16.105 223.293 3.547 197.438 - 3.547 c h -132.855 127.027 m 147.086 147.48 170.703 160.941 197.438 160.941 c 223.234 - 160.941 246.145 148.418 260.508 129.168 c 240.219 129.168 l 228.949 139.449 - 213.953 145.719 197.438 145.719 c 179.809 145.719 163.918 138.57 152.438 - 127.027 c h -132.855 127.027 m S Q -q -0 164.491 300 -165 re W n -% Fallback Image: x=0 y=0 w=300 h=165 res=300ppi size=2580000 -[ 0.24 0 0 0.24 0 -0.629491 ] concat -/DeviceRGB setcolorspace -8 dict dup begin - /ImageType 1 def - /Width 1250 def - /Height 688 def - /Interpolate false def - /BitsPerComponent 8 def - /Decode [ 0 1 0 1 0 1 ] def - /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def - /ImageMatrix [ 1 0 0 -1 0 688 ] def -end -image -Gb"-V#C$t`_Z+TWTnl<<&Yt88b,Xs2W2ka,:g=(M65>*n8eDZ2(mhN?N"B_H["+5p+.A - <))6]`'+5R]f?:_V:#om[bNcc\tLR=!98HgXVBTBGt8j6i'dBCB!VHZ0u - LnW#DWd,0R#dci1=3U^ZdGoX-LFj.hBC\rto0E=uRLJqe*Nd:%%]!1bkYap\`u6@:BmK-Uc - 5g>UMEJ*k$.Wb'gn1*Bef>o]]:Gf<3sE'j1,Z"98E%!&0DO@_$gHB)L'Jd6!Aj>dd-Z_$Ql - d+#\((^Rd`c/[fRU`nI`_piL1([`;HJIf)B3o]8[)<\0UO[:\OWQsK50rk*LSHE-6H(]XO9 - !:U!!3I)DRYO1(c,'*K$Z_hXXmCRIJh`4t(:28U0V"0sgfaIn(XcMmBtP)dsQq(cBtn\H2 - -ejdIEsMkN,QH!<<*"5Y>p3hSflS@s5hHL[>Ke]mN)Ki3l?M/+8!@)GsdeGPc7$nF4f8>B` - KSSN1h\h?j5_!!(_jVI]&NHW"r`s,kM$opdIgQ1As^O41hr(fC25`[kI<^ACIfRIp,&e]/a - 3!!!!592!Ng4*5X76qkD[jh8;)k1N:RG:Uc1kEcj;q^`)F]/=2%HqJFjlE^Qm!!!#c/gi%@ - k`Kr0(@N15CNtoc;jI)4o!!?so'>tn[.0o?O'M\)ab5S"4;\%u!'n8<1F6O,FSrf0c%?8Fj - borfRLUph%NDc/FRI]^HVa4c?iU0,!&!GT;Y&uCZ%2qf'L1K:!!z$G*=?SD2;1:qmR5>? - \hkb/8-_Y@)?*Lf5KZ.nB9C#ljr*TE%PGHZe#)BHQ^=D85";1#r@Lhe^MUT1*Nrm_,-TXSQ - `:!!!"\5NV!0iXVLg$/3n@lZD57Lq$9qm6#N'i49#;:Zgg#WBQ4@!!!#/]GoJO2Qf2&k1B) - 4/]T=/42duEWO;d$OisIW*PRrY2cp(\!!$-aE`2IcLmUL,6Tc=`.;q-jT;?\jOi%AU=M&>* - NU,@D(]XO9J - ohRAcLRgDP:kZfrGDT8!!&\9okUP$(C]Lr3H^deULXE.,!3.KX1X&r@PAfc`s% - E.*j[@\0@-Bh4Tk`b!5KRecWln:gP13,3Dk(^+N3Dao:!="p6J>fY,d"9!<<*"YYf"Ep82s - ;#PAU)hCiD[R\;JBBQ:DLB.AT!&3^)l,t59S%`Vn??rFk`(ojnoFD@d - 4IL.[ot(Y5!!'f%V5It.MqmLOH^=4,6&^9n:J!!&s/Yup]fs#FoB6I/-dCB>[%e&oSSDs625qbC>)+#!Zp!8puDkuhe'mH - `SN](0/mL_HZ;5GtW>Lri36;Z0>o!!!#i^Vk1pB22aU1J\>)NL-RCXQ^ZV?+cm->mgW4!9? - qrNh#\[]%F?OTCTrc+YK#1NCWi+>]qm]U?ZqV!!!"\J&E?g45=J2o$ooI/tG<,6=P,Wo9E; - U!!'fH\N+r)2oP^B@tsR94X'VJ"*t,hgN"PmO0T)m!!$+E1F%6X6qm>M;j8s"$-AP0[e&"i - jaUfPjf!X3!rr<$c7V7CCJ!`MYM+q:^5OEbhrgV=:0\jSS$!(u!!#,X7XEY6d%0f-66)LJm - /rY-h49t%Xniq9!!!!YMp..H'bN00WN:KX:.Tq1kI)&@_fjI.!<<*r^sPpaEN4E:ApigtXm - 'PfWilj3!!%PEAS'sS>J."XgBl#hjb/_Bd\U6bb%5p?EcP/e-NF,H!(Y,RZYW`bTUXPDj\' - S[Ldl]4T"8LN+U\f_"TSNf^33oQahHZX<5/8WKG[DODSPRpMGnrbzb]bTjEQF44PV9QR+ZA - Cg5Kl<=n?hJ]#QOi)@#d%@0)H)`XF-F1#a('j,G.,I=nNL5!!!#'h2U`7;^XuAo'fSl\gE) - tP1GU_cBtmq,ro9(eHGpQ!3f49:>UkaR#[cuPV9$C+f<;\Q%+&2:2U+A!!!"#&[O"e].SZW - (XdsJ]B9!ne+^j-W4q*g!!!"&cCDI.CsYN1Me>A4_r)*YUl1,X1)Vcg_$D!!!"tOI;4oHcF(V:&'Mt+YJil%bt*S-DT],DpHSNd'2X86!'!!%QIn']/o_gN:L?N:a+>TtDA??A1V=nQnF!!!# - p;dQ&,q9n*dRuL:ZmNmOr:cbs#]6_G&m]$Bi!!%)24`f^lIHN"cmLhik1d_Jk4eHsnop#pc - !!)g\DJid*fZpp"7k7s.&jfhai\D--GAD(kT'E?p!!!"(f]eSkhS!PN?ec8\nkJuRS='q<6 - 1qVp!!!#%-RU9#FRE0N1d_O'4lX>a0I07qA5lq!!!!#W1/@amnV8/APV6SS+o++rH3Tp(Q) - +7k#64`(B4nLI[3?flm2)O^Y@%Y[q**e9'-=S<09?#1!WW5Y_3-G,)"Q]LjU5-V8:eq!^2k - oGqd0='!8M3W<1K;Q^[h%I+f#+86d'Ib=7&q7'a+L:J?qe\OZ)Kk--DRRKTH6VE?Ps],Loj - `!!!!I[O:pt0'rb*Y>,BI7&3JfJA$:B<*pFB!!&Z]G'<;t^ic6.e?;M:Ia7,V-U:ogihA8B - k/Q2H4Or%S!!!!Ye:khV"*t,$?]Gaca91JYB@b$0f2Z0,!<<,X+PSdrl-OI@nl7(]eu"/d# - nTV(UZ]/S;/rV>QN.!cYck.0S>d/GPqP<-+iId,,thLQ<*q]f!!$CCB2;n6U&,8[CJI2%Yp - t15s*!PSA^sjY!!!"dCua4Om@0)4^=ji#8bf6gX%-F/2Qr0AI2rIk!.[)8ZZE%'?_r.48I- - K&R6G>-:/7tWCFT;a!2Nl1SFTUNfuhp4KFhTb#4r8:FRb+N.k:T"!,QarhoX/\-R`>%&jhD - 2&XTnXqbO3*^&e97^cE7S?f?od[drod^7HU'&CVjVDW,"c`J"d%!!"Vp,<]hdn8RL484!Te - CI\67-oEkLobA8C!!#(*S[n<>fBLFZO+\)(J;DD)q8@'KYIac7!-kI@J"6$!oN/bE,_Q_a` - N,:(J\_XbG4>Q1]RM@J[9gurmm'!.UNXJr0.[C`dZMcd(@W*@07=))'1ta6KIJ - N)]-cV^+pmEmAbS3Rh"nCMA(pJ"+*fj`*^$AJeRj3DShl0!/..ma))cEf`jH%?KbS\#b2nlSX;nVqG%O5;V$kn9`?jr/NaKD=hn - kJR8`NkJ%M%mTrAQnr5\u?C#*=\pKa\T2EEX5h27#UQsK - 5p:0l/hbZ9/kg+G6?j2@Q+GATFQD"4[mP?*V8g>f4_SrM77eATHR/stGh(B=HNIaZ\#LCIL - ]I+:`W/a]$ena82Kd^U%N@6:6.*(rD<2)i!0/B]itZf7%:hmiBqlkpa2DscCqMXk7CS1m;8 - /kAX[<.21V!!)(I=0JFllT%o>HB1$Q\p7!knaiLNZa]:WMA)Q1_M9'0^\"nWj$sd7YMMKZq - M&F2(4OeG]^g\DS0:,hQuV5.MX&Y(!!"-K3HOJk-mm).Tp[1UD:ZH54G'EmglE9NpI[e!If/M0C++<.9Zu8-?h]T11PodL(F!8o - Wp"`IGUKHk**Q&"7Y!HV=1`*?&0Ye:H>/]\o^=48He_)Bb2>oo@qPhQ(OA\L5[&`OdhiU.uR(]CH[TYps(Ordb*4EJM - i>5(2@2//F.'0uW>(TuC-q-RuAN@tod%k"o"X!'igt<^^D&UjR#K%&S1-Oi)UaG!s;\BBQ9 - YGMqgC1U8sCO8\l]$ToAJT-]iG.,Uj8<<*"qOGUBlB]#Z/=(T<@\p'SU*k(\:[8b[h%:%5U - M`3t7DYgBXGibhX0bV6pMfWq6CFB/_:_8J@3c`jcjm+Xq)^"PE]=&gAc74p?Q'J[ac%5lO" - Xu[4M/Gf]Z@q\F!W[b&7T>t!IM'_(@RMGXRuRsq^&6B:9<(c'j>RD8(BO[_`,UXKJo4 - pd/S2_&0 - YOaH*@aD]ji#X7#OKb!N4q=@DRQ+n-VrL#NkKBfcF!!'fp_WG]6^>^>\Vfe2c'?@7H4F:*$ - W<)q;Z+.^a5;2SDV#IJ^m`ta`>?%45!!!"BZ#!"=o!K7DPI=hWRPo0YV$kmTT,5;V:7\mOc - 7boW#>\KFU+BWT?1iID!!$E4[4D"Aq[k2Iqds>iVld^[,t7Ju!GFKcG\sbdau2s`.=]O&gK - Ck'YNh;Q!!'ek4/1^s)t@\Up$'hDgt^g^2m0'X4sL'&/ghskS@Z/r(N`[MC$"<_F5'RBB*8 - 27J-fZqS772O4RJSt%LLjRH8@q]klB?[l-bQA1!BC90'*Z]o0WaXX$.O(!!&gb5+1Knl*#J - GIs5JN_eHqdV&1YaAEoVj+d - -N[\Q_m*kReT[&E2ci:?QhCFrcLViZ!!'h-,i;/iY"PGYePq*ZGFr#n&+[P!jBL"nNqMg$? - 25GA^o$;H;m0P(`m*!!!!9P+.[0bM\)s=&9&SS_Hnq>lKM'rDfHkJE(0OjXck8X^0E'b27 - ^Q0]H!&S'(s?!!'NZ^kn2rf1lK$SrNXL7P@P/:02l5!B%#b:(_CFjmU+hQmq&sWBU(W!!#' - GK^M[NC+`_c(]Oh=IFnQ#!<*M6-LB/E5l"$OJ7LpKi+$bS`#$d?@.25+H!63&d\U6bV2I93+* - .D^JH&5;bP\'S%-;9#Je0S2s2a;On.B$CTU_P-Y^,!W1`<.fc!(b-]A%8'W>V^s3<0&pIi_ - bV4![f$lDPh9\51c-.k.J/38f*XT1g0M.p2UO\0,>7TS<;$)?9b6DJ%ffjm/Xg+"pFiNGB' - )51G)jbK\:9'"Xk*(]71]m[5q\KBf3@!!!A5bo:,WYDDatHj>F5:.eQ8W.Fm)6K5Br"6M(_ - ;s4$o=E?b#T`tJs"]Rhd"`EU@f6$X)[s$:c$_O!mb[[n[`7q;?o.eDFi;#?L\`GIE!)VYN[ - FD?"-RiC1jl?+G$,(AIDkR5UOa-Nc)GkOa"cZ - +>=%^7mM`NhURG?[6B@^cd44"!*O=7pP;!!!2A[#(hX=MoNhIM([pnaW3sY>>7T3LOic2pY - I2>Gd?dV>:H"!.Y,Z?0"32/"_3WL[^?PC!J&(O/e!!))$7us0 - Ue"jcDb/"S&"n()adZN0iRju$<;ROA,H - `6X?>P1*DQ?D*t'S%Y"ZTNWEl2 - qCo!:lCbEJ^feN)[O4a\VFK\L]lq;tY\Fn6d]el+[X5W;JuETCSU-W#k%.WW3%7*2tkQ\p' - U;I"dc&,*ltZ=7&q7;uu4(bHlj)D=VM=rh>Nndc7AWia4+6%kI\\E-W5B?R(=X;80K\2sJa - S+R\`%eOL@);*1N3g,C+Kr6g^G,6!;5(K:D8J>AGB1!3QTq'Ot3B3i'lH2*)Km8SKr!D'ItrXs-[^8>X;\p7$4+jg8i^]n;(LFZ`RjF_Phm=/O48_ - "%ZJ2qd@`I6EKXRZ`l5)A+C`I'rd!!$,4c-!`Bf.d"C5BNN;iV[iK#8;WU:7k5Fd@%2;RZQ - W(q1:'r!&3\K_PO\87k7r^\9^US>EY,?V>=R$0]2P=W<7GM/&008HJ11nFo5pIl@TBC!*m< - h^5i%!?UpC+oZ:n>o(Y$\ODftKV=3>=jd-le:\RUH5nsA"kR/6@>kttMV;p6B7-NF.WXgE+T"V0#(]mOucf5hQZjT - ]Z3HEpapBfjfWW3%WNi7qmPcmkf2uS%,?+YD]oe?TBhM(RQ^ZuN2r1`8`q0ctal=1)"!1^o - [`+pAsN`3YOERFQ+cVI3Y<.,/U3/a7T)2%d@.).ULB_[0/!!!S9ZZ>p8$rXepERB^a&WrWT - X83Y7E%[QHfo,!2$OPNTCrklVHW;.Q!!&[Z=:Yi('hiF7aNR?o^-`&(zzzzzzzzzzzzzzzz - zzzzz!",`i-SDNWL`s2Qma,+e#7q'dPq+:f2]X6R-13I*>6"X'Vm^Ni$3-.2Li(hVl%nU,L - k=j:itmrPr2uMhbP%kuJ,fQLcpCBj#qZlacr+FA9*G:qE,r*V#Zr@#*!%190Pm - K#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P=4F<@5 - (P!!)H.cH]HR"oJT1iZ>I+RF"j*">*V#Zr@$UEr5Rtqr!);cC[>ii9b,fAK(*[MsAin(G8t&d/PDLWa.!&gGX!,4DNBEc - CI&3rV#!,5Q5o$qp8705tdIL/JUn);Ir0f"TTqb'bs`K<2ht8Uft0@#mgq3gYBf.)t,FJZr - G(mrUndM%g4KW*jen7cr-P?/QF.);uhFuU,,",fOO[*PH%W`*^>,/ITrVE3WiQc[:lNpTqt - '^>,k80W;loE181O2$!O?&BW1t3`sW=c/R#N - [7S,%5[VU&-[-?>AV)eodWjQN>181O2$!O?&BW1uncX^X"?G#=IV+ZZ%M7h+=t5c0V94IW$32\(0/)ehn`(2n&X+S/!TW_@**:kFu_'3Zjc\:fD8#JU01gS/C#lurZE]=X!X.L+e9AP6 - oYY.aR=il$[kDJiM";!dc)S[r'3ZlMTV]eaQ3mUE_#Z.\[_d_+[r1"_ - 2E'.Aq0RI8CM`Y-Vk5"cA4Z7M`?4dYMA@eT@)2p?C!]bK">//-ZrEI?;P=4F<@5(P!,r5SC - T4eR]=[h%djHFf7=OA7Ma\&NZ)u`fCS*_7;Z+WW4*FT%:uPi4X@SHt1M>!tS.%""8^LA;78 - &mP/JUn);Ir0f"TXnIi0J[nN>a\Jn)#cYo<)B2C2BV5M\`:kWH\@2fs>>We>`&D5O@Op2LY - FDRE-q7scr-P?/QF.);ugkD8m5u'>;n3=\T4Ojbbn1)p:ueZjn/9?cHFDCkKdd - OA9`BF4n(s6PUNeZlW0Fqcr-D;/_+%3<12*2T`crI-F?_PE!`OJC8"kfE6Xh/16_J&n[X.n - OH:$5*uR:lr&kRl&c["$U.$idpktI'1h`l>U8?"cQ3npOWA:0D!ek/^Y?nm\*?@:]hRjq[r:.JphU?`9bJOGd"j-* - t7Ri-9YHR^sX+!Z7gX"3l@^4!jq@6]/PG"aUMj>h+=t5c0V94IW$32\E\#"QQq<(cf.,*[^ - =gQt0isk$#[;tBO3B9*Cg-NcPV)eodWjQN>181O2$!O?&BW2!i&km5CG:Zn&Ug1HN#)d4a7 - "i,Jj^>Gp-UCD5(+iN5ZrAG>99ff8'`_KjrE?5jkF[6)WD^]+95W7]R>F#eGdLEt5teU$/Q - F.)<%(%*PmK#W!*k+]>H4oWs*c3M<%V+MPW_5&S"6*umFjE&I%8ig>3beHf@/0r*4@l*iX@ - F3k09C;aiX85MHOVl181O2$!O?&BW2!i'("FPKn''e?b.ghLlRL]gsD<:9'03Y_r[;+511hb7JGOP%jE)Bme[ri48/bSc#dm68c?[_Ut>Aq2tcWum0GiB%W - g01n!20S?=?+Y:%ge1e,KS5#H1M?FKgUC%T7Wn"GH1AiiT7?k9>.&+Ys8MmiRPYm=B[H>3b - :d5:I.r[]^86^.l1S9S_$;'H044_HD3ZYT;B5GNN>qcipoIW)`nDAZ3hq,G^'oO;FG^Z[u'p.n\l<=Y3+m/9((MPNc1n2Bkc - %n9mc?BpY=QZ%.89"b*Dkumk7kH\MGtr\T?q_q;mq]2/3u].<3^!rqPLk1M5GAoqfQ0Wi5h - -&J="R.TWX<_:QGDl-`mE?:H"#lU\B^RF"j*">*V#Zr@$E#nCXJ_FG\rUq;BUp@bqnD3m[Yn'\%*;GrZ\o.cA@d,06BN - KM!)\=_u8!sT/F#?:S]agY6-`A2f6lk`uQ_5Puh:s\LH<.N3d*=(7?1b=A)r-C/qZVe`:rMM'nl#%1P1+8u< - 0MDq_R4O$33(r2satCoKpb*3!/OY5C+E'E@gAs)$>jnn$0GAO9%D'!tW+cr'n[,rhcu:7aR - NGMV,gH#nV5M+6Ogk?#04@JR3JLRXd&\$rikXhb#i2('bAP^VSamkphhs8M#sPan,RPa%D% - N>e4p?Q*HYlKm31++bBr%[qe)OLAn7k4o - Q1TS&!L26]p^cl@bWJPm+kPq1G`7DCh\r9ma@qig:Jh?^3mJ7mFq9d[0O"JV>C#`fjd3glI - <@jor>PUWE!W2181O2$!O?&BW2!i&ff@uVb`qf]3H-];0SP[e5RZ"EL$(YVk8hjD!__d[A@ - JHAVjRCDjPtMkpMt`-7L5ejioaA[,8%BcaK-Sn35C2q=s!2*Up;/LS:QeKU)rkBW3b\V#l0 - ?E(inF5('m.>.n4RG1qRN/=+kh>FX+N[!6nC>5L<^qmFqd]Y([igY-e"h;$d$04&JLoONao - \ODDlG29S'g!EVE9UK5V=nV1:f,h-"&[YN*cr-P?/QF.);ugkDNbPJ`3d&kVW;#N'6[K@d+ - !6\-J\KO,7pEBRp1pWP7Z;<%r]^/=PP71ae,^Q9rpFE999"gd1B)qORh[P\Gh]ZDG']^ed8 - FOB98+"c<12*2!Pg!@VPP3A/a_2q@l6`3M2?4rG;m8&J)Z;4hLGS([VacVo%U$9RsObmM>t - QiNu'HUr5]I#et7,#WFE%?5*eXeS52BJ<0Z^qd*Sn![r0j&@EtB'rVH2f<2l%s?1-:GRgh0 - \g"E]EXh>C1fU"XAl?IPu1i:sRDV_nM5QAA*pQDh^V-^cWX\+j.#"O.0[F]eRHpU.d`5s.5 - mD=PbI=6NZeZ*3Ma(s;0XlKl,ZrEI?;P=4F<@5(P!,r5SBW9apD)8Ii?bUp`_a__lbr'`u* - Dp$E[VWK``JXO7JLUj9h5t\W`^[r[hL"]Sj83MNQ7=r=)fNAtA?)Ar*^4uH@=sBm<1uV^h* - FFL5(3:7[?It#]6LplG^]4;F_0r[\9:[eIL@,I=[@B6uVX@8^Y?j(aGl.-tA*kOY - ',MHtj?Z-#md@g'^A%Y]_u7NqoBWTpQ75a%G>.$K2)[ADaKP&Zp$.g-Q)-WCDJlV>&&#aNe - lr@AAg1EY9PCD%JsIl"=t0N^"FIW-8WtLc0$Xj\H61,E7M$m-fk6r-*MGfR$@i'NVnlO'fs - Bl3`uinR;`$Rg".J(EF)l;CpKDYej#pQ[eX'Tg8UJ6njiSI?K^ukVqJ4n'?PN#!n8PF_]mT - X]mYb\iV7(-h8p?GN#7i^PROG1*DADiKhhg(u/QF.)<%(%*PmK#W!*k+]>O(:kP7?Ao`n/i - :@=s5fL?eb_WD]Q&*&q?Vgt&T3BB2!_#4H89H:senJ%k@+rr);8>;^#7FL:HgY?\WdW\J@0 - oB&alhamG7pU=T#f3a#5HWYnPou)\#\u0Fu"q@ZF(\G+Nf6"bS4D<(a)tmG>/QF.)<%(%*P - mK#W!*k,H>,iupiWlk]^8"f8@M^Y%Gh>j]^]2%9#iisd[pbGJqtAP\\RW[?7YW\3V:M\K:O - BmD?@'_Jhg9P2dRAN8n%\nZg+f]E&e^r9ZJ0aW+gY@P\$rj?39$_sFm>4!dgHKidN2HL6Nq - X"99ff8'hZhNAO9#n!1.)&9?kT#M2mT;3HF12YIpSmjukbLmej:D',)%%n)Gl)TP^<"9h@q - (rS?%7O$/f#Sut/>\Lgg'G29?=cBp?(L0`ZJGH^_E[;+6t@9BQIq'<'O:Goi1XHm&'H?JUp - ^AdtE)l>".-1-%R(F`8Cg9k]SN,1:RW_@**:kFu_'3Zjc\-1WRqX1uam^^Z@9q0_9>8J%j( - ).JDj5\Uf;lBKbl\e*-4k'RjT+Y/r@FL]$AW#m]F6:]OH1sgi*j%N_6id[C:u+-Yc=NpP(Jb55OKfRl>3@rr"eE+V*0Wk/ToaPAO^$!qe - 4ZgV;t:L621!$X]r9#).1+S?Fb*q][tRI'e31EGm19<99ff8'hZhNAO9#n!12X%QMT!!+!! - =[^u4"fNutPg>-VPUjBmK)ltkKllTY$]`0NH$g,(@u]d>*&<`>>qkro9&(b)A"2;KqTdD;K&BM\7=.aLhT*U - 8?"cQ3npOWA:0D!ec8MdGE6+&L4YQ0X - 7J>G&r"Ws8D\g?dXY/O%M+>>0AmD,R0#&Xc_9>-q7scr-P?/QF.);ug - kDVRP&QV+T:==0H8_T(D-k^Nf:CbhR;EC5j,h9R.4"O'S/6`k^Sc1^t - rT1cqn%ooGu(%&.'r:A5ij3+p]p$:5!pKH;1n])`,k80WDJ24.MGu8!4 - W0fQ>5%/XD-/^L8HEWi60BieU9Vq?soZ$+==Nrh0VWES!TJ.oS`QB[;+7?hKnA1SRog-DlG - HG1$608[P7#glitj8AO9%D'!tW+cr'n[,rfs=SMtJYmZLoNTrYbfP*0pr&fr*s4c"qH2'aG - 8H`4f8$ig"^O5>&dAB>J+QW1kX++C0%GER.eQ>``M:7TZP60Qt+U]"O!ET>'\]E6ZYV94IW - $70Ab181NGJ4jkDQ>5KeQdO4.P$9[34iG$\pM(4J@S>5l8iV>"]]H1N6I!P,DFm[m_EYGQZ\(9D([;+66#;NK[k2k^hhT\VKCUp!:-8[PYHe3q]F6D7>^*tZ - ,dn`3Y*i+)Qju1Q4g!EW.6;*"FZrEI?;?=QZ3-e/6e>SN'oZEFLQ]mVCoD#;aWOeA!uiI!+[LJ,KE_l(fK?ks/TnjZ!SW0j-rD0K3SEOd3Ybhu9PCD%J - sIl"=t0N^"=J,eUIL6k/N'S1YI8`Sfs>>WN^%7+,i*H^>H1\aG1CG$DJj@^naSO+[6bXe7J - HD\@df=!5Ao6NVR4j/L^/mWSnm]3P*Z>FPZ>&$Z%9$sA%[E!R - lq<'Oi1MrVW;k^&1KU)rkBW3b\V#l0?E:T;E]_q?D\ts#`RPd!^4CcA>h2t.l0f%8PmG#%h - .8ls4<`YO&M.L4.PV-6FHU'MK[k1gmfW`uMrVl]_\hC\J4553QDG!P:55F7Qh+c,UIVH?CM/`mP>e;M(#?R(>.*Xl9:)_#goQf&B?hLQ)&=Z!AEhO=f"V41KpF - 2%=t5c0V94IW$32]pq-0ktT=Vd>'L)Nkj,Ap*K4A6&I_Bplg:CdOm2@OjVb`r9*UW0r^G`g - XHhQgR*Di\@]mpBF]*BM^.$r^)'h;$em7 - k7iSn:hAkN:41BrJb`BjH2sPN#?-sNK,Z!^-$Q'%qXs0d]=WtCT/1,?nNAbKjN3Spm[C)*c'gLo^OCTSG..+3\[f8^ - ^EPVn;FQl%I9c4]O$32=f99ff8'`_Kj9=.YA4?VD,?RU$^F-s(6\+]Fb'BO#kb*B;GcQ58tGe8.db*FVpI$"0qk? - Bg]k09A7**IBU[VacV]"2Lu)H!"^`pD6VQgkC>);N-IUOW=C@eTs,!uELj0Q#ONZ"(fa*BL - QOn(nKm2QTr]gASe[rR\g`-$Oa<-5tu-n%st,L(.jH6 - ocP>jb4LW0R`EXf;r+2M'HN*A&jTmqWO[afXnauePZQj-9,C6jiWjpdu1;cQ7&&A0qHImOjabKMZXuoN^1MWTe>XW\MHI9[8sLmj%N?3#BB82PP$WJ!-(BpOXDXDOq'6:/PqcTZ.5 - M+'j%g#M2E78&mP/JUn);Ir0f"TXnI=tTEN>JIIkrqYaEe.eo^W?QDmg[jUS)gQhQ*W>j-1 - H=r[%3'3BB#f@0@q0B4ECmKKc+7XO*jHEA5Y6f@;ekJh3Pan3k6,j:6:f*8DOcLMEB&ji52@Bm#PMC@")`MZ9>e. - 0=p?iFF>,m[SSF#M)BtoMtl-m].Qdd-]W_@**:kFu_'3Zjc\-,lLWBs?TcJZNkc2%U6)!@f - hI`fgU11b>R=0=CT:"&7hBWFTt92"mMp+BCIQmmB1&*"1U[?E+BY&rsYakiZh[CN+@(5q:` - hgRBV,U7(Br:mbcBW3b\V*YJlW_@**!8nJp[&)Up)]LIJ).G\T>/#Rql*4 - <12*2T`crI-F?_PE!aY.ak&B&pA7%o'2o>M%dquSUIK5:^#8_LT,51KcC?mQ4DVqpU&aW=^ - HXD+Y\2:R*ZcBk^AG(s-DJ(0D;*L(nc/CENsQIHZu=k$Dh%YRp8rk;HKqI?5Q"?b^WDZe7n - #kCV59S8!W1!`bn]jBp%<1W\8dc`I%d2=BO5(V+\cl+$+Kl,9oSKeElV_`JXs2*8%T1O4`Reldq&ELl[Tm8kN"STG\DS - AS!/5,`"SreQ(t,peUG+7un]+s5UM&f::pR_)H8e&8.H!fVVB4`$D+QUZ:@ncC[=nR[U7&C - (Ed,PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P - =4F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.);ucmu-V$gp#qZlacr+FA9*G - :qE,r*V#Zr@#*!%190PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff - 8'hZhNAO9#n!!$tYZrEI?;P=4F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.) - ;ucmu-V$gp#qZlacr+FA9*G:qE,r*V#Zr@#*!%190PmK#W9$gII6;%I^!,utc< - 12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P=4F<@5(P!!!!H7n]*R/JUn);I - r0f"TSOAEjSf6cr-P?/QF.);ucmu-V$gp#qZlacr+FA9*G:qE,r*V#Zr@#*!%1 - 90PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P=4 - F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.);ucmu-V$gp#qZlacr+FA9*G:q - E,r*V#Zr@#*!%190PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8' - hZhNAO9#n!!$tYZrEI?;P=4F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.);u - cmu-V$gp#qZlacr+FA9*G;3Fm7>NjQ'k%ZN/nhZrEI?;P=4F<@5(P!,t@E)&_nWqsGDA]TJ - GCUj=Wnm#IA]'3ZlMTV]eaQ3mUEa'u;qkg6$M/N%=p4EKYDl59W,03YALBW4g[Q7*V#Zr@$E/W1Du/mPo*U&V0@q==FVm8H/*!;8`P - PmK#W9$gII6;%I^(\5TgIm!SkUP0bb9URZj[V\r+5lc'o99ff8'hZhNAO9#n!*=1>r;"L#. - mL84hH$pmaiMOoe^FY/5$Fs[BW4g[Q7GV8cTeJ%.0/te;Ir0fKb - CalRF"h4_"h+aQ8WU6:f2cFMj>h+=t5c0V94IWMYo%h4oNa$6[SOn=gr9SA7VM2cY_FFM>q - nmjN6cTCt5ioN#FZpTPd3kp%;6If9,h4S+N - OP2>$N]mBA:%3%4lhnT2C"Ug>45H]>#^k7>qL:Xq+Bq3E,ruF=Q]]s24YTm>O9PCD%JsIl" - =t9)uoB4FqQnY4?]mBE;Tu4AI'e4=hcsb4i3B(j2:q]63Ir4)W]m0),g(ebYUe.Sa$,F8gW - A:0D64$hq9PCDEFaNiKC#?XQd@s'H/uSFo;5-J%Q7\l+U/^S$$G'06:6dJ>?K59B;PZj&E3 - KGAZ$Q*.0k84Fl-^k=3niG[")pJ.W_@**:kFu_'3Zkj='T"ckF[6A@QD-ZHgeYg""9j88kM - _Cg9n==C.LmOl.\p+9O,&Eh>$O#]6h+=t5c0V94IW$(P"\rB1hA9OHTlF6O.opK.OsQuD[r1$5g2@4".\Hnr<@5(P-p^Lk - #qZlE-S@#Hq\Mr'gV%sClCCCqo>;)'BUk:*M\hG1Lp4pChgG#imC*0L'i9LJ.MGu8Pb=kqK - U)ts&f)6`Z=HO*4/e1+?@#39:8>U]N/Z7G-cK:tmFnskg,(ArE)*c>RF"j*">*V#ZrFPs=g - M_N]=XQd61k[+2GEdmUVP!rc0aB$qZBX87j!/$_hJWogGCJsE)*c>RF"j*">*V#ZrFOBIt) - t87n23bfO@06K'HW3!TiM-GL$Ru\od0W4*K8!UU4"93RL`96;*"FZrEI?;W/6T6:0``Wk5l - iM%V,9qN8@3l`/fa'PP>!_08(-:o6pS?+Y:5H],71^cBe?AO9%D'!tW+cr/j#eui:o_sMh? - +nb?o(ccWtqXs/MT0Ag8RsSe`o^qdN7urQ-IDUXD?[r#sN>aYq2@+O$KlYA&/UQQ@8'7)I[ - t"F,#AfEd$90D:W_@**:kFu_'3ZlUgk?+PSppNMX8;)\r6PDeS2p2\N>omHEoP#oET>(;rU - 56Nq_tsX)IL4+fm^O;(pnGOf#*7R4(_^(<5:NA;Ir0fKbCalRF"jjbUaN&_hJV[pXAEXX8i - 1rmkS)]Fk,*qpNA3-d\M_&3s)o!=t8I#BW3b\V*YJlW_@**E+Un))FFW35TfX#5:OX!BEdaDY1ccO:cO,k)EX^Ah,.On'g_p - P5L1G^i3R_0*tm&ZSuY$JZXc>MCF:&M>bVqR!`,;1_=jN3U$euY8sCY"_!;Z["%VG3Nq()F - >ga,UND/ss@5-Z>te=]pLj+'uBlfl+Y(2IXIUWDf^PGEDU'qtBDM:/4hIX5!*6ZY.UAdn.3 - g`EBQ^djB'(mG>N\r:@I?kJTYc27IpCA7WWu`emi6p?^Jl6lJ:=r9_sIq=.H[C8@p"(d"[f#3M:[6H/oBE0F[Vjp4H - hZr\"q;4.f]LGJ*C$faTr#nbQ3npOWA:0D_Dto8HM,ZU+#VJE7u\F`HEoTM$"q155aoflIDpO.oo@@V(Q,h]SD - 8tGeqAacH'%(gpeNYT3]'PIH?_q*dF#`2`J4gPq+e1g2tQ+0uo=s\)71V3,p-)4T*fdW+rHhWt/Y#A4rk005@?Ua/mIq`qc:mHW,r9=]*)Zk(jG*e4+XO$EVgi4smo=0?X1Oae3OW_@ - **:kFu_'3ZlUP?OD0\`]P?^)X^Y<"H5<^3&V&=YgYjbl\1\L_[3 - t-]=8TSO[YQ7P&+>KA3nUirccUQ'Jb%nRAcWe6TZC1M4=HogG,\V-\V#04):>k0U#%+44lH - PURi`Z\%Ct?[_UtmbPM:-YA%a:trEqXa9XCn`Rk:j_k=(gJVlBGOA_j-Bjpg]4fTdpYL8Cg - +A2r1N_j-.p&lE^)DLWHLL4X^OO+R$16HS'.m>W]i4.GWW(1)mfWk#Mg('VoX(/PHa[kM^/ - d+s]2bk1WF*DhU9<34J_8W-YJ:(JABC!8D-+BkU=/J_A*3VU>Zepi=K>ISgKob!8sLn!jd0 - =lgU>AF\J[e.PmK#W9$gII6;*"Gb08'dnr6VRnhKo44ibaea:O8?Z(@(\%R'C(,JAHu[d&u - 9%ho]l<46UGR@-02e##hQ',0hN-oj;5q!d7n4uqgJFm@HgL"b[[4am2!M_DeXedgQ3If9+? - ;,NL36UQ6K]SD8tbRBCD.FPP8:RU+@3_rCS]mB?E0>/X;h(iQa9URY)jqiWuVb`ZZ>E4IN* - AA`a`9+UE]6a.M3"rCl]8d+GcC\LFQ9%Y[kigRJH - XQpmn1]7uDiWU;\DO`/ - H6E"(qC.q<[D)60dQC8:O]e=-^16-=Ka)HYB>b#s - Hsl=EJqJ[tHgEIc[U-+A\VGTL_]WrM1B"Bpeui:/1F:f&;Ir0fKbCalRF"jjKY4t1F;G609 - 9usNGF*,(HLtnHcNN)l1o%d5qrZu#fJY%f[a[XQ9''8q]k-W!@[BN!ZXIM6h,8/)'u7b!C0 - FeEZY%J+SRI?f-,RR;D4$:QQ?qoM1"1Uk?EID=KS0II?4@.H<2!pKRV(BM7pI@Q]tM[]hQU - G+N)(QX41fRscK7ke>Z$-*Jo#d"Q7lVE^b<[M&6C7.s'ieM>,k80WDJ24.MGu8S5!$bQBAr - VmaS5"lC$MP@^5Rie&U8*d+t-IBk#i1BC4MQmA+^[_D^1EehJbad&kXFcC-W6L;S"l)`MZI - s8MohQsm7/`Ki)[B'juq[a]a&p6k\K^q3UK>4pCE;qAZ$NbPIZX]i-nMpKY;2a@)q"4QGAI - J\2?'1bnpDqqk-kn>IelY6tN*,P!M,#5%+*dP]rajdCpe(U4WJsIl"=t5c0V94IW$>6\^gG - U;BK[#uFX.JRhHM6]>qJtd@/R,ZjiCe>Hg/MBV&$YMEh5:4VR;3>DIQUaVi# - ei=JGic`ue>V8RY8OO,oY*;R8 - 'q?647>-t5.Qi4"eXI!:CfcDs>o('*Z-qU,/b(Q&f-"s85Tr#WZN#=E@GEG_)>WLtmrnqYR - a,d^MEp.rS#7e+aDQ__lL$md/>ICetCoN,+rC1qod\YM9OkW8MC!iZ/]k@,W$SR;gCj]9`> - 3_qWQ`=&dB)8Cnnb(L@>BPlEfi!MA1M0`H]fX0Ce>cM!HVCD1P9pLsd&gM2HVE@8'e31mHM - +;Sq#gg'fP)7f-;Cf50M/"8b(Q&f-"s85Tr#WZ(g1XRqQ&t@4U_++ghn^C8u)5!1WQ7>Lm[5U$ - njH2rIe>Q6PC/s*Qr8(/\IB:!pO+U[%dn`3!P*0:%H?U3RFI*HT=__IK$Pk:tC05JlXB;a% - 316n^&\>fnB?89>1]E^^cTLem_hJW>aBcE$mG,7YVl+0["q=mep!niR@DM#0P=_LFb(Q&f- - "s85Tr#WZ<3KV6G>Vf?%:JQH,9rsqc'ej'6\PmaY#hg`kg?.A/R#MugU8+aFt?q1<3-1+Zt - N=26j\Ku<3BKZWlNTP[T"t3Z.f6AUQ<.bk*mM]LA:ZCc^H`WpYUI-Z=M(Q8X'#Ckp,dmY$/ - 5Jp$:3_+"]Y2"tT$E]X,:kB^c'gM - !R6>idA2-"r0eSV:ph`Dp/pn?n2iX^sV[^\ATG - PA+;X$T->`!P"o;^\V0`]R\H"G:d-j1p3J7RMiE_HSNpXnU;<>_55F9'ic6<)fA.O'\T[A/\1AKp\?_TngV/+5FJgDX89Z - KP#5n2LD`(!W:J]l]HabsYT7?k9SaX%FT5q`"DBF\#.MGu8Pb=kqKU)tCP+.qVA@Z:==7,@ - sf@SWqi_$:a]63F_k006KN?]4qU(81/DPHkCT:p-qmEq\amN<)R&QV&.7MJ!M5JOO;cTZ/1 - nUDGSp"@MA^MJ:1F^(kJ-Q=$q*"M")dh)2jp`tQJ%3+Sm.GbH,9&I:,o3m9-V>g,OdiX);E - S[>&qsHOu'@Uft2Vc_QgXW?+`Bho-L%=?Kc^m:(UL5Dr-hloV96VB7pYUHZ3&fZZqYg0GlO - G*Ke%0\f%,M6DWjDZ->JGplqqqEkAE6(d*cSc5k>'hf;c6N3qn6:IG0`>GS<69ZjK@k/![t - 3-g7Qu&Y[Bc-EohCuC>HJ/mZ_f(>`BXZNZL?`43el+D)d"Bph-4Ip76Ea1&b,6U8?"cQ3np - OWA:0D_Ps%hIG2bW-R0j'oh>DOb*=KR9:+5#F30Rk=05Y;AAF0D2]DJtg`qkBP*hVME0@** - <8k]J$^E2Ad[cjUZh*>(1\g:9T76W.GLORK_WOI^6rJuI+_oN7YGiFQqf<,u2EbFa*?@#1J*/oh7HLtn,d2FiT?uU"\[+*iNEcO3am& - 3!)_5\$-04)Ya;/8q@s*]EOWm4Nrqbq=h-1 - =-C$YL,#P$076T4k8.;5\9Tqt'^>,k80WGj=k[VX>sDE[U81TIAK^BP2iX?0jq68M_&DVMC - (6h00TFbfAA^V@Scc"a5-h)[g4/(3$UHd2?2k2k\Bq&NC9=I?o*c#'GhBDC;,hs&FjO>W)a - XC&`Vp/$GN(LFRgSaf9@6q$66cerkc*8FGq>e-U+2;=!'.pfl5dJ0*dIf$88bA6V94\T[kJ - ).^%ll0lUTfo(,n*b165`\gU:tRVYcL=;56Tp&# - 0$.L_iHsVq%H:b(Q&f-"s85Tr#W*)#:jq-oJ$&q-RUUC#ms-e##jGG3#%Ghf?gm7f'Z0t>oD;3Y"BH&mJe/cfih*!e[ - g8[^_Q]R<%gF0i7nk3bRmGG[np6ahjeK3]&B:m`LnJ>P[dFLH]M3]V)=t5c0V94IW$E#Xlc - 5bY/=2Tb%e-R`K(]Z#%)*OJ%4tR,ZrAG>99ff8'i&>oZt[+0Y%GqIWLi7%[;4AhGIG,-n$[*&f[s<^ - cdoOg>WYM*Kt]= - V]fB'PD?QBnD]O+hKMda5-UV#?qcq&eu1FRIr;[ZP\?G^+JC`fJ`P=&8_6D19^66F9^[cr- - P?/QF.)<&bU;:QRF4EB(SQcHb"SDj'X.ofsUJpn@EV@Z?hJSut/8\Lgg+qsCl##OKm8McBl - Uqtk.>=K5=LK1"=qV2?M#H^Eb?Sp3U!6bb?11"miX2W(*;`/##Z,>Xab8Tt_9[T)(stR9#_t!j/0-B*=6Fj - $(&]&T17;S.,>W]ab=VG402E;fY+\pKm9S8;^aqmBD>gY5qVSpU5"eJKGP+@,hEX&lKBoCR - .>o@Ua'GMPP)fi":rBqi9mCX:5:%3.?(HZ14E9s[>_c-4B_>e%$3YhHi?]WGDIDVB`--rE> - .aY/fD6US7/:pt1C,N%""+Peu^p:gllgt/]DeZ*E9XKcVg9$gII6;*"FZrEI?;W1TP:S4f% - [.sFVO&]!I5E'tLq8A+'17Pdnj+cu:G3$`,]&T17;K_GQo>rAP=>f%,j2Z:Lbk(#D)]?f$/ - bS&aks/$k1W,I)LgQ\q - AY1V$^5&<7)b1p?^JDK=q3[le6tJDVWm!\Ja#&?U*oaI/`s)2@lCJR]8N\p4HqcD;1rdj*, - `mGhDKQ;Wa^Mb(Q&f-"s85Tr#W*(qG!VjMtrY@cSRinlsMT[u?Hq5F^M-FUusUDng/>J/K4 - B\mN=6O,l4TP[.L.?='5kP=`Objr99l?@2&sm2n:d'U&>>-RW[??F+6q+mf,eJds'tL\^oBHhp2(OkXKa([B^@=U\&>5%` - $:-SHP^JIJA&s/5XhrN?j#b)n%JII_2_e5"@T9^ZMEY(qsij"XI7W4m'V*+labm<]]ZM3rF - RqMhKuAm\T9(H`_P9sD1r@Zr.]>$_@n=(hd?lt6`jP"KZd!r3UL*W>U7NsAkZU3EWSl;>_& - Zn#qQgY'J(c^<2icLGFAKM_SSXL:.9X'mFehDn5bu9D+\Y5ED&HDr4$]u2/:VPgJdB"0J%/ - --*(j]"R=dcJ,]8A^rORD>57-X;PZhqC'T`1W@TRjW(N*l4fCfLA?"(f-5S48+Pai_Vba94 - 'YAsX=K5H+/n0%*JFHHA-Vp_&Zn#qQgY'ULI[V@Fl/( - GF(Gbl8m"C4%qJG6"U="nT@p^6@H1=A->HiIZ$$A]pASgJdAu03>;]@;/5K9-$*;XDn'eW` - @7/ZOmc]_Oi[e8P)Lj*Aj4]Z@!sp.d#mUe07nue,]XU#WFhjnmp\pLk/GcW9W_7#(qL'c'$ - fUqtga;aYF>&=)$6efo@(7<1P(5!jGWaJY`E#^f'7sQ3p:mlAKd60M\F=.b+,ZVG3O,Ik0# - ?O)sF*7;YG49;PB]._u82PURj4k/E5p=kZa-;Q1$l$@IauX?lWf7R6b3Vdq#U.a+=;Wm[V1 - $YkeR=mF(j,DDVX0O]QP$S:TfWHt1qNfFm[YLS3(i?9?fe@0W*q!Pc_aN]q=NHcZJ99g/m. - c:@Zj(7Imq)1)?]=:Tq:)H?jcB2^lKF.oiSpgnop1.W - s./I/3>Ep0!]Z1t&ilfOrUn - e:n)(1T=+u4%apBU6Dul7S-a6QXC.t6`SN9^u;l0tG&fA$M0(h2>eh$W$Tg%'UnB5)eYZ.$ - uV1nc9l8RUJPM'TZ5Ok4%DdI/`Zd'6!*BSG?(2:(?\o-=bC'Rb0r5TMCp_E\cD.mVHUe-b\ - :AXV=GMbQ5r`l;5.L[k.:11&O$aHJ# - V8tfD/#CsDk:qFV+R#qm'H0;]bCCHg6=!_K%`Mc=mGkVl]'BZbimfj0==?7[FD<_[o,:)'G - Mgd2F_.b@RTQu(!)t0HX^HYKZ].PY#qr\\eMOP'e32Pp%;=4QVrC2apBU6Dul7S-a6QXC64 - RCR@+q8S1o?cE5$J'C=Pqd67XQ:q-3[\YJ5b"_QkpG/6-;!Bc0'[ZuGp8lIF)EZRh;mX]r: - &Q"gk)VKU="Q?r>q@GqY-*^4tMhVS&&nKYG4PI8n]kKZs!SsPe1K\G'-;P]+f!V>L#=7>Xl - If3GFnHOX)baC7m\oc&^1FI<@B&o:cISk6.WilIsPnR7LhuYH0:11':"DQGg)0M%&042FhT - 0@6GP.KX]Pq#epDhYbQg9tikD$6.SZaR6JB[K/VI7m4+JWE_O'OS.VM4F.te#6+giX82[m8Y`'5p@Ks*$$%M.o$jX;e-_6Y5;$R^2fIQKDSk5cS_=Q)D_3gT,5%g6'DR54"&p$7bkPRhnJalU^4/%)Ksh7Mm=LN#`Y9KGoD(8dpJH?!!,9s$B*Z#V_?/;\NKaKA*_,=jqQ@cq\T[ - !pKW`1G+Y>&?9GTkiD@IW3kdOJ3!Wr%_l0g_jV;&X]Y_?tfs7G/97j"_#qQg1!L>2_YZ,#!&4[rP7NI+mqssUHSiqG1'M2R - WL+mi>>\T2PgY5XGB3ad-Q7B5L'Sn@J\"&FpEK_Jor)'s9E_:\)H:f\c5*I?i(+ue9oB&Y^ - MoFA!pu."lk\-g$-l,ai<.BCIlC/B2o&T?7p6JMu,LgYsZ5NVG=9Vj5A;P9WW`QBAb^*ZrE - WSl;>_&Zn#qQgY/=SP7U5j_$0JbM+EH*^^L%!m3U]-L>042H&Dr6Fh3?TGpA^8C:2f>k,#" - t4a>On,a9e'/C,ht.`hnFNgVP[%T6>`W?j2Sa]N-at[7_sY(E,b<@7>pTjV-G./QBp%S>.8B$C'kOs7-UFjSJQ8eCms*>,Ba285n$_AQ/54=AbHqV/G/&R - :Yh=?+O!%OXpV>#3O'nMcrBpVG3h[U/\-YK36g'[jC;(%[H\od2R\7S$);Guu?]ij'"?ORO4R[/ - ?snm/hK8Q9PeNfG[R+oB+uD;2Lq[RU&n - ]1P$mtI5<#RG,$^-,,)`5gP\BS3-nUg(n?-'/\od0lET0BkT4M._Z:U6,TqS10VT;ndk007bkKaP6c.ojN)>?Vfg9hG33[A - -rb1Eh(4$#D\CY%jnOX$SaB]>>Hbk;*b$E[OA^3B%;W&d:468i]7FR@d>J\QL(ll#K8LD7J - ujr5Mf&fqjMLkn$0i'?bf]a"ub`;Z`QgU?qRq2*p.>0+a<]2ke&)*.)B"dUVcYZ/CA=K7n, - ;LsZ<*ZeX_7Ld@G=B`"CcX*YQXeA+;g=b0HhS#BeQ-!.ombPKVY$<.MR>c8IDVVa0_#eCfl - fQH](G&ZBZZ`;9IQi#GJE<1X6N6oY7un]c$HQnphVR,_,E - hIb3b!eUc^l.5AdnPK))uT.W;]t'=g?RMLA+*%af(]!-^fC"6EZR-[r8mh\_5]jeu`.8Fd] - $irqJi[@>&(,L9X]XZ=HO9cl'TF+Vd1jrd;bH*W>m0s7Y2cZ[MXE5[\Z/o!2iMZL86s##hE - p4ad%/^V>81D3FpUW:ATLCBk7bOEUFmicLoBEX@6gCTaJ/ - ,\$DdNusuSF(U=G/Q1HJS2G)JE"+@6Au1Y<:EJMbY-+pg*^.[4$O>*/:J]=(gUBtK33dJ`` - i4m5e?3)HEOWm)`/ru8A"&mV]=YZgcXm#^.WKHJSN:m+m`Y(6s":`_3P\PS"I9D)!)&Rj== - Q"QaJas,-B!2SbhU)7@o*N.48%pkn'Iaqa,V/Z2/;d>GMe8R3"[--3tR_#6D6`".TNKJZ!t - \"q=9C@Ck2Wk`;XNCiPUGF7>jd:1OoE%5Q:Ff]mB?T[r+p!K:GKns".*B6tUrKrV,3-4Vh\ - US.Sb!\T6fQC##R[Rt_@k8\c^m9N:T?oT7sfK*r;?04eG@;O_/t>E!g - Y;`YZ/CA=K7n,;Lp/SHhONDG>JDt^nsQ`t - Dc5#JLh98;QUgpA=Q,uG2.=K#$RPEShr/Uiu)N>mf0'q2@+K!i"oE]Y^5eZ)WE(-jKJ`^`X - 3o'G$cQ6"uKkkN\hP:M[7G_ZbLL(>@iCXt$u4$*ZP#P,pr5EKA<@).hr(DDWU!*[5>3+g"j]9MA-4"q?gO:]H'8R2O3/eSEa;;5 - o)Q*&qnfAV]pBdmrdtIer:V;9)3kYZ*W6V#i9b;WS%I$8f]ggUBVb^SV^(o?TOKr`n"Eo&n - >KqXeJ.q[Jjk*fV'qqY^/qfZp?\N/;,*)k!p+#G"Ir@Udf`9bja\S:oCOP!.L0F__.>qGjJ - XR&*5%QC@__VB^+>.^u&LLO]@&Q_fE_99uMU5Uq[-/Rk\InV7-#Eqo-4Z,]B^YZ*W6V#i9b - ;WS%I$FE5u:f+cImF32+Un^81$B2a7]Qis5V-d2[(+jjk_?FX8%@4",N>jgB0O\Zb(+rk53 - (p8.,Y[f&Gl%%]qrCURg:)"HZ;DgG*BSFDC85-)e5ndOZIIqg'0E7jq-1=GAZW`$ffX\o^MO-6cH@&ZDd":#0m))EUXhRokK7e5`g5A\uVf<8P>Wf7Fnh;-mcf&2W]Y$ANYR - $6X.0EGR\b!M+>qbKlOKS>*lj[ia"6U?2!nOL]$H$OZaAK:&Dod#$4IU;P_HVt\@E[5uLR^ - :KX4?YimIJVRDdSa$FdF$A&[\Lk@\Nk]Ie0eJ_baG7$G#N,*Wg26$aHQal.OVH"^]di?SA8 - $RV?mY>,\*NGV+N0u%O#`B[VacY)`P&R>EBa%rr0@7[`!55f.^aV&32tKV?0Cb$ZXAm#7`S - +ekGkb^'Y`$:S0gVc<3Hp`JYPML(.XbAQ5%]KiTMDSs5P^aN-r:-HVZd]6sGFe##k:o]_Rl - 9qORqp5_H;:h3W=b*FXVcThGcP%BVVC@[]MMmmW^?F+66-kH?(O":kOgiO,],.3=4g!O - R<'TB_C/kF&YeLhnHcJ>>,:4-dS;CPAr#k21VOG#qQg1!L>2_YZ.7taEWXP?2j]d0554qV* - [B&X]r8/Rl1ET#:idnnRr.4#F;4\;Q3^!g4BJ97*Y6GN4Z]K)aRN->Uc\h=0Gp:2b74^0d? - c)$kR&-o1@]fPhBOPt3FeudQ-?QTjl+gtb+q"XBSMi5cNJ,Un5%>u# - UDIHs.J,]B;kKagX<2uaEJ:KY$k1$A/LTq7D1UHrNl]Y3Ec'pYUP*4mBRN0e%oB+T(=&818 - X=;>Qo]ah;p$1*%mbK*H$F-)W]QpjQBt7j#)@8Q1[r.aUZd-kA&t7&Ng%1O_>oGkP["O:l. - TWWAY"Dbsfc&V5:#AVoO]0.:R145(!"iP:'.\LPI['OkdaoD>ZWuq2\F3j, - aqXHhZsh4I!/oj9&&?'3HaB!\@>H@&ZD(q"jjTfs>>6PUSbAoOu[Ka`lWjQZ8Of2fE"HUs5 - Af-SdQ.r-0u+4EKYD^V@P;Kl,YWp$]ZqDV)$30dBRuTgFG?(+`RnABCiOWtHKtQ;*+P@\57 - Wl!V!M<'Ga,FQ15q"Uc*uf[u9oH,kpc]63Gj^OL`;>?`I&VfV%H.JWnA=Q8B$n(bI[G4!ui - './f\Empm[M6-[NKpjl7P5gl=3TRps1M.'C,uQ48=]5(jq=u$nG`ZV!Y[PG*%MP[RfW\eB( - +hRhkWjN7e>Q6)NfI2D>Z"=Z;^%`Qp?^HY99t\=P0K-Veui:?AT.MEo?X4ep?gW/mbN6GUubKF]"qXp%":[Zc6(V'Y"Y?sNUn<$p!\Qojl,q!cV.p?fJ:n`%HA&,Z1unLj`hJ>LBp//<+)Q7=8d; - uhH?J>E;IF9sKu:11&O$aq;?6 - d/"I:MbYZ/CA=K7n,;?6cD!gX/ncm>nq3J"".0#1BH"I9ApckEW_!.Z\QV90)q'lX2>.OVH - "!.^YkV#gX=#qT(O@&\YaYZ*W6V#gYh"=t8fTM&[lEWSl;>_&Zn#qQekTI4-H!!$:+99g/m - .c:@ZWgpk&!<@G_f@RLD+@CkliE[Z.!/LiF.OVH"^]di?SA8#'z9H707SA8#'( - LX4_!_W[s!!!!QEF>bd!_W]%J>LBp//8-b!!'gQJYgKq//<+)Q7=8d;ucmu!!!Z;Q7=8d<5 - 8Z>Wgpk&!<<*"!)+A7Wgpk&!>f.CEWSl;z0QCL"EWSl;>_&Zn#qQek!!!#7`.=c-#qQg1!L - >2_YZ(T&!!!!4#F6heYZ/CA=K7n,;?6at!!#\4=K7n,;?7SAWH&&5"TSN&!&/D#WH&&5"^H - SSapBU6z^r1f#apBU6Dul7S-a6PMz'*jgQ-a6Rc"^%dp^et15!!!!m**B52^et1L@&\/J9* - G:q!!"]m@&\/J9*JRNV90)q'`\46!5QO(V90)q'lX2>.OVH"z!##U'.OVH"^]di?SA8#'z9 - H707SA8#'(LX4_!_W[s!!!!QEF>bd!_W]%J>LBp//8-b!!'gQJYgKq//<+)Q7=8d;ucmu!! - !Z;Q7=8d<58Z>Wgpk&!<<*"!)+A7Wgpk&!>f.CEWSl;z0QCL"EWSl;>_&Zn#qQek!!!#7`. - =c-#qQg1!L>2_YZ(T&!!!!4#F6heYZ/CA=K7n,;?6at!!#\4=K7n,;?7SAWH&&5"TSN&!&/ - D#WH&&5"^HSSapBU6!!$!8f@Tchl-kZQNl-S\Z`p[l>n0\nW2M+?:X?.I[n`JT[:@7;#7hm - :>nPF&YZ*W6V#i9b;WS%I$31'`&/#UrjiS;S(RMo:rjtmo2C2"^ba+!%^\sIBJNtsLio2"B - HK=&D0miW\mbPM,XBF#rbUi/?hR$u1mi$c6J>LBp//<+)Q7=8d;ufUXf\"h4B?o/agJ=4mA - a.X>QS2]@8kS)KP]Zj$r*3N5kKK>MCY#Qr)`G?UpPsGd9(M&bPAGid;G@:7&RE"lD:u4+;l - - @oU'V8<*B\RccC?oDp*E4h*.@_XrUf=fn*6,L9\om*) - am9#\g=ihk"\T$=#F6heYZ/CA=K7n,;?8I/gt^\<#Jaq`B%O4nk?TDJ#(rUPZY%)1C!`N(V - OqBo!L@K[>e>/2h5d:gEHcV>C^l[;N"7I>:11&O$aE_(F\dqWcV3]SiW8\8c#E^=9,\LNfS8JYf6]Ub - )2]Pq,NE/s]8EG3rE.o)%mjo<) - %FYgdc^PbgQlqNU6=b*MG9OWuCd_GYsTJYaQ:%4i5[1`'8/(*kRf:ggPe[XPq0I]Xh9M@!dEp8\oOJP6F.PO&j<(*p@V':`X!_^e,=B\m+O6NH3 - PB`G9`9Z$YF6Ch#gm=NkF*`1[o<)%FYgdc^Pbf!>:7OkWVdmc-N30ooJan;f,'j\L'gXYm= - DHFJq=EdfBESfYeZ)V:6UQ-cai_JS$\cpQ=gM`1Y#,4-WTc)o9-oouPq#de&($4N0,RoGV# - oZZ91AIk==So90!NhVbO+&nbEXUPeYDs3cTf0io7hI?iZK<=e]4&`B?rbenmo`T.SUmbC-# - &5;NnlnZ;3*FY?"Q0CtW%%DQu,(9*N[XO6RF'=-H1U1KW)4f$+;1BK=0LK - 'Pq-?R@X+4dKfaMHo^(8;8"^#M#@& - ^eS"F:09MWcq%"^#M#@&^eS"F:09MWcq%"^#M#@&^eS"F:09MWc - q%"^#M#@&^eS"F:09MWcq%4*N;>4 - IgW#'OkN\/mc1]cE8c?+\1?Ct:_M - +1$:F>8#Xf^u\3HJ6(>e+Fh(=IVOF&7%U/;t3dg_l_hSbf?2Z6*/rn_ - "aM1>7LCPVSr^MkcV-KVQg?d:d&%Tr&gU>?@meeC;//?QJ@&XF+\`hI>,9e>QpoS,NQ8s$K - UfL6h:n[q.4$A&jfU,)s7n<%(]=3"QhIXlrALTC"6A5csX]p"bJ-!i[00ascHq6eaKWQUK- - ?c:Q7[OO+G/oU`mFntkT0GPM2pKRjaJb8H3pC-P;Nc"r`:8QY68W&K^5rBbSiqE]GOCt[Dd - J`i<39>hN5f5;GThRc`j+%Gf[u`VGENH%/mXpBKB.\27uF7c`f1poOr+T3q)'j8JsK$i9DD - J6rqncd;iI"\+!4;(s+(7WQ7>m,q!W:baAK^$rE6I=&XcXuq[!Q8[r:/IE,b$oZY,OQj7(aM#/[SN>i?k3VI4o]]:g>:6m;ik/gNN;"27h"f&%nac8)[r:0dc'ug\B[3,.$Pk:4 - EcN@jfZB=)("[O&^etcX#*t,hRZ#HB2)$_'p?^I$MA0J=)PuJ\?[a/N*4:RTY@#$c4*GFk! - X5A7R1\FE6\Z"hF`i-(jpbf0A7S>M$!h2m-8f@M1_haq$`75RnQ,'fhO5@Y0n<`(. - >/Rl>7@2FY#QH[C*[EKr(XP5XU?5]jDDa,YB4hGpT-`3tJLR@BZrEa'c+9CZ.Q7Og7>$:7TtLH#ou=P@Hm2R5Sp99U[ePn(tb#5(+RT==U&s^etb4F4#uD - '($m<'Lg#4^]!l\UIUBp-o*2!B[itX6s/Ldq,MnBoiLkC7;YbrV%Tb4]6:=;D[b&kUIG]DD - &L/faT/VO\T0HPOXEqrfs><=,U>p]5s7ju(^qoqXAJDUP<]*F;d(KAaPrL8'4PU&qXfpA(i - XS=oTUe'W`5slCgg>EkDI(c^m;sl)107$k1RH.p&n8bEjaVU[%:']4Lu;8B#[%e]5^c'Vf' - f`f(c[YW5]82(C(jnDM+ip8)otefR,*PYd3/Q5U>Id@io4"Zo8B3HM'N9#Ld(Pu"AWV(Q)e - .'9ft5($2%Uji:=0bt<:(M@5f_ueu`/!lI8\2P.Gf%8h37UYZ+#oJYaQHk - +VrN4`]USTgFHt)B5K+W(h)EXS`E^&e5j=9T9D.@3V"0]V%ZL'$>BWpkZ^$e[*c@^qfg>lR - U_VCgVW0Q8%ch)O=!UEkQel'^su=_hZ33+otfG,37%?Hi*O(&j!(VV39#iAa%S&+MWcq%: - S(PS*R@]rG3pdTd9g>`D;2L!]>@OW>O&1dVfLtGXa%UL1he/H>r=/j/1aKJa2g'bWDb0AVj - ?>.3dpjH2>T`Gq'($k6suu$OuI=9J,fIK<+jace=8O?;SO%oJ"Y6!/#eX(a\@q0-]iiTe0s - 86_hXtHKi5]a&\SC7MBJ@GFtM8!gUhF`_J0Ji1,ZB\I - /,mMnqd.8R@+rifJ40P%hGo[Q75b0=gM]\4*DT!A4ZI_h7Igq7`;WB`JTU=)00>)GH/Tpm[jm69O=gR7@!<]2mR:9fA2f[iqhS"9B^Qr - *2B[M?\!62%'[FC<`8$_lOe60P8rDp%(2/_3:\4jGRjmqNVQe^nWq>W/DpkFQjP$+dGr#3AhgbYh - j(HJO'OKqS?naEOdY,:NG0#BWIMA"MQAXl`YZ(bQ>Vp2pAB;U^cTN-[=^,+&3HHN"/hUuKD - r/-0]65e'P`3"beREn+/;9ai+SHlm.p&mdGk#6oj_m][NupT`5+fsE;AUrjaOjVsnJqi>#; - 7a6F9dL2*Ze(2nP2hS`6_G[6maf[>ol=897?Ku(#u@&mFnu>o^pA[!nk8B%NQbeb0gP->K4 - Mo[+*a\=I(tf.TNLU@`=4k0>I(=HW!bie#-!NDr5GBA!='n7MA-kC'rjGo*m^taUO6b-.;c - 0qXNUdgUD)S>-s+aokJO0^O?!FYsK4!D;;Y+Xf^u^4aT_:kq;&8`'g>NLCYIRG7P&hMj.ja - KV'k&$k-ZoKVi>(QIi9FbLcmLkc%LY)Dl-Cd`?q>!sFK)s/`F]Oohn/nrH>jVG/!fCe,%+l - -cC3Q;T"qc$0L.#F:8226^$_d9O%lWFVZ"Y[Bb_JO/2-I>+$c+=$7_)`Ed4*_U:ocHbcFNZ - C3IV+i]l,eh:.JEFRoqh/26AZ&)Zl?)\hf6fn:DpJ^ - CM0OY$j.<71"mV2nWp&+XW_G0.5O^lLr-1$[5^3fTl`f(d(MA.3UN/39tr00l_WB^=MK9MK - 4FW)lQUYEG,1S`k+p"*Q0's^pkfed2SjCIlQnfkPeJ\N'dHoQ8,`;[2]fcp@62qcd[q=CR[ - jiWi]^tJVWksK<=>`r$`:;(`3:<&bcWUT#mQc.e'+4RK$5OEbX&n\FI$(8r7!$bMV - :sSS;!T:KSNE1C_7Op[ZM^k)[VT*dKk\WDL?3D:@WnYFT4[Q%a]^1SZ_RKrpS\!?.LcP5p" - $6Le;fbC?8Ne@mQ6[Q"s8G1 - AV\BB%MWcq%#_h=.*M1CkI,6^=BZpoHtlSJA(c?39YiP;Pmjft - -K,h)Gd-8.P,TjCWE*&#_G0.5Ob9Spkf/RC&JIH^//30N>,U;7N0e3HO&jH - WP#r7A5sB;Q'65Pq/3.L[kBAo2">24Zkj*N>U,BT07NJTpnLUQ7ATFkih5NjiRn=S0LN6QD - pdABrPufDSd>:GCF6:!;,R,9=X)+ldfYFeGfFDKg0_<^]E,Zjo?qId;*-h#bnkCb>Nb9I"[ - !5,'<(t7<89)%:n_&XfX1_&U/GC29I_hV;Ah.O4oW%[C(\5MF&ab,s+r5SUUP68ZQgb[V`l - 5Nu^T\$r:k9jQM^==POVR> - 6A7WMC+3]B!LAW,26^$_d9O%iWT;rbC*hAtIG5`Ug_/q_CZHN;C(XE& - aYmXV9YJbLYC%U>IPl"dS(A6\Z!]/u*+-U5[RjAd3A]RJcmP$S7f?4?'Usl;NiCgS,!XlL2Lf0&4ND5Q)k0Z_C: - 7;Qj?9,2.AR< - /(\I#qWQ5;IQJHmFoGE;jSA%cr - *)Wr(-cD/_cV9rVH9WDmDU-_GV]33G[1siPos$bXqcQcY/V:I4;RGl-aV+DqVFmE;LMS9dM - lV3h$f9LZI$^i%2o2c@D>I2,>IB!]*BW9)^0D_M3I'uCt%YkQ::/">l - Dr1i9;C0r*B?qXaY4MA\(2h'(Q:c;bC=T?+\Mes:q.J[[^O"D.;kg,8TL"2T7ujOW%[XK:; - A$SHQAQfRMhWc?0JJSl`nnCUj_osd# - Mu-.T`cX&["r59D.rLUqVVRNj<6>&mp_YbHVu$;C0pd%$\?hcCI$Egka?/Fl:&de.&D"TgO - Sjb&`f8J;"Q&*;&4J.XDV_nRm\n9b'.8G`<7XqR'.-D7:a^8;DV_lAg&A\m/6-_] - iSibF?+4tB/JE#q5_0!"4"CY,/=$'"Y1 - aHM'!>&N99"mhCso,9jFV1!Y.\`/3mrh_N@G2b(8r7!$b;V4K_jMHYbHV3kab?.OV9YPh:Ul*6A]dR3X=+dfe?WZ/;YQ$Jm,#E[\3e.dPn4iP>-D6q3Fs!Z - >^4u0Be2&,.h4+1:8uaBc^$4k0&2'+/=$(gW7n=W[k>#@W6`cq5cu+H)]P!0SICgAkV]SD" - OUI2A?!V0*M\o4'GMgB6cZl)[7A5O6(+WFE\k - c;EpqNZ&5RoXDRi*\EM\`_0[nfOcOALI<@&\0=V4R1"G':_S(sPsZA=Mp0.2 - IqOX!Ao:7WZVWi%DP<(*p@V':`XU*3/mGO?HYN&P\3aPTh+G3ssld]H`_bW`XbokNcB7.RS - ,e1?kG2Che-PdI$>71i0-?I.+,S3;4"\3cH32>PDug>pa8=KnIB0!o<>6BUFK(kJMUY*0iF - lD(B?Z4_&nBU27r`CXo/4?S9IFE_p^:nW?/9p!7IB[EDJT0CBS?#kIl,'j\L'gXYm%9_uhl - dr+IgqS>Gre?k#D_A\frr)_,p=W``G#=1qq!k,d_G&3Pa[$_\+`H5MdX!AY74bioq=<$`U+ - /*>g^pVb4\JKm+&g\S]T\i``!L>4G:6sRs2Jh"ggka?/[:-t-e.&D"Z"( - hQ7='<-P<6"m%?\76q3OkU*g7!`("$f)Wq="\NoQbV"F!D>lR)H\J@B - J(4/e>T;oC)PMSs/?QXbF:Gon5^MK*&@E$YHKUeaMj&R9<6=e/G8)GPLN(7]Y(%_p@u'.&L8n=Y:0LJoR*:)W9!7d4TgR=87o_@o=YEc_XoRKL\pW - MU#tmoaC"*(po&Rn[?*%'Q@&\rg"%u&obsb!c8gn#Y\8W=\7urtHM>R&9;`cN-NY8b@2Jq/ - =X3K-Fp$q(_e4*tDnA9u*Q9&j70]>Ki1hgEP^'J+?921+F&VCM[bu1H8T.[dA8sLmJhhpF7Gq>Y.iPL.sJ]=l2QAXl`YZ(bQ>dS(A^]4;FE#HFgn - r(^d\@T7L48\Bt1P$=cc-:r,SiqGoQS52j/PXJf8L%2[))Z/nKV"&i&PI7gF;/Vg:n^3FT# - 3H,>V%`9EYFg#F!gQ!R'[PZ>#anNBjdp'l_NC7^An1ZC*Q3Se8u - -$oB+!`J,hU!kgZSqn0SJY/o33Y"Bnp - ?GVO>b$,"q@J>l[$J\'?CR5/=d',)[68s<&/>pKG'/WS-)`mT - Ksb^JW`foadS(ALCYK(iJ"U4#5SQiW&G4!ui2r`r\74g8bNZ8ig?5 - -V8$!QVm;5:)WS2bLTCer$ELo!R/6r8[,K*Mof].X4^/[\EK6:N@J4?VE=`eL#$e3d"o9@Z - XBWR?Z/Y[@KS^F`ToK\DI6/2\RoTlAu-_AhdmZ(q4+)$0:="SEN)<2NE]C?4qnWJFj_919E - :79c&r'buue?U!F@lIDp_r*-'!e>6.NCY#S\[_oD^?c@m;hn=@aW]Us%eG]:=;qj%DkYVpb - -+%@56F`RKH1JUmnNuX2A-UR^F6:\\Zsle%4@rg$Z=qX[Wn%/CPu&X7Mj>kpNk4,\]tLC>) - 9l%cSND$2hN4.nR;qA(;hUo9O-VA%QFchUeu``K_I0@!?3?P - +.g(sdG+B-J\o]_RelIin"41--h7-YKe99i>IXfX0tVq%_CK;C#,>,mL=$[#\7%]ROXN5N\ - s+7%O^0AIeHhFMrW5=1`Q#n=3,kO3kKZ)/k+oFtHqPc-ldh'L<9;8f.8Ai',/:?m"uN.W,31"(L)*,G%P - GBQ'sRGNZC44_80R'Q7]8BY2hf@S2dcBM\[iGZW+G:lB*;]=DI0KT`[#e`q%'BPbf#H[V\\ - )$Sg=?]6:1'(BIX($m%ELUbPLd4'&j4lC+2_J>J.'mJd(]`JPD*mP/b.#n@GWC!`659'G*C - 2g'2pZY(Z[?DY)D"M/^>,2=D`e;RN@//?QJ@&XF+\S08d$1$3HVq.(!bNk7K^Y`n`\<5nI" - X9,re('Vd)0&-33Yd=+V37G$W`=tR]O--`jis8RN"q4:5tbdWkr7@`_=36m,NLD)6(InnN> - l=k7=Dm2=0>fJ*7bT:0L3.>HhZs-[rke&HXR-h*2$%lPesqMiu$N-ZDIQtn%XepjS%ieLJb - Fn$Fr<+]66oJZA"u)>\iC6(m^'C26^$_d9MpAe2ha;FAmb:T0Hti-QsY,>.&)r@hn!gkK]V - 3kZU5:^qbL'=dgQ$h7Hb3Y0m9I:l-aY8b^'6f4aZ5XhS!uSGOO.e+&N6.,q7=5o?TX"X"%,LeG8_!W - D,O(qGbu9#1Dd^rVEqG9aJODWPAE*S)X1=0k846q.7>e=ag2(:m-* - VTh7#;OTVbRu71:S'?Tr$Oc\uSeV?qH7_KT.'J>FH9%4i5[1`)u><@' - C>0:b7QQ@7;olIDpKQ+1el!Z@;ZKn]@!qN?CR)3+:Vh4+79:b(Vijq=O$5(ITc$FR.L0173I^lBS9FkG:hqMD^;UqF\jiX!VA5 - #WBgEJR24$1&!7ujC8G`Nn/+t"GBd9XJ6H2$a_j2[4a;Pf8LY,tp;Nd^pHhbr@EGse-*3\< - @4jJZ:lmdT2Qf<8OWG1#^3\">m7:3I5[`ejYVs+Xdb;l37Qe>ZBC8sRhQQMd.i1#rE1nF2P - 8<=ebb)cEo1p;I)+7J%L#.Y;=d)RWNGOTM;C;5d;7acjNM]=YCCI&%%\/1hbjc]F6?:h82K%:uW\>M:+-q,LdmF$tisXQO*^'5_+-RAggt\D:l\ZE-[VacBq!d5u?Tt[;UIPhlS#B5]9#a>V*NR\b<6 - WS1aD!<9GG9Va.RhIB,mDl;ap]ng8r/FbCtc7qgA>FMi5*9AUjXO4/`b-ZZkY))=Us4r4AR<=utFrqhH]+%k2c]IYr9Ml?XSqsUQQ(?+H,hnFN>l - IN:i=V<,2-qK?2-NG\4d;*-h#bnkCh,4RJhnO*^YbC'GcCI&+PEV1CpQ,?*GhgE)-ic>OccZhk`n)FhFj1fak>X3^f - '8ZcCaXea2c0<8`'Jp/N&6!gU<@q;*q*bjQl-$fle`;R\\A$;]u)[8@p\!"I=r/26^$_d9Q - `3If1+Q;VP(UZ*CS*k05DUW0#4JP"MWISMJr - cg6S3*ASGFcC[569E[fP0'T*\[/p[;,@Y--=#A8E^RX@rb?DOD_JH@2pSs6dp):>piG3RFD - ]e96^qsX:Jhj:nR9u0_k^H@qapYUHN50%p,_M&0M12,@HV6ZR`9A-U^7BQ3^+L"g5YCWMoL - utEZ925C@2=$8C4+@%j-OJNO5%SMFlf[FYoff'1F6Cg`mK38iZpq:L'M'Hik0/rJaV?fm`" - 3*,pI;C:']-NM7ns]m^YKSU>-pYP%Qen&'UTMjKnP*^GB\7^R:M+SBDf#Nl-cC`ld(OD[;/ - !QoLM`<7%nNl2&H`4+$Lt5G3@/A1Rk=5/4ATGo]X+tK.nW]W@.SfiRCe:1D;)F - 8lfR=Vn6KV:Kq+C(7ZA>!'K$boMWd"'#cTo_/&]B - E:i@S9TBa:T3ub_?OBW1)g_`JC>VG/)*\h,WZa97U#7jq&%"@a+"lo4JU*0J>OYT+MrbR6. - Po6f*7'D0<,)GBu@]>eC,UDI!V+X2ck0BMZA]b]B"rK::gl*+,*$$&\*'*TVfeXi`U*N+k/ - 68j>n0$oL\T>F,Um$n%5a7.jlK[Y,Ne3gmh9;9Cao>YQAe"QS%N[`'#)^n6#>GH_AM7E),g - tu?k-f$TWmpIf_al1j7073TNC9kM!\#^SduB=BHF/9)1`TJi@W - )>eG=/h;*MPlIBF;baLD)n`%M_:/5$&DEW+*&G_q^I/"hdnUQ,idLL8*7(8r7!!pUC' - '%(5[D@CHM-R9b67Yb3&m;(X1,S4h(Lm?rqsZh&)lL+]^#X77#?n_]mBA:qXs/%:7TtKGOI - crr3J\A#'K4\q=+j#C=R(S\8durD7XoXC27Us@Ddhh2fG/C"U.OfoGUg]JnQd@<)#&rrd=" - _o&IcOk?TD7!!!H191AIk==So90!J=JLlRMPZ=Sslkt7J9S>^Ko&WF%_,ldoF]`LhqoGUg] - JnQd@<;!bIodZ*Er;#sYmbN6ep?`LL4F6MT60HOa=l+(s=gOu+VL\dK!+;82;A$SHQAQfR$ - S5:@*#osH\Ra6j<ch=kV]SD"OUI^WTqm;B29;Zbagh>d@s'&Pq)IO2rCiTBj,9&XI503^q72Y!!'A8//? - QJ@&XF+\\M+nUI'YAd]?@]AnGWk04*_qlR)H\J@BJ-Mg2 - )#jU`JYO6_bY@:c>@E8*>fX7]8HXh!;$IH("$f)W - FrRs4Pj7'D0<,)G@_9*G:q!'i:j("$r-Wq//8-b!!!/j-be?k/nV5q?J - Omp#17i?5Bt6GnktB)Y6*99*]KWL0&^_-Lctl5"TSN&zTIR3$na)*n:Z,M3zzzzzzzzzzzz - zzzz!!'gALl.-Si,Ji2Q(X2s]T4!3z!!)5KFXp70CUY-hccCZQ"8tT4+#a0"z!73*u1%Ab/ - \o:_8D.UWcVZ;N&z!!!"t_lFUQ4Y6!2X.Qge7+M;>6ko\%z!*$dEqc3(@Vn(_%<<*"!z:^M - cjnB[nIgq?L)qT,,nVj-!WuTCG*q!!#sVr94Ggk=]jX9\Yu"AD - hkE!<<*"?n,u95/VerU=&V?>]TMs'A`s*!5KJ)+aM\jbM;PWgEG_'@*];=LCjLd!!"@gTtNCqO&\$-V$m";a!L4=MuWk< - &JG"edTBT=2]kb,i@GLe`mG!!"]eJj2[4m'20>\4+lO*P!=I+H6&W"9>CD_u"?W=Q+-H.m5HNT0C9\Vu - Qet!2+DnW]0[GMq0\_V^%L*"[L+5^[ea5Vkr0e2-S=grKqd=zXK5TOK_st%lQIM*X-^%W%0 - /HMJB&,#0eGW`oCh-c;ucmu!3d+O)*;T[>4,l;XbVjFp[#DE@2K!U+X&#VH.<5hpD+c[eDP - J3TCFrlz`:;o^:\XR+gda+\Lr5qhYqbd]O!aom/g8''ViT`PrKa11o]isI`Np)fO!ao-!!" - jtG1VZ-#;c4tpqJ]jqM4W*ScAcTGX(^=g35FKRu'=Lr:""K`tJFQ!!$1K0d19%hcL+[R1/B - Fq!e8ehM2dF+GEb7me*ql_YlBeO"=L[JG8R:!!!"L[L)R:*RGg"/LZf(*UJh.]YjW.!WYV" - +.p'onMp9TLMem$g,UVq.nTmD!!#8:[r4CLCmGE?\_Y)hkW%Eh'`^M^;c(D3>BfKo%Gdg]V - kpS(#4OgVzcjfkVl>J - pEJTX3R!;ucmu!3"&3*S7e3Gk@=d?'_$GI@p8="X$I%R#n[to*$WPHkE9(cCX[fI:9es%IM:(><\6JOqsXXe!!#:a6q51T*U:LijJ0o - r20ds+a7"9q@0!SKQd.bZf@>HLjfcjd)mqCY-D'rD"onW'5aK4SI;j\:jkRm@\r;o.h'V;@ - #mlI$%l+.]-TX;+e^>\tYBmlo@#l'%+$t5pA,lT0!+[8@gjFYh\CA]tZ**QQ"n=dt!9fgu% - t-nX=i^JMf5#\SY^bU(QM3ZL!!!!aQ=KAYbbV%DH?WP=o\^aB_8,q-"/%S^A)]GL4,r^^<6 - _[8GBk9CzA4;;=/RNmeqcHDHR5TMPYKnTQLDg0knDp:h(i*dPQaXW7g>OIKisYnf!._.D>[ - 5.AZ*)kP7/BZ^:.l+Bgdk&SO/`3$,!%2sPOf[iKW93mNSb?jO#QA*!!!#7PbFB\pcL!7SpE04`IH&+3M7f#b`k - 2gHKdzJFjZeaXc]gE??W@SIFqoo%^5A=K2RUFMu2;Dg/hGX!:q<0OC8NTAY.M!<<*"!5;2p - 6K7>\41L?RXoCUmf>=XjekmS6GLidKkgz1*n,,HL+HEm\?X1 - 'e>3]X-Oe5$]X.on,_I(T5QF2-19Ap*);&HH%.qdl/F19BB%:I,T*O$43Zg3bnn$R56+0i?nbhFo - 3c6=bi6ehIChPQIMoru'EA+5!!!SHod`hM\$tB]NlmfY1Nga->I460d)U+^B)r"Tj8Ho?k+lkLYHf\uEdP?EiA' - f-z!'ha?[p@rVTZYFABt;0-eVVZ"8DY]q!6X6co4cmP"'-380m3;"?!<<*"!'i.@K>D!D!U_0_A8n` - ;L\BP]NK*+L7K=QkM"#*P%Hi%[>0?df6In1=2]-e3&-)\1!!#WQOH;GGqG-J=.thG(n!/\% - hMdGFWr`_A()jU:ojY[RbILt>#`8MmI7["L;ucmu!9f4%kd\`a]5f!)+XquC!YZsFA,)pDV - u(RB`r0@4;Y&/pmI>0&][$rczKaA9JZ5KouqcF4tc/;nYp[#C*q)O3(W<'g7_s`$CRcVS9= - P@i25`jJhrnB:[17%[6!<<*"!2'ZB_4SbM4*)K`+_fE/X+U;(F2=ImGb6!!X7Q1!^mFkD0g - Ch8A]!Y*T-Ni2('"=7!;&t3a7)rYf5VmV+mIG(ElhM*j1[^LGb6*$/+W>[qh;@=YeH&&`b* - /DYg=fT-O9\P!!%Q7"T!n6(uW>\oS$fad=_]'m.S$b#1Ieu,ES"KGicg&C#c[A5P(#@ArO- - =8FU9KV[3>'!!%P3nFm;.eo*G?0c6'V`X[,OHLME1XT9m`)A7>2j2UTfCUg#%87i_o^aUr[ - N;&_Az?rZ!t$Q@f9-23N=,*5)R*OiRc#kSYhIBikOnDp:(_kI7#*6H,T]`/mTp](9o!6CVA - GniBauJl@8S9/=OcOrbM!R.KBGK!'gm0?O%)*NH\>ZQ9dYS2` - [LUrA&otklXV8KS7:u2kD[j^TXQs'(2YG+t=fA3;J'>];P]0!!!$!%ptr)R.XOUYo19)pU2 - Ror'GY#7"?XKDhGK9^4]W!fIj!rr<$!"]@/Wgiof=!qlKEo8j)VU5VQK>IGAYPZ?2 - UPIb7eOaRHC^:K,jF(V@zBE056Ih,o4IJegJQjKNHmr6&6gtRmW%e&usLa+&dn_^s^SQDGf - m^%fJM1d:E.5l&UiR,\Tm)E&oaN,4TB,M7)cp.0h8 - M>if#PqXVkC2,-MJ(5AS^Gi)][&>5zNBp$1A/rR:/;L0gmd9D=NSh$WlfG%*h^9`tnNPdEI - u+Gl^4,mWoBI!6VH;YXZ=#oJ3sGZb!!&)b)+Q8_G_#[I%T,=d\h1C\]D'BtgTOrg,UME3@& - ">NQf*#Tc.:,U-B3/UZEWA<1*C=EXlFD+AH2]1!!%$^UFGA+-b,6'&>Q):eac/8pDht0o=; - >;@KM!g4<4NZG^CEp;O;f$<'3/7SNZ=Y)b@k6CB2&HDe2!'jU*3H,of - 1THWTTA'C>b3f-+Xt2ko\Q-??_$a*S.lRVY^WY1]F*SFc2mtG!!)4&^\>Qo%E:.@#ZH%l>[fK - uKAG=rS"7kFhLFkFjepFrp]c6EX9j65NfN^V)g(i*b7dB.[r/pa_Z%o@$!W2X>D&>g&]TbK - \M<;X3:@Luz+A37])DuB%480=0U>>IGZl_$e0A!rk17o?MODI - #`T+N`bk[be - GmX)`Na!4%bT+^7m9I-:)^AT^4&WAPs%1\F71$An#T]9,U"=npO*q[!!!!Ab@*(AL_4SJ%3 - c(0Qqj_6(@Tt'=UU:t!rr<$!9f^^7m-=bPk!4fG6%u$A5)Ge9Ddkz!%;*coV>:GA_ - ]e:889j/&q['EIbg=I^%IQ_*>\\U!!!!Qn`ki.L]L9+a,gRY+=^sXaGkY__7]6Ez!'g\G@8 - ZWnn)QZq6kBJu4HB,j@UnDChdlfg!!!"LBTeMe41AJ'ZEW@QUdPas;'\:Um>i:!bPUE/z!+ - ^*!G"#U2:8VJHbPNT>LH"TS - N&!!%lg+.p("knNl3-6b[A0c8#IZ*IKEA^gIn`$F46;#gRr!!&ZSQS1JhgXUlPQkMasKJA+ - *3b#W;z!.Enno4c)*c.kg\#_F2Kbau*bpsWm4G>/&;!!!"l3q;`sS"7l-=n!Mb+p^&N_DuD - /7gJoS40BG0#2])Iz!+7oODnd:?HR8Ek."WR4\r7Kao^pOXhY0P@z^k'joaEc6YEZ^Df#_J - klIbqfb&M^reNW9%Z!!%Ng#".st4Z@^k0&\uN71^`&VbcJe-]WHB^*s*`zPMkPDs"W*MgrH - ?!Jn3P.Z$#Yb+3aUg#QXZ"g:R*W.-j$Hj8WGuR - J;+a,*2&-Or2FGEgK^qGR/hH@0cCT$Q1T+qB%Jdm3HHl=G7hL0@msI=*m'?[GK(Sa0D^mg/ - O\1dk\]KopmAN#,j%oaVpg)-=m;oUlJkrM3`^o]n.?8i<5tM%Vr/pcF^63/(nC^f>Af&QmO - ZmOVHM^(%GlRi'%]<+2k"Lg?T490YA94>Is(,,Uk]746J5N2AVq6j,P(pD9er"-,[Ek9B!8 - rEVh@Q/6D-cYQ<`0./?rlgnk0'Go2#mVG]t5qtHMjtB#;21)Rm';fj,).G)#sZ)j4r>]"ga - )=cao9oWenXdKbi"hde_5=ct=0q!#[2I(t_]*Cs)PNi7#*0;:4IpH0(lFrVajbV\]=5RB4* - (F32;)i7"m*&`+I"._`ZF/bFl'!5Ot`8e(4ErPeELP*NXnrP>)[5%k-#J7-Y]?[d"Ok2ghH6,AV%o)cJ1MisPk&#]esOpR8api7#!-i@L.W]4()XY-+AC-P-7Xr4 - \KZmhX7(&q"_c1^q(.FPEXMSY8h"!!'NaA27/3i,$^2B^cU;dR.beG#A49kpoLGPG-;>!!%6Tf<9=`6u+-/b7-X=9DXQ8Z>u]DeQk,I"Vh# - f;6R+0j3=FT6B0P06dPI(#.3CW?/Jre3V6GU!!#CNe;8)[cJBCcfTpVd^%QJlm&MY1cOU!U - GUS`seDWd>o:FYII.3GDcPFj]Er'<^k[O\p!$8_&JRhJtj0LNKK+Hq(I^aSuD5d?mgu.*uk - gKS5!/=9V?[pVH-_I!92Y]Nil.9sQ8#n.9H%[gN!+T%lT%LILZg>c%i5<)^`d;ku@oFsL9T)s>4CL - GX!.[;\fA"&apD:/KHFB"/&=].p<)_W:rMKVqn0b&fkC`Z#SpT1(ejr0`id"bn4unrL8;4e - $!kIPA!!)L)%1Wl>q4dQLIr#WZj@c8Q860X-ZJ?=+ - 5DHn;!<=7k[($!5\8'pN$2MEXIVDcG^0-?Febo3[NR7DP!!$Q8?b5[lW&XMCPdS>/!,9B;1 - HeoJ>'K"QGNeo=!!(#r6t2h_^tD05Z7>g&Y:lk7h@N=,4WFb.!5`Dbm>)NW:EH,EHomDk2K - _@cb2noFHjTiR,K.hG[s)]hCi4Dnn7CQBH6i,i5T.sj:N*2eH(t1:4S2nb!!)rJi8A!a;u= - `!Q'95L#2^GsLYA!_q9.[LFhAl`9)3-%cVdZCqWp;X+n:]Adb-hMf - k!!(fH<9h4OX[W\uV`e&lI'\q6@X$^TR_GR&]lj__!2EfnXn[I\B3okW/GPs5i@)%hn/KJQ - n`iahe5SC#o^mmPP5kT5+nklrCEI@Uo'D=Pi2_WTcPFg_\81tSSK2"0mi)6,i8I;)#+JAs7 - 9<#f[hmI3uN!!'eGqPj(QrDdKr]tS"Qhu#U@ma4ssfNapl&rBnSjg#VhqM14+)AFHB6jRYJ0;FA` - K)sr8tn1aZ\sER8IEoDB8Y.S5l*7Gh;'%HH3=3Jpn'(o>s#:bbj#pi4EDt3S"!]jIeCFMLK - eZQ\/kFW!rr>2[uRLp7r$AP?bQL8S - kPK%nCdKjU1q#"3"-n?aJq5!.hHX!Bq+9;HB@ngF1H7`uLm77__6=1<)!!"67It.%;`Qn=tkKC?c/ULu_k6;H6Of[=A3@26)I(ZS_^ - >VUUHX!DU'EA-k^@_'i``fMbg>B8K6g_LhJ$`TaZ.E4[A4Cp;#APd^k^e/!heK/H[YR`&*?!b5%@oG9lK#!Aei(pUge1Iebbg - Hn(VnE]oAo(jfY(9U&Xoh!!)f#;Q7JOf=P6?>\uOXmZ_OS'[3O7CjibY:`uAJXC7B"=)_6-(fN)$[?e.O - hIpos] - -Q -Q Q -showpage -%%Trailer -end restore -%%EOF diff --git a/algorithmique/diapos/graphics/Logo-PCLL.svg b/algorithmique/diapos/graphics/Logo-PCLL.svg deleted file mode 100644 index d42bd44..0000000 --- a/algorithmique/diapos/graphics/Logo-PCLL.svg +++ /dev/null @@ -1,585 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - -   - -       - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/algorithmique/diapos/graphics/debian.eps b/algorithmique/diapos/graphics/debian.eps deleted file mode 100644 index ff431ef..0000000 --- a/algorithmique/diapos/graphics/debian.eps +++ /dev/null @@ -1,318 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%BoundingBox: 262 316 372 461 -%................................ -%%Creator: GNU Ghostscript 510 (epswrite) -%%CreationDate: 1999/12/10 21:20:34 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%EndComments -%%BeginProlog -% This copyright applies to everything between here and the %%EndProlog: -% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved. -%%BeginResource: procset GS_pswrite_ProcSet -/GS_pswrite_ProcSet 40 dict dup begin -/!{bind def}bind def/X{load def}! -/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X -/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X -/m/moveto X/l/lineto X/c/curveto X/h/closepath X -/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}! -/re{4 -2 roll m exch dup lx exch ly neg lx h}! -/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}! -/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}! -/@/currentfile X/|{string readstring pop}! -/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}! -/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}! -/Ic{Ix false 1 colorimage}! -/@85{@/ASCII85Decode filter}! -end def -%%EndResource -%%EndProlog -%%Page: 1 1 -%%BeginPageSetup -save GS_pswrite_ProcSet begin 0.1 0.1 scale -%%EndPageSetup -0.843137 0.027451 0.317647 rg -0 0 m -6120 0 l -6120 7920 l -0 7920 l -Y -3233.33 4125.86 m -3218.39 4125.66 3236.15 4118.18 3255.66 4115.17 c -3261.06 4119.39 3265.94 4123.63 3270.29 4127.77 c -3258.15 4124.8 3245.79 4124.73 3233.33 4125.86 c -f -3313.52 4145.85 m -3322.43 4158.14 3328.92 4171.58 3331.2 4185.48 c -3329.19 4175.58 3323.84 4167.03 3318.76 4157.99 c -3290.83 4140.4 3316.12 4168.43 3318.74 4179.1 c -3288.72 4141.27 3314.61 4156.42 3313.52 4145.85 c -f -3343.14 4222.89 m -3344.95 4249.8 3337.84 4241.28 3335.46 4231.03 c -3338.23 4229.57 3340.44 4212.05 3343.14 4222.89 c -f -3176.66 4590.68 m -3184.64 4589.26 3193.91 4588.16 3192.58 4586.25 c -3201.32 4588.18 3203.3 4589.92 3176.66 4590.68 c -f -3192.58 4586.25 m -3186.96 4585.08 l -3192.21 4585.56 l -3192.58 4586.25 l -f -3441.26 4212.69 m -3442.16 4188.53 3434.21 4176.79 3427.02 4156.03 c -3414.1 4149.6 l -3403.54 4129.06 3415.15 4136.56 3407.57 4120.23 c -3391.05 4105.56 3357.51 4074.34 3346.77 4071.48 c -3338.92 4071.65 3352.08 4080.74 3353.8 4084.29 c -3331.71 4069.13 3336.06 4061.53 3302.29 4052.3 c -3301.3 4054.51 l -3218 4015.31 3102.28 4092.98 3103.8 4198.94 c -3102.92 4192.22 3101.27 4193.9 3099.43 4191.2 c -3095.13 4245.71 3124.61 4300.46 3174.33 4322.85 c -3222.96 4346.91 3279.97 4337.05 3314.79 4304.56 c -3295.66 4329.62 3257.58 4356.19 3212.45 4353.73 c -3168.24 4353.01 3126.88 4324.92 3113.07 4294.41 c -3090.43 4280.16 3087.79 4239.45 3077.93 4231.99 c -3064.64 4134.39 3102.9 4092.24 3167.63 4042.63 c -3177.79 4035.77 3170.49 4034.72 3171.85 4029.5 c -3150.35 4039.56 3130.67 4054.76 3114.47 4073.37 c -3123.07 4060.8 3132.34 4048.58 3144.33 4038.98 c -3124.04 4045.83 3096.95 4088.11 3089.06 4089.83 c -3124.01 4027.25 3230.84 3980.08 3286.81 4003.49 c -3260.92 4002.53 3228.03 4002.96 3198.94 4013.71 c -3186.7 4020 3170.1 4033.01 3173.07 4035.44 c -3249.42 4006.93 3328.29 4013.86 3394.36 4066.81 c -3411.16 4079.91 3429.52 4102.18 3434.83 4102.48 c -3426.85 4090.46 3436.2 4096.7 3430.07 4086.09 c -3446.8 4113.1 3422.78 4097.09 3447.37 4132.73 c -3456.46 4120.23 l -3453.07 4142.67 3484.31 4169.89 3481.12 4205.35 c -3488.29 4216.19 3489.11 4193.67 3481.51 4168.73 c -3492.06 4196.4 3484.31 4200.85 3487 4223.69 c -3489.92 4216.01 3493.78 4207.86 3495.75 4199.75 c -3488.88 4226.5 3502.78 4244.78 3506.24 4260.33 c -3502.82 4261.83 3495.64 4248.51 3493.98 4280.09 c -3494.23 4293.81 3497.8 4287.28 3499.17 4290.66 c -3496.49 4292.21 3489.42 4302.73 3485.13 4322.9 c -3488.22 4327.65 3493.45 4310.61 3497.69 4309.92 c -3494.96 4325.95 3490.26 4338.18 3490.07 4350.49 c -3477.67 4376.39 3485.67 4347.03 3475.64 4361.61 c -3462.44 4402.75 3486.57 4371.16 3488.21 4389.84 c -3508.19 4360.89 3519.59 4315.99 3524.83 4297.4 c -3520.83 4320.07 3514.39 4342.04 3506.49 4363.29 c -3512.59 4360.72 3496.72 4409.92 3514.4 4377.34 c -3495.52 4446.79 3433.62 4511.69 3376.67 4542.13 c -3383.62 4535.76 3392.42 4527.76 3389.27 4526.5 c -3360.94 4543.35 3365.92 4544.68 3361.85 4551.8 c -3338.8 4561.19 3337.27 4551.03 3322 4551.78 c -3278.52 4574.86 3270.13 4572.4 3230.1 4586.85 c -3231.91 4578.33 l -3203.1 4587.93 3198.34 4574.71 3167.21 4578.31 c -3165.32 4579.78 3177.19 4583.67 3186.96 4585.08 c -3159.11 4581.4 3160.41 4590.58 3133.15 4584.07 c -3139.86 4588.78 3146.98 4591.91 3154.14 4595.91 c -3131.43 4594.53 3099.9 4582.69 3109.63 4593.47 c -3072.58 4576.93 3006.77 4553.72 2969.84 4519.09 c -2968.68 4526.85 l -2951.76 4506.54 2894.89 4466.19 2890.36 4439.86 c -2885.83 4438.81 l -2877.04 4423.9 2871.33 4407.01 2864.35 4391.68 c -2852.84 4372.05 2847.47 4384.12 2849.11 4381.04 c -2826.46 4335.12 2815.19 4296.54 2805.48 4264.88 c -2812.4 4254.53 2805.65 4202.56 2808.26 4160.97 c -2796.9 3955.53 2952.44 3756.07 3122.46 3710.04 c -3147.38 3701.11 3184.43 3701.44 3215.96 3700.55 c -3178.77 3711.19 3173.97 3706.17 3137.73 3718.81 c -3111.6 3731.13 3105.88 3745.18 3087.36 3761.25 c -3094.69 3748.3 l -3058.39 3761.15 3073.58 3764.2 3044.04 3773.55 c -3051.87 3783.77 l -3040.1 3784.67 3020.7 3803.59 3015.4 3814.1 c -3002.52 3813.59 l -2987.06 3832.66 2978.81 3846.43 2979.42 3857.09 c -2975.26 3849.67 l -2970.55 3857.75 2918.35 3921.25 2945.43 3906.47 c -2940.4 3911.05 2933.71 3913.94 2926.46 3927.13 c -2931.97 3933.42 l -2918.96 3950.19 2907.99 3971.68 2908.83 3978.84 c -2915.78 3969.46 2920.6 3967.7 2925.38 3966.09 c -2892.47 4047.73 2890.62 3970.58 2865.71 4049.19 c -2870.97 4049.61 l -2866.94 4055.72 2864.47 4062.31 2861.23 4068.8 c -2863.53 4091.65 l -2839.85 4119.01 2856.91 4208.1 2860.34 4256.95 c -2862.69 4276.81 2880.11 4297.96 2893.34 4331.13 c -2885.28 4332.51 l -2900.7 4359.39 2973.3 4440.5 3006.94 4436.34 c -3023.23 4456.8 3003.7 4436.42 3000.51 4441.56 c -3036.3 4478.59 3047.55 4467.72 3071.7 4474.39 c -3097.73 4489.84 3049.35 4468.35 3061.69 4480.28 c -3106.72 4491.77 3093.59 4506.42 3152.32 4512.25 c -3158.52 4508.73 3137.95 4506.81 3132.79 4502.24 c -3170.29 4520.6 3251.48 4516.41 3304.23 4492.06 c -3365.41 4463.45 3434.17 4378.92 3436.89 4299.39 c -3439.97 4298.56 l -3438.41 4266.94 3444.81 4230.37 3433.71 4196.79 c -3441.26 4212.69 l -f -3070.23 4105.36 m -3068.12 4094.89 l -3077.95 4081.54 3085.75 4067.08 3098.28 4056.68 c -3089.26 4074.27 3082.57 4081.54 3070.23 4105.36 c -f -3093.44 4106.26 m -3088.24 4112.02 3085.18 4118.94 3081.72 4125.82 c -3085.02 4113.71 3091.78 4103.3 3098.05 4092.7 c -3093.44 4106.26 l -f -3504.27 4195.56 m -3502.08 4190.04 l -3498.06 4161.46 3489.36 4133.18 3476.03 4106.95 c -3490.75 4134.62 3500.25 4164.89 3504.27 4195.56 c -f -3179.63 4597.85 m -3189.73 4601.54 3204.45 4599.88 3215.19 4602.31 c -3201.21 4601.14 3187.3 4600.44 3173.57 4598.69 c -3179.63 4597.85 l -f -2824.92 4409.23 m -2827.25 4387.69 2808.72 4379.32 2829.02 4393.54 c -2839.92 4418.08 2824.78 4400.31 2824.92 4409.23 c -f -2801.04 4309.49 m -2805.73 4323.86 2806.57 4332.48 2808.36 4340.81 c -2795.43 4324.27 2802.4 4320.74 2801.04 4309.49 c -f -0 g -2758.02 3347.25 m -2757.57 3346.78 2757.57 3272.19 2756.64 3252.72 c -2755.72 3236.97 2754.32 3203.15 2720.96 3203.15 c -2686.67 3203.15 2678.33 3242.54 2675.55 3259.67 c -2672.31 3278.67 2672.31 3294.43 2672.31 3301.37 c -2672.31 3323.61 2673.7 3385.72 2726.06 3385.72 c -2741.82 3385.72 2750.62 3381.07 2757.57 3377.38 c -2758.02 3347.25 l -h -2623.65 3292.56 m -2623.65 3161.9 2693.16 3161.9 2703.35 3161.9 c -2732.08 3161.9 2750.62 3177.66 2758.49 3204.98 c -2759.42 3163.75 l -2768.23 3164.22 2777.03 3165.14 2791.39 3165.14 c -2796.49 3165.14 2800.65 3165.14 2804.37 3164.67 c -2808.08 3164.67 2811.78 3164.22 2815.95 3163.75 c -2808.54 3178.57 2802.98 3211.93 2802.98 3284.24 c -2802.98 3354.67 2802.98 3473.75 2809 3509.9 c -2792.33 3502.01 2777.95 3496.91 2746.44 3494.14 c -2758.95 3480.7 2758.95 3473.75 2758.95 3412.6 c -2750.16 3415.37 2739.03 3418.61 2720.03 3418.61 c -2637.09 3418.61 2623.65 3346.33 2623.65 3292.56 c -f -2874.95 3316.21 m -2875.42 3354.67 2883.3 3388.97 2916.19 3388.97 c -2952.34 3388.97 2955.1 3349.12 2954.18 3316.21 c -2874.95 3316.21 l -h -3000.05 3311.56 m -3000.05 3365.78 2989.4 3419.08 2920.82 3419.08 c -2826.3 3419.08 2826.3 3314.35 2826.3 3292.11 c -2826.3 3198.05 2868.46 3160.98 2939.36 3160.98 c -2970.85 3160.98 2986.16 3165.6 2994.5 3167.93 c -2994.04 3184.61 2996.35 3195.27 2999.15 3209.63 c -2989.4 3203.59 2976.89 3195.72 2949.09 3195.72 c -2876.8 3195.72 2875.87 3261.54 2875.87 3284.24 c -2999.15 3284.24 l -3000.05 3311.56 l -f -3150.8 3291.64 m -3150.8 3248.55 3142.93 3190.62 3089.18 3190.62 c -3081.76 3190.62 3072.5 3192.03 3066.48 3193.42 c -3065.55 3210.1 3065.55 3238.83 3065.55 3272.19 c -3065.55 3312.05 3069.71 3332.87 3072.97 3343.09 c -3082.69 3375.98 3104.47 3376.44 3108.63 3376.44 c -3143.85 3376.44 3150.8 3327.77 3150.8 3291.64 c -h -3017.82 3241.13 m -3017.82 3206.84 3017.82 3187.38 3012.26 3172.56 c -3031.26 3165.14 3054.88 3160.98 3083.16 3160.98 c -3101.23 3160.98 3153.59 3160.98 3181.85 3218.89 c -3195.29 3245.76 3199.92 3281.91 3199.92 3309.26 c -3199.92 3325.94 3198.07 3362.54 3184.63 3385.72 c -3171.66 3407.48 3150.8 3418.61 3128.57 3418.61 c -3084.08 3418.61 3071.11 3381.54 3064.17 3362.54 c -3064.17 3386.17 3064.62 3468.65 3068.32 3510.82 c -3038.21 3496.91 3019.66 3494.61 2999.75 3492.75 c -3017.82 3485.35 3017.82 3454.75 3017.82 3355.12 c -3017.82 3241.13 l -f -3288.99 3163.75 m -3279.73 3165.14 3273.22 3166.07 3259.78 3166.07 c -3244.98 3166.07 3234.77 3165.14 3224.12 3163.75 c -3228.75 3172.56 3230.6 3176.74 3231.99 3206.84 c -3233.85 3248.09 3234.32 3358.38 3231.07 3381.54 c -3228.75 3399.16 3224.59 3401.93 3218.1 3406.56 c -3256.09 3410.27 3266.76 3413.05 3284.35 3421.39 c -3280.65 3401.02 3280.18 3390.8 3280.18 3359.77 c -3279.26 3199.88 3278.79 3182.75 3288.99 3163.75 c -f -3437.37 3294.9 m -3436.46 3265.7 3435.99 3245.31 3428.1 3229.1 c -3418.37 3208.24 3402.16 3202.23 3390.11 3202.23 c -3362.29 3202.23 3356.28 3225.39 3356.28 3248.09 c -3356.28 3291.64 3395.21 3294.9 3412.8 3294.9 c -3437.37 3294.9 l -h -3309.93 3237.89 m -3309.93 3208.69 3318.74 3179.51 3344.7 3166.99 c -3356.28 3161.9 3367.86 3161.9 3371.57 3161.9 c -3414.21 3161.9 3428.56 3193.42 3437.37 3212.87 c -3436.9 3192.48 3437.37 3179.98 3438.76 3163.75 c -3447.1 3164.22 3455.44 3165.14 3469.35 3165.14 c -3477.22 3165.14 3484.64 3164.22 3492.51 3163.75 c -3487.41 3171.62 3484.64 3176.27 3483.23 3194.34 c -3482.31 3211.93 3482.31 3229.55 3482.31 3254.1 c -3482.78 3348.63 l -3482.78 3383.87 3473.51 3418.61 3403.99 3418.61 c -3358.14 3418.61 3331.26 3404.71 3317.82 3397.75 c -3323.39 3387.56 3328.02 3378.77 3332.18 3358.83 c -3350.26 3374.59 3373.9 3382.93 3397.98 3382.93 c -3436.46 3382.93 3436.46 3357.44 3436.46 3321.31 c -3427.65 3321.76 3420.22 3322.68 3407.71 3322.68 c -3348.86 3322.68 3309.93 3300 3309.93 3237.89 c -f -3704.27 3209.63 m -3704.74 3193.87 3704.74 3177.19 3711.22 3163.75 c -3701.02 3164.67 3694.99 3166.07 3676.01 3166.07 c -3664.87 3166.07 3658.86 3165.14 3650.05 3163.75 c -3651.89 3169.77 3652.84 3172.09 3653.76 3179.98 c -3655.15 3190.62 3656.08 3226.31 3656.08 3238.83 c -3656.08 3288.87 l -3656.08 3310.65 3656.08 3342.17 3654.68 3353.28 c -3653.76 3361.15 3651.46 3382.46 3624.56 3382.46 c -3598.15 3382.46 3589.36 3363.01 3586.1 3347.25 c -3582.41 3331.03 3582.41 3313.42 3582.41 3244.84 c -3582.86 3185.53 3582.86 3179.98 3587.49 3163.75 c -3579.62 3164.67 3569.89 3165.6 3555.99 3165.6 c -3544.85 3165.6 3537.45 3165.14 3528.19 3163.75 c -3531.44 3171.17 3533.29 3174.88 3534.21 3200.82 c -3535.15 3226.31 3537 3351.43 3532.8 3381.07 c -3530.5 3399.16 3525.85 3403.32 3520.77 3407.95 c -3558.31 3409.8 3570.34 3415.84 3581.94 3421.85 c -3581.94 3372.73 l -3587.49 3387.11 3599.07 3419.08 3645.42 3419.08 c -3703.35 3419.08 3703.8 3376.91 3704.27 3349.12 c -3704.27 3209.63 l -f -0.843137 0.027451 0.317647 rg -3292.9 3486.97 m -3254.53 3448.61 l -3216.17 3486.97 l -3254.53 3525.33 l -3292.9 3486.97 l -f -end showpage restore -%%PageTrailer -%%Trailer -%%Pages: 1 diff --git a/algorithmique/diapos/img/cesi.jpg b/algorithmique/diapos/img/cesi.jpg deleted file mode 100644 index dafbe55..0000000 Binary files a/algorithmique/diapos/img/cesi.jpg and /dev/null differ diff --git a/algorithmique/diapos/img/logo-cadoles.png b/algorithmique/diapos/img/logo-cadoles.png deleted file mode 100644 index de8ddc0..0000000 Binary files a/algorithmique/diapos/img/logo-cadoles.png and /dev/null differ diff --git a/algorithmique/todo.txt b/algorithmique/todo.txt deleted file mode 100644 index c5be892..0000000 --- a/algorithmique/todo.txt +++ /dev/null @@ -1,20 +0,0 @@ -todo -==== - -- un code-block:: ocaml ne passe pas (c'était lequel?) -- le tri de listes est à supprimer (ou bien le faire en python) -- donner les corrections des exos de TP -- l'abstraction de type dans les modules : - refaire le type date correctement - -- l'analyse descendante avec les dates : je l'avais zappé mais c'était bien -- modules paramétrés ? à effacer - -- éviter de "mélanger" le python et le ocaml -- l'appel d'une fonction n'a pas été assez clair: - - reprendre la "boite noire" plutôt avec une analogie avec la cybernétique - - plutôt que de chercher à dire procédure/fonction, dire "bloc de code qu'on - isole" et insister sur les locales et les globales -- ne pas centrer sur la programmation impérative ou fonctionnelle, - mentionner la fonctionnelle - diff --git a/poo/INFAL26-ConceptsDemarcheObjet.pdf b/poo/INFAL26-ConceptsDemarcheObjet.pdf deleted file mode 100644 index 17f55bc..0000000 Binary files a/poo/INFAL26-ConceptsDemarcheObjet.pdf and /dev/null differ diff --git a/poo/cours/Makefile b/poo/cours/Makefile deleted file mode 100644 index 8b94f17..0000000 --- a/poo/cours/Makefile +++ /dev/null @@ -1,216 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = _build - -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " applehelp to make an Apple Help Book" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - @echo " coverage to run coverage check of the documentation (if enabled)" - -.PHONY: clean -clean: - rm -rf $(BUILDDIR)/* - -.PHONY: html -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -.PHONY: dirhtml -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -.PHONY: singlehtml -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -.PHONY: pickle -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -.PHONY: json -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -.PHONY: htmlhelp -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -.PHONY: qthelp -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Algorithmique.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Algorithmique.qhc" - -.PHONY: applehelp -applehelp: - $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp - @echo - @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." - @echo "N.B. You won't be able to view it unless you put it in" \ - "~/Library/Documentation/Help or install it in your application" \ - "bundle." - -.PHONY: devhelp -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/Algorithmique" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Algorithmique" - @echo "# devhelp" - -.PHONY: epub -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -.PHONY: latex -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -.PHONY: latexpdf -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: latexpdfja -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: text -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -.PHONY: man -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -.PHONY: texinfo -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -.PHONY: info -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -.PHONY: gettext -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -.PHONY: changes -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -.PHONY: linkcheck -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -.PHONY: doctest -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -.PHONY: coverage -coverage: - $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage - @echo "Testing of coverage in the sources finished, look at the " \ - "results in $(BUILDDIR)/coverage/python.txt." - -.PHONY: xml -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." - -.PHONY: pseudoxml -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/poo/cours/_static/cesi.jpg b/poo/cours/_static/cesi.jpg deleted file mode 100644 index dafbe55..0000000 Binary files a/poo/cours/_static/cesi.jpg and /dev/null differ diff --git a/poo/cours/algo.txt b/poo/cours/algo.txt deleted file mode 100644 index c2f8ed7..0000000 --- a/poo/cours/algo.txt +++ /dev/null @@ -1,291 +0,0 @@ -Algorithmique -============= - -Al-Kharezmi, auteur du traité "Kitab al jabr w'al-muqabala", est l'inventeur -des manipulations algébriques (algèbre = **al jabr**). -C'est Léonard de Pise, dit Fibonacci, qui emprunta le nom du célèbre -mathématicien arabe du 9ème siècle, mais l'algèbre existe -depuis bien plus longtemps (Depuis Babylone, puis ensuite l'Egypte ancienne). - -.. glossary:: - - - algorithme - - terme désignant une suite d'opérations constituant un schéma de calcul - ou de résolution d'un problème. C'est un processus systématique de - résolution d'un problème permettant de décrire précisément des étapes. - C'est une suite finie d'instructions permettant de donner la réponse à un - problème. - -L'algorithmique est l'étude et la production de règles et de techniques -qui sont impliquées dans la définition d'algorithmes. - -Implémentation d'un algorithme ------------------------------- - -.. glossary:: - - implémentation - - Adaptation de la méthodologie de calculabilité au calcul effectif - sur une machine abstraite ou via un langage formel. - -Il n’y a pas de parcours à sens unique de l’algorithme vers l’implantation. -La quête d’une implantation efficace nous amène souvent à effectuer -un retour vers les algorithmes eux-mêmes, et à en modifier des points -essentiels. L’aspect théorique de réflexion sur les algorithmes, -et l’aspect pratique de l'implémentation sont donc en symbiose. - -Un existant émerge de la décomposition structurale d'un -domaine de base. Le fait essentiel, c'est la genèse des genres de l'existant les -uns à partir des autres. - -L'essence d'une forme (un algorithme) se réalise au sein d'une matière qu'elle créée -(un langage). L'origine d'une matière fait naître les formes (concepts) -que sa structure dessine. - -- Notion structurale de non-contradiction -- Notion extensive de "réalisation dans un champ donné" - -Deux aspects réciproques : l'essence d'une forme se réalise au sein d'une -matière qu'elle crée, l'essence d'une matière faisant naître les formes que sa -structure dessine. - -Abandonner l'idée trop simpliste de domaines concrets et d'opérations abstraites -qui posséderaient en eux-mêmes comme une nature de matière et une nature de -forme ; cette conception tendrait, en effet, à stabiliser les existants -mathématiques dans certains rôles immuables et ignorerait le fait que les -existants abstraits qui naissent de la structure d'un domaine plus concret -peuvent à leur tour servir de domaine de base pour la genèse d'autres existants. - -L'algorithme comme généralisation de la calculabilité ------------------------------------------------------- - -L'importance croissante de l'informatique comme outil scientifique -impose d'élaborer un nouveau mode de description des méthodes de calcul (appelées algorithmes) -susceptible de satisfaire à la fois le critère de sécurité (maîtrise du résultat) et la possibilité -d'implémenter les calculs sur un ordinateur. - -Exemple d'algorithme ---------------------- - -.. raw:: latex - - \begin{algorithm} - \caption{L'alorithme de Bellman-Kalaba} - \begin{algorithmic}[1] - \Procedure {BellmanKalaba}{$G$, $u$, $l$, $p$} - \ForAll {$v \in V(G)$} - \State $l(v) \leftarrow \infty$ - \EndFor - \State $l(u) \leftarrow 0$ - \Repeat - \For {$i \leftarrow 1, n$} - \State $min \leftarrow l(v_i)$ - \For {$j \leftarrow 1, n$} - \If {$min > e(v_i, v_j) + l(v_j)$} - \State $min \leftarrow e(v_i, v_j) + l(v_j)$ - \State $p(i) \leftarrow v_j$ - \EndIf - \EndFor - \State $l(i) \leftarrow min$ - \EndFor - \State $changed \leftarrow l \not= l’$ - \State $l \leftarrow l$ - \Until{$\neg changed$} - \EndProcedure - \Statex - \Procedure {FindPathBK}{$v$, $u$, $p$} - \If {$v = u$} - \State \textbf{Write} $v$ - \Else - \State $w \leftarrow v$ - \While {$w \not= u$} - \State \textbf{Write} $w$ - \State $w \leftarrow p(w)$ - \EndWhile - \EndIf - \EndProcedure - \end{algorithmic} - \end{algorithm} - -Exemple d'algorithme avec son implémentation ---------------------------------------------- - -Soit l'algorithme de factorielle suivant, - -.. raw:: latex - - \begin{algorithm} - \caption{Algorithme de la factorielle d'un nombre}\label{factorielle} - \begin{algorithmic}[1] - \Function{factorielle}{$n$}\Comment{La fonction récursive factorielle} - \BState \emph{parametre} : $n$ entier - \If{$n = 1$} - \BState \emph{Sortie} : 1 - \Else - \BState \emph{Sortie} : $n * \Call{factorielle}{n-1}$ \Comment{On appelle la fonction dans l'algorithme lui-même} - \EndIf - \EndFunction - \end{algorithmic} - \end{algorithm} - -et son implémentation en python : - -.. literalinclude:: code/factorielle.py - :language: python - -En voici une autre implémentation (en OCaml) : - -.. literalinclude:: code/factorielle.ml - :language: ocaml - -On remarque que le **pseudocode** est très proche de -la syntaxe du python : - -.. function:: factorielle(n:int) - -:: - - if n=1 - return 1 - else - return n * factorielle(n-1) - end if - -Qualité d'un algorithme ------------------------ - -- correction d'un algorithme -- complétude d'un algorithme - -Sémantique - - Étude du sens, de la signification d'un langage - Définir la sémantique d’un langage formel consiste à lui donner une - signification mathématique. - -Sémantique opérationnelle - - on définit la sémantique par sa mise en œuvre sur - une machine abstraite. - -Sémantique dénotationnelle - - on associe à chaque construction syntaxique un - objet mathématique - -Sémantique axiomatique - - chaque construction est décrite par la manière dont - elle transforme des propriétés ou des prédicats. - -Proposition - - une proposition est un énoncé qui est soit vrai, soit faux - -**exemple** : ``2 + 3 = 5``. Proposition vraie. - -Prédicats - - Une proposition dont la valeur de vérité dépend de la valeur d’une ou plusieurs variables - -**Exemple** : ``n est pair`` : vrai pour n = 4 mais faux pour n = 9 - - -Axiome - - une proposition qui est supposée vraie - -Un ensemble d’axiomes est consistant s’il n’existe pas de proposition -dont on peut démontrer qu’elle est à la fois vraie et fausse. - -Un ensemble d’axiomes est complet si, pour toute proposition, il est -possible de démontrer qu’elle est vraie ou fausse. - -Théorème d’incomplétude de Gödel (1931) : tout ensemble -consistant d’axiomes pour l’arithmétique sur les entiers est -nécessairement incomplet. - -**Les concepts de base en algorithmique sont les axiomes** - -inférence - - règles d’inférence, règles permettant de combiner des axiomes et des - propositions vraies pour établir de nouvelles propositions vraies. - -Démonstration - - vérification d’une proposition par une séquence de déductions logiques - à partir d’un ensemble d’axiomes. - -Lorsque le champ donné (le domaine) ne contient qu'un nombre fini d'individus, -on peut définir un choix de valeur des variables permettant de vérifier la -proposition obtenue par la *conjonction* de tous les axiomes du système proposé. -On dit alors que ce choix *réalise* un système d'axiomes. - - -Il ne s'agit plus de savoir si la définition entraîne l'existence, mais de -chercher si la structure d'un système d'axiomes (*règles*) peut donner naissance -à un champ d'individus qui soutiennent entre eux les relations définies pas les -axiomes. - -Concret et abstrait --------------------- - -Il est possible qu'un même genre d'existant joue dans un schéma de genèse le -rôle d'abstrait par rapport à un concret de base, et soit au contraire dans une -autre genèse le concret de base d'un nouvel abstrait. - -Une pareille présentation des choses implique un tel renversement par rapport -aux habitudes de pensée classiques, qu'il faut encore insister sur le sens -nouveau que reçoivent ici les expressions de "concret" et "d'abstrait". - -Les systèmes d'axiomes sont souvent conçus comme des structures purement -formelles, abstraites. Ces structures sont si profondément engagées dans la -genèse de leurs réalisations, qu'il valait mieux désigner par ces termes les -structures de base. - -Un système d'axiome *peut* devenir le concret de base. - -Ceci permet d'exprimer non seulement l'engagement du concret dans la genèse de -l'abstrait, mais encore les relations d'imitation qui peuvent exister entre la -structure de cet abstrait et celle du concret de base. - -Dans certains cas, la genèse de l'abstrait à partir d'un concret de base -s'affirme jusqu'à réaliser une imitation de structure entre ces genres -d'existants qui naissent l'un de l'autre. - -**C'est pourquoi on représente souvent un algorithme en pseudo-code**, -c'est-à-dire en fait dans le mode de représentation (issu du langage préféré de la -personne qui l'exprime) dominant chez la personne qui exprime un algorithme. - -Comment rendre un algorithme lisible ------------------------------------- - -- Le bon algorithme utilise des identifiants explicites. -- Le bon algorithme est structuré. -- Le bon algorithme est indenté. - -Complexité d'un algorithme --------------------------- - -On peut approximer la complexité des algorithmes. -C'est utile pour pouvoir comparer des algorithmes. - -complexité - - estimer la complexité d'un algorithme, c'est estimer le nombre de calculs qu'il utilise. - -Si f est la fonction caractérisant exactement le coût d’un algorithme et n -la taille des données, on s’intéresse à la façon dont augment f(n) lorsque n augmente -on va montrer que f(n) n'augmente pas plus vite qu’une autre fonction -g(n). Du point de vue mathématique, on dit que la fonction f est dominée -asymptotiquement par la fonction g ce qui se note f = O(g) - -- Complexité temporelle : c’est le nombre d’op«erations effectuées par - une machine qui exécute l’algorithme. - -- Complexité spatiale : c’est le nombre de positions mémoire utilisées par - une machine qui exécute l’algorithme. diff --git a/poo/cours/annexes/agile.txt b/poo/cours/annexes/agile.txt deleted file mode 100644 index 5884c11..0000000 --- a/poo/cours/annexes/agile.txt +++ /dev/null @@ -1,83 +0,0 @@ -La planification agile -======================== - -Le mode itératif ------------------ - -- livrer des versions successives et utilisables qui convergent vers - la version finale - -- ne pas perdre d'énergie à maintenir des specs détaillées non nécessaires - -- de nouvelles orientations fonctionnelles sont possibles, même tard - -- les specs détaillées sont écrites "juste à temps" - - -La planification agile ------------------------ - -- chaque livraison est un projet qui est planifié en tant que tel -- utiliser l'expérience acquise pour affiner les estimations -- préservation de l'écologie du projet au quotidien (code, tests...) - -La confiance, feedback ------------------------ - -- livraisons régulières -- progrès visibles par tous (pas d'effet tunnel) -- pilotage du projet par choix du contenu des livraisons -- investissement du Product Owner -- chercher la collaboration plutôt que la confrontation - -L'agilité ----------- - -- le projet n'est pas joué d'avance -- cultiver la souplesse -- révolution douce -- sortir de la confrontation, jouer le "nous collectif" - mettre tout le monde sur le mme pont et amener tout le monde à bon port - -Les outils agiles ------------------- - -- planification par itérations de 4 semaines -- entrepot de source partagé -- intégration continue -- tests automatisés -- pair programming sur points cruciaux -- sprints -- extranet : - - - hitoires utilisateurs - - test cases - - gestion du backolog et des tickets - - suivi de l'avancement - - documentation - -Le product owner ------------------ - -idéalement, - -- connaissance du métier à informatiser -- fibre projet -- dispo à 100% - -Les tests ---------- - -- automatiser -- viser l'exhaustivité -- tester une cible mouvante -- migrer les tests d'une release à l'autre - -Questions importantes en environnement agile ----------------------------------------------- - -- quelle durée d'itération ? -- comment découper en itérations ? -- que faire lorsque le product owner se retrouve sur le chemin critique ? -- la planification est faite en mode "juste à temps" et "juste assez" -- on ne s'échine plus à blâmer, au contraire on cherche à gagner ensemble diff --git a/poo/cours/annexes/exercices.txt b/poo/cours/annexes/exercices.txt deleted file mode 100644 index 1597a02..0000000 --- a/poo/cours/annexes/exercices.txt +++ /dev/null @@ -1,19 +0,0 @@ -Exercices complémentaires --------------------------- - -+ **Manipulation de chaînes de caractères**: - (création, accès à un caractère, concaténation), listes (création, ajout - d’un élément, suppression d’un élément, accès à un élément, extraction d’une partie de liste), tableaux à une ou plusieurs dimensions. - - + traitement des chaines de caractères - + s.replace() - + s1 + s2 - + un exemple de regexp simple - -+ **Fichiers** : - notion de chemin d’accès, lecture et écriture de données numériques ou de type chaîne de caractères depuis ou vers un fichier. - On encourage l’utilisation de fichiers en tant que supports de données ou de résultats avant divers traitements, par exemple graphiques. - -+ **Piles** - Algorithmes de manipulation : fonctions 'push' et 'pop'. On utilise des listes - (ou tableaux à 1 dimension) pour leur implantation. diff --git a/poo/cours/annexes/index.txt b/poo/cours/annexes/index.txt deleted file mode 100644 index dc5acf1..0000000 --- a/poo/cours/annexes/index.txt +++ /dev/null @@ -1,10 +0,0 @@ -Annexes -========= - -.. toctree:: - :maxdepth: 2 - - exercices - surete - agile - scrum diff --git a/poo/cours/annexes/scrum.txt b/poo/cours/annexes/scrum.txt deleted file mode 100644 index 3777780..0000000 --- a/poo/cours/annexes/scrum.txt +++ /dev/null @@ -1,176 +0,0 @@ -scrum -===== - -.. glossary:: - - scrum - - Scrum est une méthode agile pour la gestion de projets - Le terme Scrum est emprunté au rugby et signifie mêlée. - Ce processus s'articule en effet autour d'une équipe soudée, - qui cherche à atteindre un but, comme c'est le cas en rugby - pour avancer avec le ballon pendant une mêlée. - - -Scrum définit trois rôles principaux : - -- le responsable de produit -- Product Manager, -- le faciliteur -- ScrumMaster -- le développeur - -et bien sûr, l'équipe (auto-gérée). - -Des intervenants peuvent s'intégrer également au projet -de façon plus ponctuelle. - -responsable de produit - - Le responsable de produit (Product Manager) est le représentant des - clients et utilisateurs. - C'est lui qui définit l'ordre dans lequel les fonctionnalités - seront développées et qui prend les décisions importantes - concernant l'orientation du projet. - -Le terme responsable n'est d'ailleurs pas à prendre au sens hiérarchique -du terme, mais dans le sens de l'orientation. - -équipe, développement - - outes les décisions sont prises ensemble et personne ne donne d'ordre - à l'équipe sur sa façon de procéder - -facilitateur - - est chargé de protéger l'équipe de tous les éléments perturbateurs - -planification --------------- - -Scrum utilise une planification à trois niveaux : - -- release/projet -- sprint -- quotidien -- ScrumMeeting - -quotidien - - Au quotidien, une réunion, le ScrumMeeting (pas plus de 15 min) - permet à l'équipe et au ScrumMaster de faire un point d'avancement sur - les tâches et sur les difficultés rencontrées. - répondre à trois questions : - * Qu'est-ce que j'ai fait hier ? - * Qu'est-ce que je compte faire aujourd'hui ? - * Quelles difficultés est-ce que je rencontre ? - -sprint - - Scrum est un processus itératif : les itérations sont appelées des sprints - et durent en théorie 30 jours calendaires. - En pratique, les itérations durent généralement entre 2 et 4 semaines. - Chaque sprint possède un but et on lui associe une liste d'items - de fonctionnalités à réaliser. - Ces items sont décomposés par l'équipe en tâches élémentaires - de quelques heures, les items de fonctionnalités de sprint. - - Pendant un sprint, les items de fonctionnalités de sprint à réaliser - ne peuvent pas être changés. - Les changements éventuels seront éventuellement réalisés - dans les sprints suivants. - -releases - - pour améliorer la lisibilité du projet, - on regroupe généralement des itérations en releases. - En effet, comme chaque sprint doit aboutir à la livraison - d'un produit partiel, une release permet de marquer la livraison - d'une version aboutie, susceptible d'être mise en exploitation - -gestion des besoins -------------------- - -tâches (backlog de sprint) -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Lorsqu'on démarre un sprint, on choisit quels items des fonctionnalités -seront réalisés dans ce sprint. - -L'équipe décompose ensuite chaque item en liste de tâches élémentaires -(techniques ou non), chaque tâche étant estimée en heures -et ne devant pas durer plus de 2 jours. -On constitue ainsi le backlog de sprint. - -Les items de backlog de produit sont les fonctionnalités qui deviendront -les items du baclog d'un sprint. -Ces fonctionnalités sont estimées en points relatifs, sans unité. - -planning poker - - façon ludique et efficace de produire des estimations - sur la complexité des fonctionnalités à développer - - pour évaluer les scénarios utilisateurs (user stories) - du carnet de produit (product backlog). - -à la fin d'un sprint : - -- revue de sprint -- rétrospective de sprint - -comprendre ce qui n'a pas bien marché dans le sprint, -les erreurs commises et de prendre des décisions pour s'améliorer - -mise en oeuvre --------------- - -Scrum peut être mis en pratique avec trois fois rien : deux listes suffisent. -La liste des items du backlog de produit et la liste des items du backlog -de sprint. La saisie et la mise à jour des données est simplement -un peu moins agréable. - -glossaire ---------- - -Directeur de produit (Product Owner) (responsable produit) - - personne responsable de produire et maintenir à jour le backlog de produit. - C'est lui qui en détermine les priorités et qui prend les décisions - concernant l'orientation du projet. - -ScrumMaster (facilitateur) - - membre de l'équipe dont l'objectif principal est de la protéger - des perturbation extérieures. - Il est complètement transparent pour la communication entre l'équipe - et les clients et n'a aucun pouvoir hiérarchique sur l'équipe. - C'est en revanche un facilitateur pour les problèmes non techniques - de l'équipe. - -Backlog de produit (Product Backlog) (fonctionnalités) - - liste des fonctionnalités qui devront être réalisées par le logiciel. - -Backlog de sprint (Sprint Backlog) (tâches) - - liste des tâches à accomplir pendant un sprint. - Elles correspondent à la réalisation des items de backlog - du produit affectés au sprint. - -Mêlée quotidienne (Daily Scrum) (quotidien) - - réunion quotidienne de 15 minutes qui a pour but de faire le point - sur ce qui a été fait depuis la dernière mêlée, - ce qui est prévu de faire jusqu'à la prochaine - et quelles sont les embûches rencontrées durant le travail. - -Sprint (sprint) - - nom d'une itération dans Scrum. - Cette itération dure 30 jours calendaires en théorie, - mais en pratique on utilise plutôt entre 2 et 4 semaines. - Pendant une itération, l'équipe doit développer une liste d'items - du backlog de produit qui a été définie au début de ce sprint. - -Graphique d'avancement (Burndown Chart) (avancement) - - graphique qui montre la tendance du reste à faire total de jour en jour - (pour les sprints) ou de sprint en sprint (pour les releases). diff --git a/poo/cours/annexes/surete.txt b/poo/cours/annexes/surete.txt deleted file mode 100644 index 44da9b7..0000000 --- a/poo/cours/annexes/surete.txt +++ /dev/null @@ -1,93 +0,0 @@ -Outils de sureté d'un programme --------------------------------------- - -La preuve de programme -~~~~~~~~~~~~~~~~~~~~~~ - -Le niveau maximum de sûreté d'exécution d'un programme est la preuve. Qu'est-ce que la preuve -formelle d'un programme ? Selon la définition de Wikipédia, ce sont "des techniques permettant de -raisonner rigoureusement, à l'aide de logique mathématique, sur des programmes informatiques ou -du matériel électroniques, afin de démontrer leur validité par rapport à une certaine -spécification." Bref c'est un raisonnement logique sur un programmme qui permet d'être sûr que le -programme est valide et ne va pas planter. - -La preuve de programme est très peu utilisée dans l'industrie, car très coûteuse et très -difficile à mettre en place. Elle quand même utilisée, mais dans des secteurs où le risque doit -absolument être évacué et où il n'y a aucun droit à l'erreur. Par exemple, le secteur médical -(informatique en bloc opératoire), militaire (peu d'informations nous parviennent dans ce -domaine), l'aviation civile (le logiciel Astrée pour Airbus), la fusée Ariane (depuis le bug qui -avait fait crasher Ariane 5 ces questions sont prises très au sérieux), et le milieu bancaire -(surtout le domaine des décisions boursières : un programme chargé de lancer des décisions -d'achat ou de vente à la bourse qui comporte un bug peut en quelque centièmes de secondes faire -perdre des millions, voire des milliards d'euros à une banque. Le programme ne doit tout simplement pas -bugger). - -Le model checking -~~~~~~~~~~~~~~~~~~ - -Le model checking, l'analyse statique et l'interprétation abstraite procèdent d'une méthodologie -moins lourde de validation des programmes. Ces méthodes analysent exhaustivement l'évolution du -système lors de ses exécutions possibles et permetent de dire si globalement, dans un contexte -donné, le programme va fonctionner correctement. Encore très lourdes, ces techniques ne sont -utilisées que dans un contexte industriel de haute sécurité. - -Les tests d'acceptation -~~~~~~~~~~~~~~~~~~~~~~~ - -Il y a plusieurs types de tests - -- unitaires -- fonctionnels -- acceptation - -Très utilisés dans l'industrie, les tests unitaires et fonctionnels ne testent que certaines -parties du programme et permettent de dire que le programme va marcher grosso-modo à peu près. -Beaucoup moins coûteux à installer, ce sont des éléments cléfs des méthodes agiles. - -Les Outils de linting (validation) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- vérifications syntaxiques -- vérification sémantiques -- vérification sur les imports inutiles ou mal formés (imports croisés - -Exemple en python : pylint - - -La dette technique -~~~~~~~~~~~~~~~~~~ - -Au bout d'un moment le code devient du code spaghetti et les techniques sont obsolètes. -Les tests permettent de solder la dette technique plus facilement. - -**avoir le courage de payer une dette technique, et affronter une dette technique -sinon il peut y avoir un coût à payer qui sera pohibitoire.** - -On solde la dette technique parce que à un moment ça va devenir beaucoup trop -cher à payer. - -Les méthodologies agiles -~~~~~~~~~~~~~~~~~~~~~~~~ - -La manière dont le code est produit importe énormément. Par exemple, une -méthodologie ou le **refactoring** (réécriture de code) est permis et même conseillé -a plus de chance de produire du code organisé. - -Les méthodologies agiles produisent en général du code mieux organisé. Ce sont les -méthodes de travail les plus en vogue aujourd'hui, elles mettent l'accent sur : - -- Du logiciel fonctionnel plutôt que de la documentation exhaustive -- La réponse au changement plutôt que le suivi d'un plan -- Le logiciel fonctionnel est la principale mesure d'avancement -- Une attention continue à l'excellence technique et à une bonne - conception améliore l'agilité -- La simplicité est essentielle (il est facile de faire, il est - difficile de faire simple) - -Le principe de base de la méthodologie Scrum par exemple est de focaliser l'équipe de façon -itérative sur un ensemble de fonctionnalités à réaliser, dans des itérations de durée fixe de une -à quatre semaines, appelées **sprints**. Chaque sprint possède un but à atteindre, défini par le -responsable de produit, à partir duquel sont choisies les fonctionnalités à implémenter dans ce -sprint. Un sprint aboutit toujours sur la livraison d'un produit partiel fonctionnel. Pendant ce -temps, le facilitateur a la charge de réduire au maximum les perturbations extérieures et de -résoudre les problèmes non techniques de l'équipe. diff --git a/poo/cours/apercu.txt b/poo/cours/apercu.txt deleted file mode 100644 index ea09668..0000000 --- a/poo/cours/apercu.txt +++ /dev/null @@ -1,79 +0,0 @@ -Aperçu des algorithmes fondamentaux -=================================== - -Les algorithmes sont partout. Absolument partout aujourd'hui. -Il n'est pas un domaine de nos activités qui ne soit liés à tel ou tel algorithme. - -En mathématiques ------------------ - -- l'algèbre (étude des structures de données) -- l'arithmétique modulaire (théorie des nombres) -- la géométrie (affine, algébrique, invariants topologiques...) -- les diagrammes (diagrammes de Venn...) -- les colorisation d'une carte -- comportements stochastiques - -En informatique ----------------- - -- les algorithmes sur la manipulation des structures de données - Exemple : les algorithmes de tri, de recherche dans un arbre... -- les parcours de graphes (chemins le plus court, voyageur de commerce...) -- la cryptologie (code gray) -- les stratégies de jeux - -Tirés du monde réel --------------------- - -- les jeux (casse-tête, dominos, échiquiers...) -- énigmes, logique et paradoxes -- problèmes de raisonnements. Il n'existe pas beaucoup de méthodes - ou de moyens simples pour traiter et résoudre les énoncés de logique de raisonnement. -- La "marche de l'ivrogne" : processus de progression discrète (pas à pas) - dont l'étape suivante est lié à l'état présent et pas du tout à la mémoire du passé proche. - Il revêt seulement un caractère de type probabilité (stochastique) dit markovien. -- algorithmes de colonies de fourmis (chemins optimal pour arriver à la nourriture) - -Le voyageur de commerce -~~~~~~~~~~~~~~~~~~~~~~~~ - -Le problème du voyageur de commerce, consiste en la recherche d’un trajet minimal permettant à un -voyageur de visiter n villes. En règle générale on cherche à minimiser le temps de parcours total ou la -distance totale parcourue. - -Il suffit de construire tous les chemins possibles et de calculer leurs longueurs. -Avec ``n`` villes il y a ``(n-1)!/2`` chemins possibles. -Avec 36 villes on trouve : 5166573983193072464833325668761600000000, -si le nombre de villes augmente, ça devient vite rédibitoire. - -Résolution par - -- algorithme de parcours de graphes -- algorithme glouton -- algorithmes génétiques - -Les algorithmes génétiques s’appuient sur un principe de sélection des individus d’une population qui présen- -tent des caractéristiques se rapprochant au mieux de ce que l’on recherche; cette population évoluant par -ailleurs selon des critères d’évolution génétique à choisir. Dans le contexte du problème du voyageur de -commerce, un individu est une tournée, un chemin et une population un ensemble de tournées. Il s’agit -maintenant de dé...nir un critère de sélection ainsi que des règles d’évolution de la population. - -- approches métaheuristiques (exemples: colonies de fourmis) - -Exemple de résolution - -.. raw:: latex - - \begin{algorithm} - \caption{Algorithme du voyageur de commerce}\label{commerce} - \begin{algorithmic}[1] - - \BState \emph{Données} : $L$ \Comment{Liste des villes à parcourir avec les distances entre les villes} - \BState \emph{Données} : $L'$ \Comment{Liste du parcours des villes à effectuer} - \State \emph{début} - \BState ... - \State \emph{fin} - - \end{algorithmic} - \end{algorithm} diff --git a/poo/cours/cesar.py b/poo/cours/cesar.py deleted file mode 100644 index c3d25ac..0000000 --- a/poo/cours/cesar.py +++ /dev/null @@ -1,61 +0,0 @@ -# coding: utf-8 -minuscules = 'abcdefghijklmnopqrstuvwxyz' -majuscules = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - -def rotation(chaine, x): - """ - Effectue une rotation de x caractères vers la droite: - >>> rotation('abcde', 2) - 'cdeab' - """ - return chaine[x:] + chaine[:x] - -def index(c, chaine): - """ - Trouve l'index de c dans la chaine: - >>> index('n', 'bonjour') - 2 - """ - for i in range(len(chaine)): - if (c == chaine[i]): - return i - return -1 - -def chiffre_minuscules(chaine, x): - """ - Chiffre une chaîne composée de minuscules - >>> chiffre_minuscules('bonjour', 3) - 'erqmrxu' - """ - r = rotation(minuscules, x) - resultat = '' - for lettre in chaine: - resultat = resultat + r[index(lettre, minuscules)] - return resultat - -def chiffre(chaine, x): - """ - Chiffre une chaîne quelconque - >>> chiffre('Bonjour les amis!', 3) - 'Erqmrxu ohv dplv!' - """ - r_min = rotation(minuscules, x) - r_maj = rotation(majuscules, x) - resultat = '' - for lettre in chaine: - if lettre in minuscules: - resultat = resultat + r_min[index(lettre, minuscules)] - elif lettre in majuscules: - resultat = resultat + r_maj[index(lettre, majuscules)] - else: - resultat = resultat + lettre - return resultat - -############################################################################# -# Programme principal -############################################################################# -print(chiffre_minuscules('bonjour', 3)) -print(chiffre('Bonjour les amis!', 3)) -print(chiffre('Erqmrxu ohv dplv!', 23)) -print(chiffre('Eudyr, yrxv dyhc ilql fhw hahuflfh!', 23)) - diff --git a/poo/cours/code/factorielle.ml b/poo/cours/code/factorielle.ml deleted file mode 100644 index 5065a2c..0000000 --- a/poo/cours/code/factorielle.ml +++ /dev/null @@ -1,17 +0,0 @@ -let rec fact = function - |1 -> 1 - | n -> n * fact (n-1) ;; - -let print_fact n = - Printf.printf "factorielle %i = %i\n" n (fact n) - -let main () = - begin - print_fact 5 ; - print_newline () ; - exit 0 ; - end - -let _ = main () - - diff --git a/poo/cours/code/factorielle.py b/poo/cours/code/factorielle.py deleted file mode 100644 index 734719f..0000000 --- a/poo/cours/code/factorielle.py +++ /dev/null @@ -1,12 +0,0 @@ -def factorielle(n): - if (n > 1): - r = n*factorielle(n-1) - else: - r = 1 - return r - -def print_fact(n): - print "factorielle {} = {}\n".format(5, factorielle(5)) - -if __name__ == '__main__': - print_fact(5) diff --git a/poo/cours/conf.py b/poo/cours/conf.py deleted file mode 100644 index 3005e97..0000000 --- a/poo/cours/conf.py +++ /dev/null @@ -1,370 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Algorithmique documentation build configuration file, created by -# sphinx-quickstart on Thu Mar 16 16:07:00 2017. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx.ext.pngmath', 'sphinx.ext.ifconfig', -] - -# ajout des cours avec solution des exercices ou non -def setup(app): - app.add_config_value('correction', False, 'env') - app.add_config_value('exercice', False, 'env') - -exercice = False -correction = False - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# source_suffix = ['.rst', '.md'] -source_suffix = '.txt' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'Algorithmique Approfondie' -copyright = u'2017, Gwen' -author = u'Gwen' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = u'1' -# The full version, including alpha/beta/rc tags. -release = u'1' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = 'fr' - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -today_fmt = '%d/%m/%Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -default_role = 'literal' - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -#keep_warnings = False - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'alabaster' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (relative to this directory) to use as a favicon of -# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -#html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -html_show_sphinx = False - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -html_show_copyright = False - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' -#html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# Now only 'ja' uses this config value -#html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -#html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. -htmlhelp_basename = 'Algorithmiquedoc' - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -'papersize': 'a4paper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -'preamble': """\usepackage{amsmath} -\usepackage{algorithm} -\usepackage[noend]{algpseudocode} -\makeatletter -\def\BState{\State\hskip-\ALG@thistlm} -\makeatother - -""" - -# Latex figure (float) alignment -#'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'AlgorithmiqueApprofondie.tex', u'Cours d\'algorithmique approfondie', - u'INFAL24', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -latex_logo = '_static/cesi.jpg' - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = False - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'algorithmique', u'Algorithmique Documentation', - [author], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'Algorithmique', u'Algorithmique Documentation', - author, 'Algorithmique', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -#texinfo_no_detailmenu = False - - -# -- Options for Epub output ---------------------------------------------- - -# Bibliographic Dublin Core info. -epub_title = project -epub_author = author -epub_publisher = author -epub_copyright = copyright - -# The basename for the epub file. It defaults to the project name. -#epub_basename = project - -# The HTML theme for the epub output. Since the default themes are not -# optimized for small screen space, using the same theme for HTML and epub -# output is usually not wise. This defaults to 'epub', a theme designed to save -# visual space. -#epub_theme = 'epub' - -# The language of the text. It defaults to the language option -# or 'en' if the language is not set. -#epub_language = '' - -# The scheme of the identifier. Typical schemes are ISBN or URL. -#epub_scheme = '' - -# The unique identifier of the text. This can be a ISBN number -# or the project homepage. -#epub_identifier = '' - -# A unique identification for the text. -#epub_uid = '' - -# A tuple containing the cover image and cover page html template filenames. -#epub_cover = () - -# A sequence of (type, uri, title) tuples for the guide element of content.opf. -#epub_guide = () - -# HTML files that should be inserted before the pages created by sphinx. -# The format is a list of tuples containing the path and title. -#epub_pre_files = [] - -# HTML files that should be inserted after the pages created by sphinx. -# The format is a list of tuples containing the path and title. -#epub_post_files = [] - -# A list of files that should not be packed into the epub file. -epub_exclude_files = ['search.html'] - -# The depth of the table of contents in toc.ncx. -#epub_tocdepth = 3 - -# Allow duplicate toc entries. -#epub_tocdup = True - -# Choose between 'default' and 'includehidden'. -#epub_tocscope = 'default' - -# Fix unsupported image types using the Pillow. -#epub_fix_images = False - -# Scale large images. -#epub_max_image_width = 0 - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#epub_show_urls = 'inline' - -# If false, no index is generated. -#epub_use_index = True diff --git a/poo/cours/control.txt b/poo/cours/control.txt deleted file mode 100644 index 7770490..0000000 --- a/poo/cours/control.txt +++ /dev/null @@ -1,294 +0,0 @@ -Les structures de contrôle -========================== - -L'instruction de saut ----------------------- - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de saut conditionnel}\label{saut} - \begin{algorithmic}[1] - \Procedure{Euclide}{} \Comment{c'est l'algorithme d'Euclide} - \State $\textit{stringlen} \gets \text{length of }\textit{string}$ - \State $i \gets \textit{patlen}$ - \BState \emph{top}: - \If {$i > \textit{stringlen}$} \Return false - \EndIf - \State $j \gets \textit{patlen}$ - \BState \emph{loop}: \Comment{C'est le label (l'étiquette)} \label{etiquette} - \If {$\textit{string}(i) = \textit{path}(j)$} - \State $j \gets j-1$. - \State $i \gets i-1$. - \State \textbf{goto} \emph{loop}. \label{goto} - \State \textbf{close}; - \EndIf - \State $i \gets - i+\max(\textit{delta}_1(\textit{string}(i)),\textit{delta}_2(j))$. - \State \textbf{goto} \emph{top}. \Comment{C'est l'instruction de saut} - \EndProcedure - \end{algorithmic} - \end{algorithm} - - -.. raw:: latex - - Ligne \ref{etiquette}, le bloc `loop` est aussi un label (une étiquette), - c'est-à-dire une marque posée qu'il est possible de retrouver dans le programme. \\ - -.. raw:: latex - - Ligne \ref{goto}, l'instruction \texttt{goto} (aller à ) est le saut vers le label. \\ - -Description générique d'une instruction de saut:: - - Instruction 1 - Saut Label1 - Instruction 2 - ... - Label1: - Instruction n - -.. important:: les sauts conditionnels sont à éviter, même s'ils sont implémentés - dans le langage cible, car c'est le meilleur moyen d'aboutir à - du **code spaghetti**. - -L'instruction de branchement conditionnel ------------------------------------------- - -On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non. - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple d'instruction de test} - \begin{algorithmic}[1] - \BState \emph{entrée}: $quality\gets 0$ \Comment{C'est cette valeur qui sera testée} - \BState \emph{locale}: $a\gets ""$ - \BState \emph{sortie}: $a$ \Comment{La sortie est la valeur de $a$} - \BState \emph{corps}: - \If{$quality\ge 9$} - \State $a\gets perfect$ - \ElsIf{$quality\ge 7$} - \State $a\gets good$ - \ElsIf{$quality\ge 5$} - \State $a\gets medium$ - \ElsIf{$quality\ge 3$} - \State $a\gets bad$ - \Else - \State $a\gets unusable$ - \EndIf - \end{algorithmic} - \end{algorithm} - - - -.. ifconfig:: exercice - - **Exercice** : Compacter l'algorithme suivant en une seule condition de test:: - - Si il fait trop chaud Alors - Si il ne pleut pas Alors - Ouvrir la fenêtre - Sinon - Fermer la fenêtre - Finsi - Sinon - Fermer la fenêtre - Finsi - -.. ifconfig:: correction - - **Correction** : - - :: - - Si il fait trop chaud ET il ne pleut pas Alors - Ouvrir la fenêtre - Sinon - Fermer la fenêtre - Finsi - - -L'instruction switch --------------------- - -L'instruction switch permet de faire plusieurs tests de valeurs sur le contenu d'une même variable. -Ce branchement conditionnel simplifie beaucoup le test de plusieurs valeurs d'une variable. - -Les instructions d'itérations (boucles) ---------------------------------------- - -.. important:: Toutes les boucles concernent le paradigme de programmation impératif - et ne sont pas valides dans le paradigme de programmation fonctionnel - (puisque l'ordre d'évaluation importe) - -- arrêt conditionnel (break) -- passage d'un pas (continue) - -Répéter ... jusqu'à -~~~~~~~~~~~~~~~~~~~ - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de répéter ... jusqu'à} - \begin{algorithmic}[1] - \BState \emph{locales}: $i \gets 1$ \Comment{déclaration et initialisation de i} - \Repeat \Comment{c'est le label de début du répéter} - \State $i \gets \textit{i+1}$ - \Until{i == 100} \Comment{condition de fin de la boucle} - \end{algorithmic} - \end{algorithm} - -La boucle **pour** (for) -~~~~~~~~~~~~~~~~~~~~~~~~ - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de boucle for} - \begin{algorithmic}[1] - \BState \emph{locales}: $sum\gets 0$ - \For{$i\gets 1, n$} - \State $sum\gets sum+i$ - \EndFor - \end{algorithmic} - \end{algorithm} - - - - - -.. ifconfig:: exercice - - **Exercice** : Ecrire un algorithme qui demande successivement 20 nombres à l’utilisateur, - et qui lui dise ensuite quel était le plus grand parmi ces 20 nombres - -.. ifconfig:: correction - - **Correction** : - :: - - Variables N, i, PG en Entier - Debut - PG <- 0 - Pour i <- 1 à 20 - Ecrire "Entrez un nombre : " - Lire N - Si i = 1 ou N > PG Alors - PG <- N - FinSi - Ecrire "Le nombre le plus grand était : ", PG - Fin - - -.. attention:: ne jamais manipuler le compteur dans une boucle - -:: - - Variable Truc en Entier - Début - Pour Truc <- 1 à 15 - Truc <- Truc * 2 - Ecrire "Passage numéro : ", Truc - Truc Suivant - Fin - -La boucle tant que (while) -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de boucle while} - \begin{algorithmic}[1] - \BState \emph{locales}: $sum\gets 0$ - \State $i\gets 1$ - \While{$i\le n$} - \State $sum\gets sum+i$ - \State $i\gets i+1$ - \EndWhile - \end{algorithmic} - \end{algorithm} - -.. ifconfig:: exercice - - **Exercice** : Ecrire un algorithme de validation d'une entrée utilisateur - - :: - - "Voulez vous un café ? (O/N)" - -.. ifconfig:: correction - - **Correction** : deux solutions possibles, une - - :: - - Variable Rep en Caractère - Début - Rep <- "" - Ecrire "Voulez vous un café ? (O/N)" - TantQue Rep <> "O" et Rep <> "N" - Lire Rep - Si Rep <> "O" et Rep <> "N" Alors - Ecrire "Saisie Erronée, Recommencez" - FinSi - FinTantQue - Fin - - :: - - Variable Rep en Caractère - Début - Ecrire "Voulez vous un café ? (O/N)" - Lire Rep - TantQue Rep <> "O" et Rep <> "N" - Ecrire "Vous devez répondre par O ou N. Recommencez" - Lire Rep - FinTantQue - Ecrire "Saisie acceptée" - Fin - -.. ifconfig:: exercice - - **Exercice** : "C'est plus, C'est moins", c'est-à-dire Ecrire un algorithme qui demande à l’utilisateur - un nombre compris entre a et b jusqu’à ce que la réponse convienne. - -.. ifconfig:: correction - - **Correction** : - - :: - - Variable N en Entier - Debut - N <- 0 - Ecrire "Entrez un nombre entre 10 et 20" - TantQue N < 10 ou N > 20 - Lire N - Si N < 10 Alors - Ecrire "Plus grand !" - SinonSi N > 20 Alors - Ecrire "Plus petit !" - FinSi - FinTantQue - Fin - -Et les autres boucles : répéter... jusqu'à, etc... - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de boucle répéter} - - \begin{algorithmic}[1] - \State $sum\gets 0$ - \State $i\gets 1$ - \Repeat - \State $sum\gets sum+i$ - \State $i\gets i+1$ - \Until{$i>n$} - \end{algorithmic} - \end{algorithm} diff --git a/poo/cours/donnees.txt b/poo/cours/donnees.txt deleted file mode 100644 index 990629e..0000000 --- a/poo/cours/donnees.txt +++ /dev/null @@ -1,577 +0,0 @@ -Les structures de données -=========================== - -.. glossary:: - - ATD - - Abstract Data Type, structure de données abstraites. - La représentation des données est forcément un choix. - Il est impossible de rendre compte globalement d'un élément du réel, - il faut en faire une interprétation abstraite. - -**Exemple**: - -- Un être humain peut être représenté par les données présentes dans sa - carte d'identité. Mais un être humain n'est pas sa carte d'identité. -- Un être humain peut être représenté par les données présentes dans ses préférences - de surf sur internet. Mais un être humain **n'est pas** l'ensemble de ses logs de surf sur le net. - -Les séquences -------------- - -Les types séquences (listes) - -.. code-block:: ocaml - - # 4::1::5::8::1::[];; - - : int list = [4 ;1 ;5 ;8 ;1] - - -Un ensemble de valeurs portant le même nom de variable et repérées par un nombre, s’appelle un tableau, ou encore une liste, ou une variable indicée. -Le nombre qui, au sein d’un tableau, sert à repérer chaque valeur s’appelle l’indice. -Chaque fois que l’on doit désigner un élément du tableau, on fait figurer le nom du tableau, suivi de l’indice de l’élément. - -**manipulation** : - -- `insert()` -- `append()` -- `remove()` -- `find()` -- `print()` -- ... - -.. code-block:: python - - zoo = ['bear', 'lion', 'panda', 'zebra'] - print(zoo) - - # But these list elements are not - biggerZoo = ['bear', 'lion', 'panda', 'zebra', ['chimpanzees', 'gorillas', 'orangutans', 'gibbons']] - print(biggerZoo) - -- Lists Versus Tuples : types mutables, immutables -- Lists Versus Sets : non ordonné, collection simple - -- Recherche dans une liste, recherche du maximum dans une liste -- Recherche d’un mot dans une chaîne de caractères. - -Algorithme de la longueur d'une liste --------------------------------------- - -.. code-block:: ocaml - - # let rec longueur l = - match l with - [] -> 0 - | ::s -> 1 + (longueur s);; - -Cette fonction est prédéfinie en Ocaml : `List.length` - -.. ifconfig:: exercice - - **Exercice** : écrire un algorithme qui déclare et - remplisse un tableau de 7 valeurs numériques en les mettant toutes à zéro. - -.. ifconfig:: correction - - **Correction** : - :: - - Tableau Truc(6) en Numérique - Variable i en Numérique - Debut - Pour i <- 0 à 6 - Truc(i) <- 0 - i Suivant - Fin - - exemple d'implémentation en python - - .. code-block: python - - >>> liste = [] - >>> for i in range(6): - ... liste.append(i) - ... - >>> liste - [0, 1, 2, 3, 4, 5] - >>> - - -.. ifconfig:: exercice - - **Exercice** : Calcul du premier élément maximal dans une liste, - proposer une implémentation en python qui renvoie le maximum et - la position du max dans la liste. - -.. ifconfig:: correction - - **Correction** : - - .. code-block: python - - def max_list(L) : - k = len(L) - max, x = L[0], 0 - i = 1 - while i < k : - if max < L[i]: - max = L[i] - x = i - i = i + 1 - return max, x - - couple = max_list([4,5,6,9,12,5,10,3,18,5,6,7]) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - - Exemple de généricité : ce code fonctionne avec une chaîne de caractères. - - .. code-block: python - - couple = max_list(’totovaaumarche’) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - -.. glossary:: - - Matrice - - Tableaux de dimension multiple, c'est un tableau de tableau - -.. ifconfig:: exercice - - **Exercice** : Écrivez un algorithme remplissant un tableau de 6 sur 13, avec des zéros. - -.. ifconfig:: correction - - **Correction** : - - implémentation en python - - .. code-block:: python - - >>> matrice = [] - >>> for i in range(12): - ... matrice.append([0 for i in range(5)]) - ... - >>> from pprint import pprint - >>> pprint(matrice) - [[0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0], - [0, 0, 0, 0, 0]] - >>> - -Algorithmes de tri ------------------- - -On désigne par "tri" l'opération consistant à ordonner un ensemble d'éléments en fonction de clés sur lesquelles est définie une relation d'ordre. - -Les algorithmes de tri ont une grande importance pratique. -Ils sont fondamentaux dans certains domaines (exemples : map-reduce en database non relationnelle). - -L'étude du tri est également intéressante en elle-même, c'est un des domaines de l'algorithmique très étudié et connu. - -Tri par insertion -~~~~~~~~~~~~~~~~~~ - -Cet algorithme de tri suit de manière naturelle la structure récursive des -listes. Soit l une liste à trier : - -- si l est vide alors elle est déjà triée -- sinon, l est de la forme x::s et on trie récursivement la suite s et on obtient une liste triée s’ - on insert x au bon endroit dans s’ et on obtient une liste triée - -Description de l'algorithme - -- la fonction inserer permet d’insérer un élément x dans une liste l -- si la liste l est triée alors x est inséré au bon endroit - -.. code-block:: ocaml - - # let rec inserer x l = - match l with - [] -> [x] - | y::s -> if x<=y then x::l else y::(inserer x s);; - val inserer : ’a -> ’a list -> ’a list - # inserer 5 [3 ;7 ;10];; - - : int list = [3 ; 5 ; 7 ; 10] - -Tri rapide -~~~~~~~~~~~~ - -soit une liste l à trier : - -- si l est vide alors elle est triée -- sinon, choisir un élément p de la liste (le premier par exemple) - nommé le **pivot** -- partager l en deux listes g et d contenant les autres éléments de l - qui sont plus petits (resp. plus grands) que la valeur du pivot p -- trier récursivement g et d, on obtient deux listes g’ et d’ triées - -.. code-block:: ocaml - :caption: fonction de partage d'une liste - - #let rec partage p l = - match l with - [] -> ([] , []) - |x::s -> let g,d = partage p s in - if x<=p then (x::g , d) else (g , x::d) ;; - val partage : ’a -> ’a list -> ’a list * ’a list = - # partage 5 [1 ;9 ;7 ;3 ;2 ;4];; - - : int list * int list = ([1 ; 3 ; 2 ; 4], [9 ; 7]) - -.. code-block:: ocaml - :caption: algorithme de tri rapide - - # let rec tri rapide l = - match l with - [] -> [] - | p::s -> let g , d = partage p s in - (tri rapide g)@[p]@(tri rapide d) ;; - val tri rapide : ’a list -> ’a list = - # tri rapide [5 ; 1 ; 9 ; 7 ; 3 ; 2 ; 4];; - - : int list = [1 ; 2 ; 3 ; 4 ; 5 ; 7 ; 9] - - -Définition d'un itérateur -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. code-block:: python - - >>> l = range(10) - >>> for i in l: - ... print l[i] - ... - 0 - ... - 8 - 9 - >>> l.__iter__() - - - -Les listes chaînées -~~~~~~~~~~~~~~~~~~~~ - -.. code-block:: ocaml - - typedef struct list{ - int elt ; - struct list* suivant ; - } ; - - -**Outils de manipulation** : - -- `next()` -- `pointer()` -- `insert(l, a)` -- `remove(a, n)` - - -Les piles ----------- - -**manipulation** - -- `insert()` : insérer un élément à la fin de la pile -- `dequeue()` : (remove and return) : retirer un élément du haut de la pile -- FIFO : "first in first out" - - -Traduction d'une structure de données dans une autre ------------------------------------------------------ - -.. code-block:: python - - >>> listOfStrings = ['One', 'Two', 'Three'] - >>> strOfStrings = ' '.join(listOfStrings) - >>> print(strOfStrings) - One Two Three - >>> - >>> # List Of Integers to a String - ... listOfNumbers = [1, 2, 3] - >>> strOfNumbers = ''.join(str(n) for n in listOfNumbers) - >>> print(strOfNumbers) - 123 - >>> - -.. code-block:: python - - >>> l = [('host1', '10.1.2.3', '6E:FF:56:A2:AF:18'), ('host3', '10.1.2.5', '6E:FF:56:A2:AF:19')] - >>> result = [] - >>> for hostname, ip, macaddress in l: - ... result.append(dict(hostname=hostname, ip=ip, macaddress=macaddress)) - ... - >>> result - [{'hostname': 'host1', 'ip': '10.1.2.3', 'macaddress': '6E:FF:56:A2:AF:18'}, - {'hostname': 'host3', 'ip': '10.1.2.5', 'macaddress': '6E:FF:56:A2:AF:19'}] - >>> - - -.. ifconfig:: exercice - - **Exercice** : Proposer un algorithme de traduction de cette structure de donnée - - .. code-block:: python - - [ - { - 'address': '192.168.0.0', - 'mask': '255.255.255.0', - 'dynamicRanges': [ - { 'low': '192.168.0.5', 'high': '192.168.0.12', 'only_unknown': True }, - { 'low': '192.168.0.50', 'high': '192.168.0.55', 'only_unknown': False }, - ], - }, - { - 'address': '192.168.0.0', - 'mask': '255.255.255.0', - 'dynamicRanges': [ - { 'low': '192.168.0.12', 'high': '192.168.0.45', 'only_unknown': True }, - { 'low': '192.168.0.8', 'high': '192.168.0.35', 'only_unknown': False }, - ], - }, - { - 'address': '192.168.0.1', - 'mask': '255.255.255.0', - 'dynamicRanges': [ - { 'low': '192.168.0.5', 'high': '192.168.0.12', 'only_unknown': True }, - { 'low': '192.168.0.50', 'high': '192.168.0.55', 'only_unknown': False }, - ], - }, - - ] - - En cette structure de données : - - .. code-block:: python - - [ - { - address: '192.168.0.0', - mask: '255.255.255.0', - dynamicRanges: [ - { low: '192.168.0.5', high: '192.168.0.12', only_unknown: true }, - { low: '192.168.0.50', high: '192.168.0.55', only_unknown: false },j - ], [ - { low: '192.168.0.12', high: '192.168.0.45', only_unknown: true }, - { low: '192.168.0.8', high: '192.168.0.35', only_unknown: false }, - ], - }, - { - 'address': '192.168.0.1', - 'mask': '255.255.255.0', - 'dynamicRanges': [ - { 'low': '192.168.0.5', 'high': '192.168.0.12', 'only_unknown': True }, - { 'low': '192.168.0.50', 'high': '192.168.0.55', 'only_unknown': False }, - ], - }, - ] - -.. ifconfig:: correction - - **Correction** : - - .. code-block:: python - - >>> from pprint import pprint - pprint(l) - [{'address': '192.168.0.0', - 'dynamicRanges': [{'high': '192.168.0.12', - 'low': '192.168.0.5', - 'only_unknown': True}, - {'high': '192.168.0.55', - 'low': '192.168.0.50', - 'only_unknown': False}], - 'mask': '255.255.255.0'}, - {'address': '192.168.0.0', - 'dynamicRanges': [{'high': '192.168.0.45', - 'low': '192.168.0.12', - 'only_unknown': True}, - {'high': '192.168.0.35', - 'low': '192.168.0.8', - 'only_unknown': False}], - 'mask': '255.255.255.0'}] - >>> newdata = [] - >>> for i in l: - ... if i['address'] not in [j['address'] for j in newdata]: - ... newdata.append(i) - ... else: - ... for k in newdata: - ... if k['address'] == i['address']: - ... k['dynamicRanges'].extend(i['dynamicRanges']) - ... - >>> pprint(newdata) - [{'address': '192.168.0.0', - 'dynamicRanges': [{'high': '192.168.0.12', - 'low': '192.168.0.5', - 'only_unknown': True}, - {'high': '192.168.0.55', - 'low': '192.168.0.50', - 'only_unknown': False}, - {'high': '192.168.0.45', - 'low': '192.168.0.12', - 'only_unknown': True}, - {'high': '192.168.0.35', - 'low': '192.168.0.8', - 'only_unknown': False}], - 'mask': '255.255.255.0'}, - {'address': '192.168.10.0', - 'dynamicRanges': [{'high': '192.168.0.12', - 'low': '192.168.0.5', - 'only_unknown': True}, - {'high': '192.168.0.55', - 'low': '192.168.0.50', - 'only_unknown': False}], - 'mask': '255.255.255.0'}] - >>> - -.. ifconfig:: exercice - - **Exercice** : Proposer un algorithme qui permette de récupérer la liste - des adresses IP disponibles - - .. code-block:: python - - { - "local": { - "leases": [ - { - "mac": "02:00:c0:a8:00:66", - "name": "pcxubuntu", - "address": "192.168.0.200" - }, - { - "mac": "02:00:c0:a8:00:67", - "name": "pcxubuntu", - "address": "192.168.0.201" - }, - { - "mac": "02:00:c0:a8:00:68", - "name": "pcxubuntu", - "address": "192.168.0.202" - } - ] - } - } - -.. ifconfig:: correction - - **Correction** : - - .. code-block:: python - - >>> l = { - ... "local": { - ... "leases": [ - ... { - ... "mac": "02:00:c0:a8:00:66", - ... "name": "pcxubuntu", - ... "address": "192.168.0.200" - ... }, - ... { - ... "mac": "02:00:c0:a8:00:67", - ... "name": "pcxubuntu", - ... "address": "192.168.0.201" - ... }, - ... { - ... "mac": "02:00:c0:a8:00:68", - ... "name": "pcxubuntu", - ... "address": "192.168.0.202" - ... } - ... ] - ... } - ... } - >>> leases = l["local"]["leases"] - >>> from pprint import pprint - >>> pprint(leases) - [{'address': '192.168.0.200', 'mac': '02:00:c0:a8:00:66', 'name': 'pcxubuntu'}, - {'address': '192.168.0.201', 'mac': '02:00:c0:a8:00:67', 'name': 'pcxubuntu'}, - {'address': '192.168.0.202', 'mac': '02:00:c0:a8:00:68', 'name': 'pcxubuntu'}] - >>> addresses = [lease['address'] for lease in leases] - >>> addresses - ['192.168.0.200', '192.168.0.201', '192.168.0.202'] - >>> - - - -Structures de données complexes -------------------------------- - -Les types produits nommés -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -On les appelle enregistrements, dictionnaires ou tables de hachage. - -:: - - algorithme monAlgorithme - // déclaration d'un enregistrement - enregistrement Personne - chaine nom; - chaine prenom; - entier age; - réel taille; - finenregistrement - ... - Personne[50] t; - début - // Initialisation - t[0].nom <- "Duchmol"; - t[0].prenom <- "Robert"; - t[0].age <- 24; - t[0].taille <- 1.80; - ... - fin - -.. code-block:: ocaml - - # type adresse = { rue : string ; ville : string ; cp : int};; - # type fiche = { - nom : string ; - prenom : string ; - adresse : adresse ; - date naissance : int * int * int ; - tel fixe : string ; - portable : string - };; - # let v1 = { a = 1 ; b = false ; c = 'r'};; - - - - -- les sommes (constructeurs) - -.. code-block:: ocaml - - # type couleur = Pique | Coeur | Carreau | Trefle;; - # let v = (Pique , Coeur);; - val v : couleur * couleur = (Pique , Coeur) - -.. code-block:: ocaml - - type nombre = - Ent of int | Reel of float | Cplx of float × float - Ent, Reel, Cplx sont les constructeurs du type. - -Autres structures de données complexes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- arbres -- graphes -- dates - -- le parcours de graphes -- les calculs de dates diff --git a/poo/cours/fonctions.txt b/poo/cours/fonctions.txt deleted file mode 100644 index 330cbca..0000000 --- a/poo/cours/fonctions.txt +++ /dev/null @@ -1,588 +0,0 @@ -Les fonctions et les procédures -================================ - -Préliminaire : rappel de théorie de cybernétique -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Théorie de l'information (Claude Shannon, 1949), (ou théorie de la communication) - -Canal de transmission:: - - entrée -> récepteur -> émetteur -> sortie - -.. glossary:: - - cybernétique - - étude des fonctions de réflexes conditionnés du cerveau humain - utilisation au mieux en PNL ("programmation neuro-linguistique") - ou en analyse transactionnelle, ou au pire en ingérinerie sociale. - -La matérialité physique est considérée comme le hardware, le génétique (le -réseau neuronal) étant assimilé au network hardware. - -Les objets mentaux (fonctionnements psychologiques et épigénétiques du -cerveaux) est assimilé au logiciel, au software. - -IFTTT ("if this then that") : la causalité mondaine est ramenée à un ordre de -comportement affecté à un assimilé-machine. - -L'humain est ramené à une machine. -C'est articulation entre "déclencheur contextuel" et "action en réponse de" -n'est pas une "black box" mais un "feedback" qui, pour l'humain, -loin d'être ramené à une entrée/sortie, constitue un **feedback** -utile pour la connaissance de soi. - -A la place, la communication est ramenée à une **boucle de rétroaction** -(comme dans un prompt) entre un système comportemental et son environnement. -La représentation sujet/objet (la perspective traditionnelle) est remplacée -par le clivage intérieur/extérieur. Behaviorisme, procédural. - -L'humain est donc ramené à - -- un ordonnanceur -- un comportement intrinsèque (boîte noire) - -- un stimuli pavlovien (déclencheur, trigger) est considéré comme un paramètre -d'entrée -- une instruction comportementale est considérée comme une action de - traitement -- le résultat est observé. - -Cette articulation entre "déclencheur contextuel" et "action en réponse" -est très exactement une forclusion de la profondeur monadique (Leibniz) de -l'humain à la black box informationnelle (et cybernétique). - -Pour quoi faire ? Pour pirater. Pour manipuler. -Le piratage consiste à - -- isoler les constantes (les procédures répétitives, les algorithmes) -- les observer (collecter les données) - -afin de - -- les réécrire (influence toxique, pishing - hammeçonnage) -- les détruire (attaque en règle) - - -Description d'une procédure -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -En programmation impérative, un programme est une suite d’instructions qui font -évoluer l’état mémoire, le résultat est dans l’état final de la mémoire. - -- une procédure peut prendre des paramètres -- elle modifie l'état courant du système - -- Déclaration des paramètes -- Déclaration du corps -- Appel de la procédure - -.. raw:: latex - - \begin{algorithm} - \caption{Procédure de permutation de deux entiers}\label{permutation} - \begin{algorithmic}[1] - \Procedure{permuter}{$a,b$}{} - \BState \emph{parametres}: - \State $a: \textit{int}$ - \State $b: \textit{int}$ - \BState \emph{locales}: - \State $z: \textit{int}$ \Comment{Une variable intermédiaire est nécessaire} - \BState \emph{corps}: - \State $z \gets a$ - \State $a \gets b$ - \State $b \gets z$ - \EndProcedure - \State \Call{permuter}{10, 12} \Comment{appel de la procédure} - \end{algorithmic} - \end{algorithm} - -effet de bord - - toute modification de la mémoire ou modification d'un support externe - -instruction - - commande ou phrase en mesure de modifier l'état du programme ou de la machine hôte - (allocation mémoire, support externe, disque, écran...) - -Une procédure ne renvoie pas de valeur, mais provoque un 'effet de bord' (écriture dans une globale, dans un flux sortant etc.). - -Une procédure permet de créer une instruction nouvelle qui deviendra une primitive pour le programmeur. -Cela permet de structurer le texte source du programme et améliorer sa -lisibilité. Cela permet aussi d'appeler plusieurs fois, et à plusieurs endroit -dans le code, cette primitive. - -Appel d'une procédure -~~~~~~~~~~~~~~~~~~~~~ - -(ex: pseudo-pascal) - -**déclaration de procédure** - -.. raw:: latex - - \begin{algorithm} - \caption{Procédure de permutation de deux entiers}\label{appelpermutation} - \begin{algorithmic}[1] - \Procedure{permuter}{$a,b$}{} - \BState \emph{parametres}: - \State $a: \textit{int}$ \Comment{paramètres formels de la procédure} - \State $b: \textit{int}$ - \BState \emph{locales}: - \State $z: \textit{int}$ \Comment{les variables locales de la procédure} - \BState \emph{corps}: - \State ... \Comment{Le corps de la procedure} - \EndProcedure - \State \Call{permuter}{10, 12} \Comment{l'appel de la procédure} - \end{algorithmic} - \end{algorithm} - - -- les variables x1,...,xn sont appelées *paramètres formels* de p -- les variables v1,...,vm sont appelées *les variables locales* de p - -les valeurs effectivement passées en paramètres, ici `10, 12` -sont appelées **paramètres effectifs** de p - -signature - - C'est l'ensemble paramètre formel + resultat de l'appel - -fermeture - - L'ensemble procédure + variables locales + signature + parametres effectifs - est appelé une **fermeture**. C'est la procédure + son contexte qui permet - de l'instancier dans un programme. - -Environnement - - Contexte d’évaluation d'une expression ou d'une fonction - -Portée - - La portée d'un identifiant (une variable) est sa condition d'utilisation dans un contexte donné - (utilisation locale uniquement, ou bien globale, ou bien locale et globale) - La portée d’une liaison est la portion du code dans laquelle cette - liaison est valide (i.e. où un identifiant est lié à une expression). - -.. ifconfig:: exercice - - **Exercice** : Que donne ce code ? - - .. code-block:: ocaml - - # let x = 42 in - let y = x - 1 in x - y ;; - -.. ifconfig:: correction - - **Correction** : - - .. code-block:: ocaml - - - : int = 1 - - -.. code-block:: ocaml - - let a = 3 (* première liaison pour l'identifiant a *) - let b = 5 and c = 6 - let somme = a + b + c - val somme : int = 14 - let a = 45 (* deuxième liaison pour l'identifiant a *) - somme - val a : int = 45 - -.. ifconfig:: exercice - - **Exercice** : Que donne ce code ? - - .. code-block:: ocaml - - let a = 3 and b = 4 and c = 8 ;; - let somme = a + b + c ;; - val somme : int = ??? - let a = 44 - let b = 5 - let c = 1 - somme - - : int = ??? - -.. ifconfig:: correction - - .. code-block:: ocaml - - let a = 3 and b = 4 and c = 8 ;; - - : int = 15 - let somme = a + b + c ;; - val somme : int = 15 - let a = 44 - let b = 5 - let c = 1 - somme - - : int = 15 - - Même code en python - - .. code-block:: python - - >>> a = 1 - >>> b = 2 - >>> c = 3 - >>> somme = a + b + c - >>> somme - 6 - >>> a = 56 - >>> b = 5678 - >>> c = 56789 - >>> somme - 6 - >>> - -Portée locale dans une expression - -.. code-block:: ocaml - - # let a = 2 and b = 3 and c = 4 in - let somme = a+b+c in - somme - - : int = 9 - # somme ;; - Error: Unbound value somme - # a ;; - Error: Unbound value a - -.. important:: - - L’ordre d’évaluation dans un let ... in ... est bien déterminé, - sans grande importance dans un cadre purement fonctionnel, mais important - en cas d’effets de bord - - -Exemple de variable globale modifiée localement (**attention, mauvaise pratique** !) : - -.. code-block:: python - - >>> a = 5 - >>> def print_a(): - ... print("La variable a = {0}.".format(a)) - ... - >>> print_a() - La variable a = 5. - >>> a = 8 - >>> print_a() - La variable a = 8. - >>> - - - -niveau - - Le niveau d’une déclaration (de variable ou de procédure) est le nombre - de procédures sous lesquelles elle est déclarée. Le programme principal - a le niveau 0. - -.. code-block:: python - :linenos: - - def _get_config(name): - # return config value - if not isfile(CONFIG_FILE): - raise Exception("Fichier de configuration non existant") - from ConfigParser import ConfigParser - cfg = ConfigParser(allow_no_value=True) - cfg.read(CONFIG_FILE) - - if name == "SUBNETS": - return eval(cfg.get('eole', 'subnets')) - elif name == "LEASES_FILE": - DHCP_PATH = cfg.get('eole', 'container_path_dhcp') - return join('/', DHCP_PATH, 'var/lib/dhcp/dhcpd.leases') - def get_routes(*args, **kwargs): - """ - Send list of reserved IP - return list of tuple (id, machine name, IP, MAC Adress) - """ - cfg = creole_loader(load_extra=True, rw=False, owner=MODNAME, - mandatory_permissive=False) - return zip(cfg.dhcp.dhcp.id_dhcp.id_dhcp, cfg.dhcp.dhcp.id_dhcp.hostname, - cfg.dhcp.dhcp.id_dhcp.ip, cfg.dhcp.dhcp.id_dhcp.macaddress) - -On voit que l'objet `cfg` ligne 6 et 7 a le même nom que l'objet `cfg` ligne 19. -C'est autorisé et les espaces de nommages sont différents. - - -Description d'une fonction -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Une fonction renvoie une valeur et ne modifie pas l'état courant du programme -en cours d'exécution ni ne réalise d'effets de bord. Elle renvoie -**toujours** quelque chose (même la valeur ``None`` qui n'est pas rien) - -- une procédure peut prendre des paramètres -- elle modifie l'état courant du système - -- Déclaration des paramètes -- Déclaration du corps -- Appel de la fonction - -En programmation fonctionnelle, programme est un ensemble de définitions de fonctions, -un résultat est l'application d’une fonction à une structure de données effective. - -- composant de base : la fonction -- opération de base : l’application - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple de fonction}\label{fonction} - \begin{algorithmic}[1] - \Function{permuter}{$a,b$}{} \Comment{définition de la fonction} - \BState \emph{parametres}: \Comment{déclaration (noms, types) des paramètres formels} - \State $a: \textit{int}$ - \State $b: \textit{int}$ - \BState \emph{locales}: \Comment{déclaration (noms, types) des valeurs locales} - \State $z: \textit{int}$ - \BState \emph{corps}: - \State $z \gets a$ - \State $a \gets b$ - \State $b \gets z$ - \BState \emph{return}: \Comment{La valeur, le résulat renvoyé par la fonction} - \EndFunction - \State \Call{permuter}{10, 12} \Comment{appel de la fonction} - \BState \emph{result}: - \State (12, 10) \Comment{Le résultat effectif de la fonction après appel} - \end{algorithmic} - \end{algorithm} - -.. ifconfig:: exercice - - **Exercice** : factoriser le code suivant - :: - - Ecrire "Etes-vous marié ?" - Rep1 <- "" - TantQue Rep1 <> "Oui" et Rep1 <> "Non" - Ecrire "Tapez Oui ou Non" - Lire Rep1 - FinTantQue - ... - Ecrire "Avez-vous des enfants ?" - Rep2 <- "" - TantQue Rep2 <> "Oui" et Rep2 <> "Non" - Ecrire "Tapez Oui ou Non" - Lire Rep2 - FinTantQue - -.. ifconfig:: correction - - **Correction** : - - :: - - Fonction RepOuiNon() en caractère - Truc <- "" - TantQue Truc <> "Oui" et Truc <> "Non" - Ecrire "Tapez Oui ou Non" - Lire Truc - FinTantQue - Renvoyer Truc - Fin - - Ecrire "Etes-vous marié ?" - Rep1 <- RepOuiNon() - ... - Ecrire "Avez-vous des enfants ?" - Rep2 <- RepOuiNon() - - -Définition mathématique -~~~~~~~~~~~~~~~~~~~~~~~~~ - -fonction - - Une fonction f d’un ensemble E vers un ensemble F est une - correspondance qui associe à chaque élément de E au plus - un élément de F. - -- E est appelé le domaine de définition -- F est appelé codomaine -- la **signature** de la fonction : `E → F (int -> int = )` - - -Exemple de signature d'une fonction - -:: - - Fonction RepOuiNon(Msg en Caractère) en Caractère - Ecrire Msg - Truc <- "" - TantQue Truc <> "Oui" et Truc <> "Non" - Ecrire "Tapez Oui ou Non" - Lire Truc - FinTantQue - Renvoyer Truc - Fin Fonction - - ... - Rep1 <- RepOuiNon("Etes-vous marié ?") - ... - Rep2 <- RepOuiNon("Avez-vous des enfants ?") - ... - - -curryfication - - évaluation de l'application d'une fonction - -- évaluter `(f x y)` -- peut donner une **valeur fonctionnelle** -- évaluation de la valeur fonctionnelle sur une valeur des types de base - -:: - - let g = function n -> (function p -> p + 1) n;; - -Typage d'une fonction -~~~~~~~~~~~~~~~~~~~~~ - -.. code-block:: ocaml - - # let f x y z = if x > 0 then y + x else z - x;; - val f : int -> int -> int -> int = - -c’est en fait une fonction à un argument qui retourne une fonction:: - -.. code-block:: ocaml - - val f : int -> (int -> (int -> int)) = - -application de f à trois valeurs - -.. code-block:: ocaml - - # f 1 2 3;; - - : int = 3 - -en programmation fonctionnelle, -les fonctions sont des valeurs comme les autres - - -.. code-block:: ocaml - - # fun x -> x * x;; - - : int -> int = - -Récursivité -~~~~~~~~~~~~ - -.. code-block:: ocaml - - let rec fact n = - if n=0 then 1 else n * fact (n-1) - - -équivalent impératif utilisant une boucle - -.. code-block:: c - - int fact(int n){ - int f = 1 ; - int i = n ; - while (i>0){ - f = f * i; - i-- ; - } ; - return f ; - } - -Définitions par cas -~~~~~~~~~~~~~~~~~~~ - -.. code-block:: ocaml - - let rec fact n = - match n with - 0 -> 1 - | -> n * fact (n-1) - -**exemple** : la fonction puissance - -.. code-block:: ocaml - - let rec puissance x n = match n with - 0 -> 1 - | -> x * puissance x (n-1) - - - -.. ifconfig:: exercice - - **Portée locale dans une fonction** - Quelles sera la valeur de la variable `a` ? - - .. code-block:: python - - >>> a = 1 - >>> def myfunc(): - ... a = 2 - ... return a + 1 - ... - >>> a = myfunc() + a - - -.. ifconfig:: correction - - Correction: - - .. code-block:: python - - >>> a = 1 - >>> def myfunc(): - ... a = 2 - ... return a + 1 - ... - >>> a = myfunc() + a - >>> a - 4 - >>> - - -.. ifconfig:: exercice - - **Exercice** : Portée locale dans une fonction avec variable globale - Quelles sera la valeur de la variable `a` ? - - .. code-block:: python - - >>> a = 1 - >>> def myfunc(): - ... global a - ... a = 2 - ... return a + 1 - ... - >>> a = myfunc() + 3 - >>> - -.. ifconfig:: correction - - **Correction** : - - .. code-block:: python - - >>> a = 1 - >>> def myfunc(): - ... global a - ... a = 2 - ... return a + 1 - ... - >>> myfunc() - 3 - >>> a - 2 - >>> a = myfunc() + 3 - >>> a - 6 - >>> diff --git a/poo/cours/fondement.txt b/poo/cours/fondement.txt deleted file mode 100644 index 874365c..0000000 --- a/poo/cours/fondement.txt +++ /dev/null @@ -1,198 +0,0 @@ -Présentation de l'art de programmer -==================================== - -Qu'est-ce que la programmation ? --------------------------------- - -programmation - - Description d’un calcul (traitement) dans - un langage compréhensible par la machine - (langage de programmation) - -Le processus d'abstraction --------------------------- - -Débuter en programmation n'est pas une chose aisée. Aujourd'hui, la tendance est au -"bas niveau". Souvent, on se jette dans le grand bain : - -- soit en s'approchant au maximum de la machine (admin système et réseau, noyau - linux, langage C) - -- soit en faisant du dev web côté backend, ce qui ramène à une administration réseau - de bas niveau (microservices, monde nodeJS/javascript, etc...) - -Soit on suit un cursus scolaire traditionnel qui commence souvent par une -explication du fonctionnement d'une machine abstraite de bas niveau, puis en -allant de plus en plus haut, mais étant sous-entendu qu'il faut rester connecté au -bas niveau (comprendre comment ça se passe derrière la scène). - -Dans ces deux cas, il est sous-entendu qu'on apprend plus de choses et plus rapidement en mettant -les mains dans le cambouis, ce qui est vrai bien sûr. Mais cela sous-entend qu'un développeur doit -rester le nez dans le guidon. Qu'il doit être un expert de son domaine en accumulant des technologies -sans aucun recul. Bien sûr il se doit d'être un expert du système dans lequel il évolue -(connaissance du système d'exploitation, binding avec le C, du ramasse miette (garbage -collector), interaction avec les différentes librairies, gestion et optimisation de la mémoire, -architecture par microservices, threads...) mais il doit aussi être capable de prendre du recul. - -L'approche algorithmique (algorithmique de pseudo code, algorithmique algébrique et modulaire) -est un véritable moyen pour le programmeur de prendre du recul : elle commence par se placer du -côté de l'esprit humain et de ses capacités de compréhension et d'abstraction, elle autorise une -pensée rationnelle sur l'art de programmer et permet au programmeur d'effectuer les bons choix, -en connaissance de sa discipline. - -Le lien est fait ensuite avec le plus bas niveau grâce une implémentation effective -des langages à partir des paradigmes de rationalisation de la penseée (modules, -objects, généricité, polymorphisme paramétrique...) et d'un outil de communication -avec la machine qu'on appelle compilateur (dont la description est en dehors de -l'objectif de ce cours). - -La tendance générale de l'évolution des langages est de se libérer de ces -contraintes de bas niveau, un peu comme en sciences physiques où les lois physiques -dépendent de l'échelle d'en dessous (du niveau microscopique/quantique) mais qu'à -l'échelle du dessus, on n'a pas affaire à des effets de bas niveau (pas d'effets -quantiques à un niveau macroscopique en général). Ce processus d'évolution est vrai -aussi dans le monde de la technique informatique lui-même (modèle OSI, comment est -construite une trame IP, indépendances de chaque couche (transport, payload) entre -elles). Même la tendance système est à la virtualisation qui accentue encore la -tendance à s'affranchir du bas niveau (le niveau système), le séparer nettement du -haut niveau (le niveau applicatif). - -Il apparaît régulièrement de nouveaux langages. Comment s'orienter ? Quel(s) -langage(s) choisir pour un projet de développement ? Au delà de leurs disparités, la -conception et la genèse de chacun d'eux procèdent d'une motivation partagée : la -volonté d'abstraire. - -- **s'abstraire de la machine** : un langage de programmation permet de - négliger l'aspect *mécanique* de l'ordinateur. On oublie le modèle du - microprocesseur, jusqu'au système d'exploitation sur lequel sera exécuté - le programme. - -- **abstraire les erreurs** : Il s'agit ici de garantir la sûreté d'exécution; un - programme ne doit pas se terminer brutalement ou devenir incohérent en cas d'erreur. - Un des moyens pour y parvenir est le typage des programmes et la mise - en oeuvre d'un mécanisme d'exceptions. - -- **abstraire le mode opératoire** : Il s'agit de choisir une représentation, un - paradigme d'implémentation qui est indépendant du domaine considéré (paradigme - objet, modulaire, générique, composants...) - -- **abstraire les composants** : Les langages de programmation donnent la - possibilité de découper une application en différents composants logiciels, plus ou - moins indépendants et autonomes. La modularité permet une structuration de plus haut - niveau de l'ensemble d'une application complexe. Les langages à objets constituent - une autre approche de la réutilisabilité permettant la réalisation très rapide de - prototypes. - -Description des niveaux d'abstraction par rapport à la machine ---------------------------------------------------------------- - -Les langages de haut niveau simplifient le travail du -programmeur là où les langages de bas niveau permettent de produire un code -plus efficace. - -- **niveau 0** : le langage machine. Illisible, c'est une suite d'optcode. - impossible de coder dans ce langage. - -- **niveau 1** : langage d'assemblage. Il reste très dépendant de la machine - et aujourd'hui il est rare d'en faire, sauf si on code un bootloader par exemple, - la gestion de l'accès à la mémoire est en réel (le mode protégé n'apparaît que après). - Il faut gérer les ressources,le langage est très optimisé mais presque impossible - à maintenir et rendre générique. Aujourd'hui plus personne ne code en assembleur. - -- **niveau 2** : langages dits de **bas niveau** : (exemple : le C, le C++) - indépendance par rapport à la machine, grande structuration mais très verbeux - -- **niveau 3** : langages dits de **haut niveau** : le raisonnement dans ces - langages ne dépent plus de la machine, et ils implémentent des paradigmes de - programmation indépendant de l'état de la mémoire de l'ordinateur, - ils sont indépendant même du système d'exploitation. - -Qu'est-ce qu'une machine ? ---------------------------- - -Une machine, ce truc apparemment si complexe, est en fait -un assemblage de bric et de brac. - -L'assemblage des connecteurs permet de simuler un additionneur, -en prenant en compte les propriétés de **reste euclidien** -de l'addition. - -La structure électronique est composée de : - -- un ordonnanceur. -- le stockage d'un **état**. -- une pile d'instruction - -.. glossary:: - - adressage - - Dès lors qu'on dispose de ces bases électronique au dessus du processeur, - un langage d'assemblage est possible, c'est le langage de calcul sur les registres. - - registre - - machines ont un espace mémoire et un espace de calcul (registres) - -Un ordinateur, c'est très très stupide, mais ça permet de disposer de : - -- une mémoire très grande et ordonnée, -- une capacité à effectuer inlassablement des tâches répétitives -- une grande rapidité de calcul - -Apprendre à programmer, c'est-à-dire être capable de -contrôler la machine. - -.. important:: Apprendre à programmer, c'est-à-dire apprendre à penser de manière structurée, - pour pouvoir accessoirement ensuite communiquer avec une machine. - -Compilateur ------------ - -Schématiquement, un compilateur est un programme qui traduit un -programme d’un langage source vers un langage cible, en signalant -d’éventuelles erreurs. - -Quand on parle de compilation, on pense typiquement à la traduction d’un -langage de haut niveau (C, Java, Caml, ...) vers le langage machine d’un -processeur (Intel Pentium, PowerPC, ...) - -- xml (libre office, word) -> postscript (imprimante) -- postcript -> image -- syntaxe wiki -> html (Wikipédia...) - -compilation graphique - - passer une description, ça donne un dessin genre ocaml Quilt < mon_dessin.txt - passer par une api qui permet de causer avec une interface - -**transpiler** : transformation d'un langage de haut niveau vers un autre -langage de haut niveau. - -- cofee script, typescript -> javascript -- (babel) javascript -> javascript ES 6 -- python -> javascript - -Un compilateur traduit un programme P en un programme Q tel que -pour toute entrée x , la sortie de `Q(x)` soit la même que celle de `P(x)` - -Un interprète est un programme qui, étant donné un programme `P` et une -entrée x , calcule la sortie s de `P(x)` - -Le compilateur fait un travail complexe une seule fois, pour produire un -code fonctionnant pour n’importe quelle entrée -L’interprète effectue un travail plus simple, mais le refait sur chaque entrée -Autre différence : le code compilé est généralement bien plus efficace que -le code interprété - -Typiquement, le travail d’un compilateur se compose d’une phase d’analyse - -- reconnaît le programme à traduire et sa signification -- signale les erreurs et peut donc échouer (erreurs de syntaxe, de portée, de typage, etc.) - -Puis d’une phase de synthèse - -- production du langage cible -- utilise de nombreux langages intermédiaires -- n’échoue pas diff --git a/poo/cours/index.txt b/poo/cours/index.txt deleted file mode 100644 index aa2ef7d..0000000 --- a/poo/cours/index.txt +++ /dev/null @@ -1,19 +0,0 @@ -Introduction à l'algorithmique -================================ - -.. toctree:: - :maxdepth: 2 - - presentation - fondement - langage - algo - programme - fonctions - control - donnees - apercu - modularite - modules - tp - annexes/index diff --git a/poo/cours/langage.txt b/poo/cours/langage.txt deleted file mode 100644 index 67f858d..0000000 --- a/poo/cours/langage.txt +++ /dev/null @@ -1,336 +0,0 @@ -Les langages de programmation -============================= - -langage - - Un langage de - programmation - doit permettre d'écrire des - programmes de bonne qualité - -Un programme doit être : - -- correct -- robuste -- lisible, bien documenté -- facile à modifier, extensible - -Un langage de programmation doit permettre : - -- la programmation structurée -- la structuration avec les types -- proposer un mécanisme d’exceptions -- présenter des caractères de généricité, de polymorphisme et de surcharge - -.. important:: La structuration et l'organisation modulaire sert à maintenir de grands programmes, - Elles sont une nécessité - -Approche historique et chronologique -------------------------------------- - -- Lambda calcul (1930) -- machines de Turing (1936) -- début des langages vers les années 1950 (A0, Fortran(impératif), - Lisp(impératif et fonctionnel), Cobol) -- années 60 : Simula (classes), CPL (compilation séparée) -- années 70 : C (référence du langage impératif de bas niveau), Pascal - (procédures), Smalltalk (programmation orientée objects), Prolog - (programmation logique), Scheme (programmation fonctionnelle pure), Modula, - C++, Ada, Turbo Pascal, Common Lisp, Eiffel (programmation par contrats) -- années 80 : ML, CAML (langages fonctionnels) -- années 90 : Perl, Python, Ruby (languages de scripting multi-paradigmes) - Haskell (fonctionnel pur), Lua, Delphi, Java (orienté objet, machine - virtuelle), PHP (impératif, dédié au web), Erlang (fonctionnel+ - programmation concurrente), javascript (orienté web, objets par - prototypage), OCaml (multi-paradigme, fortement typé, orienté sécurité, - programmation générique, fonctionnelle et objets, modulaire et fonctorielle) -- 2009 : go (google, compilé, typage statique, objets par prototypage, - prgrammation concurrente), Rust (fondation mozilla, multiparadigme, programmation concurrente) - -Les langages actuellement les plus utilisés dans le monde de l'entreprise sont : - -- javascript/NodeJS (70% du code dans le dépôt github) mais victime de son - succès (chaos complet des librairies) -- le go est de plus en plus utilisé, c'est **le** langage qui monte - actuellement -- Python, Ruby, lua, autres langages de scripting (de plus en plus utilisés) -- PHP, Java (stagnants) -- C, C++ (de moins en moins utilisés) - -Approche par typologie des langages ------------------------------------ - -- **A0 (1954)** : possibilité de découpage de programmes en - sous-programmes ; - -- **ALGOL (1958)** : concept de bloc de code (pas forcément nommé) et d'imbrication - de blocs de code ; - -- **C (1971)** : syntaxe claire et simple, programme fortement structuré ; - -- **C (1980)** : le **code objet**, qui consiste à essayer de faire fonctionner - un seul jeu d'instructions sur des machines différentes. Avant, le code - d'assemblage dépendait du processeur, donc il n'y avait pas un seul et unique - jeu d'instructions ; - -- **1980** : déploiement et succès des langages à objets ; - -- **1983** : turbo pascal (Borland) qui fut le tournant du C, - propose un IDE (Environnement de Développement Intégré). - aujourd'hui le turbo pascal a pratiquement disparu mais pas totalement, - il est soutenu par une communauté open source autour de **Lazarus** ; - -- **depuis les années 90** : deux grands groupes de langages. Les langages à - objets, et les langages fonctionnels. Les deux mondes s'interpénètrent (les - avancées actuelles du web, les microservices (Erlang, Haskell), - viennent du monde fonctionnel, le NoSQL, etc). - Les grandes avancées architecturales (système d'exploitation, linux, etc...) - viennent du monde de l'impératif. - - -Approches par modèles de programmation --------------------------------------- - -- **le mécanisme d'exceptions** : il est possible de rompre l'exécution normale d'un - programme à un endroit et de la reprendre à un autre endroit du programme prévu à - cet effet. Ce mécanisme permet de gérer les situations exceptionnelles. - -- **le paradigme impératif** : les entrées-sorties, les modifications physiques de - valeurs et les structures de contrôle itératives sont possibles. - -- **le paradigme fonctionnel** : manipule les fonctions comme étant des valeurs du - langage. Celles-ci peuvent être utilisées en tant que paramètres d'autres fonctions - ou être retournées comme résultat d'un appel de fonction. - -- **le paradigme objet** : La représentation du programme colle à la réalité en - reproduisant des entités relativement proches des objets réel. Attention, le piège - est de croire qu'il s'agit *du* paradigme universel puisqu'il reproduit en miroir le - réel. **C'est en fait un processus d'abstraction comme un autre**. - -Sûreté du langage, typage -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Tri par ordre de sûreté croissant : - -0. typage très faible (presque inexistant aujourd'hui) : 42 == "42" == 42.0... -1. typage dynamique faible : (javascript) (possibilité de changer le prototype - d'un objet pendant l'éxécution du programme, c'est la fête on peut faire - n'importe quoi) -2. typage dynamique fort inféré par le comportement (behavior, duck typing) - (python, ruby, PHP) Le contenu de la variable détermine le choix du typage - `var = 0 -> type int` -3. typage statique déclaré fort (Java) - `int var = 0 ;` (pas mal mais super lourd, pas **agile** du tout) -4. langages à types statiques muni d'un moteur d'inférence de types (Ocaml) - sûreté d'exécution, agilité, sécurité. - - -La syntaxe, la lisibilité -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Importance de la lisibilité (notamment par rapport aux méthodes agiles). - -- courte (python) -- verbeuse (C) -- l'importance des mots clef du langage -- délimiteur de phrase, de blocs (parenthèses, accolades, tabulations, blocs...) - -Langages compilés ou interprétés ? ------------------------------------ - -.. glossary:: - - langage compilé - - une première passe est faite, des validations son effectuées **avant** - la génération du code objet, cette phase est faite par le compilateur. - - compilateur - - programme qui transforme un langage de haut niveau en un langage de base - niveau - - - phase d’analyse syntaxique (source -> syntaxe abstraite) - - phase de synthèse (syntaxe abstraite -> code objet) - - - scripting (langage de scripting) - - langage interprèté - - générique (langage) - - Langage à usage générique, qui peut être utilisé dans n'importe quel - domaine (par opposition au DSL) - - domain specific - - Domain Specific Language, langage destiné à être utilisé dans un - domaine prédéfini. - - paradigmes - - représentation d'une vision particulière à partir d'un modèle théorique - - impératif - - l'algorithme ressemble à une recette de cuisine, - c'est-à-dire à une succession d'instructions à exécuter - les unes à la suite des autres - - fonctionnel - - l'algorithme ne dépend plus de l'ordre d'exécution d'instructions - pas de mélange entre les données et les traitements - - objets (programmation) - - le monde est découpé en catégories - qui permettent de créer des objets - - **développement par composants** - - les objets sont organisés entre eux par composants suivant des designs patterns, - (patrons de conception) - - garbage collector (ramasse miettes) - - la gestion automatique de la mémoire apparaît en 1989 - - machine virtuelle - - portabilité du code (mais diminution en optimisation et performances) - - JIT (just in time compiler) - - code objet, programmes fonctionnant autour de machines virtuelles - - -- **le typage statique** : la vérification de la compatibilité entre les types des - paramètres formels et des paramètres d'appel est effectuée au moment de la - compilation du programme. Dès lors, il n'est pas nécessaire de faire ces - vérifications durant l'exécution du programme ce qui accroît son efficacité. En - outre, la vérification de type permet d'éliminer la plupart des erreurs introduites - par maladresse ou étourderie et contribue à la sûreté de l'exécution. - -- **le typage dynamique** : la vérification de la compatibilité entre les types des - paramètres formels et des paramètres d'appel est effectuée au moment de l'exécution - ou de l'appel à certaines parties de codes du programme. - -- **le polymorphisme paramétrique** : une fonction ou un objet qui n'explore pas la - totalité de la structure d'un de ses arguments accepte que celui-ci ait un type non - entièrement déterminé. Ce paramètre est alors dit polymorphe. Cette particularité - permet de développer un code générique utilisable pour des structures de données - différentes tant que la représentation exacte de cette structure n'a pas besoin - d'être connue par le code en question. L'algorithme de typage est à même de faire - cette distinction. - -- **l'inférence de types** : le programmeur n'a besoin de donner aucune information - de type à l'intérieur de son programme. Le langage se charge seul de déduire du code - le type le plus général des expressions et des déclarations qui y figurent. Cette - inférence est effectuée conjointement à la vérification, lors de la compilation du - programme. - -Les grands paradigmes de programmation ---------------------------------------- - -Le paradigme des objets -~~~~~~~~~~~~~~~~~~~~~~~ - -- 1962 (SIMULA) : premières notions de classes ; - -Pui, une dizaine d'années plus tard : - -- C++ : intégration des classes pour le C ; -- turbo pascal : intégration des classes pour le pascal ; - -Tous les langages actuels ont intégré des traits objets mais de manière très -différentes : - -- perl (1987) -- python (1991) -- Ruby (1993) - -- L'implémentation des objets en python est très proche des notions initiales de - classes issues du Smaltalk et présente une tentative très intéressante - d'unification des objets et des types depuis python 2.2 ; - -- Java (1995) : très grosse réussite industrielle en surfant sur la vague de la - programmation objet, et des machines virtuelles, mais en fait et avec le recul, - doté d'un support objet lourd et alambiqué. - Le monde Java est lourd, avec des outils consommant beaucoup de mémoire et - qui ne satisfont pas à la règle du KISS (Keep It Simple, Stupid) ; - - -Il n'y a pas **une** POO (Programmation Objet), il y a des POO. -Les implémentations objets dans les langages sont riches et variées : - -- objets obligatoirement construits pas des classes (Java, C++, ...) -- objets sans définition de classes (javascript, Ocaml, go, rust) -- langages à attributs (python) -- langages ou le type des objets est défini par leur classe (python, ruby) -- langages ou le type des objets est différent du type de leur classe (Ocaml) -- objets sans classes mais construits par des prototypes (javascript) -- construction d'objets possibles objets sans classe du tout (Ocaml) -- encapsulation des attributs des objets (Java, Ocaml, C++, PHP) -- pas d'encapsulation des attributs (python, ruby, javascript...) - -Le paradigme impératif -~~~~~~~~~~~~~~~~~~~~~~ - -Un programme est une suite d'états de la mémoire de l'ordinateur, -c'est la suite logique des machines de Turing. -La plupart des programmeur aujourd'hui raisonnent suivant ce paradigme, -et ont une très faible visibilité par rapport aux autres paradigmes existants. -Seuls les programmeurs cultivés sont aujourd'hui capable de raisonner -suivant différents paradigmes, ce sont des programmeurs chevronnés et -cultivés. - -Le paradigme fonctionnel -~~~~~~~~~~~~~~~~~~~~~~~~ - -La notion de fonction que possède sous une forme ou une autre la plupart des -langages est empruntée aux mathématiques et non à l'électronique. D'une manière -générale, les langages substituent des modèles formels aux conceptions purement -calculatoires. Ils y gagnent en expressivité. Certains langages fondent leur -paradigme de programmation sur l'abstraction entrée-traitement-sortie, donc sur le -**mathème fonctionnel** et pas sur la boite noire électronique. La fonction -mathématique apporte un niveau opératoire dans le traitement de l'information. - - -Approche par fonctionnalités ----------------------------- - -Plusieurs domaines de l'informatique on proposé/imposé des méthodologies, -des manières de faire. Ces modèles de programmation on fortement influencé -en retour les langages. On reconnaît aujourd'hui : - -- Le modèle client-serveur -- Le modèle de programmation concurrente (exécution de processus légers, threads) : -- Le modèle de développement d'une application de bureau (MVC, ergonomie d'interface) -- Le modèle de développement web (communiquer sur le réseau Internet, API - REST, microservices...) -- Le modèle de programmation système et réseau -- le modèle **Dev Ops** et les méthodes de développement virtualisés -- les langages présentant des **fonctionnalités agiles** - -Conclusion ------------ - -Les langages de haut niveau sont caractérisés par -des concepts tels que : - -- déclaration de valeurs, types, expressions, portée -- expressions, variables, instructions, structures de contrôle -- fonctions, procédures, fermetures -- encapsulation, modules, objets - -=========== ============ -Paradigmes Concepts -=========== ============ -impératif variables, procédures, modules -objets classes, méthodes, héritage, surcharge -fonctionnel fonctions, fermetures, modules -logique prédicats, modules -concurrent tâche/processus, communication -=========== ============ diff --git a/poo/cours/modularite.txt b/poo/cours/modularite.txt deleted file mode 100644 index 276d12d..0000000 --- a/poo/cours/modularite.txt +++ /dev/null @@ -1,200 +0,0 @@ -La programmation structurée -============================= - -Un langage de programmation doit permettre la programmation structurée. - -.. important:: La structuration et l'organisation modulaire sert à maintenir de grands programmes, - Elles sont une nécessité - -Structuration d'un programme ------------------------------ - -La réalisation d'applications importantes oblige le programmeur ou l'équipe de -développement à se poser des questions d'organisation et de structuration. -Aujourd'hui, on dispose de deux grands modèles d'organisation dont les avantages et les -particularités sont distincts. - -L'écriture des vrais programmes consiste à les structurer pour les présenter -comme un assemblage de briques qui s'emboîtent naturellement. -Ce problème se révèle fondamental dès que la taille des programmes devient conséquente. -Si on ne prend pas garde au bon découpage des programmes en modules indépendants, -on se retrouve rapidement débordé par un grand nombre de variables, -et il devient quasiment impossible de réaliser un programme correct. - -La programmation raisonnée ---------------------------- - -Un **programme** est le codage d'un algorithme dans un langage de programmation. -La programmation consiste à modéliser un problème du monde réel sous une forme -symbolique (pour faire résoudre ce problème par un ordinateur). - -Certains problèmes sont **indécidables** ou **ouverts**. -On utilise un langage de programmation pour décrire la **solution** du programme. -La sémantique du programme est le sens de chacune des constructions du langage. -**Comment passer de l'énoncé d'un problème à un programme de bonne qualité ?** - -spécifier - - décrire de manière complète et rigoureuse le problème à résoudre - -modéliser - - proposer une représentation du réel qui soit accessible au calcul - algorithmique - -transcrire - - La transcription du modèle algorithmique se fait dans un langage - de programmation cible adapté au problème - -valider - - La validation du programme est une étape qui permet de s'assurer plus ou - moins fortement que le programme produit les résultats attendus. - La validation va de la série de tests unitaires (validation faible) - à la preuve de programme (validation mathématique forte). - -Conception descendante ------------------------ - -Une vision **centripète** : du général au particulier. - -Il s'agit d'une méthode de résolution d'un problème. On le découpe en tâches -de plus en plus fines, de plus en plus détaillées, qui aboutiront au programme final. - -On met des *trous* dans les algorithmes de plus haut niveau, -c'est-à-dire des phrases en langage naturel. - -.. ifconfig: exercice - - **Exercice** : **Calculer la date du lendemain** - -.. ifconfig: correction - - - l'algorithme de plus bas niveau - - :: - - lendemain jour = - si jour [est le dernier jour du mois] alors - resultat = [calculer le 1er janvier de l'année suivante] - sinon - resultat = lendemain_dansl'année jour - - - les algorithmes de plus bas niveau - - :: - - lendemain_dans_l'année jour = - si jour [est le dernier jour du mois] alors - resultat = [calculer le premier jour du mois suivant] - sinon - resultat = jour suivant jour - - :: - - jour_suivant jour = - jour + 1 - - et ainsi de suite jusqu'à ce que toutes les phrases soient calculables. - -Algorithme vague --------------------- - -L'algorithme vague, c'est quand on pense l'algorithme en se plaçant du côté de -l'implémentation en premier. On a le nez dans le guidon, la vue d'ensemble est -difficile. - -Voici, tiré du monde réel, un exemple d'algorithme vague -("ce que doit faire une fonction"), placé dans un bout de code -(souvent la **docstring** d'une fonction). - -.. code-block:: python - - def upsert_route(*args, **kwargs): - """ - Create or modify an existant DHCP route - param tuple (id or null, machine name, IP, MAC Adress) - return True or False with error message - """ - # si id présent alors modification sinon ajout - # récupère la liste des réservations en cours - # y cherche la variable sur la base de l'ID - # modifie les valeurs - # applique la nouvelle conf DHCP - - return True - -Voici un autre bout de code avec l'algorithme en commentaire, -et l'implémentation effective de l'algorithme - -.. code-block:: python - - def del_route(*args, **kwargs): - """ - Delete an existant DHCP route - param tuple (id, machine name, IP, MAC Adress) - return True or False with error message - """ - # récupère la liste des réservations en cours - # y cherche la variable sur l'id donné en paramètre - # supprime l'entrée avec vérification que les données fournies - # sont bien dans l'enregistrement à supprimer - # applique la nouvelle conf DHCP - route_to_del = (1, "host2","10.1.2.4","6E:FF:56:A2:AF:17") - routes = get_routes() - if route_to_del in routes: - c = creole_loader(load_extra=True, rw=True) - c_id = c.dhcp.dhcp.id_dhcp.id_dhcp.index(route_to_del[0]) - if c.dhcp.dhcp.id_dhcp.macaddress[c_id]==route_to_del[2] - and c.dhcp.dhcp.id_dhcp.ip[c_id]==route_to_del[1]: - c.dhcp.dhcp.id_dhcp.id_dhcp.pop(c_id) - config_save_values(c, MODNAME) - return True - return False - -Les deux grands paradigmes ---------------------------- - -La modularité -~~~~~~~~~~~~~~ - -Les données et les traitements sont regroupés au sein d'une même entité à deux -facettes : d'un côté le code proprement dit, de l'autre son interface. La -communication entre modules s'effectue via leur interface. La description d'un -type peut être masquée en n'apparaissant pas dans l'interface du module. Ces -types de données abstraits facilitent les modifications d'implantation à -l'intérieur d'un module sans affecter les autres modules qui s'en servent. De -plus, les modules peuvent être paramétrés par d'autres modules augmentant -ainsi leur réutilisabilité. - -Le paradigme objet -~~~~~~~~~~~~~~~~~~ - -Les descriptions des traitements et des données sont regroupées dans des -entités appelées **classes**; un objet est une instance (valeur) d'une classe. -La communication entre objets est réalisée par envoi de message, l'objet -receveur détermine à l'exécution (liaison retardée) le traitement -correspondant au message. En cela, la programmation objet est dirigée par -les données. La structuration d'un programme provient des relations entre -classes, en particulier l'héritage permet de définir une classe par extension -d'une autre. - -En programmation objet, un **programme** est une collection d’objets qui communiquent -entre eux par **message**, le **résultat** est un message envoyé à un objet particulier - -Comparaison entre les deux paradigmes -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Il y a dualité entre ces deux modèles. - -- On ne peut pas augmenter les composants d'un type dans un module (pas - d'extensibilité des données), mais on peut ajouter de nouveaux traitements - (extensibilité des traitements) sur ces données. - -- En objet, on peut ajouter des sous-classes à une classe (extensibilité des - données) pour traiter des nouveaux cas, mais on ne peut pas ajouter de nouveaux - traitements visibles de la classe ancêtre (pas d'extensibilité des traitements). - -**La combinaison des deux paradigmes offre de nouvelles extensibilités pour les -traitements et les données.** diff --git a/poo/cours/modules.txt b/poo/cours/modules.txt deleted file mode 100644 index 5df4b5e..0000000 --- a/poo/cours/modules.txt +++ /dev/null @@ -1,313 +0,0 @@ -La programmation modulaire -=========================== - -Il s'agit de décomposer un grand programme en -morceaux (**modules**) connectés entre eux par des **interfaces** bien -définies. - -Ces modules doivent être aussi indépendants que possible. - -module - - ensemble de ressources liées sémantiquement - -interface - - mode d’emploi du module, avec en plus un principe de masquage - des informations (partie publique, partie secrète) - - -Signatures, type abstrait et langage de modules : la programmation modulaire -permet d'aller très loin dans la programmation structurée. - - -Définir des fonctions dans un fichier séparé --------------------------------------------- - -Les fonctions peuvent être définies dans un fichier et le programme dans un -autre fichier séparé. Dans ce cas, pour pouvoir être exécuté directement avec -la commande python `nomfichierprogramme.py`, le fichier du programme doit -importer d’abord les fonctions du fichier dans lequel les fonctions sont -définies. - -1. Fichier de fonctions -~~~~~~~~~~~~~~~~~~~~~~~~ - -.. code-block:: python - - # Fichier foncmaxliste.py - # Recherche le premier élément maximal dans une liste ou - #dans une chaine de caractères - def max_list(L) : - k = len(L) - max, x = L[0], 0 - i = 1 - while i < k : - if max < L[i]: - max = L[i] - x = i - i = i + 1 - return max, x - -2. Fichier de programme -~~~~~~~~~~~~~~~~~~~~~~~~ - -Pour utilser les fonctions définies dans d’autres fichiers, le fichier de -programme doit commencer par les instructions qui importent ces fichiers de -fonctions ou directement les fonctions de ces fichiers. Dans la syntaxe -ci-dessous, on importe une ou toutes les fonctions du fichier `foncmaxlist.py`. - -.. code-block:: python - - # Fichier progmaxlist.py - from foncmaxliste import max_list - # ou plus simple: - # from foncmaxliste import * - print max_list([4,5,6,9,12,5,10,3,18,5,6,7]) - couple = max_list([4,5,6,9,12,5,10,3,18,5,6,7]) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - print max_list(’totovaaumarche’) - couple = max_list(’totovaaumarche’) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - -Au lieu d’importer les fonctions, on peut importer le fichier qui définit les -fonctions avec la syntaxe qui suit. Dans ce cas, le fichier de programme sera -changé comme suit : - -.. code-block:: python - - # Fichier prog2maxlist - import foncmaxliste - print foncmaxliste.max_list([4,5,6,9,12,5,10,3,18,5,6,7]) - # la syntaxe indiquant le chemin d’acces a la fonction max_list utiliser ‘‘.’’ - couple = foncmaxliste.max_list([4,5,6,9,12,5,10,3,18,5,6,7]) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - print foncmaxliste.max_list(’totovaaumarche’) - couple = foncmaxliste.max_list(’totovaaumarche’) - print ’Max de L est ’, couple[0] - print ’et se trouve à la position ’, couple[1] - -L’exécution directe du premier fichier de programme:: - - python prog max list.py - -L’exécution directe du seconde fichier de programme:: - - python prog2 max list.py - -Définition de l'implémentation d'un module -------------------------------------------- - -Tout fichier qui contient au moins une définition d’une fonction ou d’une -variable est appelé un module (une bibliothèque). Le nom du module est le nom -du fichier enlevé le suffixe `.py`. Ainsi, un fichier de programme qui contient -au moins une définition d’une fonction ou un fichier qui ne contient que des -définition de fonctions sont des modules. On peut importer un module ou des -fonctions ou variables d’un module dans un programme, comme nous avons vu dans -les exemples ci-dessus. - -.. important:: on peut importer un module, ou bien lancer un module en tant que - programme executable - -.. code-block:: python - - if __name__ == '__main__': - main() - -Pour faciliter la programmation, Python définit un certain nombre de **modules internes**, -appelés les builtins (la librairie standard). - -Par exemple : - -– Lors de l’ouverture d’une session interactive, on est dans un module interne nommé - main . Toutes les variables définies par affectation au niveau de ce module sont valides - globalement dans la session. - -– D’autres modules internes sont string, math, random - -Dans une session de travail sous l’interpréteur Python, la première importation d’un mo- -dule qui, à part des fonctions qu’elle définit, contient des instruction de programme fait -exécuter ces instructions. Dans la même session, les importations suivantes ne font pas -exécuter ces instructions. Pour les exécuter, on utilise la fonction reload(nomdumodule) -(sans sufffixe .py). - -Exemples d'interface --------------------- - -:: - - type: son type - arguments - arg1 : description de l'argument 1 - arg2 : description de l'argument 2 - préconditions: - arg1 > 10 - postconditions: - result < 19 - raises: TypeError, AssertionError, SystemError... - test: tests nominaux pour chaque cas spécifié - -- L'interface racine carrée - -:: - - racine: - type: float -> float - arguments x: float, flottant dont on veut calculer la racine - pré: x >= 0 - test: racine 25.0 -> 5.0 ; racine (-25) -> raises TypeError - -- L'interface `lendemain` - -Il faut définir auparavant un type spécifique appelé `date` - -:: - - lendemain: le lendemain est la date qui désigne - le jour suivant de la date passée en argument - type: date -> date - arguments : - d: date - description: la date dont on veut calculer le lendemain - -Le langages des modules -------------------------- - -.. code-block:: ocaml - - module type PILE = (* signature (interface) du module *) - sig - type ’a t - val create : unit -> ’a t - val push : ’a -> ’a t -> unit - val pop : ’a t -> ’a - end - - (* implémentation du module *) - module Pile : PILE = (* le module est restreint - par la signature PILE *) - struct - type ’a t = ’a list ref - let create () = ref [] - let push x p = p := x::!p - let pop p = match !p with [...] - let rec print p = match p with [...] - end - -- `struct .. end` introduit une collection de définitions, valeurs, types ou modules. - C'est une **structure**. - -- `module Nom = struct .. end` permet de donner un nom à cette structure et - c'est ça un module. C'est une structure nommée. - -- `sig ... end` introduit une signature de module : une interface pour un module. - -On restreint souvent une structure par une signature pour "cacher" certaines -définitions. Une signature de module fournit une **interface** entre l'extérieur -et l'intérieur d'un module. - -En dehors du module, on accède à ses composants grâce à la notation pointée - -.. code-block:: ocaml - - let p = Pile.create() - Pile.push 45 p - -Les foncteurs --------------- - -Si un langage possède un langage de modules, on peut aller plus loin : on peut -considérer un module comme étant une expression de base du langage. - -- La signature d'un module peut être considérée comme le type du module -- La structure du module peut être considéré comme sa valeur - -Quel est l'intérêt ? On peut alors définir des **foncteurs**. - -foncteur - - "fonction" d'une structure vers une autre structure. - On peut ainsi paramétrer un module par un autre module. - -.. code-block:: ocaml - - module Nom (M1 :S1 ) (M2 :S2 ) (M3 :S3 ) ... = - struct - ... - end - -On applique un foncteur à des paramètres modules, pour -obtenir un nouveau module : - -.. code-block:: ocaml - - module M = F (Titi) (Toto) - - -Contrainte de type par signature ------------------------------------- - -:: - - module M = - struct - type t = int * int * int ;; - let make d m y = d, m, y ;; - end ;; - - let d = M.make 8 5 8 ;; - - module type S = - sig - type t ;; - val make : int -> int -> int -> t ;; - end ;; - - module MS = (M:S) ;; - - MS.make 5 1 2 ;; - -Type et signature ------------------- - -:: - - # module type A = sig - val a: int -> int - end ;; - module type A = sig val a : int -> int end - # module B = struct - let a x = x + 1 ;; - end;; - module B : sig val a : int -> int end - # module C = (B:A) ;; - module C : A - - # C.a 2 ;; - - : int = 3 - # - -Module auquel on impose une signature ------------------------------------------ - - -:: - - module type DATE = sig - type t - val make: int -> t - val get_year: t -> int - val get_month: t -> int - end ;; - - module MR = struct - type t = int * int - let make x y = (x, y) - let get_month (x, y) = x - let get_year (x, y) = y - end ;; - - module date = (MR:DATE) ;; diff --git a/poo/cours/presentation.txt b/poo/cours/presentation.txt deleted file mode 100644 index 6263f9e..0000000 --- a/poo/cours/presentation.txt +++ /dev/null @@ -1,72 +0,0 @@ -Avant propos -============ - -Introduction -~~~~~~~~~~~~ - -| "**Que nul n'entre ici s'il n'est géomètre**" -| Maxime apposée au porche d'entrée de l'École de Platon - - -- L'accent est mis sur l'approche **algorithmique scientifique**, dite algorithmique - algébrique. L'algorithmique est un sous-domaine de l'algèbre et des - approches modulaires (arithmétique modulaire...) - -- Le point de vue mathématique étant assez exigeant, **aucun formalisme fort** de - l'algorithmique mathématique ne sera présenté. Aucun symbole mathématique donc, et - seulement du pseudo-code. - L'approche mathématique forte utilisant le formalisme mathématique de - l'algorithmique algébrique est en général enseignée en France uniquement aux cours - des grandes écoles. - -- L'algorithmique présentée ici est donc délibérément pseudo-scientifique mais en revanche - ouverte au **multi-paradigme**. En général l'évocation d'un algorithme en pseudo code est toujours - réducteur car limité au style de programmation le plus à la mode actuellement, c'est-à-dire le - **style impératif**. Nous présenterons un éventail des plus grands paradigmes de programmation - existants. Nous nous limiterons à la **programmation impérative, fonctionnelle, modulaire, - générique et objet**. Nous envisagerons les structures de données et les structures de contrôle - spécifiques à chacun des styles évoqués. - -- Et parce qu'un honnête programmeur doit avoir une vue d'ensemble de **l'état de son art**, - nous évoquerons un panorama des différents langages existants -- historiques et contemporains -- - en les comparants les uns aux autres. - -- Durant tout le cours, nous souhaitons proposer une pédagogie par l'exemple, et nous - limiterons l'exposé à deux langages d'implémentation des algorithmes : le **Python** pour la programmation - impérative modulaire et objet, et le **OCaml**, car nous évoquerons aussi certains points - de programmation fonctionnelle et modulaire, polymorphe et teintée de généricité. - -Intérêt -------- - - -| "**Il ne suffit pas d'avoir les mains propres, il faut avoir l'esprit pur.**" -| Thalès de Milet ; Sentences - VIe s. av. J.-C. - -L'algorithmique en tant que rapport à la vérité et à la pensée juste et vraie, -en tant qu'art de découper un problème complexe en tâches élémentaires, -en tant qu'énoncés de compréhension et de sémantique, -est la seule chose vraiment profonde dans l'informatique. Le reste n'est que 0 ou 1. -Cette notion d'algorithme est profondément enracinée dans le désir humain de -transmettre des méthodes pour comprendre des problématiques, -qu'il s'agisse de processus scientifiques ou mathématiques, de secrets, -de philosophie ou de divination au sens des anciens Grecs. -De règles linguistiques, aussi, chez les Romains. - -Objectifs de ce cours -~~~~~~~~~~~~~~~~~~~~~ - -Il s'agit de : - -- maîtriser et concevoir un algorithme de base, -- choisir une représentation appropriée des données, -- décomposer en sous-problèmes et affinements successifs, -- savoir organiser son code en fonctions et en modules. - -Le développement raisonné d’algorithmes et leur implantation -permet d'acquérir les qualités suivantes : - -+ Analyser et modéliser un problème, spécifier, -+ Exprimer une problématique, une solution ou un algorithme, -+ Traduire un algorithme dans un langage de programmation, -+ Concevoir une réponse à un problème précisément posé. diff --git a/poo/cours/programme.txt b/poo/cours/programme.txt deleted file mode 100644 index 6133cf1..0000000 --- a/poo/cours/programme.txt +++ /dev/null @@ -1,476 +0,0 @@ -Définition d'un programme -========================== - -Qu'est-ce qu'un programme ? ----------------------------- - -- Un **programme** est une suite de **phrases** ; -- Une **phrase** est une **déclaration** ou une **expression** (*statement* en anglais) ; - -Production d'un programme : - -1. on écrit le code source du programme ; -2. on demande au compilateur de le traduire en code machine : c'est la compilation du programme ; -3. on demande à la machine d'effectuer le code machine : c'est l'exécution du programme. - -.. important:: - - L'introduction à la compilation et les différentes phases de la compilation - d'un programme sont des sujets qui ne seront pas traités dans ce cours. - -Dans un programme de base, il y a deux fichiers : - -1. un fichier contenant le code : c'est le source du programme. -2. un fichier contenant le code machine : c'est l'exécutable. - -Que peut faire un programme lorsqu'il est exécuté ? -Le programme doit communiquer. S'il reste isolé, il ne pourra pas -produire quoi que ce soit. Voici les trois moyens de communication qu'a un -programme : - -1. communiquer avec l'utilisateur, -2. communiquer avec des fichiers, -3. communiquer avec d'autres programmes. - -Les expressions ----------------- - -expression - - Une expression est une valeur caculée du langage, une opération arithmétique - qui retourne une valeur (entier, texte, valeur logique...). - C'est donc une suite sémantiquement correcte de **valeurs de base** et **d'opérateurs** - -Par exemple, la ligne suivante est une expression effectuant une addition:: - - 5 + 6 - -Expressions à partir de types de base -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Autres exemples d'expressions : - -- 5 est une expression de type int -- 4.5 est une expression de type float -- 'c' est une expression de type char -- true est une expression de type bool -- print ('c') est une expression de type None -- raw_input est une expression de type string - -Les expressions se complexifient avec la complexification des données et des traitements, -mais le principe de l'expressivité d'un langage reste le même. - - -.. ifconfig:: exercice - - **Exercice** : - Le parenthésage et les opérateurs booléens:: - - Variables A, B, C, D, E en Booléen - Variable X en Entier - Début - Lire X - A <- X > 12 - B <- X > 2 - C <- X < 6 - D <- (A ET B) OU C - E <- A ET (B OU C) - Ecrire D, E - Fin - - **Que valent D et E si X = 3 ?** - - -.. ifconfig:: correction - - **Correction** : D sera VRAI alors que E sera FAUX - - - - -Les déclarations ------------------ - -Un autre exemple d'expression : - -.. raw:: latex - - \begin{algorithm} - \caption{Exemple d'expression} - \begin{algorithmic}[1] - \BState \emph{sortie}: $l$ \Comment{C'est l'expression calculée renvoyée} - \ForAll {$v \in V(G)$} - \State $l(v) \leftarrow \infty$ - \EndFor - \State $l(u) \leftarrow 0$ - \Repeat - \For {$i \leftarrow 1, n$} - \State $min \leftarrow l(v_i)$ - \For {$j \leftarrow 1, n$} - \If {$min > e(v_i, v_j) + l(v_j)$} - \State $min \leftarrow e(v_i, v_j) + l(v_j)$ - \State $p(i) \leftarrow v_j$ - \EndIf - \EndFor - \State $l(i) \leftarrow min$ - \EndFor - \State $changed \leftarrow l \not= l’$ - \State $l \leftarrow l$ - \Until{$\neg changed$} - \end{algorithmic} - \end{algorithm} - -Exemple de déclarations : - -- `a = 1` -- `b = 'c'` - -.. important:: Le signe égal est utilisé de deux manières - - - lors d'une déclaration d'une expression - - lorsque deux expressions sont équivalentes - - Suivant les langages, il y a deux symboles différents, ou alors - ils sont identiques. - -Il s'agit de **renseigner** une valeur dans une expression nommée - -- en javascript : - -.. code-block:: javascript - - var b = "blabla" ; - -- en python : - -.. code-block:: python - - b = "blabla" - -- en java : - -.. code-block:: java - - String b = "A"; - -- en OCaml : - -.. code-block:: ocaml - - let a = 1 - -Grâce au mécanisme d'inférence de type dans OCaml, le mot-clef **let** -signifie ici véritablement l'instanciation d'une valeur au sens -mathématique du terme : soit `a` l'entier tel que a soit égal à 1... - -En OCaml comme dans tous les langages fonctionnels, tout ce que nous avons l'habitude -d'appeler des "variables" à propos des affectations, sont en fait des **constantes** -au sens du paradigme impératif de la programmation. - -.. important:: - - Par voie de conséquence, le symbole ``=`` est utilisé à la fois pour la définition des objets et pour le test d'égalité. - Pour les autres langages, on utilise `==` ou bien `===` (javascript) car - le `=` est sémantiquement déjà utilisé... - -Toutes ces notation, apparemment anodines, correspondent donc à des paradigmes de programmation - -Lorsqu'on ne déclare pas les types des symboles déclarés, c'est que soit - -- le typage est faible -- le typage est dynamique (calcul du type en fonction du contenu de la - variable) -- le typage est statique et fort mais ça ne se voit pas - (var le système les calcule automatiquement par inférence de type) - -Assigner, allouer, affecter une chose à quelqu'un ou à une autre chose. - -Exemples dans la langue française : - -- Le traitement que le budget **alloue** à ces fonctionnaires. -- Un système d'exploitation multitâche alloue le travail du processeur aux processus en attente, pour un bref laps de temps, à leur tour. - -.. glossary:: - - affectation - - Une affectation, aussi appelée assignation par anglicisme, est une structure qui permet d'attribuer une valeur à une variable. - - Il s'agit d'une structure particulièrement courante en programmation impérative, et dispose souvent pour cette raison d'une notation courte et infixée, - comme ``x = expr`` ou ``x := expr`` ou encore `x <- expr`. - Dans certains langages, le symbole est considéré comme un opérateur d'affectation, - et la structure entière peut alors être utilisée comme une expression. - D'autres langages considèrent une affectation comme une instruction et ne permettent pas cet usage. - -Voir aussi : - -- Les déclarations de types primitifs et conversions de type -- Les types de base:: - - Octets (8 bits) byte - Entiers courts (16 bits) short - Entiers (32 bits) int - Entiers longs (64 bits) long - Réels (32 bits) float - Réels longs (64 bits) double - Caractères (16 bits) char - Booléens boolean - -- Déclarations par lots:: - - x1 = e1, x2 = e2, ... xn = en; - -Exercices : algorithmes sur les affectations - -.. ifconfig:: exercice - - **Exercice** : Calculs d'affectation:: - - Variables A, B, C en Entier - Début - A <- 3 - B <- 10 - C <- A + B - B <- A + B - A <- C - Fin - -.. ifconfig:: correction - - **Correction**:: - - Après La valeur des variables est : - A <- 5 A = 5 B = ? - B <- 2 A = 5 B = 2 - A <- B A = 2 B = 2 - B <- A A = 2 B = 2 - -.. ifconfig:: exercice - - **Exercice** : Calculs d'affectation - Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ? - :: - - Variables A, B en Entier - Début - A <- 5 - B <- 2 - A <- B - B <- A - Fin - -.. ifconfig:: correction - - **Correction**:: - - Après La valeur des variables est : - A <- 5 A = 5 B = ? - B <- 2 A = 5 B = 2 - A <- B A = 2 B = 2 - B <- A A = 2 B = 2 - -.. ifconfig:: exercice - - **Exercice** : écrire un algorithme permettant d’échanger les valeurs - de deux variables A et B, et ce quel que soit leur contenu préalable. - -.. ifconfig:: correction - - **Correction**:: - - Début - A <- n - B <- p - C <- A - A <- B - B <- C - Fin - - Il faut passer par une variable dite temporaire (la variable C) - - -.. ifconfig:: exercice - - **Exercice** : - Que produit l’algorithme suivant ? - - :: - - Variables A, B, C de type entier - Début - A <- 423 - B <- 12 - C <- A + B - Fin - -.. ifconfig:: correction - - **Correction** : dans un prompt python - - .. code-block:: python - - >>> a = 423 - >>> b = 12 - >>> c = a + b - >>> c - 435 - -.. ifconfig:: exercice - - **Exercice** : - Que produit l’algorithme suivant ? - - :: - - Variables A, B, C de type texte - Début - A <- "423" - B <- "12" - C <- A + B - Fin - -.. ifconfig:: correction - - **Correction** : dans un prompt python - - .. code-block:: python - - >>> a = '423' - >>> b = '12' - >>> c = a + b - >>> c - '42312' - -Interaction avec l'utilisateur ------------------------------- - -Il est possible de communiquer de la manière suivante avec un programme : - -- lire et écrire sur l'entrée/sortie standard -- lire et écrire dans un fichier -- afficher (du texte, un nombre...) -- lire (du texte, un nombre...) -- interagir avec les prompts - - -.. code-block:: ocaml - - let x = read_int () in - let signe = - if x >= 0 - then " positif " - else " négatif " in - print_string signe - - -.. ifconfig:: exercice - - **Exercice** : écrire un algorithme qui demande le prénom d'une personne - et renvoie "bonjour, je m'appelle " - -.. ifconfig:: correction - - **Correction** : (implémentation en python) - - .. code-block:: python - - # coding: utf-8 - prenom = raw_input("quel est ton prénom ? \n") - print("bonjour, je m'appelle " + prenom.capitalize()) - - -La REPL (boucle d'interaction) -------------------------------- - -.. glossary:: - - REPL - - Read Eval Print Loop : outil principal de communication avec un programme - ou avec un système. Exemples : la console python, le prompt OCaml. - - interface - - outil de communication avec un programme. - - - interface texte - - interface graphique - -**Exemples de REPL** - -Le prompt python:: - - Python 2.7.12 (default, Nov 19 2016, 06:48:10) - [GCC 5.4.0 20160609] on linux2 - Type "help", "copyright", "credits" or "license" for more information. - >>> - >>> dir() - ['__builtins__', '__doc__', '__name__', readline', 'rlcompleter'] - >>> - -Le prompt ipython:: - - Python 2.7.12 (default, Nov 19 2016, 06:48:10) - Type "copyright", "credits" or "license" for more information. - - IPython 2.4.1 -- An enhanced Interactive Python. - ? -> Introduction and overview of IPython's features. - %quickref -> Quick reference. - help -> Python's own help system. - object? -> Details about 'object', use 'object??' for extra details. - - In [1]: - -Le prompt OCaml (utop):: - - Type #utop_help for help about using utop. - - ─( 09:21:24 )─< command 0 >── - utop # - # let x = 1 in x + 2;; - - : int = 3 - # let y = 1 + 2;; - val y : int = 3 - # y * y;; - - : int = 9 -Construire une boucle d'interaction avec l'utilisateur en python:: - - #!/usr/bin/env python3 - error = True - while error: - try: - entier = int(input('donnez un entier : ')) - error = False - except: - print('une valeur entiere est attendue') - print(entier) - -Lire et écrire dans un fichier ------------------------------- - -Les descripteurs de fichiers (file handle) - -Exemple en python - -.. code-block:: python - - >>> fh = file("test.txt", "w") - >>> fh.write("un contenu exemple") - >>> fh.close() - >>> - -.. code-block:: python - - >>> fh.read() - 'un contenu exemple' - >>> fh.close() - >>> - -Linéarisation (serialisation) de données par exemple en json - -.. code-block:: python - - import json - data = dict(a='essai', b='essai2', c=range(3)) - with open('data.txt', 'w') as outfile: - json.dump(data, outfile) diff --git a/poo/cours/tp.txt b/poo/cours/tp.txt deleted file mode 100644 index 3d3ebd5..0000000 --- a/poo/cours/tp.txt +++ /dev/null @@ -1,101 +0,0 @@ -Travaux Pratiques -================= - -.. ifconfig:: exercice - - **travaux pratiques :** - - Ecrire un algorithme qui renvoie le résultat d’une mini-calculatrice. Cette - méthode aura - comme paramètre deux nombres et une chaîne de caractère qui vaudra « + », « - - », « * », - « / ». - -.. ifconfig:: exercice - - **travaux pratiques :** - - - Ecrire un algorithme qui renvoie si deux mots (chaîne de caractères) passés en - paramètre - sont des anagrammes l’un de l’autre. (Lettres identiques mais dans un ordre - différent) - - -.. ifconfig:: exercice - - **travaux pratiques :** - - ascii art (ligne d'étoiles) - - Concevoir un algorithme qui, pour un caractère imprimable et un nombre n - donnés, imprime une barre - horizontale de n de ces caractères. - - ``****************`` - - 2. Modifier l’algorithme pour l’impression d’une barre double. - - :: - - **************** - **************** - - 3. Modifier l’algorithme pour l’impression d’une barre d’épaisseur quelconque - donnée. - 4. (optionnel) Transformer les algorithmes ci-dessus en fonctions. - 5. Écrire un programme Java implémentant la dernière version de l’algorithme - (épaisseur quelconque). - - 3.3 - Triangle de nombres - Concevoir un algorithme qui imprime pour n donné:: - - 1 - 1 2 - 1 2 3 - 1 2 3 4 - 1 2 3 4 5 - ........... - ............. - ............... - 1 2 3 4 5 6 ... n - -.. ifconfig:: exercice - - **travaux pratiques :** - - code de césar : faire un programme pour chiffrer et déchiffrer par décalage - - exemples : Effectue une rotation de x caractères vers la droite:: - - >>> print(chiffre('bonjour', 3)) - erqmrxu - >>> print(chiffre('Bonjour les amis!', 3)) - Erqmrxu ohv dplv! - >>> print(chiffre('Erqmrxu ohv dplv!', 23)) - Bonjour les amis! - -.. ifconfig:: exercice - - **travaux pratiques :** - - :: - - écrire “Entrer un numéro de mois” - mois <- lire - selon que mois est - cas 1 : écrire “janvier (31 jours)” - cas 2 : écrire “février (28 ou 29 jours)” - cas 3 : écrire “mars (31 jours)” - cas 4 : écrire “avril (30 jours)” - cas 5 : écrire “mai (31 jours)” - cas 6 : écrire “juin (30 jours)” - cas 7 : écrire “juillet (31 jours)” - cas 8 : écrire “août (31 jours)” - cas 9 : écrire “septembre (30 jours)” - cas 10 : écrire “octobre (31 jours)” - cas 11 : écrire “novembre (30 jours)” - cas 12 : écrire “décembre (31 jours)” - défaut : écrire “numéro invalide” - fselon diff --git a/poo/diapos/Makefile b/poo/diapos/Makefile deleted file mode 100644 index fd60fc0..0000000 --- a/poo/diapos/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -RST = python tools/rst.py - -TEXDOCUMENTS = $(basename $(wildcard *.tex)) -RSTDOCUMENTS = $(basename $(wildcard *.txt)) - -SOURCES = $(addsuffix .tex,$(TEXDOCUMENTS)) -DVI = $(addsuffix .dvi,$(TEXDOCUMENTS)) -POSTSCRIPT = $(addsuffix .ps,$(TEXDOCUMENTS)) -POSTSCRIPT_GZ = $(addsuffix .ps.gz,$(TEXDOCUMENTS)) -PDF = $(addsuffix .pdf,$(TEXDOCUMENTS)) -RSTSOURCES = $(addsuffix .txt,$(RSTDOCUMENTS)) -HTML = $(TEXDOCUMENTS) $(addsuffix .html,$(RSTDOCUMENTS)) - -all: dvi ps ps.gz html -dvi: $(DVI) -ps: $(POSTSCRIPT) -ps.gz: $(POSTSCRIPT_GZ) -pdf: $(PDF) -html: $(HTML) - - -${DVI}: %.dvi: %.tex - latex $< - latex $< - -${POSTSCRIPT}: %.ps: %.dvi - dvips -o $@ $< - -${POSTSCRIPT_GZ}: %.ps.gz: %.ps - gzip -c $< > $@ - -${PDF}: %.pdf: %.tex - rm -f $*.out $*.log $*.aux - xelatex $< - rm -f $*.out $*.log $*.aux - -%: %.tex %.dvi - latex2html -local_icons $< - touch $@ - -%.html: %.txt - $(RST) $< > $@ - - -clean: - rm -f -- *~ *.log *.aux *.out *.nav *.snm *.toc ${DVI} ${POSTSCRIPT} ${POSTSCRIPT_GZ} ${PDF} - rm -fr ${HTML} diff --git a/poo/diapos/beamer.tex b/poo/diapos/beamer.tex deleted file mode 100644 index 62eb264..0000000 --- a/poo/diapos/beamer.tex +++ /dev/null @@ -1,268 +0,0 @@ -\documentclass[ignorenonframetext]{beamer} -\usepackage{graphicx} -% Internal links only wors with second screen on the right -% \setbeameroption{show notes on second screen} -\usetheme{Madrid} -\usecolortheme{dolphin} - -% gets rid of bottom navigation bars -\setbeamertemplate{footline}[frame number]{} - -% gets rid of navigation symbols -\setbeamertemplate{navigation symbols}{} - -%\usetheme{Warsaw} -%\usepackage[french]{babel} -%\usepackage[utf8,utf8x]{inputenc} -%\usepackage[T1]{fontenc} - - -% Replace babel -\usepackage{polyglossia} -\setdefaultlanguage{french} - -%% Require XeTeX -\usepackage{xltxtra} -\usepackage{fontspec} -\usepackage{xunicode} - -\logo{ - \hspace{120pt} - \includegraphics[width=2cm]{img/cesi.jpg}~ - \hspace{113pt} - \includegraphics[width=1cm]{img/logo-cadoles.png}~ -} - - -%%\setbeamertemplate{background}{\includegraphics[width=128mm]{beamer-skel/img/banner01.png}} - -\title[]{Algorithmique} - -\subtitle{CESI alternance} -\subtitle{promotion GMSI B3} - -\author[Gwenaël Rémond]{} - -%\institute[E.O.L.E]{\includegraphics[width=2cm]{beamer-skel/img/logo-eole.png}} -\institute[Cadoles]{\includegraphics[width=2cm]{img/cesi.jpg}} - -%\date{{\small 8 avril 2013}} - -\subject{Talks} - -\AtBeginSection[] % Add a TOC with current section highlighted -{ - \begin{frame} - \frametitle{Plan} - \tableofcontents[currentsection] - \end{frame} -} - - -\usepackage{hyperref} -\usepackage{hyperxmp} -\hypersetup{% - colorlinks=true,linkcolor=blue,urlcolor=blue,pdfpagemode=UseNone, - pdftitle={EAD3}, - pdfsubject={Présentation technique d'EWT}, - pdfauthor={EOLE}, - pdfkeywords={EOLE, J-EOLE, distribution, GNU, Linux, Éducation, - nationale, Ubuntu}, - pdflang={fr-FR}, - pdfcopyright={Copyright © 2017 Équipe EOLE }, % Require XeTeX - pdflicenseurl={http://creativecommons.org/licenses/by-nc-sa/2.0/fr/}, -} - -\parskip=0.8em - -\begin{document} - -\frame{\titlepage} - -\section{Introduction} -\begin{frame} -\frametitle{Objectifs} - -\texttt{ - "Il ne suffit pas d'avoir les mains propres, \\ - il faut aussi avoir l'esprit pur."\\ -} -\emph{Thalès ; VIe s. av. J.-C.} - -\begin{itemize} -\item<1-> maîtriser et concevoir un algorithme, -\item<2-> choisir une représentation appropriée des données, -\item<3-> décomposer en sous-problèmes et affinements successifs, -\item<4-> savoir organiser son code et faire des petits programmes en python. -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{L'art de programmer} -\texttt{GEEK SUBLIME (Vikram CHANDRA) -Une vision esthétique, littéraire, mathématique du codage} - -\begin{itemize} -\item<1-> Programmer, c'est abstraire, prendre du recul. -\item<2-> Abstraire, par rapport à quoi ? Par rapport à la machine -\item<3-> Les niveaux d'abstraction par rapport à la machine -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{Les langages de programmation} -\begin{itemize} -\item Qu'est-ce qu'un langage de programmation ? -\item Les grands paradigmes de programmation (procédural, objet, fonctionnel, modulaire, générique \dots) -\item L'historique des langages. -\end{itemize} -\end{frame} - -\section{Algorithmique} -\begin{frame} -\frametitle{Les algorithmes} -\begin{itemize} -\item définition d'un algorithme -\item implémentation d'un algorithme -\item représentation d'un algorithme dans un langage cible -\end{itemize} -\end{frame} - -\section{Algorithmique pour la programmation} - -\begin{frame} -\frametitle{Qu'est-ce qu'un programme ?} -\begin{itemize} -\item <1-> Les expressions -\item <2-> Les déclarations -\item <3-> La REPL (Read Eval Print Loop) -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{Approche générale des fonctions} -\begin{itemize} -\item Les procédures -\item La portée d'une variable -\item Les fonctions -\end{itemize} -\end{frame} - - -\begin{frame} -\frametitle{Les structures de contrôle} -\begin{itemize} -\item Le branchement conditionnel -\item L'itération -\item \dots -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{Les structures de données} -\begin{itemize} -\item Les listes -\item Les dictionnaires -\item Les arbres, les graphes \dots -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{L'état de l'art de l'agorithmique} -\begin{itemize} -\item en mathématiques - \begin{itemize} - \item algorithmique algébrique, - \item arithmétique modulaire, - \item \dots - \end{itemize} -\item en informatique - \begin{itemize} - \item en informatique fondamentale - \item en langages de programmation - \item dans touts les domaines où l'informatique intervient\dots - \end{itemize} -\item en sciences physique, en biologie -\item en sciences sociales (réseaux sociaux, auto-organisation\dots) -\end{itemize} -\end{frame} - -\section{Programmation modulaire} -\begin{frame} -\frametitle{La programmation modulaire} -\begin{itemize} -\item La programmation raisonnée -\item Le paradigme modulaire vs le paradigme objet -\item exemple de programmation modulaire en python -\end{itemize} -\end{frame} - - - - -% Not present in TOC -\appendix - -\begin{frame}[label=thanks]{Remerciements} - - Je remercie la communauté du logiciel libre pour tous ces - merveilleux logiciels sans lesquels si peu de choses existeraient. - - Cette présentation a été réalisée grâce aux logiciels libres - suivants~: - - \begin{itemize} - \item Le système de composition \LaTeX{} - \href{https://fr.wikipedia.org/wiki/TeX_Live}{TeX Live} - \item L'éditeur de texte - \href{http://www.vim.org/}{Vim} - \item L'environnement graphique - \href{http://gnome.org/}{Gnome} - \item Le système d'exploitation - \href{https://debian.org/}{Debian} - \end{itemize} - - \begin{center} - % Do not mess with graphics - \hypersetup{hidelinks} - \begin{tabular}{cccccc} - \href{http://www.gnu.org}{\includegraphics[height=1.3cm]{graphics/gnu-head.pdf}} & - \href{http://www.kernel.org}{\includegraphics[height=1.2cm]{graphics/tux.pdf}} & - \href{http://www.debian.org/}{\includegraphics[height=1cm]{graphics/debian.eps}} & - \href{https://fr.wikipedia.org/wiki/TeX_Live}{\includegraphics[height=1cm]{graphics/texlive.pdf}} - \end{tabular} - \end{center} - -\end{frame} - -\begin{frame}[label=license]{Licence} - Cette présentation est mise à disposition sous licence\\ - \href{http://creativecommons.org/licenses/by-sa/4.0}% - {Creative Commons \textsc{by-sa 4.0}} - \begin{columns}[t] - \begin{column}{5.5cm} - \begin{itemize} - \item Attribution - \end{itemize} - \end{column} - \begin{column}{6.5cm} - \begin{itemize} - \item Partage dans les mêmes conditions - \end{itemize} - \end{column} - \end{columns} - Vous pouvez obtenir une copie de la licence - \begin{block}{par Internet} - \href{http://creativecommons.org/licenses/by-nc-sa/4.0}% - {\url{http://creativecommons.org/licenses/by-nc-sa/4.0}} - \end{block} - \begin{block}{par courrier postal} - \begin{quote} - Creative Commons\\ - 444 Castro Street, Suite 900 Mountain View,\\ - California, 94041, USA. - \end{quote} - \end{block} -\end{frame} - -\end{document} diff --git a/poo/diapos/graphics/Logo-EOLE.eps b/poo/diapos/graphics/Logo-EOLE.eps deleted file mode 100644 index 13f4889..0000000 --- a/poo/diapos/graphics/Logo-EOLE.eps +++ /dev/null @@ -1,133 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: cairo 1.14.8 (http://cairographics.org) -%%CreationDate: Tue May 16 12:20:58 2017 -%%Pages: 1 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%BoundingBox: 0 -1 232 85 -%%EndComments -%%BeginProlog -save -50 dict begin -/q { gsave } bind def -/Q { grestore } bind def -/cm { 6 array astore concat } bind def -/w { setlinewidth } bind def -/J { setlinecap } bind def -/j { setlinejoin } bind def -/M { setmiterlimit } bind def -/d { setdash } bind def -/m { moveto } bind def -/l { lineto } bind def -/c { curveto } bind def -/h { closepath } bind def -/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto - 0 exch rlineto 0 rlineto closepath } bind def -/S { stroke } bind def -/f { fill } bind def -/f* { eofill } bind def -/n { newpath } bind def -/W { clip } bind def -/W* { eoclip } bind def -/BT { } bind def -/ET { } bind def -/pdfmark where { pop globaldict /?pdfmark /exec load put } - { globaldict begin /?pdfmark /pop load def /pdfmark - /cleartomark load def end } ifelse -/BDC { mark 3 1 roll /BDC pdfmark } bind def -/EMC { mark /EMC pdfmark } bind def -/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def -/Tj { show currentpoint cairo_store_point } bind def -/TJ { - { - dup - type /stringtype eq - { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse - } forall - currentpoint cairo_store_point -} bind def -/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore - cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def -/Tf { pop /cairo_font exch def /cairo_font_matrix where - { pop cairo_selectfont } if } bind def -/Td { matrix translate cairo_font_matrix matrix concatmatrix dup - /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point - /cairo_font where { pop cairo_selectfont } if } bind def -/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def - cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def -/g { setgray } bind def -/rg { setrgbcolor } bind def -/d1 { setcachedevice } bind def -%%EndProlog -%%BeginSetup -%%EndSetup -%%Page: 1 1 -%%BeginPageSetup -%%PageBoundingBox: 0 -1 232 85 -%%EndPageSetup -q 0 -1 232 86 rectclip q -0.290196 0.247059 0.454902 rg -133.668 16.757 m 133.668 16.757 133.25 1.257 148.941 1.257 c 176.328 1.257 - l 170.723 3.749 168.633 5.874 164.891 10.585 c 150.969 10.585 l 147.234 - 10.585 145.441 13.222 145.441 17.538 c 145.441 17.538 145.492 75.363 145.414 - 75.445 c 142.301 82.999 133.668 84.519 133.668 84.519 c 133.668 83.995 -133.676 39.347 133.668 16.757 c h -133.668 16.757 m f -41.039 38.73 m 41.207 38.808 41.25 38.921 41.457 39.109 c 41.5 40.347 41.375 - 41.511 41.164 42.823 c 40.625 46.238 40.664 49.726 41.207 53.07 c 41.125 - 53.214 l 41.043 53.366 40.914 53.405 40.914 53.405 c 40.664 53.48 40.414 - 53.554 40.121 53.515 c 35.613 53.366 31.141 52.577 26.758 51.265 c 24.457 - 50.702 22.16 50.14 19.863 49.577 c 17.984 49.015 16.688 48.152 15.812 46.913 - c 16.062 46.839 16.145 46.691 16.23 46.538 c 16.48 46.464 l 16.395 46.238 - l 15.98 45.863 15.812 45.409 15.895 44.886 c 15.977 44.738 16.105 44.698 - 16.188 44.55 c 16.523 44.327 16.859 44.101 17.062 43.909 c 17.234 43.988 - 17.234 43.988 17.355 43.952 c 17.523 44.027 17.816 44.062 18.023 44.249 - c 18.316 44.288 18.445 44.249 18.57 44.21 c 24.836 43.464 30.973 41.999 - 37.027 39.933 c 37.152 39.894 37.281 39.855 37.242 39.749 c 37.324 39.597 - 37.449 39.558 37.406 39.445 c 37.91 39.296 l 38.91 38.995 39.785 38.734 - 40.75 38.698 c 40.914 38.769 40.914 38.769 41.039 38.73 c 39.117 40.687 - m 38.117 40.988 l 39.078 40.948 l 39.16 40.796 39.117 40.687 39.117 40.687 - c f -49.855 72.859 m 49.855 72.859 54.316 79.749 63.262 84.269 c 13.684 84.269 - l 0.484 84.269 0.527 73.152 0.527 73.152 c 0.527 17.499 l 0.527 17.499 -0.117 1.984 15.809 1.984 c 64.07 1.984 l 58.465 4.472 54.559 8.597 50.816 - 13.308 c 50.816 13.308 15.844 13.296 15.891 13.308 c 11.449 13.308 12.086 - 17.542 12.086 17.542 c 12.156 69.034 l 12.156 73.109 15.902 72.859 15.902 - 72.859 c f -69.723 45.148 m 69.723 45.148 66.891 28.866 79.219 23.05 c 84.949 20.351 - 89.504 19.945 95.855 22.363 c 99.852 23.882 103.457 27.659 104.977 31.769 - c 106.496 35.878 105.191 40.874 101.199 44.757 c 99.793 38.538 98.297 33.53 - 92.91 30.741 c 89.711 29.116 86.457 29.386 83.211 30.995 c 79.961 32.605 - 77.473 36.48 76.484 40.363 c 76.484 40.363 74.473 47.585 82.195 59.417 -c 75.809 56.718 70.875 52.245 69.723 45.148 c h -69.723 45.148 m f -0.945098 0.792157 0.0745098 rg -110.621 8.773 m 117.836 13.503 123.312 20.792 125.211 30.261 c 125.238 -30.429 l 126.707 37.968 125.305 45.933 121.43 52.601 c 117.527 59.308 110.711 - 64.777 102.098 65.82 c 102.074 65.831 l 96.797 66.464 90.988 64.273 86.93 - 60.507 c 82.406 55.163 80.273 51.816 80.387 44.03 c 84.254 49.132 94.043 - 54.202 100.949 53.523 c 105.414 52.984 108.629 50.445 110.898 46.542 c -113.168 42.636 114.066 37.445 113.184 33.058 c 110.383 19.085 94.641 12.073 - 81.125 15.976 c 62.398 21.382 55.426 40.464 63.086 58.038 c 72.824 73.859 - 90.422 80.905 113.074 77.519 c 105.887 85.03 93.703 83.984 93.703 83.984 - c 82.363 84.874 61.398 78.519 53.613 63.808 c 42.234 42.316 52.059 11.566 - 78.055 4.062 c 89.188 0.847 101.344 2.695 110.621 8.777 c h -110.621 8.773 m f -0.290196 0.247059 0.454902 rg -194.387 67.495 m 185.594 67.495 178.215 64.179 172.285 57.597 c 166.355 - 51.011 164.41 42.503 164.41 32.046 c 164.41 20.98 166.184 15.999 171.609 - 9.894 c 180.992 -1.075 203.68 1.32 210.367 1.402 c 217.055 1.484 219.438 - 1.644 231.012 0.57 c 228.027 5.839 220.824 9.495 218.348 10.011 c 206.766 - 12.195 193.328 8.179 181.414 15.484 c 176.691 19.57 175.734 22.14 175.559 - 29.62 c 223.012 29.62 l 223.012 35.269 l 223.012 45.374 219.598 53.257 -214.785 58.945 c 208.164 64.816 201.25 67.409 194.387 67.495 c h -194.184 58.421 m 199.434 58.421 203.531 56.702 206.484 53.245 c 209.438 - 49.788 211.941 44.956 211.984 38.745 c 175.684 38.745 l 175.715 44.808 -177.715 49.339 181.262 52.972 c 184.805 56.601 189.109 58.421 194.184 58.421 - c h -194.184 58.421 m f -Q Q -showpage -%%Trailer -end restore -%%EOF diff --git a/poo/diapos/graphics/Logo-EOLE.svg b/poo/diapos/graphics/Logo-EOLE.svg deleted file mode 100644 index f55c0d7..0000000 --- a/poo/diapos/graphics/Logo-EOLE.svg +++ /dev/null @@ -1,1277 +0,0 @@ - - - -image/svg+xml       \ No newline at end of file diff --git a/poo/diapos/graphics/Logo-EOLEienne.eps b/poo/diapos/graphics/Logo-EOLEienne.eps deleted file mode 100644 index 72c3b78..0000000 --- a/poo/diapos/graphics/Logo-EOLEienne.eps +++ /dev/null @@ -1,318 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: cairo 1.14.8 (http://cairographics.org) -%%CreationDate: Tue May 16 12:15:46 2017 -%%Pages: 1 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%BoundingBox: 0 -1 1660 851 -%%EndComments -%%BeginProlog -save -50 dict begin -/q { gsave } bind def -/Q { grestore } bind def -/cm { 6 array astore concat } bind def -/w { setlinewidth } bind def -/J { setlinecap } bind def -/j { setlinejoin } bind def -/M { setmiterlimit } bind def -/d { setdash } bind def -/m { moveto } bind def -/l { lineto } bind def -/c { curveto } bind def -/h { closepath } bind def -/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto - 0 exch rlineto 0 rlineto closepath } bind def -/S { stroke } bind def -/f { fill } bind def -/f* { eofill } bind def -/n { newpath } bind def -/W { clip } bind def -/W* { eoclip } bind def -/BT { } bind def -/ET { } bind def -/pdfmark where { pop globaldict /?pdfmark /exec load put } - { globaldict begin /?pdfmark /pop load def /pdfmark - /cleartomark load def end } ifelse -/BDC { mark 3 1 roll /BDC pdfmark } bind def -/EMC { mark /EMC pdfmark } bind def -/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def -/Tj { show currentpoint cairo_store_point } bind def -/TJ { - { - dup - type /stringtype eq - { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse - } forall - currentpoint cairo_store_point -} bind def -/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore - cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def -/Tf { pop /cairo_font exch def /cairo_font_matrix where - { pop cairo_selectfont } if } bind def -/Td { matrix translate cairo_font_matrix matrix concatmatrix dup - /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point - /cairo_font where { pop cairo_selectfont } if } bind def -/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def - cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def -/g { setgray } bind def -/rg { setrgbcolor } bind def -/d1 { setcachedevice } bind def -%%EndProlog -%%BeginSetup -%%BeginResource: font DejaVuSans-Bold -11 dict begin -/FontType 42 def -/FontName /DejaVuSans-Bold def -/PaintType 0 def -/FontMatrix [ 1 0 0 1 0 0 ] def -/FontBBox [ 0 0 0 0 ] def -/Encoding 256 array def -0 1 255 { Encoding exch /.notdef put } for -Encoding 32 /space put -/CharStrings 2 dict dup begin -/.notdef 0 def -/space 1 def -end readonly def -/sfnts [ -<000100000009008000030010637674203eb93108000000e8000002546670676d5b026bf00000 -033c000000ac676c7966e2f9cb840000009c0000004c686561640e24be09000003e800000036 -686865610eaf07730000042000000024686d74780796006600000444000000086c6f63610000 -00980000044c0000000c6d6178700647062d0000045800000020707265707c61a2e700000478 -000007a700020066fe96046605a400030007001fbc00040126000000060126b6010805890204 -002fc4d4ec310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f27206 -2900000001660133016600bc00e90000013d00a200fa031f00020002006601660002000200ac -015400ec00bc006201660181048501540166016d04a400020166007f04cd0000000201330062 -00710000002504a401bc00ba00e500660181018d0548055a0166016d000000000002000200f6 -05c301f0053902390058046d043d04b2048104b2016601750466048100b00466043902d1049c -047b04cf047b005801330166014c0166014c000200ac009a014a0123009a029a014401190144 -02cd00c100000166013f019a013b05cb05cb00d500d5015000ac00ac0077020a01c701f2012f -015801b2012300f600f6011f012f0135023501ee01e70133009800d10358050a009a008f0112 -009800bc00cd00e500e500f2007304000166008f05d5022b05d500c300e100d700e50000006a -01020000001d032d05d505d505f000a8006a00ec00e1010205d506140721046602f800ec0183 -02a602f80123010201020112011f031f005e03cd046004c7048900ec01bc00ba01020333031f -03420333035c0112011f05d5019a009a00e106660179046004600460047b000000ec02c302b8 -02cd00be00dd00d50000006a025c027b029a00dd01ae01ba01120000008501ae04600762041b -009a069a045800ee009a029a00d102cd019a015005cb05cb008b008b063100f6040600f0034c -016004a800c10000002505c101000121074a06120096014a078300a800000337007b00140000 -00c9010005c105c105c105c101000108061d00960427039e00ec0102027d0133009800d10358 -017900cd02390362009c009c009c009301b8009300b80073000014000326b707060504030201 -002c2010b002254964b040515820c859212d2cb002254964b040515820c859212d2c20100720 -b00050b00d7920b8ffff5058041b0559b0051cb0032508b0042523e120b00050b00d7920b8ff -ff5058041b0559b0051cb0032508e12d2c4b505820b80128454459212d2cb002254560442d2c -4b5358b00225b0022545445921212d2c45442d2cb00225b0022549b00525b005254960b02063 -68208a108a233a8a10653a2d0001000000025eb8b54203fc5f0f3cf5001f080000000000d3d9 -0a2000000000d3d90a20f772fcae0fcd096500010008000000010000000000010000076dfe1d -00001021f772f9320fcd00010000000000000000000000000000000204cd006602c900000000 -00000000004c0000004c000100000002034e002b0078000c0002001000400008000005ed0221 -0008000441840280012600fe000301250011000301240121003a0005012400fa000301230016 -000301220121003a0005012200fe00030121003a0003012000fa0003011f00bb0003011e0064 -0003011d00fe0003011c00190003011b001e0003011a00fe0003011900fe0003011800fe0003 -011700fe0003011600fe000301150114000e0005011500fe00030114000e0003011300fe0003 -011200fe0003010f010e007d0005010f00fe0003010e007d0003010d010c008c0005010d00fe -0003010d00c00004010c010b00590005010c008c0003010c00800004010b010a00260005010b -00590003010b00400004010a00260003010900fe0003010800fe00030107000c000301070080 -00040106b2972e054113010600fa0003010500fa0003010400fe0003010300190003010200fa -0003010100fa0003010040ff7d03ff3e03fefe03fcfb2c05fcfe03fb2c03fafe03f9f84705f9 -7d03f84703f7fa03f6fe03f5fe03f4fe03f3bb03f2fe03f1fe03f0fe03ef1e03eefe03edec0a -05edfe03ec0a03ec4004ebea0a05eb3203ea0a03e9fa03e8911605e8fe03e7fa03e6fa03e591 -1605e5fe03e4fe03e3fe03e2fe03e1fe03e0fe03dffe03defa03dddc1805dd6403dc1803dba0 -1e05db6403dad92505dafa03d92503d8d12505d8fa03d7d61405d71603d6d51005d61403d510 -03d4d30b05d42003d30b03d2d12505d2fa03d1911605d12503d0940c05d02303cfce1405cf26 -03cecd1205ce1403cd1203cc911605cc1d03cb1403cac9bb05cafe03c9c85d05c9bb03c98004 -c840ffc72505c85d03c84004c72503c6fe03c56403c4901005c4fe03c31c03c2fe03c1fe03c0 -bf3a05c0fa03bfad1b05bf3a03bebd1a05be3203bdbc1105bd1a03bcbb0f05bc1103bbba0c05 -bb0f03ba0c03b9911605b9fe03b8fe03b71503b61203b5fe03b4fe03b3fe03b21703b11903b0 -1603afad1b05affa03aead1b05aefa03ad911605ad1b03ac911605ac7d03abfe03aa2603a9fe -03a8fe03a7fe03a6fe03a50a03a4fe03a3a20e05a3fe03a20e03a24004a1a01e05a1fa03a091 -1605a01e039f9116059ffa039e940c059e1c039dfe039c9bbb059cfe039b9a5d059bbb039b80 -049a8f25059a5d039a400499fe0398972e0598fe03972e0396911605961e40ff0395940c0595 -2003940c0393911605934b039291160592fe03919010059116039010038f25038efe038dfe03 -8cfe038bfe038afe0389fe038887250588fe0387250386fe0385fe0384320383960382fe0381 -fe038019037f0a037efe037dfe037cfe037bfa037afa0379fe037776a60577fe0376a6037574 -1b0575fa03741b0373fa03727d0371fe03706f2c056f2c036efa036dfa036cfa036bfe036afe -0369fe0368630c0568320367fe0366320365640a0565fe03640a0364400463620a05630c0362 -0a0361601505619603600111056015035f0a035efe035dfe035c0111055cfe035b5a1b055bfe -035a0111055a1b0359fe0358fa0357fe035601110540ff56fe0355fe03541e03531403525119 -0552fa0351011105511903504f190550fa034f4e11054f19034e11034d1e034c4b14054c1503 -4b4a11054b14034a490e054a1103490e0348fa034746140547150346140345fa0344430e0544 -0f03430e034241250542fa0341011105412503403f0f0540fe033f3e0e053f0f033e0e033d3c -0d053d16033c0d033b64033afe0339140338fe0337130336351a0536250335341405351a0335 -c004340a0d0534140334800433320c05331403334004320c033130a60531fe033001110530a6 -032f0c032e13032d2c3a052dfa032c1525052c3a032b64032a640329fe032815032717110527 -1e03262003251e0324231105402b241e0323110322000d0522fa03210f032140042014031f0a -031e1e031d1c19051d25031c0f13051c19031cb801004091041b0d031a194b051a7d03190111 -05194b0318fe031711031615250516fa031501110515250314640313110312fe031101110511 -fe031064030f0e10050f13030fc0040e10030e80040d0111050dfa030c32030b0a0d050b1603 -0b80040a0d030a400409fe0308fe0307fe0306050a0506fe03050a0305400404fa0303640302 -01110502fe0301000d05011103000d0301b80164858d012b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1d0000> -] def -/f-0-0 currentdict end definefont pop -%%EndResource -%%BeginResource: font DejaVuSans -11 dict begin -/FontType 42 def -/FontName /DejaVuSans def -/PaintType 0 def -/FontMatrix [ 1 0 0 1 0 0 ] def -/FontBBox [ 0 0 0 0 ] def -/Encoding 256 array def -0 1 255 { Encoding exch /.notdef put } for -Encoding 32 /space put -/CharStrings 2 dict dup begin -/.notdef 0 def -/space 1 def -end readonly def -/sfnts [ -<0001000000090080000300106376742000691d39000000e0000001fe6670676d7134766a0000 -02e0000000ab676c7966f9f1ddd70000009c00000044686561640d13be360000038c00000036 -686865610d9f076f000003c400000024686d747807580066000003e8000000086c6f63610000 -0088000003f00000000c6d617870046f0671000003fc00000020707265703b07f1000000041c -0000056800020066fe96046605a400030007001a400c04fb0006fb0108057f0204002fc4d4ec -310010d4ecd4ec301311211125211121660400fc73031bfce5fe96070ef8f2720629013500b8 -00cb00cb00c100aa009c01a600b800660000007100cb00a002b20085007500b800c301cb0189 -022d00cb00a600f000d300aa008700cb03aa0400014a003300cb000000d9050200f4015400b4 -009c01390114013907060400044e04b4045204b804e704cd0037047304cd04600473013303a2 -055605a60556053903c5021200c9001f00b801df007300ba03e9033303bc0444040e00df03cd -03aa00e503aa0404000000cb008f00a4007b00b80014016f007f027b0252008f00c705cd009a -009a006f00cb00cd019e01d300f000ba018300d5009803040248009e01d500c100cb00f60083 -0354027f00000333026600d300c700a400cd008f009a0073040005d5010a00fe022b00a400b4 -009c00000062009c0000001d032d05d505d505d505f0007f007b005400a406b80614072301d3 -00b800cb00a601c301ec069300a000d3035c037103db0185042304a80448008f013901140139 -0360008f05d5019a0614072306660179046004600460047b009c00000277046001aa00e90460 -0762007b00c5007f027b000000b4025205cd006600bc00660077061000cd013b01850389008f -007b0000001d00cd074a042f009c009c0000077d006f0000006f0335006a006f007b00ae00b2 -002d0396008f027b00f600830354063705f6008f009c04e10266008f018d02f600cd03440029 -006604ee00730000140000960000b707060504030201002c2010b002254964b040515820c859 -212d2cb002254964b040515820c859212d2c20100720b00050b00d7920b8ffff5058041b0559 -b0051cb0032508b0042523e120b00050b00d7920b8ffff5058041b0559b0051cb0032508e12d -2c4b505820b0fd454459212d2cb002254560442d2c4b5358b00225b0022545445921212d2c45 -442d2cb00225b0022549b00525b005254960b0206368208a108a233a8a10653a2d0000010000 -00025eb862af5a3e5f0f3cf5001f080000000000d3d90a2c00000000d3d90a2cf7d6fc4c0e59 -09dc00000008000000010000000000010000076dfe1d00000efef7d6fa510e59000100000000 -00000000000000000000000204cd0066028b0000000000000000004400000044000100000002 -0354002b0068000c000200100099000800000415021600080004b8028040fffbfe03fa1403f9 -2503f83203f79603f60e03f5fe03f4fe03f32503f20e03f19603f02503ef8a4105effe03ee96 -03ed9603ecfa03ebfa03eafe03e93a03e84203e7fe03e63203e5e45305e59603e48a4105e453 -03e3e22f05e3fa03e22f03e1fe03e0fe03df3203de1403dd9603dcfe03db1203da7d03d9bb03 -d8fe03d68a4105d67d03d5d44705d57d03d44703d3d21b05d3fe03d21b03d1fe03d0fe03cffe -03cefe03cd9603cccb1e05ccfe03cb1e03ca3203c9fe03c6851105c61c03c51603c4fe03c3fe -03c2fe03c1fe03c0fe03bffe03befe03bdfe03bcfe03bbfe03ba1103b9862505b9fe03b8b7bb -05b8fe03b7b65d05b7bb03b78004b6b52505b65d40ff03b64004b52503b4fe03b39603b2fe03 -b1fe03b0fe03affe03ae6403ad0e03acab2505ac6403abaa1205ab2503aa1203a98a4105a9fa -03a8fe03a7fe03a6fe03a51203a4fe03a3a20e05a33203a20e03a16403a08a4105a096039ffe -039e9d0c059efe039d0c039c9b19059c64039b9a10059b19039a1003990a0398fe0397960d05 -97fe03960d03958a410595960394930e05942803930e0392fa039190bb0591fe03908f5d0590 -bb039080048f8e25058f5d038f40048e25038dfe038c8b2e058cfe038b2e038a8625058a4103 -89880b05891403880b03878625058764038685110586250385110384fe038382110583fe0382 -110381fe0380fe037ffe0340ff7e7d7d057efe037d7d037c64037b5415057b25037afe0379fe -03780e03770c03760a0375fe0374fa0373fa0372fa0371fa0370fe036ffe036efe036c21036b -fe036a1142056a530369fe03687d036711420566fe0365fe0364fe0363fe0362fe03613a0360 -fa035e0c035dfe035bfe035afe0359580a0559fa03580a035716190557320356fe0355541505 -55420354150353011005531803521403514a130551fe03500b034ffe034e4d10054efe034d10 -034cfe034b4a13054bfe034a4910054a1303491d0d05491003480d0347fe0346960345960344 -fe0343022d0543fa0342bb03414b0340fe033ffe033e3d12053e14033d3c0f053d12033c3b0d -053c40ff0f033b0d033afe0339fe033837140538fa033736100537140336350b05361003350b -03341e03330d0332310b0532fe03310b03302f0b05300d032f0b032e2d09052e10032d09032c -32032b2a25052b64032a2912052a25032912032827250528410327250326250b05260f03250b -0324fe0323fe03220f03210110052112032064031ffa031e1d0d051e64031d0d031c1142051c -fe031bfa031a42031911420519fe031864031716190517fe031601100516190315fe0314fe03 -13fe031211420512fe0311022d05114203107d030f64030efe030d0c16050dfe030c0110050c -16030bfe030a100309fe0308022d0508fe030714030664030401100504fe03401503022d0503 -fe0302011005022d0301100300fe0301b80164858d012b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b -2b2b2b1d00> -] def -/f-1-0 currentdict end definefont pop -%%EndResource -%%EndSetup -%%Page: 1 1 -%%BeginPageSetup -%%PageBoundingBox: 0 -1 1660 851 -%%EndPageSetup -q 0 -1 1660 852 rectclip q -0 g -BT -115.200005 0 0 115.200005 1659.494566 0.0000456218 Tm -/f-0-0 1 Tf -( )Tj -ET -0.945098 0.792157 0.0745098 rg -158.102 787.356 m 160.379 829.535 l 190.289 799.809 l h -158.102 787.356 m f -21.06434 w -0 J -0 j -[] 0.0 d -4 M q 0.380357 -1 -0.775998 -0.295156 0 1266.965088 cm -471.528 27.38 m 435.436 6.755 l 471.344 -14.188 l h -471.528 27.38 m S Q -58.695 757.856 m 80.516 721.688 l 39.07 729.465 l h -58.695 757.856 m f -18.464385 w -q -1 0.699805 0.543047 0.775998 0 1266.965088 cm --278.556 -404.865 m -310.193 -422.942 l -278.719 -441.304 l h --278.556 -404.865 m S Q -10.25 623.512 m 41.414 613.496 l 14.113 596.141 l h -10.25 623.512 m f -17.112694 w -q -1 -0.121862 -0.110002 0.811158 0 1266.965088 cm -75.757 -781.871 m 46.436 -798.623 l 75.608 -815.637 l h -75.757 -781.871 m S Q -101.438 509.071 m 70.375 498.742 l 82.148 528.875 l h -101.438 509.071 m f -12.576204 w -q 1 0.937579 0.772771 -0.802194 0 1266.965088 cm --330.318 558.711 m -351.867 546.4 l -330.429 533.894 l h --330.318 558.711 m S Q -0.290196 0.247059 0.454902 rg -161.094 604.578 m 161.094 604.578 152.773 561.961 192.316 543.309 c 210.699 - 534.641 225.316 533.344 245.688 541.098 c 258.508 545.977 270.074 558.094 - 274.949 571.278 c 279.824 584.461 275.645 600.489 262.836 612.942 c 258.316 - 592.989 253.516 576.926 236.242 567.981 c 225.973 562.762 215.535 563.629 - 205.117 568.793 c 194.703 573.957 186.715 586.391 183.539 598.844 c 183.539 - 598.844 177.09 622.012 201.859 659.969 c 182.059 644.739 164.789 627.348 - 161.094 604.578 c h -161.094 604.578 m f -0.945098 0.792157 0.0745098 rg -293.059 497.508 m 316.207 512.684 333.766 536.067 339.859 566.434 c 339.953 - 566.977 l 344.664 591.156 340.164 616.715 327.734 638.102 c 315.219 659.625 - 293.348 677.164 265.715 680.52 c 265.637 680.531 l 248.703 682.571 230.078 - 675.531 217.055 663.453 c 202.543 646.313 195.703 635.578 196.059 610.594 - c 208.465 626.961 239.875 643.227 262.027 641.047 c 276.348 639.321 286.664 - 631.18 293.949 618.653 c 301.23 606.125 304.105 589.465 301.281 575.391 - c 292.289 530.563 241.789 508.082 198.43 520.598 c 138.359 537.934 116.312 - 599.153 133.5 657.778 c 160.254 711.746 268.816 729.453 286.945 734.754 - c 280.277 744.656 213.539 742.957 213.539 742.957 c 180.559 734.364 130.008 - 728.141 104.754 682.086 c 53.828 589.199 105.188 506.442 188.582 482.371 - c 224.301 472.059 263.293 477.992 293.055 497.504 c h -293.059 497.508 m f -0 g -BT -32.000001 0 0 32.000001 1361.895445 368.012451 Tm -/f-1-0 1 Tf -( )Tj -ET -Q Q -showpage -%%Trailer -end restore -%%EOF diff --git a/poo/diapos/graphics/Logo-EOLEienne.svg b/poo/diapos/graphics/Logo-EOLEienne.svg deleted file mode 100644 index 7a2c713..0000000 --- a/poo/diapos/graphics/Logo-EOLEienne.svg +++ /dev/null @@ -1,779 +0,0 @@ - - - -image/svg+xml    \ No newline at end of file diff --git a/poo/diapos/graphics/Logo-MENESR.jpg b/poo/diapos/graphics/Logo-MENESR.jpg deleted file mode 100644 index 02d6870..0000000 Binary files a/poo/diapos/graphics/Logo-MENESR.jpg and /dev/null differ diff --git a/poo/diapos/graphics/Logo-PCLL.eps b/poo/diapos/graphics/Logo-PCLL.eps deleted file mode 100644 index f151afd..0000000 --- a/poo/diapos/graphics/Logo-PCLL.eps +++ /dev/null @@ -1,927 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: cairo 1.14.8 (http://cairographics.org) -%%CreationDate: Tue May 16 12:27:36 2017 -%%Pages: 1 -%%DocumentData: Clean7Bit -%%LanguageLevel: 3 -%%BoundingBox: 0 -1 300 165 -%%EndComments -%%BeginProlog -save -50 dict begin -/q { gsave } bind def -/Q { grestore } bind def -/cm { 6 array astore concat } bind def -/w { setlinewidth } bind def -/J { setlinecap } bind def -/j { setlinejoin } bind def -/M { setmiterlimit } bind def -/d { setdash } bind def -/m { moveto } bind def -/l { lineto } bind def -/c { curveto } bind def -/h { closepath } bind def -/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto - 0 exch rlineto 0 rlineto closepath } bind def -/S { stroke } bind def -/f { fill } bind def -/f* { eofill } bind def -/n { newpath } bind def -/W { clip } bind def -/W* { eoclip } bind def -/BT { } bind def -/ET { } bind def -/pdfmark where { pop globaldict /?pdfmark /exec load put } - { globaldict begin /?pdfmark /pop load def /pdfmark - /cleartomark load def end } ifelse -/BDC { mark 3 1 roll /BDC pdfmark } bind def -/EMC { mark /EMC pdfmark } bind def -/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def -/Tj { show currentpoint cairo_store_point } bind def -/TJ { - { - dup - type /stringtype eq - { show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse - } forall - currentpoint cairo_store_point -} bind def -/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore - cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def -/Tf { pop /cairo_font exch def /cairo_font_matrix where - { pop cairo_selectfont } if } bind def -/Td { matrix translate cairo_font_matrix matrix concatmatrix dup - /cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point - /cairo_font where { pop cairo_selectfont } if } bind def -/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def - cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def -/g { setgray } bind def -/rg { setrgbcolor } bind def -/d1 { setcachedevice } bind def -%%EndProlog -%%BeginSetup -%%EndSetup -%%Page: 1 1 -%%BeginPageSetup -%%PageBoundingBox: 0 -1 300 165 -%%EndPageSetup -q 0 -1 300 166 rectclip q -0.32549 0.286275 0.529412 rg -197.438 160.944 m 171.461 160.944 148.402 148.244 134.059 128.76 c 154.211 - 128.76 l 165.531 139.28 180.707 145.713 197.438 145.713 c 214.016 145.713 - 229.07 139.405 240.355 129.057 c 260.641 129.057 l 246.285 148.385 223.293 - 160.944 197.438 160.944 c h -132.855 37.463 m 147.086 17.01 170.703 3.549 197.438 3.549 c 223.234 3.549 - 246.145 16.073 260.508 35.323 c 240.219 35.323 l 228.949 25.041 213.953 - 18.772 197.438 18.772 c 179.809 18.772 163.918 25.92 152.438 37.463 c h -132.855 37.463 m f* -4.26191 w -2 J -0 j -[] 0.0 d -5 M q 1 0 0 -1 0 164.490509 cm -197.438 3.547 m 171.461 3.547 148.402 16.246 134.059 35.73 c 154.211 35.73 - l 165.531 25.211 180.707 18.777 197.438 18.777 c 214.016 18.777 229.07 -25.086 240.355 35.434 c 260.641 35.434 l 246.285 16.105 223.293 3.547 197.438 - 3.547 c h -132.855 127.027 m 147.086 147.48 170.703 160.941 197.438 160.941 c 223.234 - 160.941 246.145 148.418 260.508 129.168 c 240.219 129.168 l 228.949 139.449 - 213.953 145.719 197.438 145.719 c 179.809 145.719 163.918 138.57 152.438 - 127.027 c h -132.855 127.027 m S Q -q -0 164.491 300 -165 re W n -% Fallback Image: x=0 y=0 w=300 h=165 res=300ppi size=2580000 -[ 0.24 0 0 0.24 0 -0.629491 ] concat -/DeviceRGB setcolorspace -8 dict dup begin - /ImageType 1 def - /Width 1250 def - /Height 688 def - /Interpolate false def - /BitsPerComponent 8 def - /Decode [ 0 1 0 1 0 1 ] def - /DataSource currentfile /ASCII85Decode filter /FlateDecode filter def - /ImageMatrix [ 1 0 0 -1 0 688 ] def -end -image -Gb"-V#C$t`_Z+TWTnl<<&Yt88b,Xs2W2ka,:g=(M65>*n8eDZ2(mhN?N"B_H["+5p+.A - <))6]`'+5R]f?:_V:#om[bNcc\tLR=!98HgXVBTBGt8j6i'dBCB!VHZ0u - LnW#DWd,0R#dci1=3U^ZdGoX-LFj.hBC\rto0E=uRLJqe*Nd:%%]!1bkYap\`u6@:BmK-Uc - 5g>UMEJ*k$.Wb'gn1*Bef>o]]:Gf<3sE'j1,Z"98E%!&0DO@_$gHB)L'Jd6!Aj>dd-Z_$Ql - d+#\((^Rd`c/[fRU`nI`_piL1([`;HJIf)B3o]8[)<\0UO[:\OWQsK50rk*LSHE-6H(]XO9 - !:U!!3I)DRYO1(c,'*K$Z_hXXmCRIJh`4t(:28U0V"0sgfaIn(XcMmBtP)dsQq(cBtn\H2 - -ejdIEsMkN,QH!<<*"5Y>p3hSflS@s5hHL[>Ke]mN)Ki3l?M/+8!@)GsdeGPc7$nF4f8>B` - KSSN1h\h?j5_!!(_jVI]&NHW"r`s,kM$opdIgQ1As^O41hr(fC25`[kI<^ACIfRIp,&e]/a - 3!!!!592!Ng4*5X76qkD[jh8;)k1N:RG:Uc1kEcj;q^`)F]/=2%HqJFjlE^Qm!!!#c/gi%@ - k`Kr0(@N15CNtoc;jI)4o!!?so'>tn[.0o?O'M\)ab5S"4;\%u!'n8<1F6O,FSrf0c%?8Fj - borfRLUph%NDc/FRI]^HVa4c?iU0,!&!GT;Y&uCZ%2qf'L1K:!!z$G*=?SD2;1:qmR5>? - \hkb/8-_Y@)?*Lf5KZ.nB9C#ljr*TE%PGHZe#)BHQ^=D85";1#r@Lhe^MUT1*Nrm_,-TXSQ - `:!!!"\5NV!0iXVLg$/3n@lZD57Lq$9qm6#N'i49#;:Zgg#WBQ4@!!!#/]GoJO2Qf2&k1B) - 4/]T=/42duEWO;d$OisIW*PRrY2cp(\!!$-aE`2IcLmUL,6Tc=`.;q-jT;?\jOi%AU=M&>* - NU,@D(]XO9J - ohRAcLRgDP:kZfrGDT8!!&\9okUP$(C]Lr3H^deULXE.,!3.KX1X&r@PAfc`s% - E.*j[@\0@-Bh4Tk`b!5KRecWln:gP13,3Dk(^+N3Dao:!="p6J>fY,d"9!<<*"YYf"Ep82s - ;#PAU)hCiD[R\;JBBQ:DLB.AT!&3^)l,t59S%`Vn??rFk`(ojnoFD@d - 4IL.[ot(Y5!!'f%V5It.MqmLOH^=4,6&^9n:J!!&s/Yup]fs#FoB6I/-dCB>[%e&oSSDs625qbC>)+#!Zp!8puDkuhe'mH - `SN](0/mL_HZ;5GtW>Lri36;Z0>o!!!#i^Vk1pB22aU1J\>)NL-RCXQ^ZV?+cm->mgW4!9? - qrNh#\[]%F?OTCTrc+YK#1NCWi+>]qm]U?ZqV!!!"\J&E?g45=J2o$ooI/tG<,6=P,Wo9E; - U!!'fH\N+r)2oP^B@tsR94X'VJ"*t,hgN"PmO0T)m!!$+E1F%6X6qm>M;j8s"$-AP0[e&"i - jaUfPjf!X3!rr<$c7V7CCJ!`MYM+q:^5OEbhrgV=:0\jSS$!(u!!#,X7XEY6d%0f-66)LJm - /rY-h49t%Xniq9!!!!YMp..H'bN00WN:KX:.Tq1kI)&@_fjI.!<<*r^sPpaEN4E:ApigtXm - 'PfWilj3!!%PEAS'sS>J."XgBl#hjb/_Bd\U6bb%5p?EcP/e-NF,H!(Y,RZYW`bTUXPDj\' - S[Ldl]4T"8LN+U\f_"TSNf^33oQahHZX<5/8WKG[DODSPRpMGnrbzb]bTjEQF44PV9QR+ZA - Cg5Kl<=n?hJ]#QOi)@#d%@0)H)`XF-F1#a('j,G.,I=nNL5!!!#'h2U`7;^XuAo'fSl\gE) - tP1GU_cBtmq,ro9(eHGpQ!3f49:>UkaR#[cuPV9$C+f<;\Q%+&2:2U+A!!!"#&[O"e].SZW - (XdsJ]B9!ne+^j-W4q*g!!!"&cCDI.CsYN1Me>A4_r)*YUl1,X1)Vcg_$D!!!"tOI;4oHcF(V:&'Mt+YJil%bt*S-DT],DpHSNd'2X86!'!!%QIn']/o_gN:L?N:a+>TtDA??A1V=nQnF!!!# - p;dQ&,q9n*dRuL:ZmNmOr:cbs#]6_G&m]$Bi!!%)24`f^lIHN"cmLhik1d_Jk4eHsnop#pc - !!)g\DJid*fZpp"7k7s.&jfhai\D--GAD(kT'E?p!!!"(f]eSkhS!PN?ec8\nkJuRS='q<6 - 1qVp!!!#%-RU9#FRE0N1d_O'4lX>a0I07qA5lq!!!!#W1/@amnV8/APV6SS+o++rH3Tp(Q) - +7k#64`(B4nLI[3?flm2)O^Y@%Y[q**e9'-=S<09?#1!WW5Y_3-G,)"Q]LjU5-V8:eq!^2k - oGqd0='!8M3W<1K;Q^[h%I+f#+86d'Ib=7&q7'a+L:J?qe\OZ)Kk--DRRKTH6VE?Ps],Loj - `!!!!I[O:pt0'rb*Y>,BI7&3JfJA$:B<*pFB!!&Z]G'<;t^ic6.e?;M:Ia7,V-U:ogihA8B - k/Q2H4Or%S!!!!Ye:khV"*t,$?]Gaca91JYB@b$0f2Z0,!<<,X+PSdrl-OI@nl7(]eu"/d# - nTV(UZ]/S;/rV>QN.!cYck.0S>d/GPqP<-+iId,,thLQ<*q]f!!$CCB2;n6U&,8[CJI2%Yp - t15s*!PSA^sjY!!!"dCua4Om@0)4^=ji#8bf6gX%-F/2Qr0AI2rIk!.[)8ZZE%'?_r.48I- - K&R6G>-:/7tWCFT;a!2Nl1SFTUNfuhp4KFhTb#4r8:FRb+N.k:T"!,QarhoX/\-R`>%&jhD - 2&XTnXqbO3*^&e97^cE7S?f?od[drod^7HU'&CVjVDW,"c`J"d%!!"Vp,<]hdn8RL484!Te - CI\67-oEkLobA8C!!#(*S[n<>fBLFZO+\)(J;DD)q8@'KYIac7!-kI@J"6$!oN/bE,_Q_a` - N,:(J\_XbG4>Q1]RM@J[9gurmm'!.UNXJr0.[C`dZMcd(@W*@07=))'1ta6KIJ - N)]-cV^+pmEmAbS3Rh"nCMA(pJ"+*fj`*^$AJeRj3DShl0!/..ma))cEf`jH%?KbS\#b2nlSX;nVqG%O5;V$kn9`?jr/NaKD=hn - kJR8`NkJ%M%mTrAQnr5\u?C#*=\pKa\T2EEX5h27#UQsK - 5p:0l/hbZ9/kg+G6?j2@Q+GATFQD"4[mP?*V8g>f4_SrM77eATHR/stGh(B=HNIaZ\#LCIL - ]I+:`W/a]$ena82Kd^U%N@6:6.*(rD<2)i!0/B]itZf7%:hmiBqlkpa2DscCqMXk7CS1m;8 - /kAX[<.21V!!)(I=0JFllT%o>HB1$Q\p7!knaiLNZa]:WMA)Q1_M9'0^\"nWj$sd7YMMKZq - M&F2(4OeG]^g\DS0:,hQuV5.MX&Y(!!"-K3HOJk-mm).Tp[1UD:ZH54G'EmglE9NpI[e!If/M0C++<.9Zu8-?h]T11PodL(F!8o - Wp"`IGUKHk**Q&"7Y!HV=1`*?&0Ye:H>/]\o^=48He_)Bb2>oo@qPhQ(OA\L5[&`OdhiU.uR(]CH[TYps(Ordb*4EJM - i>5(2@2//F.'0uW>(TuC-q-RuAN@tod%k"o"X!'igt<^^D&UjR#K%&S1-Oi)UaG!s;\BBQ9 - YGMqgC1U8sCO8\l]$ToAJT-]iG.,Uj8<<*"qOGUBlB]#Z/=(T<@\p'SU*k(\:[8b[h%:%5U - M`3t7DYgBXGibhX0bV6pMfWq6CFB/_:_8J@3c`jcjm+Xq)^"PE]=&gAc74p?Q'J[ac%5lO" - Xu[4M/Gf]Z@q\F!W[b&7T>t!IM'_(@RMGXRuRsq^&6B:9<(c'j>RD8(BO[_`,UXKJo4 - pd/S2_&0 - YOaH*@aD]ji#X7#OKb!N4q=@DRQ+n-VrL#NkKBfcF!!'fp_WG]6^>^>\Vfe2c'?@7H4F:*$ - W<)q;Z+.^a5;2SDV#IJ^m`ta`>?%45!!!"BZ#!"=o!K7DPI=hWRPo0YV$kmTT,5;V:7\mOc - 7boW#>\KFU+BWT?1iID!!$E4[4D"Aq[k2Iqds>iVld^[,t7Ju!GFKcG\sbdau2s`.=]O&gK - Ck'YNh;Q!!'ek4/1^s)t@\Up$'hDgt^g^2m0'X4sL'&/ghskS@Z/r(N`[MC$"<_F5'RBB*8 - 27J-fZqS772O4RJSt%LLjRH8@q]klB?[l-bQA1!BC90'*Z]o0WaXX$.O(!!&gb5+1Knl*#J - GIs5JN_eHqdV&1YaAEoVj+d - -N[\Q_m*kReT[&E2ci:?QhCFrcLViZ!!'h-,i;/iY"PGYePq*ZGFr#n&+[P!jBL"nNqMg$? - 25GA^o$;H;m0P(`m*!!!!9P+.[0bM\)s=&9&SS_Hnq>lKM'rDfHkJE(0OjXck8X^0E'b27 - ^Q0]H!&S'(s?!!'NZ^kn2rf1lK$SrNXL7P@P/:02l5!B%#b:(_CFjmU+hQmq&sWBU(W!!#' - GK^M[NC+`_c(]Oh=IFnQ#!<*M6-LB/E5l"$OJ7LpKi+$bS`#$d?@.25+H!63&d\U6bV2I93+* - .D^JH&5;bP\'S%-;9#Je0S2s2a;On.B$CTU_P-Y^,!W1`<.fc!(b-]A%8'W>V^s3<0&pIi_ - bV4![f$lDPh9\51c-.k.J/38f*XT1g0M.p2UO\0,>7TS<;$)?9b6DJ%ffjm/Xg+"pFiNGB' - )51G)jbK\:9'"Xk*(]71]m[5q\KBf3@!!!A5bo:,WYDDatHj>F5:.eQ8W.Fm)6K5Br"6M(_ - ;s4$o=E?b#T`tJs"]Rhd"`EU@f6$X)[s$:c$_O!mb[[n[`7q;?o.eDFi;#?L\`GIE!)VYN[ - FD?"-RiC1jl?+G$,(AIDkR5UOa-Nc)GkOa"cZ - +>=%^7mM`NhURG?[6B@^cd44"!*O=7pP;!!!2A[#(hX=MoNhIM([pnaW3sY>>7T3LOic2pY - I2>Gd?dV>:H"!.Y,Z?0"32/"_3WL[^?PC!J&(O/e!!))$7us0 - Ue"jcDb/"S&"n()adZN0iRju$<;ROA,H - `6X?>P1*DQ?D*t'S%Y"ZTNWEl2 - qCo!:lCbEJ^feN)[O4a\VFK\L]lq;tY\Fn6d]el+[X5W;JuETCSU-W#k%.WW3%7*2tkQ\p' - U;I"dc&,*ltZ=7&q7;uu4(bHlj)D=VM=rh>Nndc7AWia4+6%kI\\E-W5B?R(=X;80K\2sJa - S+R\`%eOL@);*1N3g,C+Kr6g^G,6!;5(K:D8J>AGB1!3QTq'Ot3B3i'lH2*)Km8SKr!D'ItrXs-[^8>X;\p7$4+jg8i^]n;(LFZ`RjF_Phm=/O48_ - "%ZJ2qd@`I6EKXRZ`l5)A+C`I'rd!!$,4c-!`Bf.d"C5BNN;iV[iK#8;WU:7k5Fd@%2;RZQ - W(q1:'r!&3\K_PO\87k7r^\9^US>EY,?V>=R$0]2P=W<7GM/&008HJ11nFo5pIl@TBC!*m< - h^5i%!?UpC+oZ:n>o(Y$\ODftKV=3>=jd-le:\RUH5nsA"kR/6@>kttMV;p6B7-NF.WXgE+T"V0#(]mOucf5hQZjT - ]Z3HEpapBfjfWW3%WNi7qmPcmkf2uS%,?+YD]oe?TBhM(RQ^ZuN2r1`8`q0ctal=1)"!1^o - [`+pAsN`3YOERFQ+cVI3Y<.,/U3/a7T)2%d@.).ULB_[0/!!!S9ZZ>p8$rXepERB^a&WrWT - X83Y7E%[QHfo,!2$OPNTCrklVHW;.Q!!&[Z=:Yi('hiF7aNR?o^-`&(zzzzzzzzzzzzzzzz - zzzzz!",`i-SDNWL`s2Qma,+e#7q'dPq+:f2]X6R-13I*>6"X'Vm^Ni$3-.2Li(hVl%nU,L - k=j:itmrPr2uMhbP%kuJ,fQLcpCBj#qZlacr+FA9*G:qE,r*V#Zr@#*!%190Pm - K#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P=4F<@5 - (P!!)H.cH]HR"oJT1iZ>I+RF"j*">*V#Zr@$UEr5Rtqr!);cC[>ii9b,fAK(*[MsAin(G8t&d/PDLWa.!&gGX!,4DNBEc - CI&3rV#!,5Q5o$qp8705tdIL/JUn);Ir0f"TTqb'bs`K<2ht8Uft0@#mgq3gYBf.)t,FJZr - G(mrUndM%g4KW*jen7cr-P?/QF.);uhFuU,,",fOO[*PH%W`*^>,/ITrVE3WiQc[:lNpTqt - '^>,k80W;loE181O2$!O?&BW1t3`sW=c/R#N - [7S,%5[VU&-[-?>AV)eodWjQN>181O2$!O?&BW1uncX^X"?G#=IV+ZZ%M7h+=t5c0V94IW$32\(0/)ehn`(2n&X+S/!TW_@**:kFu_'3Zjc\:fD8#JU01gS/C#lurZE]=X!X.L+e9AP6 - oYY.aR=il$[kDJiM";!dc)S[r'3ZlMTV]eaQ3mUE_#Z.\[_d_+[r1"_ - 2E'.Aq0RI8CM`Y-Vk5"cA4Z7M`?4dYMA@eT@)2p?C!]bK">//-ZrEI?;P=4F<@5(P!,r5SC - T4eR]=[h%djHFf7=OA7Ma\&NZ)u`fCS*_7;Z+WW4*FT%:uPi4X@SHt1M>!tS.%""8^LA;78 - &mP/JUn);Ir0f"TXnIi0J[nN>a\Jn)#cYo<)B2C2BV5M\`:kWH\@2fs>>We>`&D5O@Op2LY - FDRE-q7scr-P?/QF.);ugkD8m5u'>;n3=\T4Ojbbn1)p:ueZjn/9?cHFDCkKdd - OA9`BF4n(s6PUNeZlW0Fqcr-D;/_+%3<12*2T`crI-F?_PE!`OJC8"kfE6Xh/16_J&n[X.n - OH:$5*uR:lr&kRl&c["$U.$idpktI'1h`l>U8?"cQ3npOWA:0D!ek/^Y?nm\*?@:]hRjq[r:.JphU?`9bJOGd"j-* - t7Ri-9YHR^sX+!Z7gX"3l@^4!jq@6]/PG"aUMj>h+=t5c0V94IW$32\E\#"QQq<(cf.,*[^ - =gQt0isk$#[;tBO3B9*Cg-NcPV)eodWjQN>181O2$!O?&BW2!i&km5CG:Zn&Ug1HN#)d4a7 - "i,Jj^>Gp-UCD5(+iN5ZrAG>99ff8'`_KjrE?5jkF[6)WD^]+95W7]R>F#eGdLEt5teU$/Q - F.)<%(%*PmK#W!*k+]>H4oWs*c3M<%V+MPW_5&S"6*umFjE&I%8ig>3beHf@/0r*4@l*iX@ - F3k09C;aiX85MHOVl181O2$!O?&BW2!i'("FPKn''e?b.ghLlRL]gsD<:9'03Y_r[;+511hb7JGOP%jE)Bme[ri48/bSc#dm68c?[_Ut>Aq2tcWum0GiB%W - g01n!20S?=?+Y:%ge1e,KS5#H1M?FKgUC%T7Wn"GH1AiiT7?k9>.&+Ys8MmiRPYm=B[H>3b - :d5:I.r[]^86^.l1S9S_$;'H044_HD3ZYT;B5GNN>qcipoIW)`nDAZ3hq,G^'oO;FG^Z[u'p.n\l<=Y3+m/9((MPNc1n2Bkc - %n9mc?BpY=QZ%.89"b*Dkumk7kH\MGtr\T?q_q;mq]2/3u].<3^!rqPLk1M5GAoqfQ0Wi5h - -&J="R.TWX<_:QGDl-`mE?:H"#lU\B^RF"j*">*V#Zr@$E#nCXJ_FG\rUq;BUp@bqnD3m[Yn'\%*;GrZ\o.cA@d,06BN - KM!)\=_u8!sT/F#?:S]agY6-`A2f6lk`uQ_5Puh:s\LH<.N3d*=(7?1b=A)r-C/qZVe`:rMM'nl#%1P1+8u< - 0MDq_R4O$33(r2satCoKpb*3!/OY5C+E'E@gAs)$>jnn$0GAO9%D'!tW+cr'n[,rhcu:7aR - NGMV,gH#nV5M+6Ogk?#04@JR3JLRXd&\$rikXhb#i2('bAP^VSamkphhs8M#sPan,RPa%D% - N>e4p?Q*HYlKm31++bBr%[qe)OLAn7k4o - Q1TS&!L26]p^cl@bWJPm+kPq1G`7DCh\r9ma@qig:Jh?^3mJ7mFq9d[0O"JV>C#`fjd3glI - <@jor>PUWE!W2181O2$!O?&BW2!i&ff@uVb`qf]3H-];0SP[e5RZ"EL$(YVk8hjD!__d[A@ - JHAVjRCDjPtMkpMt`-7L5ejioaA[,8%BcaK-Sn35C2q=s!2*Up;/LS:QeKU)rkBW3b\V#l0 - ?E(inF5('m.>.n4RG1qRN/=+kh>FX+N[!6nC>5L<^qmFqd]Y([igY-e"h;$d$04&JLoONao - \ODDlG29S'g!EVE9UK5V=nV1:f,h-"&[YN*cr-P?/QF.);ugkDNbPJ`3d&kVW;#N'6[K@d+ - !6\-J\KO,7pEBRp1pWP7Z;<%r]^/=PP71ae,^Q9rpFE999"gd1B)qORh[P\Gh]ZDG']^ed8 - FOB98+"c<12*2!Pg!@VPP3A/a_2q@l6`3M2?4rG;m8&J)Z;4hLGS([VacVo%U$9RsObmM>t - QiNu'HUr5]I#et7,#WFE%?5*eXeS52BJ<0Z^qd*Sn![r0j&@EtB'rVH2f<2l%s?1-:GRgh0 - \g"E]EXh>C1fU"XAl?IPu1i:sRDV_nM5QAA*pQDh^V-^cWX\+j.#"O.0[F]eRHpU.d`5s.5 - mD=PbI=6NZeZ*3Ma(s;0XlKl,ZrEI?;P=4F<@5(P!,r5SBW9apD)8Ii?bUp`_a__lbr'`u* - Dp$E[VWK``JXO7JLUj9h5t\W`^[r[hL"]Sj83MNQ7=r=)fNAtA?)Ar*^4uH@=sBm<1uV^h* - FFL5(3:7[?It#]6LplG^]4;F_0r[\9:[eIL@,I=[@B6uVX@8^Y?j(aGl.-tA*kOY - ',MHtj?Z-#md@g'^A%Y]_u7NqoBWTpQ75a%G>.$K2)[ADaKP&Zp$.g-Q)-WCDJlV>&&#aNe - lr@AAg1EY9PCD%JsIl"=t0N^"FIW-8WtLc0$Xj\H61,E7M$m-fk6r-*MGfR$@i'NVnlO'fs - Bl3`uinR;`$Rg".J(EF)l;CpKDYej#pQ[eX'Tg8UJ6njiSI?K^ukVqJ4n'?PN#!n8PF_]mT - X]mYb\iV7(-h8p?GN#7i^PROG1*DADiKhhg(u/QF.)<%(%*PmK#W!*k+]>O(:kP7?Ao`n/i - :@=s5fL?eb_WD]Q&*&q?Vgt&T3BB2!_#4H89H:senJ%k@+rr);8>;^#7FL:HgY?\WdW\J@0 - oB&alhamG7pU=T#f3a#5HWYnPou)\#\u0Fu"q@ZF(\G+Nf6"bS4D<(a)tmG>/QF.)<%(%*P - mK#W!*k,H>,iupiWlk]^8"f8@M^Y%Gh>j]^]2%9#iisd[pbGJqtAP\\RW[?7YW\3V:M\K:O - BmD?@'_Jhg9P2dRAN8n%\nZg+f]E&e^r9ZJ0aW+gY@P\$rj?39$_sFm>4!dgHKidN2HL6Nq - X"99ff8'hZhNAO9#n!1.)&9?kT#M2mT;3HF12YIpSmjukbLmej:D',)%%n)Gl)TP^<"9h@q - (rS?%7O$/f#Sut/>\Lgg'G29?=cBp?(L0`ZJGH^_E[;+6t@9BQIq'<'O:Goi1XHm&'H?JUp - ^AdtE)l>".-1-%R(F`8Cg9k]SN,1:RW_@**:kFu_'3Zjc\-1WRqX1uam^^Z@9q0_9>8J%j( - ).JDj5\Uf;lBKbl\e*-4k'RjT+Y/r@FL]$AW#m]F6:]OH1sgi*j%N_6id[C:u+-Yc=NpP(Jb55OKfRl>3@rr"eE+V*0Wk/ToaPAO^$!qe - 4ZgV;t:L621!$X]r9#).1+S?Fb*q][tRI'e31EGm19<99ff8'hZhNAO9#n!12X%QMT!!+!! - =[^u4"fNutPg>-VPUjBmK)ltkKllTY$]`0NH$g,(@u]d>*&<`>>qkro9&(b)A"2;KqTdD;K&BM\7=.aLhT*U - 8?"cQ3npOWA:0D!ec8MdGE6+&L4YQ0X - 7J>G&r"Ws8D\g?dXY/O%M+>>0AmD,R0#&Xc_9>-q7scr-P?/QF.);ug - kDVRP&QV+T:==0H8_T(D-k^Nf:CbhR;EC5j,h9R.4"O'S/6`k^Sc1^t - rT1cqn%ooGu(%&.'r:A5ij3+p]p$:5!pKH;1n])`,k80WDJ24.MGu8!4 - W0fQ>5%/XD-/^L8HEWi60BieU9Vq?soZ$+==Nrh0VWES!TJ.oS`QB[;+7?hKnA1SRog-DlG - HG1$608[P7#glitj8AO9%D'!tW+cr'n[,rfs=SMtJYmZLoNTrYbfP*0pr&fr*s4c"qH2'aG - 8H`4f8$ig"^O5>&dAB>J+QW1kX++C0%GER.eQ>``M:7TZP60Qt+U]"O!ET>'\]E6ZYV94IW - $70Ab181NGJ4jkDQ>5KeQdO4.P$9[34iG$\pM(4J@S>5l8iV>"]]H1N6I!P,DFm[m_EYGQZ\(9D([;+66#;NK[k2k^hhT\VKCUp!:-8[PYHe3q]F6D7>^*tZ - ,dn`3Y*i+)Qju1Q4g!EW.6;*"FZrEI?;?=QZ3-e/6e>SN'oZEFLQ]mVCoD#;aWOeA!uiI!+[LJ,KE_l(fK?ks/TnjZ!SW0j-rD0K3SEOd3Ybhu9PCD%J - sIl"=t0N^"=J,eUIL6k/N'S1YI8`Sfs>>WN^%7+,i*H^>H1\aG1CG$DJj@^naSO+[6bXe7J - HD\@df=!5Ao6NVR4j/L^/mWSnm]3P*Z>FPZ>&$Z%9$sA%[E!R - lq<'Oi1MrVW;k^&1KU)rkBW3b\V#l0?E:T;E]_q?D\ts#`RPd!^4CcA>h2t.l0f%8PmG#%h - .8ls4<`YO&M.L4.PV-6FHU'MK[k1gmfW`uMrVl]_\hC\J4553QDG!P:55F7Qh+c,UIVH?CM/`mP>e;M(#?R(>.*Xl9:)_#goQf&B?hLQ)&=Z!AEhO=f"V41KpF - 2%=t5c0V94IW$32]pq-0ktT=Vd>'L)Nkj,Ap*K4A6&I_Bplg:CdOm2@OjVb`r9*UW0r^G`g - XHhQgR*Di\@]mpBF]*BM^.$r^)'h;$em7 - k7iSn:hAkN:41BrJb`BjH2sPN#?-sNK,Z!^-$Q'%qXs0d]=WtCT/1,?nNAbKjN3Spm[C)*c'gLo^OCTSG..+3\[f8^ - ^EPVn;FQl%I9c4]O$32=f99ff8'`_Kj9=.YA4?VD,?RU$^F-s(6\+]Fb'BO#kb*B;GcQ58tGe8.db*FVpI$"0qk? - Bg]k09A7**IBU[VacV]"2Lu)H!"^`pD6VQgkC>);N-IUOW=C@eTs,!uELj0Q#ONZ"(fa*BL - QOn(nKm2QTr]gASe[rR\g`-$Oa<-5tu-n%st,L(.jH6 - ocP>jb4LW0R`EXf;r+2M'HN*A&jTmqWO[afXnauePZQj-9,C6jiWjpdu1;cQ7&&A0qHImOjabKMZXuoN^1MWTe>XW\MHI9[8sLmj%N?3#BB82PP$WJ!-(BpOXDXDOq'6:/PqcTZ.5 - M+'j%g#M2E78&mP/JUn);Ir0f"TXnI=tTEN>JIIkrqYaEe.eo^W?QDmg[jUS)gQhQ*W>j-1 - H=r[%3'3BB#f@0@q0B4ECmKKc+7XO*jHEA5Y6f@;ekJh3Pan3k6,j:6:f*8DOcLMEB&ji52@Bm#PMC@")`MZ9>e. - 0=p?iFF>,m[SSF#M)BtoMtl-m].Qdd-]W_@**:kFu_'3Zjc\-,lLWBs?TcJZNkc2%U6)!@f - hI`fgU11b>R=0=CT:"&7hBWFTt92"mMp+BCIQmmB1&*"1U[?E+BY&rsYakiZh[CN+@(5q:` - hgRBV,U7(Br:mbcBW3b\V*YJlW_@**!8nJp[&)Up)]LIJ).G\T>/#Rql*4 - <12*2T`crI-F?_PE!aY.ak&B&pA7%o'2o>M%dquSUIK5:^#8_LT,51KcC?mQ4DVqpU&aW=^ - HXD+Y\2:R*ZcBk^AG(s-DJ(0D;*L(nc/CENsQIHZu=k$Dh%YRp8rk;HKqI?5Q"?b^WDZe7n - #kCV59S8!W1!`bn]jBp%<1W\8dc`I%d2=BO5(V+\cl+$+Kl,9oSKeElV_`JXs2*8%T1O4`Reldq&ELl[Tm8kN"STG\DS - AS!/5,`"SreQ(t,peUG+7un]+s5UM&f::pR_)H8e&8.H!fVVB4`$D+QUZ:@ncC[=nR[U7&C - (Ed,PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P - =4F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.);ucmu-V$gp#qZlacr+FA9*G - :qE,r*V#Zr@#*!%190PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff - 8'hZhNAO9#n!!$tYZrEI?;P=4F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.) - ;ucmu-V$gp#qZlacr+FA9*G:qE,r*V#Zr@#*!%190PmK#W9$gII6;%I^!,utc< - 12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P=4F<@5(P!!!!H7n]*R/JUn);I - r0f"TSOAEjSf6cr-P?/QF.);ucmu-V$gp#qZlacr+FA9*G:qE,r*V#Zr@#*!%1 - 90PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8'hZhNAO9#n!!$tYZrEI?;P=4 - F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.);ucmu-V$gp#qZlacr+FA9*G:q - E,r*V#Zr@#*!%190PmK#W9$gII6;%I^!,utc<12*2T`crI-F?_P!!"B:99ff8' - hZhNAO9#n!!$tYZrEI?;P=4F<@5(P!!!!H7n]*R/JUn);Ir0f"TSOAEjSf6cr-P?/QF.);u - cmu-V$gp#qZlacr+FA9*G;3Fm7>NjQ'k%ZN/nhZrEI?;P=4F<@5(P!,t@E)&_nWqsGDA]TJ - GCUj=Wnm#IA]'3ZlMTV]eaQ3mUEa'u;qkg6$M/N%=p4EKYDl59W,03YALBW4g[Q7*V#Zr@$E/W1Du/mPo*U&V0@q==FVm8H/*!;8`P - PmK#W9$gII6;%I^(\5TgIm!SkUP0bb9URZj[V\r+5lc'o99ff8'hZhNAO9#n!*=1>r;"L#. - mL84hH$pmaiMOoe^FY/5$Fs[BW4g[Q7GV8cTeJ%.0/te;Ir0fKb - CalRF"h4_"h+aQ8WU6:f2cFMj>h+=t5c0V94IWMYo%h4oNa$6[SOn=gr9SA7VM2cY_FFM>q - nmjN6cTCt5ioN#FZpTPd3kp%;6If9,h4S+N - OP2>$N]mBA:%3%4lhnT2C"Ug>45H]>#^k7>qL:Xq+Bq3E,ruF=Q]]s24YTm>O9PCD%JsIl" - =t9)uoB4FqQnY4?]mBE;Tu4AI'e4=hcsb4i3B(j2:q]63Ir4)W]m0),g(ebYUe.Sa$,F8gW - A:0D64$hq9PCDEFaNiKC#?XQd@s'H/uSFo;5-J%Q7\l+U/^S$$G'06:6dJ>?K59B;PZj&E3 - KGAZ$Q*.0k84Fl-^k=3niG[")pJ.W_@**:kFu_'3Zkj='T"ckF[6A@QD-ZHgeYg""9j88kM - _Cg9n==C.LmOl.\p+9O,&Eh>$O#]6h+=t5c0V94IW$(P"\rB1hA9OHTlF6O.opK.OsQuD[r1$5g2@4".\Hnr<@5(P-p^Lk - #qZlE-S@#Hq\Mr'gV%sClCCCqo>;)'BUk:*M\hG1Lp4pChgG#imC*0L'i9LJ.MGu8Pb=kqK - U)ts&f)6`Z=HO*4/e1+?@#39:8>U]N/Z7G-cK:tmFnskg,(ArE)*c>RF"j*">*V#ZrFPs=g - M_N]=XQd61k[+2GEdmUVP!rc0aB$qZBX87j!/$_hJWogGCJsE)*c>RF"j*">*V#ZrFOBIt) - t87n23bfO@06K'HW3!TiM-GL$Ru\od0W4*K8!UU4"93RL`96;*"FZrEI?;W/6T6:0``Wk5l - iM%V,9qN8@3l`/fa'PP>!_08(-:o6pS?+Y:5H],71^cBe?AO9%D'!tW+cr/j#eui:o_sMh? - +nb?o(ccWtqXs/MT0Ag8RsSe`o^qdN7urQ-IDUXD?[r#sN>aYq2@+O$KlYA&/UQQ@8'7)I[ - t"F,#AfEd$90D:W_@**:kFu_'3ZlUgk?+PSppNMX8;)\r6PDeS2p2\N>omHEoP#oET>(;rU - 56Nq_tsX)IL4+fm^O;(pnGOf#*7R4(_^(<5:NA;Ir0fKbCalRF"jjbUaN&_hJV[pXAEXX8i - 1rmkS)]Fk,*qpNA3-d\M_&3s)o!=t8I#BW3b\V*YJlW_@**E+Un))FFW35TfX#5:OX!BEdaDY1ccO:cO,k)EX^Ah,.On'g_p - P5L1G^i3R_0*tm&ZSuY$JZXc>MCF:&M>bVqR!`,;1_=jN3U$euY8sCY"_!;Z["%VG3Nq()F - >ga,UND/ss@5-Z>te=]pLj+'uBlfl+Y(2IXIUWDf^PGEDU'qtBDM:/4hIX5!*6ZY.UAdn.3 - g`EBQ^djB'(mG>N\r:@I?kJTYc27IpCA7WWu`emi6p?^Jl6lJ:=r9_sIq=.H[C8@p"(d"[f#3M:[6H/oBE0F[Vjp4H - hZr\"q;4.f]LGJ*C$faTr#nbQ3npOWA:0D_Dto8HM,ZU+#VJE7u\F`HEoTM$"q155aoflIDpO.oo@@V(Q,h]SD - 8tGeqAacH'%(gpeNYT3]'PIH?_q*dF#`2`J4gPq+e1g2tQ+0uo=s\)71V3,p-)4T*fdW+rHhWt/Y#A4rk005@?Ua/mIq`qc:mHW,r9=]*)Zk(jG*e4+XO$EVgi4smo=0?X1Oae3OW_@ - **:kFu_'3ZlUP?OD0\`]P?^)X^Y<"H5<^3&V&=YgYjbl\1\L_[3 - t-]=8TSO[YQ7P&+>KA3nUirccUQ'Jb%nRAcWe6TZC1M4=HogG,\V-\V#04):>k0U#%+44lH - PURi`Z\%Ct?[_UtmbPM:-YA%a:trEqXa9XCn`Rk:j_k=(gJVlBGOA_j-Bjpg]4fTdpYL8Cg - +A2r1N_j-.p&lE^)DLWHLL4X^OO+R$16HS'.m>W]i4.GWW(1)mfWk#Mg('VoX(/PHa[kM^/ - d+s]2bk1WF*DhU9<34J_8W-YJ:(JABC!8D-+BkU=/J_A*3VU>Zepi=K>ISgKob!8sLn!jd0 - =lgU>AF\J[e.PmK#W9$gII6;*"Gb08'dnr6VRnhKo44ibaea:O8?Z(@(\%R'C(,JAHu[d&u - 9%ho]l<46UGR@-02e##hQ',0hN-oj;5q!d7n4uqgJFm@HgL"b[[4am2!M_DeXedgQ3If9+? - ;,NL36UQ6K]SD8tbRBCD.FPP8:RU+@3_rCS]mB?E0>/X;h(iQa9URY)jqiWuVb`ZZ>E4IN* - AA`a`9+UE]6a.M3"rCl]8d+GcC\LFQ9%Y[kigRJH - XQpmn1]7uDiWU;\DO`/ - H6E"(qC.q<[D)60dQC8:O]e=-^16-=Ka)HYB>b#s - Hsl=EJqJ[tHgEIc[U-+A\VGTL_]WrM1B"Bpeui:/1F:f&;Ir0fKbCalRF"jjKY4t1F;G609 - 9usNGF*,(HLtnHcNN)l1o%d5qrZu#fJY%f[a[XQ9''8q]k-W!@[BN!ZXIM6h,8/)'u7b!C0 - FeEZY%J+SRI?f-,RR;D4$:QQ?qoM1"1Uk?EID=KS0II?4@.H<2!pKRV(BM7pI@Q]tM[]hQU - G+N)(QX41fRscK7ke>Z$-*Jo#d"Q7lVE^b<[M&6C7.s'ieM>,k80WDJ24.MGu8S5!$bQBAr - VmaS5"lC$MP@^5Rie&U8*d+t-IBk#i1BC4MQmA+^[_D^1EehJbad&kXFcC-W6L;S"l)`MZI - s8MohQsm7/`Ki)[B'juq[a]a&p6k\K^q3UK>4pCE;qAZ$NbPIZX]i-nMpKY;2a@)q"4QGAI - J\2?'1bnpDqqk-kn>IelY6tN*,P!M,#5%+*dP]rajdCpe(U4WJsIl"=t5c0V94IW$>6\^gG - U;BK[#uFX.JRhHM6]>qJtd@/R,ZjiCe>Hg/MBV&$YMEh5:4VR;3>DIQUaVi# - ei=JGic`ue>V8RY8OO,oY*;R8 - 'q?647>-t5.Qi4"eXI!:CfcDs>o('*Z-qU,/b(Q&f-"s85Tr#WZN#=E@GEG_)>WLtmrnqYR - a,d^MEp.rS#7e+aDQ__lL$md/>ICetCoN,+rC1qod\YM9OkW8MC!iZ/]k@,W$SR;gCj]9`> - 3_qWQ`=&dB)8Cnnb(L@>BPlEfi!MA1M0`H]fX0Ce>cM!HVCD1P9pLsd&gM2HVE@8'e31mHM - +;Sq#gg'fP)7f-;Cf50M/"8b(Q&f-"s85Tr#WZ(g1XRqQ&t@4U_++ghn^C8u)5!1WQ7>Lm[5U$ - njH2rIe>Q6PC/s*Qr8(/\IB:!pO+U[%dn`3!P*0:%H?U3RFI*HT=__IK$Pk:tC05JlXB;a% - 316n^&\>fnB?89>1]E^^cTLem_hJW>aBcE$mG,7YVl+0["q=mep!niR@DM#0P=_LFb(Q&f- - "s85Tr#WZ<3KV6G>Vf?%:JQH,9rsqc'ej'6\PmaY#hg`kg?.A/R#MugU8+aFt?q1<3-1+Zt - N=26j\Ku<3BKZWlNTP[T"t3Z.f6AUQ<.bk*mM]LA:ZCc^H`WpYUI-Z=M(Q8X'#Ckp,dmY$/ - 5Jp$:3_+"]Y2"tT$E]X,:kB^c'gM - !R6>idA2-"r0eSV:ph`Dp/pn?n2iX^sV[^\ATG - PA+;X$T->`!P"o;^\V0`]R\H"G:d-j1p3J7RMiE_HSNpXnU;<>_55F9'ic6<)fA.O'\T[A/\1AKp\?_TngV/+5FJgDX89Z - KP#5n2LD`(!W:J]l]HabsYT7?k9SaX%FT5q`"DBF\#.MGu8Pb=kqKU)tCP+.qVA@Z:==7,@ - sf@SWqi_$:a]63F_k006KN?]4qU(81/DPHkCT:p-qmEq\amN<)R&QV&.7MJ!M5JOO;cTZ/1 - nUDGSp"@MA^MJ:1F^(kJ-Q=$q*"M")dh)2jp`tQJ%3+Sm.GbH,9&I:,o3m9-V>g,OdiX);E - S[>&qsHOu'@Uft2Vc_QgXW?+`Bho-L%=?Kc^m:(UL5Dr-hloV96VB7pYUHZ3&fZZqYg0GlO - G*Ke%0\f%,M6DWjDZ->JGplqqqEkAE6(d*cSc5k>'hf;c6N3qn6:IG0`>GS<69ZjK@k/![t - 3-g7Qu&Y[Bc-EohCuC>HJ/mZ_f(>`BXZNZL?`43el+D)d"Bph-4Ip76Ea1&b,6U8?"cQ3np - OWA:0D_Ps%hIG2bW-R0j'oh>DOb*=KR9:+5#F30Rk=05Y;AAF0D2]DJtg`qkBP*hVME0@** - <8k]J$^E2Ad[cjUZh*>(1\g:9T76W.GLORK_WOI^6rJuI+_oN7YGiFQqf<,u2EbFa*?@#1J*/oh7HLtn,d2FiT?uU"\[+*iNEcO3am& - 3!)_5\$-04)Ya;/8q@s*]EOWm4Nrqbq=h-1 - =-C$YL,#P$076T4k8.;5\9Tqt'^>,k80WGj=k[VX>sDE[U81TIAK^BP2iX?0jq68M_&DVMC - (6h00TFbfAA^V@Scc"a5-h)[g4/(3$UHd2?2k2k\Bq&NC9=I?o*c#'GhBDC;,hs&FjO>W)a - XC&`Vp/$GN(LFRgSaf9@6q$66cerkc*8FGq>e-U+2;=!'.pfl5dJ0*dIf$88bA6V94\T[kJ - ).^%ll0lUTfo(,n*b165`\gU:tRVYcL=;56Tp&# - 0$.L_iHsVq%H:b(Q&f-"s85Tr#W*)#:jq-oJ$&q-RUUC#ms-e##jGG3#%Ghf?gm7f'Z0t>oD;3Y"BH&mJe/cfih*!e[ - g8[^_Q]R<%gF0i7nk3bRmGG[np6ahjeK3]&B:m`LnJ>P[dFLH]M3]V)=t5c0V94IW$E#Xlc - 5bY/=2Tb%e-R`K(]Z#%)*OJ%4tR,ZrAG>99ff8'i&>oZt[+0Y%GqIWLi7%[;4AhGIG,-n$[*&f[s<^ - cdoOg>WYM*Kt]= - V]fB'PD?QBnD]O+hKMda5-UV#?qcq&eu1FRIr;[ZP\?G^+JC`fJ`P=&8_6D19^66F9^[cr- - P?/QF.)<&bU;:QRF4EB(SQcHb"SDj'X.ofsUJpn@EV@Z?hJSut/8\Lgg+qsCl##OKm8McBl - Uqtk.>=K5=LK1"=qV2?M#H^Eb?Sp3U!6bb?11"miX2W(*;`/##Z,>Xab8Tt_9[T)(stR9#_t!j/0-B*=6Fj - $(&]&T17;S.,>W]ab=VG402E;fY+\pKm9S8;^aqmBD>gY5qVSpU5"eJKGP+@,hEX&lKBoCR - .>o@Ua'GMPP)fi":rBqi9mCX:5:%3.?(HZ14E9s[>_c-4B_>e%$3YhHi?]WGDIDVB`--rE> - .aY/fD6US7/:pt1C,N%""+Peu^p:gllgt/]DeZ*E9XKcVg9$gII6;*"FZrEI?;W1TP:S4f% - [.sFVO&]!I5E'tLq8A+'17Pdnj+cu:G3$`,]&T17;K_GQo>rAP=>f%,j2Z:Lbk(#D)]?f$/ - bS&aks/$k1W,I)LgQ\q - AY1V$^5&<7)b1p?^JDK=q3[le6tJDVWm!\Ja#&?U*oaI/`s)2@lCJR]8N\p4HqcD;1rdj*, - `mGhDKQ;Wa^Mb(Q&f-"s85Tr#W*(qG!VjMtrY@cSRinlsMT[u?Hq5F^M-FUusUDng/>J/K4 - B\mN=6O,l4TP[.L.?='5kP=`Objr99l?@2&sm2n:d'U&>>-RW[??F+6q+mf,eJds'tL\^oBHhp2(OkXKa([B^@=U\&>5%` - $:-SHP^JIJA&s/5XhrN?j#b)n%JII_2_e5"@T9^ZMEY(qsij"XI7W4m'V*+labm<]]ZM3rF - RqMhKuAm\T9(H`_P9sD1r@Zr.]>$_@n=(hd?lt6`jP"KZd!r3UL*W>U7NsAkZU3EWSl;>_& - Zn#qQgY'J(c^<2icLGFAKM_SSXL:.9X'mFehDn5bu9D+\Y5ED&HDr4$]u2/:VPgJdB"0J%/ - --*(j]"R=dcJ,]8A^rORD>57-X;PZhqC'T`1W@TRjW(N*l4fCfLA?"(f-5S48+Pai_Vba94 - 'YAsX=K5H+/n0%*JFHHA-Vp_&Zn#qQgY'ULI[V@Fl/( - GF(Gbl8m"C4%qJG6"U="nT@p^6@H1=A->HiIZ$$A]pASgJdAu03>;]@;/5K9-$*;XDn'eW` - @7/ZOmc]_Oi[e8P)Lj*Aj4]Z@!sp.d#mUe07nue,]XU#WFhjnmp\pLk/GcW9W_7#(qL'c'$ - fUqtga;aYF>&=)$6efo@(7<1P(5!jGWaJY`E#^f'7sQ3p:mlAKd60M\F=.b+,ZVG3O,Ik0# - ?O)sF*7;YG49;PB]._u82PURj4k/E5p=kZa-;Q1$l$@IauX?lWf7R6b3Vdq#U.a+=;Wm[V1 - $YkeR=mF(j,DDVX0O]QP$S:TfWHt1qNfFm[YLS3(i?9?fe@0W*q!Pc_aN]q=NHcZJ99g/m. - c:@Zj(7Imq)1)?]=:Tq:)H?jcB2^lKF.oiSpgnop1.W - s./I/3>Ep0!]Z1t&ilfOrUn - e:n)(1T=+u4%apBU6Dul7S-a6QXC.t6`SN9^u;l0tG&fA$M0(h2>eh$W$Tg%'UnB5)eYZ.$ - uV1nc9l8RUJPM'TZ5Ok4%DdI/`Zd'6!*BSG?(2:(?\o-=bC'Rb0r5TMCp_E\cD.mVHUe-b\ - :AXV=GMbQ5r`l;5.L[k.:11&O$aHJ# - V8tfD/#CsDk:qFV+R#qm'H0;]bCCHg6=!_K%`Mc=mGkVl]'BZbimfj0==?7[FD<_[o,:)'G - Mgd2F_.b@RTQu(!)t0HX^HYKZ].PY#qr\\eMOP'e32Pp%;=4QVrC2apBU6Dul7S-a6QXC64 - RCR@+q8S1o?cE5$J'C=Pqd67XQ:q-3[\YJ5b"_QkpG/6-;!Bc0'[ZuGp8lIF)EZRh;mX]r: - &Q"gk)VKU="Q?r>q@GqY-*^4tMhVS&&nKYG4PI8n]kKZs!SsPe1K\G'-;P]+f!V>L#=7>Xl - If3GFnHOX)baC7m\oc&^1FI<@B&o:cISk6.WilIsPnR7LhuYH0:11':"DQGg)0M%&042FhT - 0@6GP.KX]Pq#epDhYbQg9tikD$6.SZaR6JB[K/VI7m4+JWE_O'OS.VM4F.te#6+giX82[m8Y`'5p@Ks*$$%M.o$jX;e-_6Y5;$R^2fIQKDSk5cS_=Q)D_3gT,5%g6'DR54"&p$7bkPRhnJalU^4/%)Ksh7Mm=LN#`Y9KGoD(8dpJH?!!,9s$B*Z#V_?/;\NKaKA*_,=jqQ@cq\T[ - !pKW`1G+Y>&?9GTkiD@IW3kdOJ3!Wr%_l0g_jV;&X]Y_?tfs7G/97j"_#qQg1!L>2_YZ,#!&4[rP7NI+mqssUHSiqG1'M2R - WL+mi>>\T2PgY5XGB3ad-Q7B5L'Sn@J\"&FpEK_Jor)'s9E_:\)H:f\c5*I?i(+ue9oB&Y^ - MoFA!pu."lk\-g$-l,ai<.BCIlC/B2o&T?7p6JMu,LgYsZ5NVG=9Vj5A;P9WW`QBAb^*ZrE - WSl;>_&Zn#qQgY/=SP7U5j_$0JbM+EH*^^L%!m3U]-L>042H&Dr6Fh3?TGpA^8C:2f>k,#" - t4a>On,a9e'/C,ht.`hnFNgVP[%T6>`W?j2Sa]N-at[7_sY(E,b<@7>pTjV-G./QBp%S>.8B$C'kOs7-UFjSJQ8eCms*>,Ba285n$_AQ/54=AbHqV/G/&R - :Yh=?+O!%OXpV>#3O'nMcrBpVG3h[U/\-YK36g'[jC;(%[H\od2R\7S$);Guu?]ij'"?ORO4R[/ - ?snm/hK8Q9PeNfG[R+oB+uD;2Lq[RU&n - ]1P$mtI5<#RG,$^-,,)`5gP\BS3-nUg(n?-'/\od0lET0BkT4M._Z:U6,TqS10VT;ndk007bkKaP6c.ojN)>?Vfg9hG33[A - -rb1Eh(4$#D\CY%jnOX$SaB]>>Hbk;*b$E[OA^3B%;W&d:468i]7FR@d>J\QL(ll#K8LD7J - ujr5Mf&fqjMLkn$0i'?bf]a"ub`;Z`QgU?qRq2*p.>0+a<]2ke&)*.)B"dUVcYZ/CA=K7n, - ;LsZ<*ZeX_7Ld@G=B`"CcX*YQXeA+;g=b0HhS#BeQ-!.ombPKVY$<.MR>c8IDVVa0_#eCfl - fQH](G&ZBZZ`;9IQi#GJE<1X6N6oY7un]c$HQnphVR,_,E - hIb3b!eUc^l.5AdnPK))uT.W;]t'=g?RMLA+*%af(]!-^fC"6EZR-[r8mh\_5]jeu`.8Fd] - $irqJi[@>&(,L9X]XZ=HO9cl'TF+Vd1jrd;bH*W>m0s7Y2cZ[MXE5[\Z/o!2iMZL86s##hE - p4ad%/^V>81D3FpUW:ATLCBk7bOEUFmicLoBEX@6gCTaJ/ - ,\$DdNusuSF(U=G/Q1HJS2G)JE"+@6Au1Y<:EJMbY-+pg*^.[4$O>*/:J]=(gUBtK33dJ`` - i4m5e?3)HEOWm)`/ru8A"&mV]=YZgcXm#^.WKHJSN:m+m`Y(6s":`_3P\PS"I9D)!)&Rj== - Q"QaJas,-B!2SbhU)7@o*N.48%pkn'Iaqa,V/Z2/;d>GMe8R3"[--3tR_#6D6`".TNKJZ!t - \"q=9C@Ck2Wk`;XNCiPUGF7>jd:1OoE%5Q:Ff]mB?T[r+p!K:GKns".*B6tUrKrV,3-4Vh\ - US.Sb!\T6fQC##R[Rt_@k8\c^m9N:T?oT7sfK*r;?04eG@;O_/t>E!g - Y;`YZ/CA=K7n,;Lp/SHhONDG>JDt^nsQ`t - Dc5#JLh98;QUgpA=Q,uG2.=K#$RPEShr/Uiu)N>mf0'q2@+K!i"oE]Y^5eZ)WE(-jKJ`^`X - 3o'G$cQ6"uKkkN\hP:M[7G_ZbLL(>@iCXt$u4$*ZP#P,pr5EKA<@).hr(DDWU!*[5>3+g"j]9MA-4"q?gO:]H'8R2O3/eSEa;;5 - o)Q*&qnfAV]pBdmrdtIer:V;9)3kYZ*W6V#i9b;WS%I$8f]ggUBVb^SV^(o?TOKr`n"Eo&n - >KqXeJ.q[Jjk*fV'qqY^/qfZp?\N/;,*)k!p+#G"Ir@Udf`9bja\S:oCOP!.L0F__.>qGjJ - XR&*5%QC@__VB^+>.^u&LLO]@&Q_fE_99uMU5Uq[-/Rk\InV7-#Eqo-4Z,]B^YZ*W6V#i9b - ;WS%I$FE5u:f+cImF32+Un^81$B2a7]Qis5V-d2[(+jjk_?FX8%@4",N>jgB0O\Zb(+rk53 - (p8.,Y[f&Gl%%]qrCURg:)"HZ;DgG*BSFDC85-)e5ndOZIIqg'0E7jq-1=GAZW`$ffX\o^MO-6cH@&ZDd":#0m))EUXhRokK7e5`g5A\uVf<8P>Wf7Fnh;-mcf&2W]Y$ANYR - $6X.0EGR\b!M+>qbKlOKS>*lj[ia"6U?2!nOL]$H$OZaAK:&Dod#$4IU;P_HVt\@E[5uLR^ - :KX4?YimIJVRDdSa$FdF$A&[\Lk@\Nk]Ie0eJ_baG7$G#N,*Wg26$aHQal.OVH"^]di?SA8 - $RV?mY>,\*NGV+N0u%O#`B[VacY)`P&R>EBa%rr0@7[`!55f.^aV&32tKV?0Cb$ZXAm#7`S - +ekGkb^'Y`$:S0gVc<3Hp`JYPML(.XbAQ5%]KiTMDSs5P^aN-r:-HVZd]6sGFe##k:o]_Rl - 9qORqp5_H;:h3W=b*FXVcThGcP%BVVC@[]MMmmW^?F+66-kH?(O":kOgiO,],.3=4g!O - R<'TB_C/kF&YeLhnHcJ>>,:4-dS;CPAr#k21VOG#qQg1!L>2_YZ.7taEWXP?2j]d0554qV* - [B&X]r8/Rl1ET#:idnnRr.4#F;4\;Q3^!g4BJ97*Y6GN4Z]K)aRN->Uc\h=0Gp:2b74^0d? - c)$kR&-o1@]fPhBOPt3FeudQ-?QTjl+gtb+q"XBSMi5cNJ,Un5%>u# - UDIHs.J,]B;kKagX<2uaEJ:KY$k1$A/LTq7D1UHrNl]Y3Ec'pYUP*4mBRN0e%oB+T(=&818 - X=;>Qo]ah;p$1*%mbK*H$F-)W]QpjQBt7j#)@8Q1[r.aUZd-kA&t7&Ng%1O_>oGkP["O:l. - TWWAY"Dbsfc&V5:#AVoO]0.:R145(!"iP:'.\LPI['OkdaoD>ZWuq2\F3j, - aqXHhZsh4I!/oj9&&?'3HaB!\@>H@&ZD(q"jjTfs>>6PUSbAoOu[Ka`lWjQZ8Of2fE"HUs5 - Af-SdQ.r-0u+4EKYD^V@P;Kl,YWp$]ZqDV)$30dBRuTgFG?(+`RnABCiOWtHKtQ;*+P@\57 - Wl!V!M<'Ga,FQ15q"Uc*uf[u9oH,kpc]63Gj^OL`;>?`I&VfV%H.JWnA=Q8B$n(bI[G4!ui - './f\Empm[M6-[NKpjl7P5gl=3TRps1M.'C,uQ48=]5(jq=u$nG`ZV!Y[PG*%MP[RfW\eB( - +hRhkWjN7e>Q6)NfI2D>Z"=Z;^%`Qp?^HY99t\=P0K-Veui:?AT.MEo?X4ep?gW/mbN6GUubKF]"qXp%":[Zc6(V'Y"Y?sNUn<$p!\Qojl,q!cV.p?fJ:n`%HA&,Z1unLj`hJ>LBp//<+)Q7=8d; - uhH?J>E;IF9sKu:11&O$aq;?6 - d/"I:MbYZ/CA=K7n,;?6cD!gX/ncm>nq3J"".0#1BH"I9ApckEW_!.Z\QV90)q'lX2>.OVH - "!.^YkV#gX=#qT(O@&\YaYZ*W6V#gYh"=t8fTM&[lEWSl;>_&Zn#qQekTI4-H!!$:+99g/m - .c:@ZWgpk&!<@G_f@RLD+@CkliE[Z.!/LiF.OVH"^]di?SA8#'z9H707SA8#'( - LX4_!_W[s!!!!QEF>bd!_W]%J>LBp//8-b!!'gQJYgKq//<+)Q7=8d;ucmu!!!Z;Q7=8d<5 - 8Z>Wgpk&!<<*"!)+A7Wgpk&!>f.CEWSl;z0QCL"EWSl;>_&Zn#qQek!!!#7`.=c-#qQg1!L - >2_YZ(T&!!!!4#F6heYZ/CA=K7n,;?6at!!#\4=K7n,;?7SAWH&&5"TSN&!&/D#WH&&5"^H - SSapBU6z^r1f#apBU6Dul7S-a6PMz'*jgQ-a6Rc"^%dp^et15!!!!m**B52^et1L@&\/J9* - G:q!!"]m@&\/J9*JRNV90)q'`\46!5QO(V90)q'lX2>.OVH"z!##U'.OVH"^]di?SA8#'z9 - H707SA8#'(LX4_!_W[s!!!!QEF>bd!_W]%J>LBp//8-b!!'gQJYgKq//<+)Q7=8d;ucmu!! - !Z;Q7=8d<58Z>Wgpk&!<<*"!)+A7Wgpk&!>f.CEWSl;z0QCL"EWSl;>_&Zn#qQek!!!#7`. - =c-#qQg1!L>2_YZ(T&!!!!4#F6heYZ/CA=K7n,;?6at!!#\4=K7n,;?7SAWH&&5"TSN&!&/ - D#WH&&5"^HSSapBU6!!$!8f@Tchl-kZQNl-S\Z`p[l>n0\nW2M+?:X?.I[n`JT[:@7;#7hm - :>nPF&YZ*W6V#i9b;WS%I$31'`&/#UrjiS;S(RMo:rjtmo2C2"^ba+!%^\sIBJNtsLio2"B - HK=&D0miW\mbPM,XBF#rbUi/?hR$u1mi$c6J>LBp//<+)Q7=8d;ufUXf\"h4B?o/agJ=4mA - a.X>QS2]@8kS)KP]Zj$r*3N5kKK>MCY#Qr)`G?UpPsGd9(M&bPAGid;G@:7&RE"lD:u4+;l - - @oU'V8<*B\RccC?oDp*E4h*.@_XrUf=fn*6,L9\om*) - am9#\g=ihk"\T$=#F6heYZ/CA=K7n,;?8I/gt^\<#Jaq`B%O4nk?TDJ#(rUPZY%)1C!`N(V - OqBo!L@K[>e>/2h5d:gEHcV>C^l[;N"7I>:11&O$aE_(F\dqWcV3]SiW8\8c#E^=9,\LNfS8JYf6]Ub - )2]Pq,NE/s]8EG3rE.o)%mjo<) - %FYgdc^PbgQlqNU6=b*MG9OWuCd_GYsTJYaQ:%4i5[1`'8/(*kRf:ggPe[XPq0I]Xh9M@!dEp8\oOJP6F.PO&j<(*p@V':`X!_^e,=B\m+O6NH3 - PB`G9`9Z$YF6Ch#gm=NkF*`1[o<)%FYgdc^Pbf!>:7OkWVdmc-N30ooJan;f,'j\L'gXYm= - DHFJq=EdfBESfYeZ)V:6UQ-cai_JS$\cpQ=gM`1Y#,4-WTc)o9-oouPq#de&($4N0,RoGV# - oZZ91AIk==So90!NhVbO+&nbEXUPeYDs3cTf0io7hI?iZK<=e]4&`B?rbenmo`T.SUmbC-# - &5;NnlnZ;3*FY?"Q0CtW%%DQu,(9*N[XO6RF'=-H1U1KW)4f$+;1BK=0LK - 'Pq-?R@X+4dKfaMHo^(8;8"^#M#@& - ^eS"F:09MWcq%"^#M#@&^eS"F:09MWcq%"^#M#@&^eS"F:09MWc - q%"^#M#@&^eS"F:09MWcq%4*N;>4 - IgW#'OkN\/mc1]cE8c?+\1?Ct:_M - +1$:F>8#Xf^u\3HJ6(>e+Fh(=IVOF&7%U/;t3dg_l_hSbf?2Z6*/rn_ - "aM1>7LCPVSr^MkcV-KVQg?d:d&%Tr&gU>?@meeC;//?QJ@&XF+\`hI>,9e>QpoS,NQ8s$K - UfL6h:n[q.4$A&jfU,)s7n<%(]=3"QhIXlrALTC"6A5csX]p"bJ-!i[00ascHq6eaKWQUK- - ?c:Q7[OO+G/oU`mFntkT0GPM2pKRjaJb8H3pC-P;Nc"r`:8QY68W&K^5rBbSiqE]GOCt[Dd - J`i<39>hN5f5;GThRc`j+%Gf[u`VGENH%/mXpBKB.\27uF7c`f1poOr+T3q)'j8JsK$i9DD - J6rqncd;iI"\+!4;(s+(7WQ7>m,q!W:baAK^$rE6I=&XcXuq[!Q8[r:/IE,b$oZY,OQj7(aM#/[SN>i?k3VI4o]]:g>:6m;ik/gNN;"27h"f&%nac8)[r:0dc'ug\B[3,.$Pk:4 - EcN@jfZB=)("[O&^etcX#*t,hRZ#HB2)$_'p?^I$MA0J=)PuJ\?[a/N*4:RTY@#$c4*GFk! - X5A7R1\FE6\Z"hF`i-(jpbf0A7S>M$!h2m-8f@M1_haq$`75RnQ,'fhO5@Y0n<`(. - >/Rl>7@2FY#QH[C*[EKr(XP5XU?5]jDDa,YB4hGpT-`3tJLR@BZrEa'c+9CZ.Q7Og7>$:7TtLH#ou=P@Hm2R5Sp99U[ePn(tb#5(+RT==U&s^etb4F4#uD - '($m<'Lg#4^]!l\UIUBp-o*2!B[itX6s/Ldq,MnBoiLkC7;YbrV%Tb4]6:=;D[b&kUIG]DD - &L/faT/VO\T0HPOXEqrfs><=,U>p]5s7ju(^qoqXAJDUP<]*F;d(KAaPrL8'4PU&qXfpA(i - XS=oTUe'W`5slCgg>EkDI(c^m;sl)107$k1RH.p&n8bEjaVU[%:']4Lu;8B#[%e]5^c'Vf' - f`f(c[YW5]82(C(jnDM+ip8)otefR,*PYd3/Q5U>Id@io4"Zo8B3HM'N9#Ld(Pu"AWV(Q)e - .'9ft5($2%Uji:=0bt<:(M@5f_ueu`/!lI8\2P.Gf%8h37UYZ+#oJYaQHk - +VrN4`]USTgFHt)B5K+W(h)EXS`E^&e5j=9T9D.@3V"0]V%ZL'$>BWpkZ^$e[*c@^qfg>lR - U_VCgVW0Q8%ch)O=!UEkQel'^su=_hZ33+otfG,37%?Hi*O(&j!(VV39#iAa%S&+MWcq%: - S(PS*R@]rG3pdTd9g>`D;2L!]>@OW>O&1dVfLtGXa%UL1he/H>r=/j/1aKJa2g'bWDb0AVj - ?>.3dpjH2>T`Gq'($k6suu$OuI=9J,fIK<+jace=8O?;SO%oJ"Y6!/#eX(a\@q0-]iiTe0s - 86_hXtHKi5]a&\SC7MBJ@GFtM8!gUhF`_J0Ji1,ZB\I - /,mMnqd.8R@+rifJ40P%hGo[Q75b0=gM]\4*DT!A4ZI_h7Igq7`;WB`JTU=)00>)GH/Tpm[jm69O=gR7@!<]2mR:9fA2f[iqhS"9B^Qr - *2B[M?\!62%'[FC<`8$_lOe60P8rDp%(2/_3:\4jGRjmqNVQe^nWq>W/DpkFQjP$+dGr#3AhgbYh - j(HJO'OKqS?naEOdY,:NG0#BWIMA"MQAXl`YZ(bQ>Vp2pAB;U^cTN-[=^,+&3HHN"/hUuKD - r/-0]65e'P`3"beREn+/;9ai+SHlm.p&mdGk#6oj_m][NupT`5+fsE;AUrjaOjVsnJqi>#; - 7a6F9dL2*Ze(2nP2hS`6_G[6maf[>ol=897?Ku(#u@&mFnu>o^pA[!nk8B%NQbeb0gP->K4 - Mo[+*a\=I(tf.TNLU@`=4k0>I(=HW!bie#-!NDr5GBA!='n7MA-kC'rjGo*m^taUO6b-.;c - 0qXNUdgUD)S>-s+aokJO0^O?!FYsK4!D;;Y+Xf^u^4aT_:kq;&8`'g>NLCYIRG7P&hMj.ja - KV'k&$k-ZoKVi>(QIi9FbLcmLkc%LY)Dl-Cd`?q>!sFK)s/`F]Oohn/nrH>jVG/!fCe,%+l - -cC3Q;T"qc$0L.#F:8226^$_d9O%lWFVZ"Y[Bb_JO/2-I>+$c+=$7_)`Ed4*_U:ocHbcFNZ - C3IV+i]l,eh:.JEFRoqh/26AZ&)Zl?)\hf6fn:DpJ^ - CM0OY$j.<71"mV2nWp&+XW_G0.5O^lLr-1$[5^3fTl`f(d(MA.3UN/39tr00l_WB^=MK9MK - 4FW)lQUYEG,1S`k+p"*Q0's^pkfed2SjCIlQnfkPeJ\N'dHoQ8,`;[2]fcp@62qcd[q=CR[ - jiWi]^tJVWksK<=>`r$`:;(`3:<&bcWUT#mQc.e'+4RK$5OEbX&n\FI$(8r7!$bMV - :sSS;!T:KSNE1C_7Op[ZM^k)[VT*dKk\WDL?3D:@WnYFT4[Q%a]^1SZ_RKrpS\!?.LcP5p" - $6Le;fbC?8Ne@mQ6[Q"s8G1 - AV\BB%MWcq%#_h=.*M1CkI,6^=BZpoHtlSJA(c?39YiP;Pmjft - -K,h)Gd-8.P,TjCWE*&#_G0.5Ob9Spkf/RC&JIH^//30N>,U;7N0e3HO&jH - WP#r7A5sB;Q'65Pq/3.L[kBAo2">24Zkj*N>U,BT07NJTpnLUQ7ATFkih5NjiRn=S0LN6QD - pdABrPufDSd>:GCF6:!;,R,9=X)+ldfYFeGfFDKg0_<^]E,Zjo?qId;*-h#bnkCb>Nb9I"[ - !5,'<(t7<89)%:n_&XfX1_&U/GC29I_hV;Ah.O4oW%[C(\5MF&ab,s+r5SUUP68ZQgb[V`l - 5Nu^T\$r:k9jQM^==POVR> - 6A7WMC+3]B!LAW,26^$_d9O%iWT;rbC*hAtIG5`Ug_/q_CZHN;C(XE& - aYmXV9YJbLYC%U>IPl"dS(A6\Z!]/u*+-U5[RjAd3A]RJcmP$S7f?4?'Usl;NiCgS,!XlL2Lf0&4ND5Q)k0Z_C: - 7;Qj?9,2.AR< - /(\I#qWQ5;IQJHmFoGE;jSA%cr - *)Wr(-cD/_cV9rVH9WDmDU-_GV]33G[1siPos$bXqcQcY/V:I4;RGl-aV+DqVFmE;LMS9dM - lV3h$f9LZI$^i%2o2c@D>I2,>IB!]*BW9)^0D_M3I'uCt%YkQ::/">l - Dr1i9;C0r*B?qXaY4MA\(2h'(Q:c;bC=T?+\Mes:q.J[[^O"D.;kg,8TL"2T7ujOW%[XK:; - A$SHQAQfRMhWc?0JJSl`nnCUj_osd# - Mu-.T`cX&["r59D.rLUqVVRNj<6>&mp_YbHVu$;C0pd%$\?hcCI$Egka?/Fl:&de.&D"TgO - Sjb&`f8J;"Q&*;&4J.XDV_nRm\n9b'.8G`<7XqR'.-D7:a^8;DV_lAg&A\m/6-_] - iSibF?+4tB/JE#q5_0!"4"CY,/=$'"Y1 - aHM'!>&N99"mhCso,9jFV1!Y.\`/3mrh_N@G2b(8r7!$b;V4K_jMHYbHV3kab?.OV9YPh:Ul*6A]dR3X=+dfe?WZ/;YQ$Jm,#E[\3e.dPn4iP>-D6q3Fs!Z - >^4u0Be2&,.h4+1:8uaBc^$4k0&2'+/=$(gW7n=W[k>#@W6`cq5cu+H)]P!0SICgAkV]SD" - OUI2A?!V0*M\o4'GMgB6cZl)[7A5O6(+WFE\k - c;EpqNZ&5RoXDRi*\EM\`_0[nfOcOALI<@&\0=V4R1"G':_S(sPsZA=Mp0.2 - IqOX!Ao:7WZVWi%DP<(*p@V':`XU*3/mGO?HYN&P\3aPTh+G3ssld]H`_bW`XbokNcB7.RS - ,e1?kG2Che-PdI$>71i0-?I.+,S3;4"\3cH32>PDug>pa8=KnIB0!o<>6BUFK(kJMUY*0iF - lD(B?Z4_&nBU27r`CXo/4?S9IFE_p^:nW?/9p!7IB[EDJT0CBS?#kIl,'j\L'gXYm%9_uhl - dr+IgqS>Gre?k#D_A\frr)_,p=W``G#=1qq!k,d_G&3Pa[$_\+`H5MdX!AY74bioq=<$`U+ - /*>g^pVb4\JKm+&g\S]T\i``!L>4G:6sRs2Jh"ggka?/[:-t-e.&D"Z"( - hQ7='<-P<6"m%?\76q3OkU*g7!`("$f)Wq="\NoQbV"F!D>lR)H\J@B - J(4/e>T;oC)PMSs/?QXbF:Gon5^MK*&@E$YHKUeaMj&R9<6=e/G8)GPLN(7]Y(%_p@u'.&L8n=Y:0LJoR*:)W9!7d4TgR=87o_@o=YEc_XoRKL\pW - MU#tmoaC"*(po&Rn[?*%'Q@&\rg"%u&obsb!c8gn#Y\8W=\7urtHM>R&9;`cN-NY8b@2Jq/ - =X3K-Fp$q(_e4*tDnA9u*Q9&j70]>Ki1hgEP^'J+?921+F&VCM[bu1H8T.[dA8sLmJhhpF7Gq>Y.iPL.sJ]=l2QAXl`YZ(bQ>dS(A^]4;FE#HFgn - r(^d\@T7L48\Bt1P$=cc-:r,SiqGoQS52j/PXJf8L%2[))Z/nKV"&i&PI7gF;/Vg:n^3FT# - 3H,>V%`9EYFg#F!gQ!R'[PZ>#anNBjdp'l_NC7^An1ZC*Q3Se8u - -$oB+!`J,hU!kgZSqn0SJY/o33Y"Bnp - ?GVO>b$,"q@J>l[$J\'?CR5/=d',)[68s<&/>pKG'/WS-)`mT - Ksb^JW`foadS(ALCYK(iJ"U4#5SQiW&G4!ui2r`r\74g8bNZ8ig?5 - -V8$!QVm;5:)WS2bLTCer$ELo!R/6r8[,K*Mof].X4^/[\EK6:N@J4?VE=`eL#$e3d"o9@Z - XBWR?Z/Y[@KS^F`ToK\DI6/2\RoTlAu-_AhdmZ(q4+)$0:="SEN)<2NE]C?4qnWJFj_919E - :79c&r'buue?U!F@lIDp_r*-'!e>6.NCY#S\[_oD^?c@m;hn=@aW]Us%eG]:=;qj%DkYVpb - -+%@56F`RKH1JUmnNuX2A-UR^F6:\\Zsle%4@rg$Z=qX[Wn%/CPu&X7Mj>kpNk4,\]tLC>) - 9l%cSND$2hN4.nR;qA(;hUo9O-VA%QFchUeu``K_I0@!?3?P - +.g(sdG+B-J\o]_RelIin"41--h7-YKe99i>IXfX0tVq%_CK;C#,>,mL=$[#\7%]ROXN5N\ - s+7%O^0AIeHhFMrW5=1`Q#n=3,kO3kKZ)/k+oFtHqPc-ldh'L<9;8f.8Ai',/:?m"uN.W,31"(L)*,G%P - GBQ'sRGNZC44_80R'Q7]8BY2hf@S2dcBM\[iGZW+G:lB*;]=DI0KT`[#e`q%'BPbf#H[V\\ - )$Sg=?]6:1'(BIX($m%ELUbPLd4'&j4lC+2_J>J.'mJd(]`JPD*mP/b.#n@GWC!`659'G*C - 2g'2pZY(Z[?DY)D"M/^>,2=D`e;RN@//?QJ@&XF+\S08d$1$3HVq.(!bNk7K^Y`n`\<5nI" - X9,re('Vd)0&-33Yd=+V37G$W`=tR]O--`jis8RN"q4:5tbdWkr7@`_=36m,NLD)6(InnN> - l=k7=Dm2=0>fJ*7bT:0L3.>HhZs-[rke&HXR-h*2$%lPesqMiu$N-ZDIQtn%XepjS%ieLJb - Fn$Fr<+]66oJZA"u)>\iC6(m^'C26^$_d9MpAe2ha;FAmb:T0Hti-QsY,>.&)r@hn!gkK]V - 3kZU5:^qbL'=dgQ$h7Hb3Y0m9I:l-aY8b^'6f4aZ5XhS!uSGOO.e+&N6.,q7=5o?TX"X"%,LeG8_!W - D,O(qGbu9#1Dd^rVEqG9aJODWPAE*S)X1=0k846q.7>e=ag2(:m-* - VTh7#;OTVbRu71:S'?Tr$Oc\uSeV?qH7_KT.'J>FH9%4i5[1`)u><@' - C>0:b7QQ@7;olIDpKQ+1el!Z@;ZKn]@!qN?CR)3+:Vh4+79:b(Vijq=O$5(ITc$FR.L0173I^lBS9FkG:hqMD^;UqF\jiX!VA5 - #WBgEJR24$1&!7ujC8G`Nn/+t"GBd9XJ6H2$a_j2[4a;Pf8LY,tp;Nd^pHhbr@EGse-*3\< - @4jJZ:lmdT2Qf<8OWG1#^3\">m7:3I5[`ejYVs+Xdb;l37Qe>ZBC8sRhQQMd.i1#rE1nF2P - 8<=ebb)cEo1p;I)+7J%L#.Y;=d)RWNGOTM;C;5d;7acjNM]=YCCI&%%\/1hbjc]F6?:h82K%:uW\>M:+-q,LdmF$tisXQO*^'5_+-RAggt\D:l\ZE-[VacBq!d5u?Tt[;UIPhlS#B5]9#a>V*NR\b<6 - WS1aD!<9GG9Va.RhIB,mDl;ap]ng8r/FbCtc7qgA>FMi5*9AUjXO4/`b-ZZkY))=Us4r4AR<=utFrqhH]+%k2c]IYr9Ml?XSqsUQQ(?+H,hnFN>l - IN:i=V<,2-qK?2-NG\4d;*-h#bnkCh,4RJhnO*^YbC'GcCI&+PEV1CpQ,?*GhgE)-ic>OccZhk`n)FhFj1fak>X3^f - '8ZcCaXea2c0<8`'Jp/N&6!gU<@q;*q*bjQl-$fle`;R\\A$;]u)[8@p\!"I=r/26^$_d9Q - `3If1+Q;VP(UZ*CS*k05DUW0#4JP"MWISMJr - cg6S3*ASGFcC[569E[fP0'T*\[/p[;,@Y--=#A8E^RX@rb?DOD_JH@2pSs6dp):>piG3RFD - ]e96^qsX:Jhj:nR9u0_k^H@qapYUHN50%p,_M&0M12,@HV6ZR`9A-U^7BQ3^+L"g5YCWMoL - utEZ925C@2=$8C4+@%j-OJNO5%SMFlf[FYoff'1F6Cg`mK38iZpq:L'M'Hik0/rJaV?fm`" - 3*,pI;C:']-NM7ns]m^YKSU>-pYP%Qen&'UTMjKnP*^GB\7^R:M+SBDf#Nl-cC`ld(OD[;/ - !QoLM`<7%nNl2&H`4+$Lt5G3@/A1Rk=5/4ATGo]X+tK.nW]W@.SfiRCe:1D;)F - 8lfR=Vn6KV:Kq+C(7ZA>!'K$boMWd"'#cTo_/&]B - E:i@S9TBa:T3ub_?OBW1)g_`JC>VG/)*\h,WZa97U#7jq&%"@a+"lo4JU*0J>OYT+MrbR6. - Po6f*7'D0<,)GBu@]>eC,UDI!V+X2ck0BMZA]b]B"rK::gl*+,*$$&\*'*TVfeXi`U*N+k/ - 68j>n0$oL\T>F,Um$n%5a7.jlK[Y,Ne3gmh9;9Cao>YQAe"QS%N[`'#)^n6#>GH_AM7E),g - tu?k-f$TWmpIf_al1j7073TNC9kM!\#^SduB=BHF/9)1`TJi@W - )>eG=/h;*MPlIBF;baLD)n`%M_:/5$&DEW+*&G_q^I/"hdnUQ,idLL8*7(8r7!!pUC' - '%(5[D@CHM-R9b67Yb3&m;(X1,S4h(Lm?rqsZh&)lL+]^#X77#?n_]mBA:qXs/%:7TtKGOI - crr3J\A#'K4\q=+j#C=R(S\8durD7XoXC27Us@Ddhh2fG/C"U.OfoGUg]JnQd@<)#&rrd=" - _o&IcOk?TD7!!!H191AIk==So90!J=JLlRMPZ=Sslkt7J9S>^Ko&WF%_,ldoF]`LhqoGUg] - JnQd@<;!bIodZ*Er;#sYmbN6ep?`LL4F6MT60HOa=l+(s=gOu+VL\dK!+;82;A$SHQAQfR$ - S5:@*#osH\Ra6j<ch=kV]SD"OUI^WTqm;B29;Zbagh>d@s'&Pq)IO2rCiTBj,9&XI503^q72Y!!'A8//? - QJ@&XF+\\M+nUI'YAd]?@]AnGWk04*_qlR)H\J@BJ-Mg2 - )#jU`JYO6_bY@:c>@E8*>fX7]8HXh!;$IH("$f)W - FrRs4Pj7'D0<,)G@_9*G:q!'i:j("$r-Wq//8-b!!!/j-be?k/nV5q?J - Omp#17i?5Bt6GnktB)Y6*99*]KWL0&^_-Lctl5"TSN&zTIR3$na)*n:Z,M3zzzzzzzzzzzz - zzzz!!'gALl.-Si,Ji2Q(X2s]T4!3z!!)5KFXp70CUY-hccCZQ"8tT4+#a0"z!73*u1%Ab/ - \o:_8D.UWcVZ;N&z!!!"t_lFUQ4Y6!2X.Qge7+M;>6ko\%z!*$dEqc3(@Vn(_%<<*"!z:^M - cjnB[nIgq?L)qT,,nVj-!WuTCG*q!!#sVr94Ggk=]jX9\Yu"AD - hkE!<<*"?n,u95/VerU=&V?>]TMs'A`s*!5KJ)+aM\jbM;PWgEG_'@*];=LCjLd!!"@gTtNCqO&\$-V$m";a!L4=MuWk< - &JG"edTBT=2]kb,i@GLe`mG!!"]eJj2[4m'20>\4+lO*P!=I+H6&W"9>CD_u"?W=Q+-H.m5HNT0C9\Vu - Qet!2+DnW]0[GMq0\_V^%L*"[L+5^[ea5Vkr0e2-S=grKqd=zXK5TOK_st%lQIM*X-^%W%0 - /HMJB&,#0eGW`oCh-c;ucmu!3d+O)*;T[>4,l;XbVjFp[#DE@2K!U+X&#VH.<5hpD+c[eDP - J3TCFrlz`:;o^:\XR+gda+\Lr5qhYqbd]O!aom/g8''ViT`PrKa11o]isI`Np)fO!ao-!!" - jtG1VZ-#;c4tpqJ]jqM4W*ScAcTGX(^=g35FKRu'=Lr:""K`tJFQ!!$1K0d19%hcL+[R1/B - Fq!e8ehM2dF+GEb7me*ql_YlBeO"=L[JG8R:!!!"L[L)R:*RGg"/LZf(*UJh.]YjW.!WYV" - +.p'onMp9TLMem$g,UVq.nTmD!!#8:[r4CLCmGE?\_Y)hkW%Eh'`^M^;c(D3>BfKo%Gdg]V - kpS(#4OgVzcjfkVl>J - pEJTX3R!;ucmu!3"&3*S7e3Gk@=d?'_$GI@p8="X$I%R#n[to*$WPHkE9(cCX[fI:9es%IM:(><\6JOqsXXe!!#:a6q51T*U:LijJ0o - r20ds+a7"9q@0!SKQd.bZf@>HLjfcjd)mqCY-D'rD"onW'5aK4SI;j\:jkRm@\r;o.h'V;@ - #mlI$%l+.]-TX;+e^>\tYBmlo@#l'%+$t5pA,lT0!+[8@gjFYh\CA]tZ**QQ"n=dt!9fgu% - t-nX=i^JMf5#\SY^bU(QM3ZL!!!!aQ=KAYbbV%DH?WP=o\^aB_8,q-"/%S^A)]GL4,r^^<6 - _[8GBk9CzA4;;=/RNmeqcHDHR5TMPYKnTQLDg0knDp:h(i*dPQaXW7g>OIKisYnf!._.D>[ - 5.AZ*)kP7/BZ^:.l+Bgdk&SO/`3$,!%2sPOf[iKW93mNSb?jO#QA*!!!#7PbFB\pcL!7SpE04`IH&+3M7f#b`k - 2gHKdzJFjZeaXc]gE??W@SIFqoo%^5A=K2RUFMu2;Dg/hGX!:q<0OC8NTAY.M!<<*"!5;2p - 6K7>\41L?RXoCUmf>=XjekmS6GLidKkgz1*n,,HL+HEm\?X1 - 'e>3]X-Oe5$]X.on,_I(T5QF2-19Ap*);&HH%.qdl/F19BB%:I,T*O$43Zg3bnn$R56+0i?nbhFo - 3c6=bi6ehIChPQIMoru'EA+5!!!SHod`hM\$tB]NlmfY1Nga->I460d)U+^B)r"Tj8Ho?k+lkLYHf\uEdP?EiA' - f-z!'ha?[p@rVTZYFABt;0-eVVZ"8DY]q!6X6co4cmP"'-380m3;"?!<<*"!'i.@K>D!D!U_0_A8n` - ;L\BP]NK*+L7K=QkM"#*P%Hi%[>0?df6In1=2]-e3&-)\1!!#WQOH;GGqG-J=.thG(n!/\% - hMdGFWr`_A()jU:ojY[RbILt>#`8MmI7["L;ucmu!9f4%kd\`a]5f!)+XquC!YZsFA,)pDV - u(RB`r0@4;Y&/pmI>0&][$rczKaA9JZ5KouqcF4tc/;nYp[#C*q)O3(W<'g7_s`$CRcVS9= - P@i25`jJhrnB:[17%[6!<<*"!2'ZB_4SbM4*)K`+_fE/X+U;(F2=ImGb6!!X7Q1!^mFkD0g - Ch8A]!Y*T-Ni2('"=7!;&t3a7)rYf5VmV+mIG(ElhM*j1[^LGb6*$/+W>[qh;@=YeH&&`b* - /DYg=fT-O9\P!!%Q7"T!n6(uW>\oS$fad=_]'m.S$b#1Ieu,ES"KGicg&C#c[A5P(#@ArO- - =8FU9KV[3>'!!%P3nFm;.eo*G?0c6'V`X[,OHLME1XT9m`)A7>2j2UTfCUg#%87i_o^aUr[ - N;&_Az?rZ!t$Q@f9-23N=,*5)R*OiRc#kSYhIBikOnDp:(_kI7#*6H,T]`/mTp](9o!6CVA - GniBauJl@8S9/=OcOrbM!R.KBGK!'gm0?O%)*NH\>ZQ9dYS2` - [LUrA&otklXV8KS7:u2kD[j^TXQs'(2YG+t=fA3;J'>];P]0!!!$!%ptr)R.XOUYo19)pU2 - Ror'GY#7"?XKDhGK9^4]W!fIj!rr<$!"]@/Wgiof=!qlKEo8j)VU5VQK>IGAYPZ?2 - UPIb7eOaRHC^:K,jF(V@zBE056Ih,o4IJegJQjKNHmr6&6gtRmW%e&usLa+&dn_^s^SQDGf - m^%fJM1d:E.5l&UiR,\Tm)E&oaN,4TB,M7)cp.0h8 - M>if#PqXVkC2,-MJ(5AS^Gi)][&>5zNBp$1A/rR:/;L0gmd9D=NSh$WlfG%*h^9`tnNPdEI - u+Gl^4,mWoBI!6VH;YXZ=#oJ3sGZb!!&)b)+Q8_G_#[I%T,=d\h1C\]D'BtgTOrg,UME3@& - ">NQf*#Tc.:,U-B3/UZEWA<1*C=EXlFD+AH2]1!!%$^UFGA+-b,6'&>Q):eac/8pDht0o=; - >;@KM!g4<4NZG^CEp;O;f$<'3/7SNZ=Y)b@k6CB2&HDe2!'jU*3H,of - 1THWTTA'C>b3f-+Xt2ko\Q-??_$a*S.lRVY^WY1]F*SFc2mtG!!)4&^\>Qo%E:.@#ZH%l>[fK - uKAG=rS"7kFhLFkFjepFrp]c6EX9j65NfN^V)g(i*b7dB.[r/pa_Z%o@$!W2X>D&>g&]TbK - \M<;X3:@Luz+A37])DuB%480=0U>>IGZl_$e0A!rk17o?MODI - #`T+N`bk[be - GmX)`Na!4%bT+^7m9I-:)^AT^4&WAPs%1\F71$An#T]9,U"=npO*q[!!!!Ab@*(AL_4SJ%3 - c(0Qqj_6(@Tt'=UU:t!rr<$!9f^^7m-=bPk!4fG6%u$A5)Ge9Ddkz!%;*coV>:GA_ - ]e:889j/&q['EIbg=I^%IQ_*>\\U!!!!Qn`ki.L]L9+a,gRY+=^sXaGkY__7]6Ez!'g\G@8 - ZWnn)QZq6kBJu4HB,j@UnDChdlfg!!!"LBTeMe41AJ'ZEW@QUdPas;'\:Um>i:!bPUE/z!+ - ^*!G"#U2:8VJHbPNT>LH"TS - N&!!%lg+.p("knNl3-6b[A0c8#IZ*IKEA^gIn`$F46;#gRr!!&ZSQS1JhgXUlPQkMasKJA+ - *3b#W;z!.Enno4c)*c.kg\#_F2Kbau*bpsWm4G>/&;!!!"l3q;`sS"7l-=n!Mb+p^&N_DuD - /7gJoS40BG0#2])Iz!+7oODnd:?HR8Ek."WR4\r7Kao^pOXhY0P@z^k'joaEc6YEZ^Df#_J - klIbqfb&M^reNW9%Z!!%Ng#".st4Z@^k0&\uN71^`&VbcJe-]WHB^*s*`zPMkPDs"W*MgrH - ?!Jn3P.Z$#Yb+3aUg#QXZ"g:R*W.-j$Hj8WGuR - J;+a,*2&-Or2FGEgK^qGR/hH@0cCT$Q1T+qB%Jdm3HHl=G7hL0@msI=*m'?[GK(Sa0D^mg/ - O\1dk\]KopmAN#,j%oaVpg)-=m;oUlJkrM3`^o]n.?8i<5tM%Vr/pcF^63/(nC^f>Af&QmO - ZmOVHM^(%GlRi'%]<+2k"Lg?T490YA94>Is(,,Uk]746J5N2AVq6j,P(pD9er"-,[Ek9B!8 - rEVh@Q/6D-cYQ<`0./?rlgnk0'Go2#mVG]t5qtHMjtB#;21)Rm';fj,).G)#sZ)j4r>]"ga - )=cao9oWenXdKbi"hde_5=ct=0q!#[2I(t_]*Cs)PNi7#*0;:4IpH0(lFrVajbV\]=5RB4* - (F32;)i7"m*&`+I"._`ZF/bFl'!5Ot`8e(4ErPeELP*NXnrP>)[5%k-#J7-Y]?[d"Ok2ghH6,AV%o)cJ1MisPk&#]esOpR8api7#!-i@L.W]4()XY-+AC-P-7Xr4 - \KZmhX7(&q"_c1^q(.FPEXMSY8h"!!'NaA27/3i,$^2B^cU;dR.beG#A49kpoLGPG-;>!!%6Tf<9=`6u+-/b7-X=9DXQ8Z>u]DeQk,I"Vh# - f;6R+0j3=FT6B0P06dPI(#.3CW?/Jre3V6GU!!#CNe;8)[cJBCcfTpVd^%QJlm&MY1cOU!U - GUS`seDWd>o:FYII.3GDcPFj]Er'<^k[O\p!$8_&JRhJtj0LNKK+Hq(I^aSuD5d?mgu.*uk - gKS5!/=9V?[pVH-_I!92Y]Nil.9sQ8#n.9H%[gN!+T%lT%LILZg>c%i5<)^`d;ku@oFsL9T)s>4CL - GX!.[;\fA"&apD:/KHFB"/&=].p<)_W:rMKVqn0b&fkC`Z#SpT1(ejr0`id"bn4unrL8;4e - $!kIPA!!)L)%1Wl>q4dQLIr#WZj@c8Q860X-ZJ?=+ - 5DHn;!<=7k[($!5\8'pN$2MEXIVDcG^0-?Febo3[NR7DP!!$Q8?b5[lW&XMCPdS>/!,9B;1 - HeoJ>'K"QGNeo=!!(#r6t2h_^tD05Z7>g&Y:lk7h@N=,4WFb.!5`Dbm>)NW:EH,EHomDk2K - _@cb2noFHjTiR,K.hG[s)]hCi4Dnn7CQBH6i,i5T.sj:N*2eH(t1:4S2nb!!)rJi8A!a;u= - `!Q'95L#2^GsLYA!_q9.[LFhAl`9)3-%cVdZCqWp;X+n:]Adb-hMf - k!!(fH<9h4OX[W\uV`e&lI'\q6@X$^TR_GR&]lj__!2EfnXn[I\B3okW/GPs5i@)%hn/KJQ - n`iahe5SC#o^mmPP5kT5+nklrCEI@Uo'D=Pi2_WTcPFg_\81tSSK2"0mi)6,i8I;)#+JAs7 - 9<#f[hmI3uN!!'eGqPj(QrDdKr]tS"Qhu#U@ma4ssfNapl&rBnSjg#VhqM14+)AFHB6jRYJ0;FA` - K)sr8tn1aZ\sER8IEoDB8Y.S5l*7Gh;'%HH3=3Jpn'(o>s#:bbj#pi4EDt3S"!]jIeCFMLK - eZQ\/kFW!rr>2[uRLp7r$AP?bQL8S - kPK%nCdKjU1q#"3"-n?aJq5!.hHX!Bq+9;HB@ngF1H7`uLm77__6=1<)!!"67It.%;`Qn=tkKC?c/ULu_k6;H6Of[=A3@26)I(ZS_^ - >VUUHX!DU'EA-k^@_'i``fMbg>B8K6g_LhJ$`TaZ.E4[A4Cp;#APd^k^e/!heK/H[YR`&*?!b5%@oG9lK#!Aei(pUge1Iebbg - Hn(VnE]oAo(jfY(9U&Xoh!!)f#;Q7JOf=P6?>\uOXmZ_OS'[3O7CjibY:`uAJXC7B"=)_6-(fN)$[?e.O - hIpos] - -Q -Q Q -showpage -%%Trailer -end restore -%%EOF diff --git a/poo/diapos/graphics/Logo-PCLL.svg b/poo/diapos/graphics/Logo-PCLL.svg deleted file mode 100644 index d42bd44..0000000 --- a/poo/diapos/graphics/Logo-PCLL.svg +++ /dev/null @@ -1,585 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - -   - -       - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/poo/diapos/graphics/debian.eps b/poo/diapos/graphics/debian.eps deleted file mode 100644 index ff431ef..0000000 --- a/poo/diapos/graphics/debian.eps +++ /dev/null @@ -1,318 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%BoundingBox: 262 316 372 461 -%................................ -%%Creator: GNU Ghostscript 510 (epswrite) -%%CreationDate: 1999/12/10 21:20:34 -%%DocumentData: Clean7Bit -%%LanguageLevel: 2 -%%EndComments -%%BeginProlog -% This copyright applies to everything between here and the %%EndProlog: -% Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved. -%%BeginResource: procset GS_pswrite_ProcSet -/GS_pswrite_ProcSet 40 dict dup begin -/!{bind def}bind def/X{load def}! -/rg/setrgbcolor X/g/setgray X/w/setlinewidth X/J/setlinecap X -/j/setlinejoin X/M/setmiterlimit X/d/setdash X/i/setflat X -/m/moveto X/l/lineto X/c/curveto X/h/closepath X -/lx{0 rlineto}!/ly{0 exch rlineto}!/v{currentpoint 6 2 roll c}!/y{2 copy c}! -/re{4 -2 roll m exch dup lx exch ly neg lx h}! -/q/gsave X/Q/grestore X/f/fill X/f*/eofill X/S/stroke X/rf{re f}! -/Y{initclip clip newpath}!/Y*{initclip eoclip newpath}!/rY{re Y}! -/@/currentfile X/|{string readstring pop}! -/Ix{[1 0 0 1 9 -1 roll neg 9 -1 roll neg]exch}! -/It{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}! -/Ic{Ix false 1 colorimage}! -/@85{@/ASCII85Decode filter}! -end def -%%EndResource -%%EndProlog -%%Page: 1 1 -%%BeginPageSetup -save GS_pswrite_ProcSet begin 0.1 0.1 scale -%%EndPageSetup -0.843137 0.027451 0.317647 rg -0 0 m -6120 0 l -6120 7920 l -0 7920 l -Y -3233.33 4125.86 m -3218.39 4125.66 3236.15 4118.18 3255.66 4115.17 c -3261.06 4119.39 3265.94 4123.63 3270.29 4127.77 c -3258.15 4124.8 3245.79 4124.73 3233.33 4125.86 c -f -3313.52 4145.85 m -3322.43 4158.14 3328.92 4171.58 3331.2 4185.48 c -3329.19 4175.58 3323.84 4167.03 3318.76 4157.99 c -3290.83 4140.4 3316.12 4168.43 3318.74 4179.1 c -3288.72 4141.27 3314.61 4156.42 3313.52 4145.85 c -f -3343.14 4222.89 m -3344.95 4249.8 3337.84 4241.28 3335.46 4231.03 c -3338.23 4229.57 3340.44 4212.05 3343.14 4222.89 c -f -3176.66 4590.68 m -3184.64 4589.26 3193.91 4588.16 3192.58 4586.25 c -3201.32 4588.18 3203.3 4589.92 3176.66 4590.68 c -f -3192.58 4586.25 m -3186.96 4585.08 l -3192.21 4585.56 l -3192.58 4586.25 l -f -3441.26 4212.69 m -3442.16 4188.53 3434.21 4176.79 3427.02 4156.03 c -3414.1 4149.6 l -3403.54 4129.06 3415.15 4136.56 3407.57 4120.23 c -3391.05 4105.56 3357.51 4074.34 3346.77 4071.48 c -3338.92 4071.65 3352.08 4080.74 3353.8 4084.29 c -3331.71 4069.13 3336.06 4061.53 3302.29 4052.3 c -3301.3 4054.51 l -3218 4015.31 3102.28 4092.98 3103.8 4198.94 c -3102.92 4192.22 3101.27 4193.9 3099.43 4191.2 c -3095.13 4245.71 3124.61 4300.46 3174.33 4322.85 c -3222.96 4346.91 3279.97 4337.05 3314.79 4304.56 c -3295.66 4329.62 3257.58 4356.19 3212.45 4353.73 c -3168.24 4353.01 3126.88 4324.92 3113.07 4294.41 c -3090.43 4280.16 3087.79 4239.45 3077.93 4231.99 c -3064.64 4134.39 3102.9 4092.24 3167.63 4042.63 c -3177.79 4035.77 3170.49 4034.72 3171.85 4029.5 c -3150.35 4039.56 3130.67 4054.76 3114.47 4073.37 c -3123.07 4060.8 3132.34 4048.58 3144.33 4038.98 c -3124.04 4045.83 3096.95 4088.11 3089.06 4089.83 c -3124.01 4027.25 3230.84 3980.08 3286.81 4003.49 c -3260.92 4002.53 3228.03 4002.96 3198.94 4013.71 c -3186.7 4020 3170.1 4033.01 3173.07 4035.44 c -3249.42 4006.93 3328.29 4013.86 3394.36 4066.81 c -3411.16 4079.91 3429.52 4102.18 3434.83 4102.48 c -3426.85 4090.46 3436.2 4096.7 3430.07 4086.09 c -3446.8 4113.1 3422.78 4097.09 3447.37 4132.73 c -3456.46 4120.23 l -3453.07 4142.67 3484.31 4169.89 3481.12 4205.35 c -3488.29 4216.19 3489.11 4193.67 3481.51 4168.73 c -3492.06 4196.4 3484.31 4200.85 3487 4223.69 c -3489.92 4216.01 3493.78 4207.86 3495.75 4199.75 c -3488.88 4226.5 3502.78 4244.78 3506.24 4260.33 c -3502.82 4261.83 3495.64 4248.51 3493.98 4280.09 c -3494.23 4293.81 3497.8 4287.28 3499.17 4290.66 c -3496.49 4292.21 3489.42 4302.73 3485.13 4322.9 c -3488.22 4327.65 3493.45 4310.61 3497.69 4309.92 c -3494.96 4325.95 3490.26 4338.18 3490.07 4350.49 c -3477.67 4376.39 3485.67 4347.03 3475.64 4361.61 c -3462.44 4402.75 3486.57 4371.16 3488.21 4389.84 c -3508.19 4360.89 3519.59 4315.99 3524.83 4297.4 c -3520.83 4320.07 3514.39 4342.04 3506.49 4363.29 c -3512.59 4360.72 3496.72 4409.92 3514.4 4377.34 c -3495.52 4446.79 3433.62 4511.69 3376.67 4542.13 c -3383.62 4535.76 3392.42 4527.76 3389.27 4526.5 c -3360.94 4543.35 3365.92 4544.68 3361.85 4551.8 c -3338.8 4561.19 3337.27 4551.03 3322 4551.78 c -3278.52 4574.86 3270.13 4572.4 3230.1 4586.85 c -3231.91 4578.33 l -3203.1 4587.93 3198.34 4574.71 3167.21 4578.31 c -3165.32 4579.78 3177.19 4583.67 3186.96 4585.08 c -3159.11 4581.4 3160.41 4590.58 3133.15 4584.07 c -3139.86 4588.78 3146.98 4591.91 3154.14 4595.91 c -3131.43 4594.53 3099.9 4582.69 3109.63 4593.47 c -3072.58 4576.93 3006.77 4553.72 2969.84 4519.09 c -2968.68 4526.85 l -2951.76 4506.54 2894.89 4466.19 2890.36 4439.86 c -2885.83 4438.81 l -2877.04 4423.9 2871.33 4407.01 2864.35 4391.68 c -2852.84 4372.05 2847.47 4384.12 2849.11 4381.04 c -2826.46 4335.12 2815.19 4296.54 2805.48 4264.88 c -2812.4 4254.53 2805.65 4202.56 2808.26 4160.97 c -2796.9 3955.53 2952.44 3756.07 3122.46 3710.04 c -3147.38 3701.11 3184.43 3701.44 3215.96 3700.55 c -3178.77 3711.19 3173.97 3706.17 3137.73 3718.81 c -3111.6 3731.13 3105.88 3745.18 3087.36 3761.25 c -3094.69 3748.3 l -3058.39 3761.15 3073.58 3764.2 3044.04 3773.55 c -3051.87 3783.77 l -3040.1 3784.67 3020.7 3803.59 3015.4 3814.1 c -3002.52 3813.59 l -2987.06 3832.66 2978.81 3846.43 2979.42 3857.09 c -2975.26 3849.67 l -2970.55 3857.75 2918.35 3921.25 2945.43 3906.47 c -2940.4 3911.05 2933.71 3913.94 2926.46 3927.13 c -2931.97 3933.42 l -2918.96 3950.19 2907.99 3971.68 2908.83 3978.84 c -2915.78 3969.46 2920.6 3967.7 2925.38 3966.09 c -2892.47 4047.73 2890.62 3970.58 2865.71 4049.19 c -2870.97 4049.61 l -2866.94 4055.72 2864.47 4062.31 2861.23 4068.8 c -2863.53 4091.65 l -2839.85 4119.01 2856.91 4208.1 2860.34 4256.95 c -2862.69 4276.81 2880.11 4297.96 2893.34 4331.13 c -2885.28 4332.51 l -2900.7 4359.39 2973.3 4440.5 3006.94 4436.34 c -3023.23 4456.8 3003.7 4436.42 3000.51 4441.56 c -3036.3 4478.59 3047.55 4467.72 3071.7 4474.39 c -3097.73 4489.84 3049.35 4468.35 3061.69 4480.28 c -3106.72 4491.77 3093.59 4506.42 3152.32 4512.25 c -3158.52 4508.73 3137.95 4506.81 3132.79 4502.24 c -3170.29 4520.6 3251.48 4516.41 3304.23 4492.06 c -3365.41 4463.45 3434.17 4378.92 3436.89 4299.39 c -3439.97 4298.56 l -3438.41 4266.94 3444.81 4230.37 3433.71 4196.79 c -3441.26 4212.69 l -f -3070.23 4105.36 m -3068.12 4094.89 l -3077.95 4081.54 3085.75 4067.08 3098.28 4056.68 c -3089.26 4074.27 3082.57 4081.54 3070.23 4105.36 c -f -3093.44 4106.26 m -3088.24 4112.02 3085.18 4118.94 3081.72 4125.82 c -3085.02 4113.71 3091.78 4103.3 3098.05 4092.7 c -3093.44 4106.26 l -f -3504.27 4195.56 m -3502.08 4190.04 l -3498.06 4161.46 3489.36 4133.18 3476.03 4106.95 c -3490.75 4134.62 3500.25 4164.89 3504.27 4195.56 c -f -3179.63 4597.85 m -3189.73 4601.54 3204.45 4599.88 3215.19 4602.31 c -3201.21 4601.14 3187.3 4600.44 3173.57 4598.69 c -3179.63 4597.85 l -f -2824.92 4409.23 m -2827.25 4387.69 2808.72 4379.32 2829.02 4393.54 c -2839.92 4418.08 2824.78 4400.31 2824.92 4409.23 c -f -2801.04 4309.49 m -2805.73 4323.86 2806.57 4332.48 2808.36 4340.81 c -2795.43 4324.27 2802.4 4320.74 2801.04 4309.49 c -f -0 g -2758.02 3347.25 m -2757.57 3346.78 2757.57 3272.19 2756.64 3252.72 c -2755.72 3236.97 2754.32 3203.15 2720.96 3203.15 c -2686.67 3203.15 2678.33 3242.54 2675.55 3259.67 c -2672.31 3278.67 2672.31 3294.43 2672.31 3301.37 c -2672.31 3323.61 2673.7 3385.72 2726.06 3385.72 c -2741.82 3385.72 2750.62 3381.07 2757.57 3377.38 c -2758.02 3347.25 l -h -2623.65 3292.56 m -2623.65 3161.9 2693.16 3161.9 2703.35 3161.9 c -2732.08 3161.9 2750.62 3177.66 2758.49 3204.98 c -2759.42 3163.75 l -2768.23 3164.22 2777.03 3165.14 2791.39 3165.14 c -2796.49 3165.14 2800.65 3165.14 2804.37 3164.67 c -2808.08 3164.67 2811.78 3164.22 2815.95 3163.75 c -2808.54 3178.57 2802.98 3211.93 2802.98 3284.24 c -2802.98 3354.67 2802.98 3473.75 2809 3509.9 c -2792.33 3502.01 2777.95 3496.91 2746.44 3494.14 c -2758.95 3480.7 2758.95 3473.75 2758.95 3412.6 c -2750.16 3415.37 2739.03 3418.61 2720.03 3418.61 c -2637.09 3418.61 2623.65 3346.33 2623.65 3292.56 c -f -2874.95 3316.21 m -2875.42 3354.67 2883.3 3388.97 2916.19 3388.97 c -2952.34 3388.97 2955.1 3349.12 2954.18 3316.21 c -2874.95 3316.21 l -h -3000.05 3311.56 m -3000.05 3365.78 2989.4 3419.08 2920.82 3419.08 c -2826.3 3419.08 2826.3 3314.35 2826.3 3292.11 c -2826.3 3198.05 2868.46 3160.98 2939.36 3160.98 c -2970.85 3160.98 2986.16 3165.6 2994.5 3167.93 c -2994.04 3184.61 2996.35 3195.27 2999.15 3209.63 c -2989.4 3203.59 2976.89 3195.72 2949.09 3195.72 c -2876.8 3195.72 2875.87 3261.54 2875.87 3284.24 c -2999.15 3284.24 l -3000.05 3311.56 l -f -3150.8 3291.64 m -3150.8 3248.55 3142.93 3190.62 3089.18 3190.62 c -3081.76 3190.62 3072.5 3192.03 3066.48 3193.42 c -3065.55 3210.1 3065.55 3238.83 3065.55 3272.19 c -3065.55 3312.05 3069.71 3332.87 3072.97 3343.09 c -3082.69 3375.98 3104.47 3376.44 3108.63 3376.44 c -3143.85 3376.44 3150.8 3327.77 3150.8 3291.64 c -h -3017.82 3241.13 m -3017.82 3206.84 3017.82 3187.38 3012.26 3172.56 c -3031.26 3165.14 3054.88 3160.98 3083.16 3160.98 c -3101.23 3160.98 3153.59 3160.98 3181.85 3218.89 c -3195.29 3245.76 3199.92 3281.91 3199.92 3309.26 c -3199.92 3325.94 3198.07 3362.54 3184.63 3385.72 c -3171.66 3407.48 3150.8 3418.61 3128.57 3418.61 c -3084.08 3418.61 3071.11 3381.54 3064.17 3362.54 c -3064.17 3386.17 3064.62 3468.65 3068.32 3510.82 c -3038.21 3496.91 3019.66 3494.61 2999.75 3492.75 c -3017.82 3485.35 3017.82 3454.75 3017.82 3355.12 c -3017.82 3241.13 l -f -3288.99 3163.75 m -3279.73 3165.14 3273.22 3166.07 3259.78 3166.07 c -3244.98 3166.07 3234.77 3165.14 3224.12 3163.75 c -3228.75 3172.56 3230.6 3176.74 3231.99 3206.84 c -3233.85 3248.09 3234.32 3358.38 3231.07 3381.54 c -3228.75 3399.16 3224.59 3401.93 3218.1 3406.56 c -3256.09 3410.27 3266.76 3413.05 3284.35 3421.39 c -3280.65 3401.02 3280.18 3390.8 3280.18 3359.77 c -3279.26 3199.88 3278.79 3182.75 3288.99 3163.75 c -f -3437.37 3294.9 m -3436.46 3265.7 3435.99 3245.31 3428.1 3229.1 c -3418.37 3208.24 3402.16 3202.23 3390.11 3202.23 c -3362.29 3202.23 3356.28 3225.39 3356.28 3248.09 c -3356.28 3291.64 3395.21 3294.9 3412.8 3294.9 c -3437.37 3294.9 l -h -3309.93 3237.89 m -3309.93 3208.69 3318.74 3179.51 3344.7 3166.99 c -3356.28 3161.9 3367.86 3161.9 3371.57 3161.9 c -3414.21 3161.9 3428.56 3193.42 3437.37 3212.87 c -3436.9 3192.48 3437.37 3179.98 3438.76 3163.75 c -3447.1 3164.22 3455.44 3165.14 3469.35 3165.14 c -3477.22 3165.14 3484.64 3164.22 3492.51 3163.75 c -3487.41 3171.62 3484.64 3176.27 3483.23 3194.34 c -3482.31 3211.93 3482.31 3229.55 3482.31 3254.1 c -3482.78 3348.63 l -3482.78 3383.87 3473.51 3418.61 3403.99 3418.61 c -3358.14 3418.61 3331.26 3404.71 3317.82 3397.75 c -3323.39 3387.56 3328.02 3378.77 3332.18 3358.83 c -3350.26 3374.59 3373.9 3382.93 3397.98 3382.93 c -3436.46 3382.93 3436.46 3357.44 3436.46 3321.31 c -3427.65 3321.76 3420.22 3322.68 3407.71 3322.68 c -3348.86 3322.68 3309.93 3300 3309.93 3237.89 c -f -3704.27 3209.63 m -3704.74 3193.87 3704.74 3177.19 3711.22 3163.75 c -3701.02 3164.67 3694.99 3166.07 3676.01 3166.07 c -3664.87 3166.07 3658.86 3165.14 3650.05 3163.75 c -3651.89 3169.77 3652.84 3172.09 3653.76 3179.98 c -3655.15 3190.62 3656.08 3226.31 3656.08 3238.83 c -3656.08 3288.87 l -3656.08 3310.65 3656.08 3342.17 3654.68 3353.28 c -3653.76 3361.15 3651.46 3382.46 3624.56 3382.46 c -3598.15 3382.46 3589.36 3363.01 3586.1 3347.25 c -3582.41 3331.03 3582.41 3313.42 3582.41 3244.84 c -3582.86 3185.53 3582.86 3179.98 3587.49 3163.75 c -3579.62 3164.67 3569.89 3165.6 3555.99 3165.6 c -3544.85 3165.6 3537.45 3165.14 3528.19 3163.75 c -3531.44 3171.17 3533.29 3174.88 3534.21 3200.82 c -3535.15 3226.31 3537 3351.43 3532.8 3381.07 c -3530.5 3399.16 3525.85 3403.32 3520.77 3407.95 c -3558.31 3409.8 3570.34 3415.84 3581.94 3421.85 c -3581.94 3372.73 l -3587.49 3387.11 3599.07 3419.08 3645.42 3419.08 c -3703.35 3419.08 3703.8 3376.91 3704.27 3349.12 c -3704.27 3209.63 l -f -0.843137 0.027451 0.317647 rg -3292.9 3486.97 m -3254.53 3448.61 l -3216.17 3486.97 l -3254.53 3525.33 l -3292.9 3486.97 l -f -end showpage restore -%%PageTrailer -%%Trailer -%%Pages: 1 diff --git a/poo/diapos/img/cesi.jpg b/poo/diapos/img/cesi.jpg deleted file mode 100644 index dafbe55..0000000 Binary files a/poo/diapos/img/cesi.jpg and /dev/null differ diff --git a/poo/diapos/img/logo-cadoles.png b/poo/diapos/img/logo-cadoles.png deleted file mode 100644 index de8ddc0..0000000 Binary files a/poo/diapos/img/logo-cadoles.png and /dev/null differ