From edaa67e543446435718ab28cf9c9ae12bbac291c Mon Sep 17 00:00:00 2001 From: YannoteX Date: Mon, 20 Nov 2023 00:27:32 +0100 Subject: [PATCH 01/10] =?UTF-8?q?1ere=20version,=20questions=20=C3=A0=20po?= =?UTF-8?q?ser=20au=20prof=20parce=20que=20flemme=20de=20finir=20bien=20?= =?UTF-8?q?=C3=A0=2023H00?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 46 ++++++++++++++++++++++++++++------ __main__.py | 63 ++++++++++++++++++++++++++++++++++++++++++++++- sort/fusion.py | 20 ++++++++++++++- sort/insertion.py | 18 ++++++++++++++ sort/range.py | 8 +++++- sort/recursion.py | 14 +++++++++-- sort/selection.py | 21 ++++++++++++++++ 7 files changed, 178 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 74f925a..f98fd93 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,9 @@ Mesurez combien de temps prend python à générer un tableau composés de : Sur un tableur, générez un tableau permettant de visualiser le temps d'éxécution en fonction de la taille de l'entrée. -Comment vous semble évoluer la courbe ? Observez bien les différentes courbes du graphique ci-dessous. Quelle est la plus ressemblante à notre situation ? *Écrivez votre réponse ici* +Comment vous semble évoluer la courbe ? Observez bien les différentes courbes du graphique ci-dessous. Quelle est la plus ressemblante à notre situation ? + +*La courbe a une allure linéaire. On peut en déduire que complexité de la fonction est O(n).* @@ -75,7 +77,12 @@ Observez attentivement l'animation de tri par sélection ci-dessous pour en comp -Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? *Écrivez votre réponse ici* +Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? + +*On observe un parcours du tableau progressif.* +*A chaque nouveau parcours du tableau, on identifie l'élément à trier et on parcours le reste du tableau à la recherche d'un autre plus petit.* +*Arrivé à la fin du parcours, on échange l'élément comparé avec le plus petit trouvé dans le reste du tableau, sinon on ne fait rien.* +*On passe à l'élément suivant.* Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/selection.py`. Vérifiez son bon fonctionnement en éxécutant le fichier `python3 -m unittest`. Le test correspondant au tri par sélection doit passer. @@ -88,7 +95,12 @@ Mesurez le temps d'éxécution pour un tableau de : Tracez le graphique correspondant. -Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? *Écrivez votre réponse ici* +Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? + +*La courbe obtenue a une allure carrée. On en déduit une complexité proche* +*de O(n^2). Ce n'est pas étonnant dans la mesure où le tableau est en bonne* +*partie reparcouru pour chaque élément comparé, cela décuple au carré le nombre* +*d'opération nécessaires au pire cas.* ### 2. Tri par insertion @@ -96,7 +108,12 @@ Observez attentivement l'animation de tri par insertion ci-dessous pour en compr -Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? *Écrivez votre réponse ici* +Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? + +*On observe un parcours de tableau progressif.* +*A chaque élément comparé, on parcours la portion de tableau le précedent.* +*On insère celui-ci entre un élément plus petit et un élément plus grand.* +*Puis on passe à l'élément suivant.* Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/insertion.py`. Utilisez les tests automatiques pour vérifier votre implémentation. @@ -109,7 +126,13 @@ Mesurez le temps d'éxécution pour un tableau de : Tracez le graphique correspondant. -Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? *Écrivez votre réponse ici* +Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? + +*Pour les même raison que citée précédemment, la complexité au pire cas est de* +*O(n^2) en théorie. On observe cependant une complexité **presque** linéaire **comparé*** +*à la sélection. Il s'avère que le reste du tableau n'est pas nécessairement* +*entièrement reparcouru comme pour la sélection, ce qui explique son gain* +*de performances notable.* ### 3. Tri par fusion @@ -154,7 +177,14 @@ Observez bien le schéma suivant : il représente le concept du tri par fusion. Cet algorithme est de type "diviser pour régner". -Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? *Écrivez votre réponse ici* +Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? + +*On oberve un parcours de tableau dichotomique.* +*A chaque nouvelle itération de la fonction, le tableau est séparé en deux* +*puis réitéré jusqu'à ce qu'on obtienne un série de tableaux de taille 1.* +*Les tableaux sont alors rassemblés à nouveaux avec un traitement de tri* +*à chaque nouveau rassemblement, ce qui rédui considérablement la charge* +*de l'algorithme de tri, au détriment de la pile.* Complétez la fonction `sort` du fichier `sort/fusion.py` en suivant les instructions suivantes. @@ -174,7 +204,9 @@ Mesurez le temps d'éxécution pour un tableau de : Tracez le graphique correspondant. -Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? *Écrivez votre réponse ici* +Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? + +*En observant la courbe de* Question bonus : Y a-t-il des tailles de tableaux pour lesquelles le tri par fusion n'est pas aussi rapide que les précédents tris abordés ? *Écrivez votre réponse ici* diff --git a/__main__.py b/__main__.py index 98a585e..6552080 100644 --- a/__main__.py +++ b/__main__.py @@ -1,5 +1,66 @@ +import time +import matplotlib.pyplot as plt +from sort.range import generate_array_of_number +import sort.selection as selection +import sort.insertion as insertion +import sort.fusion as fusion + def main(): - print("Hello world") + tests: list[list[int]] = [] + + plt.figure() + plt.xlabel("Array Size") + plt.ylabel("Compute Time") + plt.title("Faisons le tri - Hugo JEUDY") + + array_sizes: list[int] = [] + generation_times: list[float] = [] + selection_times: list[float] = [] + insertion_times: list[float] = [] + fusion_times: list[float] = [] + + for i in range(1000, 20500, 500) : + + print(f"Doing it with {i}") + + array_sizes.append(i) + + # compute array completion + + timer_start: float = time.time() + rand_numbers_array: list[int] = generate_array_of_number(i) + timer_end: float = time.time() + generation_times.append(timer_end - timer_start) + + # compute array selection sort + + #timer_start = time.time() + #selection.sort(rand_numbers_array) + #timer_end: float = time.time() + #selection_times.append(timer_end - timer_start) + + # compute array insertion sort + + #timer_start = time.time() + #insertion.sort(rand_numbers_array) + #timer_end: float = time.time() + #insertion_times.append(timer_end - timer_start) + + # compute array fusion sort + + timer_start = time.time() + fusion.sort(rand_numbers_array) + timer_end: float = time.time() + fusion_times.append(timer_end - timer_start) + + + plt.plot(array_sizes, generation_times, "-", color='lightgrey', label='Array Generation') + #plt.plot(array_sizes, selection_times, "-", color='darkolivegreen', label='Selection') + #plt.plot(array_sizes, insertion_times, "-", color='mediumslateblue', label='Insertion') + plt.plot(array_sizes, fusion_times, "-", color='peru', label='Fusion') + + plt.legend() + plt.show() main() diff --git a/sort/fusion.py b/sort/fusion.py index 73a21d3..7f07ba9 100644 --- a/sort/fusion.py +++ b/sort/fusion.py @@ -1,2 +1,20 @@ +import sort.insertion as insertion +import time + def sort(array: list[int]) -> list[int]: - return array + ''' + Return the array by using fusion sort + ''' + if len(array) <= 1 : + return array + else : + half = len(array) // 2 + return merge(sort(array[:half]), sort(array[half:])) + #return insertion.sort(sort(array[:half]) + sort(array[half:])) + +def merge(array: list[int], array2: list[int]) -> list[int] : + ''' + Merge two arrays by sorting them + ''' + + return insertion.sort(array + array2) \ No newline at end of file diff --git a/sort/insertion.py b/sort/insertion.py index 73a21d3..3c0284b 100644 --- a/sort/insertion.py +++ b/sort/insertion.py @@ -1,2 +1,20 @@ def sort(array: list[int]) -> list[int]: + ''' + Sort an array using insertion sort. + ''' + + for i in range(len(array)) : + + compared_element: int = array[i] + + j: int = i - 1 + + while array[j] > compared_element and j >= 0 : + + array[j + 1] = array[j] + + j -= 1 + + array[j + 1] = compared_element + return array diff --git a/sort/range.py b/sort/range.py index fc252ab..8056465 100644 --- a/sort/range.py +++ b/sort/range.py @@ -1,2 +1,8 @@ +import random + def generate_array_of_number(array_size: int) -> list[int]: - return [] + ''' + Return a random numbers (0 to 100 both included) array + with the given size + ''' + return [random.randint(0, 100) for i in range(array_size)] diff --git a/sort/recursion.py b/sort/recursion.py index e7f4320..e604c8f 100644 --- a/sort/recursion.py +++ b/sort/recursion.py @@ -1,2 +1,12 @@ -def get_factorial(number: int) -> int: - return number +def get_factorial(number: int, max: int = 100) -> int: + ''' + Return the factorial of the number + ''' + + if (max == 0) : + return 0 + + if number == 1 : + return number + else : + return number * get_factorial(number - 1, max - 1) diff --git a/sort/selection.py b/sort/selection.py index 73a21d3..b1b76b6 100644 --- a/sort/selection.py +++ b/sort/selection.py @@ -1,2 +1,23 @@ def sort(array: list[int]) -> list[int]: + ''' + Sort an array using selection sort. + ''' + for i in range(len(array)) : + compared_element: int = array[i] + + temp_element: int = compared_element + switch_index: int = i + + for j in range(i + 1, len(array)) : + + if (array[j] < temp_element) : + + temp_element = array[j] + switch_index = j + + if compared_element != temp_element : + + array[i] = temp_element + array[switch_index] = compared_element + return array From d3cfaa9661601f152de5333cb4ebfda668e2cd3f Mon Sep 17 00:00:00 2001 From: Hugo <53018953+YannoteX@users.noreply.github.com> Date: Fri, 24 Nov 2023 15:56:47 +0100 Subject: [PATCH 02/10] =?UTF-8?q?fusion=20fixed=20et=20readme=20compl?= =?UTF-8?q?=C3=A9t=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 29 ++++++++++++++++----- __main__.py | 53 +++++++++++++++++++++++++------------- img/results/Figure_2.png | Bin 0 -> 28812 bytes img/results/all.png | Bin 0 -> 60490 bytes img/results/fusion.png | Bin 0 -> 35359 bytes img/results/insertion.png | Bin 0 -> 40667 bytes img/results/selection.png | Bin 0 -> 42096 bytes img/results/wtf.png | Bin 0 -> 44197 bytes sort/fusion.py | 41 ++++++++++++++++++++++++----- sort/insertion.py | 10 +++---- sort/range.py | 5 ++-- sort/recursion.py | 8 +++--- sort/selection.py | 10 +++---- 13 files changed, 110 insertions(+), 46 deletions(-) create mode 100644 img/results/Figure_2.png create mode 100644 img/results/all.png create mode 100644 img/results/fusion.png create mode 100644 img/results/insertion.png create mode 100644 img/results/selection.png create mode 100644 img/results/wtf.png diff --git a/README.md b/README.md index f98fd93..661ba06 100644 --- a/README.md +++ b/README.md @@ -102,6 +102,8 @@ Quelle semble être la complexité de notre fonction de tri ? Cela est-il logiqu *partie reparcouru pour chaque élément comparé, cela décuple au carré le nombre* *d'opération nécessaires au pire cas.* + + ### 2. Tri par insertion Observez attentivement l'animation de tri par insertion ci-dessous pour en comprendre le fonctionnement. @@ -129,10 +131,9 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? *Pour les même raison que citée précédemment, la complexité au pire cas est de* -*O(n^2) en théorie. On observe cependant une complexité **presque** linéaire **comparé*** -*à la sélection. Il s'avère que le reste du tableau n'est pas nécessairement* -*entièrement reparcouru comme pour la sélection, ce qui explique son gain* -*de performances notable.* +*O(n^2). L'imbrication de deux boucles justifie cette exponentialité.* + + ### 3. Tri par fusion @@ -206,9 +207,19 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? -*En observant la courbe de* +*En observant la courbe de la fusion, on remarque une fonction linéaire. Ce qui* +*n'est pas absurde lorsqu'on sait qu'une boucle est appelée lors du tri,* +*assoçié à une recherche dichotomique. On peut donc en déduire que la* +*complexité est de O(nlog(n)).* + + + -Question bonus : Y a-t-il des tailles de tableaux pour lesquelles le tri par fusion n'est pas aussi rapide que les précédents tris abordés ? *Écrivez votre réponse ici* +Question bonus : Y a-t-il des tailles de tableaux pour lesquelles le tri par fusion n'est pas aussi rapide que les précédents tris abordés ? *Le tri par fusion risque d'êtr plus lent pour des tableaux de très* +*petite taille, engendré par le calcul supplémentaire du à la séparation* +*dichotomique. On peut s'en douter en obesrvant la courbe d'un logarithme, qui* +*croit très rapidement au départ avant d'avoir un comportement asymptotique à* +*l'infini.* ### 4. sort() @@ -216,6 +227,10 @@ Bien que tout cela soit fascinant, Python possède sa propre méthode de tri : ` Une dernière fois, analysez le temps d'exécution et découvrez si python fait mieux que nos implémentations rudimentaires ;) +*Je n'ai plus les mots :* + + + ## Pour rendre ce TP Merci de faire une Pull Request vers ce repository. @@ -225,3 +240,5 @@ Le nom de la PR doit contenir votre nom. Vérifiez que votre code est conforme aux normes pep8 et aux autres critères de qualité dont nous avons parlé. La PR doit également contenir un ou plusieurs graphiques présentant vos résultats sur la complexité des fonctions de tri. + + diff --git a/__main__.py b/__main__.py index 6552080..ea31f15 100644 --- a/__main__.py +++ b/__main__.py @@ -5,6 +5,7 @@ import sort.insertion as insertion import sort.fusion as fusion + def main(): tests: list[list[int]] = [] @@ -19,8 +20,9 @@ def main(): selection_times: list[float] = [] insertion_times: list[float] = [] fusion_times: list[float] = [] + sort_times: list[float] = [] - for i in range(1000, 20500, 500) : + for i in range(100000, 2000001, 50000): print(f"Doing it with {i}") @@ -34,33 +36,48 @@ def main(): generation_times.append(timer_end - timer_start) # compute array selection sort - - #timer_start = time.time() - #selection.sort(rand_numbers_array) - #timer_end: float = time.time() - #selection_times.append(timer_end - timer_start) - + + # selection_array = rand_numbers_array.copy() + # timer_start = time.time() + # selection.sort(selection_array) + # timer_end: float = time.time() + # selection_times.append(timer_end - timer_start) + # compute array insertion sort - #timer_start = time.time() - #insertion.sort(rand_numbers_array) - #timer_end: float = time.time() - #insertion_times.append(timer_end - timer_start) + # insertion_array = rand_numbers_array.copy() + # timer_start = time.time() + # insertion.sort(insertion_array) + # timer_end: float = time.time() + # insertion_times.append(timer_end - timer_start) # compute array fusion sort + # fusion_array = rand_numbers_array.copy() + # timer_start = time.time() + # fusion.sort(fusion_array) + # timer_end: float = time.time() + # fusion_times.append(timer_end - timer_start) + + # compute array sort from python + + sort_array = rand_numbers_array.copy() timer_start = time.time() - fusion.sort(rand_numbers_array) + sort_array.sort() timer_end: float = time.time() - fusion_times.append(timer_end - timer_start) - + sort_times.append(timer_end - timer_start) - plt.plot(array_sizes, generation_times, "-", color='lightgrey', label='Array Generation') - #plt.plot(array_sizes, selection_times, "-", color='darkolivegreen', label='Selection') - #plt.plot(array_sizes, insertion_times, "-", color='mediumslateblue', label='Insertion') - plt.plot(array_sizes, fusion_times, "-", color='peru', label='Fusion') + plt.plot(array_sizes, generation_times, "-", + color='lightgrey', label='Array Generation') + # plt.plot(array_sizes, selection_times, "-", + # color='darkolivegreen', label='Selection') + # plt.plot(array_sizes, insertion_times, "-", + # color='mediumslateblue', label='Insertion') + # plt.plot(array_sizes, fusion_times, "-", color='peru', label='Fusion') + plt.plot(array_sizes, sort_times, "-", color='coral', label="Sort") plt.legend() plt.show() + main() diff --git a/img/results/Figure_2.png b/img/results/Figure_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e2837553fd7dc5e19ccb5de1b3421e4d7b063b GIT binary patch literal 28812 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 Iv|K{}FT?+6k^lez literal 0 HcmV?d00001 diff --git a/img/results/insertion.png b/img/results/insertion.png new file mode 100644 index 0000000000000000000000000000000000000000..2d783b01dba8f067a23c0520b6dcc91a54457f9a GIT binary patch literal 40667 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�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

Zn;($(RSE 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 W0lvKK<3G?~DqK>%n03MA;r{{xgt`U* literal 0 HcmV?d00001 diff --git a/img/results/selection.png b/img/results/selection.png new file mode 100644 index 0000000000000000000000000000000000000000..91abc66f5798330f10b7e626989d6fbad6314b85 GIT binary patch literal 42096 zcmeFZg;$l`6F>T(ukwm0Dqvlx~o|vk&q8-MiNP1MXV)S#O{`vG?rRGoSg)%=S=_lh{Lbj0(fBJ$T7$N*J~i ze%!YBFZ$m^Tqq^{Pr&xNhOM%dp{>Jh8v{)Cw(UK0D_e7uJ52TlHup`eEH9qFbe@}o z$=KHR-hDw%PK&J@&Rf|SaWXBfeu0uo z&a(dwwm7X#7@OqK!|JRVALprkbE{iYx=h=}q1$_^(Nt>H29JCzd7$ zW5a_PI9qa^XA^erJs#IZSnC*JNq~o_4xeBCS$1AGpT)B@LNW42i$LS_u7CekC~%(b z_7WK!Zn~2ecYmPTx=mzswyV%p`;h1L?UZ|8(l5;y?Q(E%FsOd3$!pfskZs*F^Xv2D zYzwpIlyiD|dL8f=ey)_1lcB)#A*cZ zALFC^{>qN0?(UV1jlAz8&q%AM>NdW+{P^I$eeb$UJ;kP{`OJU%I=(-yFgw&ZJC-*t z${ogU)fv<|FSf=U5gBQ>vSDe^*wntfL;B3 zPEHOh6O(wj>)e}Dr%(5cu7#huWk1#)Ul%Q12~P>!?{9c3aKGE)FatyK<;Oc&<->$+ z930eJGfZX|hf~dZzIt)aEE1MR`5O~drA0+WVY(`%FX%F1V6mb`ZCMu1vyJL!@E~0; zZ7IX1Bu&!l8i|K;?{S5vRCK+AgYh6zj>43>4^o_WLH6Y z`|H=OjzU+VPK{jKK_vgt&I0YrmoHZY^Cp6t$9d46O;C!K5_DV678Vg<%qxnEV`)s% zRQB`p8>)?T=QjKv$F81Y48q7ItQ9_Z@BoJ&ZTr+b(vsd7g{O7>``dkS^ivm)`A@FU zOV(FFAv{0Tq#M;F;Qg7M#|!2ga_!8jUSGIs(VC%HPCBC+r*INakk_T5=aYfgs1Mdf z(;YYvv9dHj4BDTdTd;V);H-9*x#DPRrs_w1{GKCR;%bSi7mcb_0@+kE?w0KhJg>8u zR>Q9Fj<}QNMAGWYQsUh*Z|5E_ejL89BG9v~zdBSXK_@Tk(W6HV9}T1zmX^fSvj*ts z>6gBBrQ$mB9LA&P+CW>qjteNw4mYb;1@qedow$vrynp}x$*erzkgQ z9wYN6!ltjn)Wu{(!GOVkJu$C>xDEdGHCS1XFg}=gc#O~d@0HgQd2-5 z|Aabp)`ki>*e=ak!2Z&vVH8z?O_J%lWZz<*b-1%ABqXFY%VJ6CXt;#9c=2gM5k0@< zOYN`y*UdZgH7{JaFa(m#pFAPrEc|g4hN1%7GrOFCpPHIdD)VNro9w>MAm+CGlpD6z zL|W=F!87v9ufD!$N}3a2=$ED{IRn8wY9_0>PFL}JI6nXx;B;USSvwu)Mp_sJyi-%H@(s+<-h+3uS#{>K-OT;~svNDB ztQ8L~re^NOayWtNNmH`6m~{vkpM}Lm(Pp*Kt&rgpRiHV67NpuDwXCU*2+h-(F{NXlhpTp;G{>{0lUllwH!f+B9 z3!{{$J$5XC`Y87o`sukjHMCx^C$8z$?E+cgH#V6U$k(|4`y1!Am3h@HbIpanf4|*H zV_{+WBUVFX6miY~vmY5wSk09gSpW*v3hGLoVRt)TH&dl@S92d^kPaj`%XLR$$HT{L1TYT4= z2Ih$2=;h?(CaXULMU59OjfvIlq}jDgQAS24Kkd}@7vD@X*|@otNGh>%4EVaAX?J@p z_zk}w!7Fv-+Jy^^!}jZT9fM7Qw3T66Gmt}5DaWR-E>1D>;IU(i-+De-b~q1BD@RM6 z!Pndj5Vpz!MJ;tb$f3b?d45fPALD3Xeh6B_ZP>Wo-!YT zemKmhwzI%x7S`o!+du%TG5|2&U#Y*l%Dlb3n|jOrd%W7r`DEW-QcOunNzlq1x;SbE zQ$EJ6{~UH%Blzeq&v%12*7s&dll3)kNK}^>Tb_6fj#TBtt;;I_IY0&d>tbY=8U_%8 z0uQBLA0r#cZ>3xM<;x!=Fn@o4fIS>|HnpVJTAwVFS(Rh{fa6QhNQ;;o>qu-#H%bJg z%4vJL`O%Ku$eFWgevDdPUd|w_xgnU$(L9Tt)wni;J3Dey}xDk@4)Pd$%M0H0{u5ceJy!EC&< zfK5H+Em-f2JEc_cTIs9qdsX4{j4fqgOp!A}BKzt^-}=$Olh3j}4rw4@x0+1zeIR|M zz2s0AN8jbPl>GMXTOO-U;p^9~#XVSd^D(deIasjZZwf%`_6oY&M*-dQ}|fxhue<^8 zP{nm|#%at|H9-Ymw7Qu1jQVHhScb1oqnIdh!w-4?PN=;3DwwEEHMr=*^^4uUSIfNQtlZ(*i$EmiX z5C|h){TFP6{z$lsph|)Y>t%22v33E_T294rTJ(F|!B-fH;C}6MTb`5v$1M%}(l00| z2;ur2yAQ|oO?T$UbPT3(peN;i~k_i}#x=+OZdUU_N^aQqJMN5n3X$fx? zNlD3euZQk?85Zl7ItyL%MF0NUPRFJqDYmwJ|6?`*eXUpo{8zdn+aoxLS4{J!0i+kGZ$ zg4e>r!kEueoEQ&}Ccr>t<<=)jjC!#RbEJBuc3G*knR$J@tGhQRjIHxw2Yv!_3;@WI zes}#2rl*krxqpCrW;=WKY-6%^^9YN)EkwrVEA9$6Qm$$sKqFVUC30ZLnZw<>_ z3@IomjtSYD=cgG~1rLHn>i=g$(5pV_Efg3o9}r@qgwKg!QP*5F6$t6XthGzH4${-J z8x8#J+8YrO(QU~S@}oLjEOn}{68X)=p~O@b*hmnc4*sc)4CXd?@ln4#V&|S?xQev! zQvXhWqrTt2PXc)TM{Z+Q!i*^}co}2kIHdP>gLT&-i~#$T-YrtN&Uhs2z^C_)mZ%CC~OK-@5ebmcfr$Yi8UmcUq8ybQ@(jKA*JPAQ!>z=QJC=h^OWg1i- za$TM*BSnGGSXo#kAs~49X&jI?ihHF(1!qr}72F^229oBTWk)V6n13JFJ!>*i(n>H| zyXk&ev~VD+AMC055ece^Lja4d+mJZG8Z^USWSBOxtpLhDCi=j!y$3{B52OWh$}5v) zj6)rHpR}^f;{jRr#gF4bKZY9OBdbFAhkv}k3J<>;YEDfBOQuZ9upLw~s0vnnOi9xO zUe^{pSy^EiSdw^%1X0{$H}dlW7*j-NGy)C)d}aKDsbFQUP0*(IIeP1%b6Q_qLf1D_ z@${`-Oh}yX0UfoiWP|B_$$xTHFGfB*<<&WDDH3w|0Qu3tflO1%A4PEj=u8=XrTkSy~3NGhdI?CiaN96 z`fLsD7b|eEJ_g06&NExaBtB_wK7dbth+Yk>3?qr_DdXs>F5HN`LD94goK0=0b77sSv=kL zicNLMFO76YT9iA>q@GzdSxZ&(qrM_63dEW09Xa>Uj@>8#N(jL@9+x?Dd>z1G1UrCa z`JMA|ydzJ&Xl*qQAb!-hZ<6>r@aYKh1JbFetYjbS0oVns(arYz+qZ4&*0Gq7-+yvN z=hBm>Pvf0uhbHGP0PuHQa%^`w01x?yE=um8I;a51uov()?OC}mIusL0a&IrahrL)v z&#qUP4}aKiH4@H#A*v`fWnym5+hrq(Q9Rv^b|Db7bQ~H#0(wLf!F;kaGc$L}684n% zg6;b1!^p|V7@j>@cCKi8JPlS4s37N|x@gbB7sDQV-~-3P`m zc$S_DsXFwD2Cr4%oC#+5fK?tLh0U>Ucv5+5zK|~#4W}3#HD-UVEy2?uNoKU zcU<*6bk12n54OutkB?XrKrh?nzt)+S9g7}IG9i4)fO=B^AtLW0pHD-?6--sI=K|{j zFbt@|iJL8JiV!y-CjyA-<)`+VbTHRJD2(OrdZ1j_W$+(_p*wwLuyIKF?jOcr@@lrW84!~RHKyu` zbyhuGLr|{MdHCGyV7&ydX@dfApW(S(z=!C9F;xfu!UKdSVt0VCgHXJ_-2ZIPt5XST z$-#)#0+E{Ze)Fpc;ZH>_voTS9xC(|m!hK`y73?S1nOX^C*8ocadbQg@NePsc4)_)~ zQ%%3K@+Z#e+55Yl0Vg(EIiK z`U;C*`FP~n?bi(3xUNb{K1YuD_;C&^t8qskhe-QZ6%V2?;U{S#9 znc5$BFKb>0&E?JY{n5lHU+6GQS4uwOUyiNhr{saL&Z761yX=2tY7^K(t(ehWtAihd8Fou% zZKXwDkIfYf!|*6OvRyR?SGY~YQ%x#-`8-?Fi27ceK${qE*;Np8xkvEN*U_SYlNN{2 ztKjAkc-7qhUe(_p%6^O|<*{W)4%?b-3(vb|mFVdzV|$L`lM3t0gJE2yUTp-EAD^a$y9DfX6_+5?GIS^RLjYQE#-H8F3nYhY+;S1ysCW-`fj8~(V{ zt!;I@e2rQFUeCk4_VAw@6xgNLKmx~uu2qDI zIhu8VF5@uTe`e3}oJdEGgO29%cHR%oJPXm~w_v2dKm4=r*DaKAfs{a1n20uVlR&X% zz$$_FDH}1K)c^iX%Z)susB7w0HyhqrGuU$eef81sd;F?MESr~u7MhF)a37R55KfH# zOuGsJs{%NB$KmfTSqh0i=xEkXx*5NX)h!RNo+P1KE-0 z`7Q$E_$0*9(#WlXF9xn78vY&p)a6zWZk`9Q3j^@u01Dxsbi*pr%%20|U`bU0pZ5O# z{T_T@0z|A-d-iy_UJJyxKaACMrV9&8;#m_Wj zEE2EshnihU`O0E~hbfqTgWA@xaI;+*chhJZD+|52sGgJOBwU|WU0n^|d?jf6=N&-b z!9aCgMIb?t!2_Ue3U0eK&mk3ta#VfqOYo@(-a>rP2&0#n6S!530Yj^0RWSPs$I8W} zQ0Bwf45V5kN*aZW=>dILSLnLbP4xs3d?HVQ#$fI6ERs7VFN!4$yXM%4q(nxHF^__;@r1veA6?PGua z;f}NAZI#U<8pIM5Ey@5VqWZ~F2dS&e+(<3BPhPNSh&@9rKfvv}7%zf}4)E(>4(GoW zBEdsac(7o;)04ma1T8JC1M?cn6C5}rB|JCu(8vz*p}?_o_Jn8HTdNqyuUxGP9B%K$WLJ6!`yQ+4|8TGD6845oLIx6Vs3qYq*eGJN7t#3PN&FC2iAw`-+%ws3_#+I{eJ&jQ zgG9j(2=*E_wEU!VmD}xsH<&_T!z&0G@6Fp-mVOrQCBY3hpy$&$bqHUCi)4 zA(8-boGBznNKyS&A?)Chk(mIS84W3OGe}}C&NdgNzWVpye}6pPeRu}KmtojuFJ8WU z(0k;ZR)#Mu2im+~XH15hl2H;BFhAX=Wis83Ns3nMEMC3()vlrB!@j;PZ zTofo00P~>|BXbnxbP^QaKZ0U}B)64CWD<~t;5g(7kSh`ZeH`El1f(Fz3Avu=vvL`b z!`DTDFfb8_twUx5?4J_E+fhX|6J5Xwa_fJ42P|D2qz%YH<$=p!%ONVtRLQY1fFz#o z?n4}oy+?q2(Sj7&SZ6_^x}K{l5EqINZt%J-|NY{UPF4-^h)ee;<3Kl~+<(&qa2j23 z?HqM+a*pBypLGHS9$M6MgY^Bx5x7Un zpVFEG^Fkw*1iGRQ>fNfF&rtctP43BRxhDqII{_=y*>z~Hwy11@NH_53cox2h3soJPidrAt65Kkul+&_~I5{oG>D0@s6slOfirPWiMb;T4w8^&xwlcH>dw=wq4dCzw zFVyQ@tmajZjb|{Q-990_g~TLD5fP_n>x1!HX(n0JCCpZwdYM*pZ*774&<^Zr2&6v@l?2jFN^LRW-@qyK>SMYGH}CR&bp6KD;WE`Ov)QH`ZtANh`StNv ze+)Qh8XKfXQaIu_l~A0@Zh3@4Hkeuc+|k`<@NOpDad&?lc8 zxGc-8;=lK~E^9Hkc(u}g=h(|MfDMA*QWFcdHq&0*%$~pm*C0z ze@8_>$dLj{#T0b3_9}H2N5JaeV%}5|rlU))aDjw_vCg?%l=0rR@f2Sn|=P zZW8soFaL4fbF@p7pd-dv#B;QvXy717rfNh3Be8(h*!b%5Cs>GMg6}=g>j)(CbPhHY zm8meVQ3%s*Y2}xvPu+(qcj?&up4#Q)vXDUVDX$m_FG26Qv^B?Fp3kZ4KX`Q5&DC8% zyGjpk3T6$0jgH&CrH}{cz#i`RcOGh3=nAYjomu$j0$$)_FR#!cqW=HH@Cf!4ug%ob zV$XLsr|j6efsR7;YV#f6y>~DjeZMhkjP&}?9~Q5$#fQi=TBe*>Od9^DZ!gOodk(Ce zdTZ!UzI?eh9CDO#_{XGu_Z_7%GJLjDO}i;La{!e=dK!tcRG|! z<>f<3G@bO(-8(7))`)XUYzqAKH^X$3ivLcw7CHnbshut8vV0;%7Z1T3wwJj1H7<|a zM?nAXS+o?$9P(5Z>0D6)8w7H~C@)hG^;!A&)SzN(gYQOVX?u=xUqj*edPe8hn8M zJY)hKO0XEA5LHrvM9doE6oW-vU^Mkm$putVnd{BM2QA(noO4YR4t8pBO+yFM9g)X}PJ_THkPQFAj1GN~g$=5X;)~UE*Un zk1^v-H42i0n+EULoWfXlsAEi;D3guYOoN&*9f19H5bUAU3=rPc;EBkWwcCP4bPUIl zQ}_h!oaj!IAIgV3OJO;cs8D%$%SqzE?61$;Q63mlf%ULHfl$@OYt?xZYBPco6NfL3 zp8h{z*C&Tls1gt^)~b}1VIIplBW~&tQ#Iolds#7qDMr%kphqhT7*lCC{W3(TaYF;mL0a16W+@fr zPij~7GX>wk7NqJo2ik*tG35x|v&}1fGnp1~H$o-B_{^;NMHx9cnF0!~!(C6;?;!?# z=xgo^{&?#-?EC_yKYL~^g_Nr0&Ks6(!!|ekuj{bU42EM(ek0v_VK9_fFSPPznbKE( z%Qe-M8+tar48LIvdyy1%gSR!_Y2^fLN^m8_HJ{B5@3>d7*6$cU$XFy_6Fd`eO-ZeR z!C*PC6I;$uI1-s^f#^?iZ$+4lj1Joo9O5bpljihII*jQAr8+pzjtc5hXikHiu&^zo=lDW-fY1!k zah8kY+MAW_Gn&o2);TNem)Mq9mH)8zhx3?F5AF5q5-jrK`(5jt-sTrP0Njk#JlUGy z%c{H}(~3v$K}n zA($>0O;Gp9=Bt$Qe|*^I^|oF5Yz+emaH(_Fi5O6ti(qK;4{pjT%J|c`PV${5NLZiOjYg!@r_iwSsMtpk zw(596hdOVkF;Xi@+pU{4-qSqhy<;OEDoD^cUk#*zeYVu$MC6q}K(2KCx)cQ{Z8&k4 z&TRASv{av;7Nf(W+76o{@?G>>cfA!$eOs$en>RSN5;7(2e>vQ4MYrYR0K|dV&n<9r zykczoFt2qd24oqF+1Iy=Nf5mcgw(>8xaF`ls(;Z0=cg|vw{lC6RB(DnXD#`abmJe$ zfUoL*w=pd7kB5P2{#yN4gYdS66K|?g5c+7y!M|}xALPKbrG2E#^us=;GZ{X%1FL%g zh$d(!o@7(bPk_ZK-jai47T>sT!l36fR%T``v~d*OFH{6yh(#-i|KA5`85p9EitTCc z?~p!&hu}uB`PJjT!QTc*@PeC)?3>hH=%8~q#x*KE$h#cM3*&ShcoS;nK;gl%`$lbA z8m5*@_RisG`~XLL`vxO*E!^WZ9@-!U!~qY!e&NGlixn88^sfr5@o6V*OYd)XXSl(B zwUq-fD-q|pb)VKX{nyM@^ids@&C(>cfRtG8%X;4$8#`c=`DSb>VR^3oH0g%yiUKk= z{*9Uz!83|p{GEmc1k7>gru-#IdyjXdjQ2l?`7oid;2f(yK7WIaka7TxO#kuL7hhBv z)`PBQIF25~D;2&io&D^hSJ`~Fpu8Moa@qub;-vk@4n>R`5@N0rMgnk+3HzcPx)v3x ztIs2Y+Uvgcw*R8pV|h)7D08isH~~S&D^I&6DCCBr6=;dr5C(D3eoQ+OKTXNbCU|AA z-mpnxv}^-Ni+|kQ*;xITFE`A_rqZ<1?ZR+KqC+ilcOg=_hiy)hs}#}?i-upz z1g+L3$cr~MBLQx_W2EgQB9&z?@)Kj*!bQ?voi^3iW8ih z>*#1`#Cf9edHFc|-_H!ulX9^>LSCw4$Dg7pI#O>6LfBuA#`4Es#zj_e9uQnLo((Nj z6)cj0DUvyt^%V-M;G#aKEhf8LUDg*z1~;ZcH&2YkBV~0Yw?Lx%gcWUV1DH9FB#pYL z<4Hp*mhT<9mZ4+9AGRd6wiWXG&>e7=kBoJT1Hz=j)J`ccCOqydy%hp46EC;s_#AR* zra!-&fDQRkxV@kuuS1fKQ==M`i#V`J&=4KHLt7JT>qQ$%CMc!C`O-y4h2Z@=H~MS!lY4*H3>c>JiGsa9+{Yz#C(&P~(Av?C87)eRXpy~F3j zp##G+H|t1LvtIIDaBJe*-mOa%lYC#TC;A>mx4IMOqUWYm!}s0|5L4d;YJ(m4cS8fk zsWQgDsdJ#%_mS+{fD zTGEw(`N9J`a;7m`jgqcvEx3FT!#p-!L@|XSCj=XAtm^Y$hM-TsNgmr?~N_h>PoY5UhxU?cx~=dx4Z%U4O^2_o)% zpnCW^_NVM|_~gA63<_U*Z87ZPrcJ=z1sNl=kug8l_Bt=HU+Ie1@?W@ zDEm@}0zn6~VB^EPMUo^~v5JGKF)&D!SR&7S$EG5be;b^3&(!ZY$RJoKO#+@qwNPKS zKsCMKqhW=CjUXnjv}tL4so!35QSfY*YpPW)!jn*NuA7k6nb4vOF8uo*N=%Zpsm&yo z60VuDH!E5n?LV$wN{6CVeLJ;M?%Bq;8$yU=>3xC`qh4+peI}0!)K?|sRuf9iV*dd3 zaR%7g>V##j)8NL{j@B7o;AeseZcC3&0cLwIW^Y`c8!re{IIg_3MOC%3AbMwG8%wCw z4S(8g7>RasUHze43U~{X$yV0fdkar+<&C8}jk;DzJ5{wSIc0Z3^$kWkvw1V^Q{n8y z{r)bcp_AkNLn#1<<8=ca0>26+BMm4&y1B0S6HhvueJ4Zh1}jW}fmw9vF0zq!ik-VC zbPT$FH<#))6A#C=t7}$MU1#mI_Ba!AxtAzk!=C>op0t@kmo)kBKgK`69oha)^`DxX zY9xj!Ly8l_Z4pO8RJ&;!gJ^RH+oQz-1XYjCjti)2UhG4F_<#MyKk)!Yp2?1+Ts-W< z5*YhwarSl8$ea7f!2Ei*xg;Y@r?_vHFwgynpDwDbFOgo!l~)pPT1Iy764!`YTyy-VL%e|$}zoWdCK6uK#D z%inw81O=tQ=)Hq@6Vhc@!|g)fwgUk03gw6>3#^^{R^0cSpJ=?sLESfYE z-iA*In>YozyjUnpNQ81Xtvvf=$ls?z4GJV*o7X7~;=%v8sH=3RGWkX{aL`bja*lFv zR(%+Wgm?+cm|xv^dE`B$t4*NT-TLmshYy*V$vZL%_w4o`cY`kDs;mW4l-xMA0_GieR)Lm6{I)hICdVz~xo=op#52klmrTd0)RkaM7K&xWUk!BC170dGJx}R}p#! z)nTDZMpPteR1?++MfJP}6$hdCxN3u{qD%*hZRLacOWfdSt`4%PK>J}6=1}3zQ2>?B zP@Veb5QoM)C^IsHE=VY*PSVQwH6@KcE&iY8eC3rYt*K00ymhiS3TMkCd{^8+QAbUeYPRD3!Wh}bjl|rS);|wA@QO(l-tSz4Kwlmhm^Vwj<>@+C~8C$y^ zQSvS4Hq4Q4#166SM8;QMwQ~iDI6PpOnK5m~p;;w6vXL~~aA8c>Kem{+esqcNPd*Y0 z6cDgS39HVuI~vDNa>`p)?7}2hH;kb8i~EzQ%8=m*5_J9j9B5fHQM-Q^uQ+XcfhZK> zlg-FM>E-ipT<5ez@Mc+6{#A$A9r)#UG!DnW7|Y8&Ob%egyT1v1-;07}fG&aOoGcH6=@(Vx-rpG2qx|9*(kYfB*{|Wg1E!O~0h zo=}t$9)zR&uA?;iSX8~~r2t}?i9j!|U+((>fZh-CY0MH4lO_T8G>gROr9NB%4HIvn z|9vT9;}NZ-lZ|l^M^H6MHIn?;^Uh#*Ib$&(v;P?q!L@bb{=2h zcP15RY?%d{L;SplG0boif|V;>)6YJX8k*Fo-Otu^=rl}$H?d7MlbtunpH>-Y%ZZ|s zd92N8WG3wGxj)@dQm>JoTLkD2vYr8QQqJGa@hgoo%;}f`@880;+gdYu_ zQ!PJ5_kGV!O#HxRWI@V@)M#>xpq^Oro49Xr{|ab^qFv^ks748-#A^l`XtCc!UpSN4 z8pfu8r&nhO8ZVNfw&mz5F1@Qkc_{LyH=}tXuAGZHxob5NCDMQ!P>Pj`RI{1`ShEKV z^mlJcOq{eC{*d0n=c_b$u7ud1dxZ<+)Rad2T7#|$d6e9nh>8>d1tz?PixMc816wT9 z_^0%2Vpe|=0mH&*H{gaO_jx^`L_hzoW~f*z@2FBPXr)$169zml{&8!qUK^!ow|i6Zf4Tl zT(lSuZ|^#g$4sRa`x(4yMM38gh(+S&!3~Bjg|{!HL%Z`pE%?S zv?L;|lov-9qoywz%+Vl3fbA`Vy1Xb3$RS;QMy>dYLlYH4Lsf`035qpip{h9q=`y&^ z*RUt+?359`@#5tR1-}OdGX~)~$h7!MvS7E=p`ruzaqvJ{QBH2|S1+iI(17xdix-Zf z$C)mmup115g--}`1KmpnF8dV>ceZzen6`Y^~B1b4hwS@*a zgu&rDP}#A>&wI;U2<1oR)Qpggf%QLi_N*H7PI&*M*trqZ6kGxIOQ(BaKDD*A%s8@D z#l--Ng(?Z`ppq|N*mdUik|JBcyejhhzNZwh;uL6;j$;tAXMvj8$**uaLlTrZy$&E- zOy48+qk6I91A7!~ZKF^bpuC`uKOq;Io3=rs;T=ZQnS}NI5@xiv!~DfbCHV(Oo}MAz3Wm}=X!CZw z`=A7217h#s%tFbcv#Axh3-<5^x5c=UBYl;c?GQU-s5a$8;_k!e-(}JdnM?G+*ovF zb2UoA>S$9dEhuFo3xKV{CbEZ6`Wttt`Mc0tWOF$6>FAZUW4MD~ z%r`MH52;XbJyK)TU<5^ZEKomYxNbFgx@p8&0~2Rfw|se>o-kf*Zb)w2x3Cz+k9Mk~8d`Z&$L%oQDd;>C z2LOBOn=Fx@$M}{KH=13s7|M>Lc);cJr{3P)q(gh0;{gDE)JjGM5v%!p2a34u|BX5> zzjV8{lb>Sm|4m~*^`I>)u0#h8`)MMxabJH6RHZ-}F93b69fp-wKt|kS*+5M82I(!| zz0p@O$Cp6$n6xJq3KABwaq(IU%%&ZGujb@9BM^e+vuvOrB`%N$FqgqOj!#ZSoyJ&nBh=;jg@skepM?iT$LQR{C%lpm9Xrz2A@ExQi4BLk0nH8kQj&NIZCsnNLeB zIV`G=-Uy0yQH3>_5#^NQPsyu!0CG$t=$H;TTOt^W<8IlLRb4VIrE5{S$Ium-K|CoT zz*QM2bHBWhSfn}PcaRPHP)EM?br~1+%2b99*kALZ#(s8k@dbK90zCnp9@ezC(Cw1?{8oCk*)6ViKz!qs5J!?S7>h`1AWE@Y zR&e+3rZr@kiC;e5?J`Bx`%fi=1Hc{&@+@8HlWs&@0LHZowdTR_glfWJhal5ojIox8}YKH4s{{C ztpIoR7AP>u!M`S$y<*y(>l^RCy35BgZU=jr*~;8g(0RxWsHHZQ1n?VOfJ!WYRvXnS zME(Ba+R@;wKhQAcpi|eyzi83cdw0Eb3Z^c#fnz0^QDx8f($llUpZAcWs7=yQB^I03 zyCm}BC~aUI@dHLjos+D?~}Q-xMKxFA{8?pHLn@z;nM}20DP` zP_sFzy@W(R8^o6Ac$Jn(BqAn!j&lzQ()~$2Ml_P7ZRvCh0}eY;b_0PNVpKI5YZNU{ zd7`)+ULy--{i;xXj2oQzU2=@;77=km@Sefv9v)5LDjSV7lo`Za#GxSFdA^EfwoyWi zYXKZ#*e-Q2cc}RuHKe09HKo|qHU3yQD&PflURm8Cn<7a;IlW5}<?cC?F-` zucp@op42%+9!@VLitX)Y{wP9W_L|=$gx!B2zFo%*#HiE2)*njxD>v-047^)FYo)pc z{k$SL2(q67-60)Ch8kL_paqc^T3x={J;ns^jU^KnDTI296Sq1wZ)td9RYxjlInDw*Fj+kC{{WNm)vf|P|4WHyZt?_j^oRtt^)@#HMz z5+YYJ{Pcn_xKL|z z-%dTAi1G{{`1_-8al)xGd9cF{dG`5D0+Oh#si}E#ZG8~`{dbj@P<_e5dKJODFlEH0u5P_e1SD=^ne# znlb$z75b=Je|S$lVAeC_L=7+)3Y%-sx((L;&dAR+7y~SLJ)D9Df~B2*4Sm4dwrx{^ zQ(b6*aD~h8RQjF};_+ED-UQxigh6Gz#BCxa6RlF$J)sLx_oJbL=q z0&sg?LWd#BwmP`~D6{%uhl2VKv8Jm3k{V5U(Ex~$xWnyVnCh#C4vg>KXrZvR!KRMH zU>+-91X@TcOwH^=bvE$LfiOc5gvonwjX+v`S!(B^1~JLP!FVcR!cH<$WURDS#YJt= znt4r(gMNCgX3^@$)l4?N0TgHY;uJwsq0M?4u+g3p1?W=GxcB>tzY_XraeYUji>!Y? zO&yTJI6Q>+>X3sEV7TbLg(SF#3%qP79G>+hMY&Eq1ry@QeJ{)fn|bv^cka-?bw0i z2v5Nn1K~gs@8bdysOg3t9l8h2M=@|7TAso0^-8h9@$}VL@LN~c9GVDW#8X49HXlCf zQ}Y1kEmph$R_yjJrk|?OQh{(_o3{iN5$w(o)Esb;HJ2CwV9cToje;Ti!$eWdA|cQ6 zaAWG?c{B*jT^!5}Iz9%STEYOmv*;kasG@O-2`DE-C4*Y9R{0iab(t8q zjFBSQ46r1nB=2O0A``@CL1zdD#Xos~q-!!l$)T2cgyC-`Wc8T(Al*~6oTZfh>ZOW? zV;oeA&e(UPBFP=A60(jV8=w zxcuumR2nA5E>TL^ELR;SBzzq@z!-*pGfu4+L&ceS}U}O5jsR?&2cy(`;Xny1FOdlXCHuv3t<46!Xcr+bZQl?NL1-vkn>ag zZDVa+-)1M6s2iw8R&phr+qOqK=zK|9W|<#wVpEkjvdzU0Q8gQEt0?6G8fg+$uk-cL z&ZFl!QGw;-!pVJkB^V4df zr$eRk#&{wGFDP0ngVAw8)zL@-*yh$;yF_?R65wf@9zA#%;~ZJ;qXpCT?)<8q6iFrG zmJ^~x2A8?tpooXb>9)Z-}qibD|&m!h>T0#~Pwj^jyG=X`Y-&Efb>6_qDIBu3DM z7*!g21_s6YAa`e#ujTIl5`Mo*316>(^R=KySL%oB7%a2@S$Q=$aR=Up#y|@5AJ}Ws zo&OM(6m@9osfW`d!gDS3^`p>1nWAv;mQxClJRrw1D8ewScyuz?bvzgsFV(`| zI8@b%lH2P8g*ps-)OY+(TQh`Pb`!rYgHDgX$ztR)e+}oE1l%Gwk@;p{VccofL`uzc z9cLrc%?*R0t8Apymk3j1B+AXAR=b5M1C%%+ACR|H1g4QqH~%lK)wbnqb_@mYfi3f)xaZe}Y08Aym(QGr7n zp#Rj1zX{IULM_n%V9N<|wIKY9B4XJHD=Xl&UyH-IvLO6q!H?X zGwlAr!7Ph#UVsXm#e%Pc^8rwcBs!lGHEqSLzX(2M5H4`)WOMazcF`B}p>Fnn8; zkUEdS=Y0$UITECRi`tj%Oav5AJwIY6#HS#Yh+5S`fkZoq&OL(C_5fvW*p{Xrno}p&`Ho9~;h6U=Hpc1Ab;`dU5T45R-Sw#-0j#D8h zu>5xtc@IE_0q3;&@O5xB0Xp#(9Aopwo9dz3fOocx6XnkFN*-5I6QRx-l_Zk=w>OX) z_JQyyYPE$ELh9fYgEM&4r=MxsNH$g&QyTI+({3kX8J5(fNr;8#lU@7+Ng-h2W#j-S z{K{VU(Af8V2M(NqqJ5}QhvP!qMlQirh$S9S6qayK%(!K7@Wo3ibfiIF^RalR$0v|2 zK&V9K|7z|#qoP`#eMj-&F#zYN2qM9Npr9ZEl7pb)h=7taDhdLUGdO?|13`(BLCHf< zVaQPgB4JE+&Aa z&VJV~E-psqBcN&Ck-}`YJ)l#e=vkKi1lfIRUTQE!vqNWN?+}I)tl#Xw67<{m$l{8* z%Dk9}phJpgG|bP;+=`PAL!sySGi68Fq7herdvi0-Nj2@TcQYKQlM|8dmn^BEq^mVx z2%mU?p_D?}KmXltFWJR)VSND5MWxp(G&8Kx_3p*1mJ3Urp9a|>9t(m>6ZMiw3@YaA zXj3AyEE-aoKD~kM4OwtQue<@}1Qa$cyBkRNK6dvkPfnp+E+yjC ze9ZD}LU%tzcc0bxG791ZIjr?rBmkV|!u`s7Bg&`;x@Di0oKZBGPJx}OkDr(|Gs&o1 z=J}jI<}Sy9BHNA!Co{ra0Inwsu!}Ry`)Fv|fXynW>WcX`BA(~KjJzPB_w^yH1u`Ol zxg%E-M8P8m1TVDk*$%?*Uj{c;?c$ z4`pzG(LdgmnYuX^2EH)>K26wjkgeSo&UZnora=&&$Wm%UUPNIFW;|V)^}jVyM(`7x z8w^|l^17`cAC!>Q&w5DGwwdk~3lnozeR1bBfF92-Ebv3L2()1rv>&6X(H518<7Rxv zdjDF;mFa?oD3lC{LblQNLjh;)VSr1aOIUz|0Qe2g;WYwha4of89m=Ey(+o0voYID! zL7DW|*6GG9P&Y$KL|Gi}C1gY=^LGuKROFo5>+NtFkK#Nby+PW=NIe4(-i`@HVeN3B z88V4xNLvSZH3CutsC1xZWq3-c_J)>X`^t@OJ5KvdxBmnkpYzyhOhK-I@D@0@Qlh=y z76|4GI`sTc(q8mUni47G3`<_SA9dH12kAvUmFE^zYZg(;8)oh69w2*jqtAo6FtW)X zoMw~$gr(ab;_kAZXcjI+UAX`K4g?~>^lV3fUb~din-y;);S!@Cw{+bH;%egM2E{pa zKjmSv?QK2TuXOCMm#<&fH^PM9Z8}@}?Q#`(&OJ?RZ-Q|-1c8WXtK(RAlD(}K7KJQ* zF%XeF2FMbu_)~iW)N(V|DkXGKuqDul=N3jIx2K?ozCZ_nkgVau3Rn%17lA@SKUBcg zLMGC;?GO=aHb|SA$lQtt*YN2R7jA&_&{*wZO6G*!JCtCHc4m=0xuZpoL$e)}mFTEj zN(<%jKC``!vSRsKJph5ggp0TAcz9D5mMo7UL#pPQE7~cKe#H+8^X@8G$>>}BU=_aUO&l8Tdh=yiMMMh z+Y^4d&3q%_IkBJ(!t+@nBk~uD!x&dFI)x5d5!*c`^byS?4tEeitjM;?wFLB39Wr_I zjupk+JsG!Edtn1!B9L}CneBaUcL*ZCX^$EjLD&uo9ANc7J)eUNZnvZrIdaSGb7#AM zAj*qWc(%FjsKMx+WeO~u9HKlFAcCL~V>uR=w@3aGsr~nttj=kOTv?Jb!}|d4X7VtV zQ~bSwy=a!$5u5w?0qd&U<=bf;^Wee-d9+KX&{o68Pu$c1j{D_O0~2A1R{VSh?JTyl z0N%QR0yc0k7rC&obD|1%QUp2+OC0L;f!yf|_$bFZ z@Izh=1mg|!VJz>r0C`dk4s$%GFpdb|RR(AD3&wwvyPICqp0c{n*JT4X6j)(4nk)bK(s z@y3ktpLxKAZ|{K3Qpl+?FEnrc!0&4_wCafW(F@*>+~geoM#tFMUHpMkl8xmG$!OYs zy8`G+I-!pvxm{4U&1~Zg9!!m70h7EqO$c{E84YOGiU5ofU2lJYC#M-=($bBqXb><< zW8c9o62~s&h{sG6DQMKcLZ;fa&r;0YEx~$+A8c^%TR6Y|n6(1(6~@&Z)l{kqPthzX zW6KAp%ZLd8w?iX<+oMTZ*=@RFn+>F4-5^-^y=dtg_f)h6eq)SzXZnY>pUtzGXLVJ= zJU9j=lY&9WI#j89)6+OF4q{?`P*w`+35J{k-xdy#!PGeG$!q(&9YBYHzDf|-q;ptOj=g3`lgj-=lv)z42MPN}#s6!rGk`56MwTDf&2W>d)(Z35AzJR1Y~3#7+8@ zr)R^jrxOcvWg4q<<45o)ONt{PC3RIri!;rYn%sJkEH{geU%vX>WFl3^VEWy;v!;Ey z*TI_ifpF2e_*)AZ9BbF9goI{H&^9@?O=z~-Ek|vjMm?;kfIIZ$<0RDf)+iMU3&RM4 zCu4!Su}%SK4++UA`+Fwc?I?^HnpQ>-pS?n6r&}~Ri$Kx`(%)@2(hYnvrZkS1e1g24 z#77C5#>&abUkoesFj7@Tu%&Ci%A*i%-aiVV3XzCuETAac{ zn1TgHqYnI~H!@s+NW1R?d;-z-LM(IFbVxez6rEhyO#cs8I|rhIywDuUoxN>eEGXV+I zf$&PKvu^rPSP$Ngru5|`p(Ey{$F@GK?CgdpjvaXAF$i|pekeIw$n7#DgJd8#Nlk75 zinjvC|7?sgQKKgXJn}7A=CYggHeLJS0D*LO?qPE8>{B>khVb-#0c|2wPN$EVxL`sE zcZS?mw_PX`YeB@N`O8AnLjM2(N!1g8G@w9Rxt5qc0G)I@L}tH5vS}T6!R25K(Q~&T zFVL6u{tS)s9HrR2aYN;Q7?mP;oY2KxO;$PQ)I6GiYm;psqp;dU<=Dreq09bgU!LD5 z;fcN-j-xHSPCIBb+kG6b2+B{s#>X(^Ge>a+W9V^YS>a#+;j8Uq`I^~|UM><4(~fkN z9DmLDOA8mVC?2#E++4|xmle=DAl!Zm-1_4i*DxPeq*|33ZWp3=`Y5VC}-1?spSTX5fnoO+_d?AAqub6QoTNz^3IP|_`fH!WtCmQ5k zc_tK2$ciBf9^y#hJWI0M0iv9g3yn=^Id7_h;qVPHZJh2djHkVof{3OEYrQI(B-<2F zoloNtd;;t@WG^7aNZ=SWb_*n{2hryde8Ps;7364q{;b!R)zQfTMJYgVS9as-Y6#YC zNvTM<2Ts+nyp@&!miek)mDgTgeylM|Rnfx!TJhkx!d5cYlLKTWzrP5C{wwRv!>zC5hR4^jcimX~RNvNnOv7zb_4U-9d z%>pUevY(&2i)2bdYaHPP`ovl6Xd%(ATFgn1xYkVhGx_j7Pbf;#&re)D7fMntzBC{Y z=u#k-^-f}~DL*9!D<*F)Uoq`2xT>QQ<`dmsT(aPqZGXmOT;S)_)WpxdJD{Q9KJZSvGgxv=RsF( zs}}{NWf#vQ?}mSlqXzRxp96y6>U9PsY@3w{6FF=C7f$q4w4nEldZW#Nb90%zXPVvm z=!@cn^@DY^H?uBaw@FGg>kPV1#-GWto!Pj4M5u#&8~xwgw?*ey zbPW*2ZW$WJxhxR%jKD9&!NH*jP`+tZFb8Je=s$j~vm4!@N`25)ki0kr-LRRkr7_mF zq9k{oPw@I>@eb^2*j(FeE=}eBKy)>$`OBZh+m{nFh6wSswbb~=$WIT>g%fg9f?U#e zZU{M}qzTEb;!|$@2bdrIzJy96p=dvVIqsYa{iVC(A3C~nSx|V3u3(`HnJUxfkFKnV zuXz*Jz7GtNeg=#9^V|s+6%|Z{$-o7A%i^L^f8Y3vqPK)bB5A4DSpj^3*|+EPd;rT6 zPQaVop;vB?lSs)LAsJg*EDxPjhEyVCAt{PRE<{kTttMaTERWO$oc+O7Pl4B(`sfd#pn;H4A{c9;SU9tyAqIy%abKfa@KzTZ6z)n>w*2?b%Ij6F45Xv9o<3Q%sp( zI77=Mn$uPw23+7=kaHlLXBgPU3=;c3)I;QgSrP`jFEA{!AH}@*GviNE4C_a zD%X5O#q#;AXKghvEXkMB92p|>s{RR#wYhbjP8N)%xtO0=6S1jfI+g4b{Wj9#+}|uDE;>Vw*Up z-Pq35_Tss^+xwS_e6LJp4@s3orQ#!B=zg=a{Va?juFNags(9%TV)-~VN%V;eyzSBO znftYW*wSY!J3><8xZ;|+o8DUk`E2>Nnw5;ZAAW?XpF$1inXudTKhX1Ixn&2B?^yVJ zoztr`bIoDRsPb8M@Vks_2g~kNHZ@f_UO`RW4q_d0IRlW*v4h=qnjKM6^B zUu%p_%t_us>(OdtPW!tU254}v!=jHy#=Jpqx5DOVsdhEySbQSgL3^vKw0 z^#s)$rh#u9Xp)QgF~UZw+1jL=)IFZ+)cvF?vh=VqA>is-dt`la)2atv2ph& zJ^)D6;!Q@=Iz3|E*K@{3V)t40?R(Xnj-TT<{Xx1e9}4%BY`?|%7`zK7=}jVK#z&r( z$zCxb5iQD~ovlea&$USTx07d=OqH~piG;HkM6Win=@6^&Z5(IB z{RL+Kf`)D`Pp}($pu;iH@6PZ-`IReO%?%9(EN>Y2zV*&4Fa}7GpS^k=9_g(?8!eaSXM9>( ziTL4zLX-1Bn?`LMF4r!|VKS3m5*ugtTb`?@%J(kJv*O3v;N3K<0nV!JcC zGG(Y3KKzwt))HzYa9Z$u^($KJ{Z0qb6uG@gNKS2B4Q95)VC%$XDJE7Q~x{VWFEHzxc zH=%`Yfi-r`=TY7UpGl>y=J^R#Di-0+3Ucqs+TLxq(a{HOak*_s0FO)JA(H6r=w+mB zYA6MM@8kZy{qR-HfOm6ANsLvV$jDCy?M$Ul{Um<&lanzpHcdg31jVcJAS^7cFpl81 zi7B*^EGX;B`j{Gvxua6(^)d>mbi-|;{lF!d+ zx_F@@Z4;eAna0;_p7>%M2e+ROBfh-Vm)ILeGYg4wU41GlazO-Vsc!mn?`??&(cA&4 z-Vp~mv1a@4VP6DTuW))}hNc&dq6|{L5#yKB_+S#-7e62^Ba(RyO|6^kG4wS`!CrYi z{kXm7#c2lxPdU=!ls@p+yy_4>+pqkP255Vi%=gr!QR{kH*z{?)Bu z!OuSER8x}&NJf_1Qmelb+Z!n-^gXDVdx%s*MBvBoIy<#k@v21kMx`_xxna5B_ZM`S znb(gXy#zO^BRU8D&)SP35yvt;vq~loU8-fPleRx!_b7Z8Q(w2yF9h5z+5O?$k{cxrB?u1whWN zWM9(##VLG=BA>t)W385U9iX$C8FumlP`qHQWVF9**aPI zIWLT-I_+}?3Y}e3fTWZ9y5YS*OX)cn@E-lxs*f{I27X@23sG0i{sudFT$B`9LIIAJU>>v_iF;i+@IQNWSYP5M+@ znpK27*r{Z1X&MK>rca!$poXIzzDWi-=mVln|RwbWAE!Pr0ITn&=fk#lT~R>vCB7q<7oo5Ykw&X zewgYJYL3g=i8w-JU3v!TL7(B)E$HD?Z^XyfzU+);yPs3HKJyz3_Pd}o=o427ToaEe z6u9%h5eIkE)%R$i8*=y8vspd6wQ(x9xufF_%hK=P&F`c6iscn3jV3yg}xj}kmHI-*o#t2 z=|Af0J&Jv@A;i(1DOc)lPpoP+Vp#%NSNXjn*kQO)oafd|=n$5ACCPFO-KvJn6KCp& zYPti5X%F2eW)xK35oNP_&lX)>AMJPK`jH?m7ITU1_35^D0^JiB17g6@IrDU?#hXQ@ zb?*|=Iw6n1Z};=i8fpFG$-&U=wfPn?iK4&SAL5XiH@Qge>Fmi&ht3#DJ7fJ3OYJ^1&>n;^&;6~tCgL`&&pj7N+@#shg}uh zXSkGIXjaW)L108Mb$kTn69j%DcO{L8NBQMaPBGhzMkT{DLPj4%#qvV87tXRU8jb~p zTn$yHj^D>Tf|l|pZY{Z*g+(4>i?sgL=re@LG1;|m)L!;?W1uBWqA?mw(G`DHMkU<= z1H_XyPOW_D$eGmNv002ZGFx12>ocC9y}xPfw(p4)K$>g+iOw#qg^q^&xYUtC`?ShL zFA)!#SMthEWTwG!Cr?y#nHRkSX0VJGlqkw$5U|`>`BB)$CY73rv$^==bK%X>OST;a zk0|tLXcS^RuBokNbzDCxB8$ludhFhLe#Dw7-GXzjGYP9YtPVbiy6#1n5JMWvb3A_O zDId@M9K@ttY+{i`ag)pqMrjZsMh$_9jQyTDu@IIIhw7oIIImz6yk#pUrc`m~1+ zj6Hje_0f$JO2!re&u@v))Zm=Tx#24^WgQ_KC*8f3*5BTOBN|JoQtY0h z9yHk&M?k%|8HE7}hNk}T*-5ao@dnxoRnL5K;;?L|2aW`8rdMD_#Df*gt^(nZaCKvT zrk;2c!Ihz*N7N$|-$!=eOS6T$=BSjde(dsu<_&mXze5tL;=L~NiR1|{`WFUSG<8H@ zS<|xF1x8r1!jZbVp6B@V>xZeDO}GJA5!BKu*+WYnmNo-+gN>ctD9kmJptYUr%s`Lv z!$jNn`k&SL&e}!$)LmSMeR)E(4FBgIAy`#zRU$3jk#$~^4M097LG4KC^1Uq$4a4Wl ztEyy94k}FP8lu-GWNxRqsd(eC=9~0cVKm+Kz#Ghcp_bo!HedPmeH%U__?*o!UjI5IH)TfTtezTo0|3?KFE;9fyQhzRr_z3li(-jAs@N`I}nvGeEo zx{~pPXITx4RV%FQ^2*n4X89&!Y9fw43lT!CC1IEn?21P@4XzmjdUopI5b3F1T9{F@ z`nu~>gweA1OC)OaSk%Dt16RKjx=XCFyD|RYefI@N$5+y6g&75FR|{FG_A(_!@!(&- z!8g{wXQg5ZPFik%r(HJ@_sDhBM&zZz+02Xb6)T3Wf$eUZrOmR zuGx%gcs0AUZ?dG4Jh<+o@Ga@n+~_nOD!atk`ij?Z5wZ*Pev5-%w@B%#eZ%L+2VXu` z;Y+ZN2I@(e#&qN4H=Z2GB?uJ_gbss#3~ zqN2<2O>t9AEiTdcx{6(Fv7YYAec!^w*c)Z-Tn>7!g_5P0sg-Pgo-YNt!e-n))^%%! zZpTzh}pIxb?f!t-j;&STaz(PJJ+8$lz?{{UGpN)<<5qq)55)XVi*OI`{WUn%R^^R3qu|Y}@cQ{Z`W|3v z*d}IQ0^PxI(^Rmj+5D5axv`l|79lbFR-7io{WM#hhPHjw`_lw|mq-^p9PSEPkGi#Y z@83h!1agkG9UyCT>qO@~z^lLywcEs& zx~&1VCo!#x;S=clVDKk*uKFgL#H*T0`;RloCuVH^9IKm92sc|52%WU#?JFr!dc0W- z%1p-A(SDYP=99aZcXJkTtAlINun~m6iR{swUJx9a8DCP$Vtr8I1}kM`RP6oTZhLJ$M51 z`y$yQ=XBVuB<+M+626gqA8jk&%(HnKP%C_cSa_-dXQ+QK4OETHW z>3bUfYwLPhlB!AOR$=PTxdP$C{SyHO3@ksM-Tn8mAV;O-)UWO-$1I%pN=#T@YRiZZU3I4YkiPU4}X$ zoPy`I!PwhN{kO#2N>JBhyxjn&pNYMpOwN7x(k zW7um9>}_I>tGUwr#%X7B?%8i)t8@BZ!Oh>@5!&F5us?hD>R(P0pE_*Ak8!Sx6qp{MshCq8sTLM0bv8z>r^+#eXZ=N#I^AXx_>pc)tY`;Nw0*j+bk`dvKywjF?$a7&w=o$KXA1ebJJ%=orYa1%^Z=4(RG4L0t1I!Xy+E8-i1!ZYzsnF*Sy_QX1 zox?VPr?^#F#!!jcJ7h2WU%cz+f4OgT>{Mv?o#e%NMH#hO!lc=Lw>iRsee2MR-J?um zMn6Ob9h^SfS|^x7-4=o_cmG~QC#V(o9qL!n($Z3QadL1#4UnEG0vtef{|LMSi6dzU z(Min4tfakU@JHZJiqMLnRCQdv#BY&(V#PT-R+(Ls??|Eou})4ot*LtEeV|RHyKFe! zH!u+XjD@hn{i7^!h)0yw{6Cdtz>LJap=cMw89eaO?aSg45OVvNk4t`8t=>K~5#rr*Gl?G`E>FLUsE?oj2T`kw{4Q-(6j~_qgS4JX$ zg|&AK-FCa(6UnYFFnXqy+Ubey)9|}f*njt^=?Ik3^IyEk0a?GQoN7ig(*v|P3oWP+ z2@p88c1P%M1Ne&0I1TkYRV&s1d*`1AS(MtA1Z|D(`-WB;cKw%m(58e83$c}-zJS(`Bt))@ce$6a@*jaU5+9MsDW{f~Du4l_!)XhSO5J4n%kVn6fk`re>VG~KC%a&UeD z0c_A;RH}?Se_qjCLUi6IF5GE6kDteB{=u4qi3t%MvQjbdU4uO3oS^_M~UD3x%g4&OEAQXGRs(3knKezj@OHNtOiNb0|^x zsyFjFC^HX5qT~TGpjgEzPhWPj9}%(!&%7 z#p4IgyORbrxooSmN5Y+JwGKi8o7MXgo^mlA<0+dZ0dFW}$Xh3>9|6D0*RGwLE_lSX zus&C30`;RICjm)lNN}-iVd1S$Jpv990M6kfswQ86iVLxkkwx0}J+=mb&KH}IP$6yz zD0Rb7qLlak{rijF5IwNw0Ko}(IXQj+WfFiOhvBC*;^(1YumRNhT@-?%f)^n(WB8p6 zGeTGzh7R&FGcyl=^cEj)Dt|*9tYDAegOpWU^@A!ZDvL9_nH`G0m6irU#f1>aVGRbD z#30D)>MGaZ{YCuprSVQrl1^^xwF{8h!dGUIS8Rl^6;`IVHqC+1)AV=)C^Akx2nDIn z1MVM`^5i#I`qeYMI*}@{XV0G4n3z&=L&y#^`1)**0n|%1fTS1$sA)XxCGzW&H()4+ zfLsa@na*p1WWeAyUFVwRm6f2vjVbd*p^lD@GQj%~-I#BRjgSAnUbwZiEG|jH8(d4Ru8-%4Cf-*)#@Pf4wusD@qupP=jYcxVo`0$9XPk1n;I^g zzqvY52B}SX%Rk;2K)xh49gyE23+vvz;E1GzBru$FDypgscmpWGw`d9r?xMs>g#wpD z1daG|k$SSKlCG{<-{RMO-0y)!H?_7Jc<>C<6)rzN0;qu{8)msv7t<^Tz7p5K4h?@a zi|4)b^_f}u`1m*)u;WB>=4996be}nEPFXoo5guWl|Casw!KU+oMfo%PS}|3ch{ z$hwELl$77QcLNq4d#I>dpm5`q^>AGTH{=UL0lsE&c1})NNIqW_LcOuH{0u7Jl(o8S zN^(JgE`&70BBAb5OHz-z^pp}6S$7%^GGyc;7Ij)Gpvv5!nnP*Ch5n~Bi8(o);$=L$ z13!NFAO++u_yvU)=gI_!vr<#Vw|)^v6sM-9z^br*uTRqChtalDb-#{F1B}rEP&ekA zA~uzI4XSS%8z&OhV9lGBmX~vaI6|czA*C_}*mpkcSHPg2wQ`pbXYDYDb){z`5A@U2 z)P%s6wh$UBH4WfPx=v%KPO-BSlag)}uGE;LvW2vV4=3j3X~Qr__?4jA`J;*j3%kj? z*6O?|`mo{Q%&-Xz9sRzt8OlJb#gXowy5(;Ee`slk&i@)4OF(le1iWBmYH(6rUA_IU zw#E*^?b{}%rY)#vBEPbvA?I&#YHLAnD<(ai@434>Cp)_gRDV&@&h*|Wbc0YS z*hk}bwT~%wr*!J?S``5m$7}?oi{hO-QIOU;{At5oVm)eO4ptT<9bAPStOT!s&9$0y zW1a#Eb!WJWyR19hzjyDnxVWx)!3tZAigpI1ZyG}nUVD0y%m*DPBDrmBY#zY2xllIx zoKDw*-udS{naK!m771M-T+Y_!8VRH-z!l8fCXDVjE8MVK8-W^}O;FX--_I`^3U8tU zK=MiZDJlS=B_3F!5{N76E+JR}`^2^=>+Q34{e#P#g?jcAur!*=Jdg52k>)qGHQ&F# zWn~h!x#k0kYx3*Yd)a~wSCNxBjsyaL80y!9mm6esX zt;9l^a@!eOJxm1cCf`H8VjRnQ|8Bal@)=4!+dngTQ$u6yd~ZibLU3>}(TY)6#Ov|c z!?`U;R77~VB^_Hm72m(#1epY7B{^P^D9-Tk+yZe#T^J%b+ZrBg_6}!8>>S) zrn>qDQazZMm==Ygwylbl)t9edzfPjvJp|(i02`E747uPo6>9)@@!goz$vyM6v-s6P zc4Zx%so%M;^r^WFpbqeL1%)<9Ipz`y)b}#UZ3Z^z#0Ai}$@B9z?m}P|Pqd{P_7vp{ zuE@RI5vd@$-2aq~mG#@h&h!dDfBz1N;E)ht&5Xh}-`5v23;9LtfAIk-AZ^EQ|XC!vUy5diBLL|8BXzB4#IZO-gG$&==~gqZNQa;q))l2Bth+)jT##5FppgSooZ;r44l$>! zrvdkt#Xg^$4Rw++Jm@_v+>oTCvj>@(&A<+=hEna-`rcv&;}a81i`IZomF6&WcW`9H z5Vlcuo$ID`Q$xeRc|%|)20y;NLYfLI8(U`~C1rS*S#Hg@Z{O&l;xsRmZMW_+%?tvg zq@!F*Q?uIJW&Y$rDAx&4i#2irJ@+arD;XDyLBzATu77@a4^(AfqB96`dj*>=epoW+|eg zqUrZ44j2YDCWBKz444E1AW^{TKwKYi5jaFdy2Rr^YJfQogaayu@mQH|XT7cz`+g1B)44 znHyCDCIBIOb;ph!#t$EgrWSw`71j7I1al14LIy3z1k`9m$-&Ans3SxEuH zs6&@57eOJucuucC8?+B(CISzxCGJ6l4aB@3ZaYS61p1ms8$JRgPEzi#99ck}`QX7b zQnNP1?V12f^}*KW2C7QTIyMxj7m%5m3ETz>BX6qs+#_i&j7V&0fKAf`fK^E#HAay> zj};+=Qti1=b$IC0vh2*yT6w=^|_ z;g`u>=7l}Xm#@X??f3+;yT@VBlX|JAfRH;}8%9J+2!Z)&X@z_(DIq}_cW{Vxj%@Vr zmbhtcowm7B=c-$gi2^As_T^z-C;HpKa*%n^V_DAR!>XX5&|}wS3JADEj@E!$@0v0{ zKR=fNz`F9FqBXreE{#B@rXP)nB&MXO!XsIYU@agRc3qd1`%v5?HSfdnvIE$4I-hE_ z%(Ab<#Kf!uU6WC&E4HeCaL+Yo8wQ4 ziX=Bcx~Spt6<3zfAy*bB*4^7~8UW5KEFyv&6VO>lC#P}H{OW-y$zZ0tXTz!;>DeN7 zp>o^ij|PvTm4t{m1bKzvRSL9Om3vaRT1?||+q^dwRFuB8UR1%AOOpsF1S$E8nqo8G z4pvrFG=O&fksVM~p3Ff>vzUq0LS2x-t5fE#CVei88-Mq@ZV{jueY*r$dE}av{op-? z%WX$=TAGsU)>_{JXt>2u{}wnenV}k$q&D5$AB5qdp$dbvF&fw9r{J@R1sxGQVDov7 z;C%@6ViJj!*jlNB7{y{r%qh~P>pdAr0mWqtBJCN!KKJuG1lxQRG+73y z=vg8I2r9H~i1B1mC>R1vIcRvZpt3qACMUPRHxbSS+&`lU;Z#d$rl1kExU$9wHzKb~ zw{_iENZ)#FNeD#*C%Cf(`W~ery#-)zB|&cG_lpA}o-NqJ<7<6e1pw@r3i0_<-PuZ@ z#HE)w9|)aDhzoB7fTekGbHs!D#HH00%5%c@n;-q?J#Hwm76cU~3~ECYV217+8luAq znLB77^^b#t7OwMdN!r_i3jcTSqL5+%5>*jQvT%nVdk_&{vUJgVhj%T0QX-UqS$Z$cRQy4clCaL Zi=r<>B|NkJ%SSbZ;(<9CPT}=DjOE+C^%|YHa#r#JxZ@ zvE7p43*WsAypgBXZqRP9RcyTDA%&^iHYN?6J#DMFlk?)vUQWLAs}|47SBFgZaU=>9 zm&DXoUmM%*^6GZCa>~J)wt+h>B__Th%P=VRvwL@=)~wXP@$36BfBpK_edN|( z-)|hT@YnZunLmDgzuSG>ukVF7j{fyM--409z8^pJ|J|PXf0F}y_`lY2HvZ$(Qx|&Z z(TDbS?k-*Zmr2SudOT&C*Ufh*x4v0SmTuI?ZUpf|yYwbc`ir(}-8;Cw`H^R|0hNkWN1Wwd#8^7ev)0_mS0&nWaKRSgbwxx|ExwEcW>X?Vh z>6C6T^7^V$hbmXQ;=PBPZkT6wwLFc`jBNknwX5D(u-8XbzTY;zHD|8x2A9WLF$Pgq zt_`}HK}<%-l8}?MV5O#JW^cyK(!1N= zS+?uhvu6=uVXs5wI+j^fq^xa8yH@;qFjs!y-mVj$r;k6k`G=#d?^^SlH&^P0>=5F} zEcJTvEu|rvTb^w5)jqYTy!?TcTW{IUC0R7<&Uv7_ z)}hyjruTy2$s{4OXP0Iq2On%s?=nyvOcW}}6U%%+%V!XyT{X~|Xp{S(a@0o{$;|?j zGP4u8Z`ZX9q)ScQqHXA!P+wpFrNh~-uQj)!qr_0##^%wh^|iOta;+-U_6GF43)L_% z5REB`oZ|Xzi}TM<7rK5#-qI25|E6H~^@estaPT(y-VcRBiXz(4?>3E{A2dNUY2(GM zn?D@Ysts_<@b&eLckVcHSp>l|>tOX{%q*k4{@RYM8#ZikGQM%+Mo*sMK%o3UtLMJQ zM{k)F_y$MmCe~wS_Ob&Jz~ycCgceL6k2 zeS_1F7fbD4E(`tkddrle`l84~iDh<$8@j&T7wiukzw`}+0Yq8UFAXliJfW}lxV-QUjb z$Qm`}TeaZe&!ju@*LGa_nKJTJmO-lD=f+2c#k9Tp2f8v#oNE1-hH}GYnv=FD%(uH9 zo!Ts|sjb~`L)+j@%gL@({egb0(8f<}IM2HN$g%aae~vQuomr@V$gYz=yqv0OOo7`j zw`1MZ4hOh){#D}A-%*lqC~szet=qui%IcVu`iSzu%+6ACT98*8y7c-RG6y1s>P}A( z-EC)=V3|_4WJAY0b?Jeh)i$-6-8FvBogWU{OzPO>*26twYWjLZSGiZ&)6P#91dGE% z??hmz#<#034!SgvL0y#}aNN-I?SAs?Rzqyygu#K{hD##R@4q_tuU)%V`s;Od+agVE zvp0d;7K!eeKKVkz$$n?o?mWZF`_c;L)j1v!5fQ$x&F$^&k2IAgNVny$X?x-er?$jO zU0<=M*&#FX)hpHhPgC4pUy$$HulN?z6?$f}^bWG_*@thhinjaFlF}erVOOFr<5A@{ z*blS);1eS?=aET)nmGTv5EZ}U#tH&XL83_?N4gI7R(Y2-6(5%G-Mez{!-Fxh@|fHZ z$(sz&Pu6vt-loKcxLkp}UQW>G&!5ZJ*V*n%Pfz!ivbwWVNvY$dNKE4oXBm^9aFBzE z=g*(tE?av|LEu`v>+d%ldV5MTMHOXMPI+YX&uP6jLk`|6zUpMJSzAp(a@^auYW@8! zZY8v@x?BrV+pzKLVHg(%x&sFH;u-aIb$fR0^89V=Si2{`Fa7r6aKMfI{M8v580@7P zBAsD5ai*4*m33WRG`y9@YXo-5ww_&m>k8iLbXx0W(G=5A8$qWpf6TXj`bTn2rcn0@ zIoCQR!?(pzx*a_YF`kj<*SuP1{IsN_`J<`T_wEyyo*i&9uIhf}ps{DqpQ#nmf_)#y zx^#5I$&1@r6QE{7Zo?xUc&g%l;lhOklY%)F*n~&S&ArTglZ{&p@&?mQ3hzYS5YeV( z>q&I$m2&;ENbpTvXh8I%SJEQ0CdbFeKetRYuS|1t@|<*T^YWD|HIQc=-o{6EuQ!eLXr9}eX+L^gp0`-lS8`B?4jnR1 zX`bBC(NS#>7!nh+D_moFR|Bn6m#y~BojbRu;YzGV%DCl5-?z!xa0a0-lj6DbiLerj9es?C(_HwX4v;@a^xI z0rgod4i53a^zP^?xA7EB{xWUlzW5#g810tyQ^~uz(xqzlcd4oqzNpM-%m ze7-DJjNsEAD&MaND}3oMRaz67{fXbYuj1a*Rk`!-tN2NNz0>wersds~lix>08D<*P z-f?LTyQ84ioIoa8^3Pa7+0X0c0<7MZxWqVA?Omlc*uHBp=3nBFqT{|siULgQ)8KC)mBH@`x%uoEot|62t8E)PH(V-7qzzwIDQyu?e&9&h&2GEwA~@=lKGh7JwIw<&fFKVIpk+D8f1#dB5X z+FGE!H%mUwM@XX#WpQ9)g{qWY}vAFL3_q7Hjc7r{roIB zX3T_{%HKL1&I%UF^&Yi6dhFQlxspep%e0)GuKG8(?wzMwUv*k*nPsX)sQDe|`f%sg zXR|t7{=Y~stoUSPc#|}a%mobKvwF+ZWK%VepN^T3AW|dxpkNiO(&;h3cMR&D=FWfOvtsJ51#=eQxCm;{8DF?n_HAl+-B@dI0&x# zt_{H(7u>DttC31Q(TADT+_x{HqoE|Pr7JQhXe)g2!Aj-s@cJMxRW)Pd`x!rx3eqp77;Q!&Q6 z`>S`uKyOP4h40H^89HCTex(qH2oOlI=wVr|)UNud#L79=i>iHn=lDB*zQ_p*R`RB2 zza^|Y%kab=in?&-?Rd|+?%IG7K&}`#Z~y4lZ}&ZqAVR%7xVpZv@g1HY4)mu?_W14I zg`D`KQ?V2#li9>sd9Hllrzu~Lt!uX$?6le`G))>IvEyg8XJ*Tfr4wd}z9ZD&SJk)O z!omUoil(350|-v=rN2Y1zr&GNx7Vk1Rl0Nl8tuHddq<>J)LY=0T+NnevkV^)P|qCf zZ@Hnor0CtdpoW-CgQ}l7QaLB0s;|nZ(%KVlsIV`yz-9#emHzR3QO8#?H>X6;mCKjE zJwIt~{E?#N{%!-^c$pMf_1IZH32f&WTMTl>Po%p6t09q z`KZr`S6pMy4Uf4$@txlUrqMoC!1>#su3f2BMF7z@8<4mhm-d&2Wpz9X=s)VcrW<%= zxgsa;s~W6svh4Sb0HCTOS`YrNYH_Rbr3kg=Lw;A~mPxb`#vCv*+K9-I0$|!9Huytq z`tgDvKaTs`mzpJabm3z6@Jp^$G)-d7_3_5xy{kic*Xwyeiyp{x{*;} z>}Xm~_tW2jMmJ+6V#r@0jspGIqyW{}AxEi$NmSl9Cm`-A`(uaY{Ys!lmEA@7#jMIL zbRXvKf_b*DH{q31kmt_!Je2w-^gO`OUY<&?%X?piQ)0q>_wR*>=DBaId-#K#Q%!~dRPdOwPB6hyjFXIomo+Fced z&0c1Q-@oaLiH^Qm z(r`%IUU~NU{bA|p`t#?{KXUZwm%=5yyKM*Ib!CBHL5=Sq@-r>(QH?bDfzt9{aTYw&r-jFeR>q;@d;Tzk};Cf**8XghMOdB zUcaCGFQQERA4=tJ+`PH(*Q~A^35Fyc{t#|ex+$LfK=hFJlTWeawakEfkb_2qhrfBF zAQ*+XnmcFCoQElCd(6QbPz=hEYr9qW4bJId$O3i{%tyENQKC%N)6|CORNFV(X4PR& ztGT$OVrlK2qRo6?nmjr#-8Q&>N3dG5hsn~?ngTz&_BRTV@$ni`<;Tv@R!Od~>~FGi z0E>uy*fM$jR)CAsJv}|gYsvf3s&tf94QOS;Xgc!O6n;ys>bGqEiFvfGa_uq$ z6~hihNi1FCu)p2SJ5DvXDo*bD+?qtLaRV~&9%S|r6qu2OYMPrPrv!9;_h9cMTP#+@ z{rg+6VHaiGp)k`^T9OeGpOqBrtrh$Wo8+`=}N9d0`j=89@<)3%dhR&!O7?;im7+0>b(QZzCQiu=gZii zoU*2yLKU`Lm7b0mx2UlKjvI+(5V8pP3KHws}Ro*aF3U$;X2+iSl45E#J203I@ou(9bB_ReU>1s{AeykYX7> z1HoK<(KndOv)}hKni*#Nb3dz$aKNEeC0p&K{d@8c%iT|HPB9O)nIh8|>z@Ng=Cywg zp#cA5PkxVxiSe##DM6MRRaseCzCE4D8G?Zp?_)P{+7ZVIB~en4qtOds76w*Jv$rKP zlk*}-s18}5x~zcqwr%H5$Qd@9BabSLH&btp1C8nAFt>5s!l0&8*UT zM2{OiGPz_ZzFwIDhj;(rqYv>$|BO_+;}G8r;^5HgTWKn8D%|VHv@H@VLX5!cnln!TubkdzP3W$ zX~Mj9F{)Vr`+EvPRu^Pj1JKujN@X`i%2V!<3FeQ;N^@$vt{Q5G)b2>#+h8ZZQJK0x zsRMNZ1BwKLi9IHClbYU)K(UBSLAo(En-bE7yJseIDlAKo4$QJBPg<48_vZ7n%L%4$ z7W%`P5kyO9$>@y$w3s5_7b^!i>zQ=rjSDcAzWs+oY;@p1F9&EZGVS6wWCz*{roOk( zi9^!&jXd4kV2U1uo|`2WWhN)@#Sb39O)p6-i+cI;rGIprht-KKtY`aY%E{fAXNeVK zs^=2uO)XzKWS2hUfB^aa!n-Qrg39o2F^ee-MaTZa!M;MD=;ULcHb?2FYE|`Cc2Ozf zTh%~QRXnKKKME`2R=l2-@%>y^dNUHOj*`p)O?n0>ckt(%iK0*GDAuKIQ-@sAE51Ma zGV-sjx$|tUkn;u6t&Q!cuB3GN$dM!4`=u$1(0BTJV;=|-S}t1DYz2w-h# z(4FzNb!uSHwqBTbd`IQ_5(AegtaU`PO)WB~BTpM{V{&_tCWQG}rYO?JM~)lt4G!~z znXw7aa*Y;#Q07WRiH?ljEHOt@oL@s|+MWedpUd3bAruepvf$1JT>;PB!11BpG<~!Z zMU|DJgc8?}@sz*M-bC3jwLxjb^oz)e8?T}MV1b}k)!*zusn4w%dG;C~aX?X!+Xp7E z5tjoK()rv&sxoZKiI1a@C+$l(a---gd!748Bj1po-d@a?)v|e$Mdo*Er*kmw5ojY__5@nM|*+2*3X+9nKv?IacI#ml)S`i&$@ZV z;5>w0SSEsK+J_wVVcD(RiC4xBEkDEL`Gka5RvI8ygKSY$GcyavYG`O^9JIE}YTwSA zF5rx5t&Vz#r{LTd^thLmB2RV)dgw(t}HR2HFTr*4Pe@VWYxm23%zLQh=AjQ1DdJ* z8=vS*(T^Sx*QwC zhe|s;gViX*r-%t&m>@`fQ`7vC4vbV!v}Ck4573XlVde`s09S=XfFl%87>WuT*5`8M zD3h6Nw8Mh1aSHV}IUYUXRJqb=CKZ?_KLc{9cB=N4pU_(JF?3LF|sNW|8K_W)79`8!nZ zfi>*eb8XJtxya(Twh6{E6p;@3s!6Z!F4X;UbGwt$?ZR3wgf;*rb0P;y>&8az=TEK~ zTvI4}9}b=%9vhrdXOecPB=U@y4rdGrlu_(vn_Q@%_UKw@Rxjv1Hl%(nWQ)^_4Cy zMMSxSziIe;%j7pm;v=b00=N2h`Yzdfgd9sB9=eR=Mo6)%!XbcAKtHzM8$fMQv)+gD z_(wwnud1)dVMs6%l|FNpj%2tTGvE4_7VX1_Lmz&4AcR>K<{KXuBrZN?YUYSBHPZur zo-Hja>mXJJR9G>0mwXffSW3((-Xp#J;ycKpP>!6e9(($^2NrQvwjlemjm1NI6PYk? zZ?2V+ij0f9RwFOI?bujGeBZX_rbn$&j+LvBrcp7;j!LGW_}?Yh-ia)V)NTN@?Fkbw zR8w1BQ_CCjnl1lhHzVzQ=y80uG2?|T#=p|f;+;~f^4bYASG=YbEC`S{EPHIheQZ&7 z++jo-I0}@`X z!V3uCzYCQM7CZ52g7mk$XTEgxcDz**tIL^dMMaQ%&o0kuK&|Ortz6f7VoPo*Z>J>d z>V{4oiUFzV_NXDU1vu2Oe{`P!hCDo-H&G^kIm$*~y*hcZm!hJYwRIdAyssV3E2Af7 zH6yJV^R%|D?)f55mZ&E0ii!w00_m2twsz#1y4b0M9fpI!#E?@^K`u{K(F*5=s1}zd z0x_WPOYp)Hva%1b3Br<-omw)5*(EZ%rLjC1Pkwe_l_Dqm({Av62$?#~V|{)*8e-QwF-bNe)9S+Q{f#5 zXTiK$3}U9U1HAh;GLBQHMx-Mo@cbo`t2e+R8oIhl@Jc4*81cmuCr>_tWHSXtX$89h zgnrvnv(P#ae98Npf_{SMNFF{OboNz$9_e3FC2)l*Nd>QupJ&A9)MFd z%{E59pnsHqCr%X=_Un5BGEpm|KuC~Ih=8wib8>C_8Nt4dN;g-0&^^R+#(cNo7^0&^ z!M`eU;P4TGk(@6}_3zHkvIW~?R(Ece!E3;twj5F+U`z+SJr$RDCHvP0H44$k`UiCF?+Xz zLt>gi%x%?y*=(IFO+H)v9SowEFOH8#s)Jmw9t7T*)T>gS&b8aqWgFSbT9SazU?+QH*fw)MTYO$QySn@iYSa>O_dxf zokC$Rt3M?G))en$CyU{3m-NHt@^*G{S!@yTMF%8MM8xtXUL)3ADJYNoHcLEv>-|08 zWVS8*W6a1A!$|4lxCP(8$Nu)) zZ||zA#InVO6aiX^0OBgk(0ECq+dDW4{9pIY%` z`3Sy|!>G+@n$Wb1`1f1NOQf3ZQ*D&`_-4%5tMjM(W*&Ks@ii{S4@=s22~A73zL0$n zegMU5P->5!PH|5^Jv4QU&&Kong=b!-mw=*4%JR{NFKyi#T3Sm23UjB)Go8}Eo;Y&i zlqr!|drUNtk(7a+-UHkaCbHf?zM4@M7$d4qJu?!0*6_R+kB8 zUEloc3N`Q#cob`7dZOnx|A~apq;HhZ@nO=}z3ZCt5|Gq0E4Y#Xr?kX*oJ);BcdMYS1%AgHfDf)^`hlr8#1hLV7^3m8vBgSxi1wxz!t!02w_ zr_zH=$fV&p`lt^AA8?!4krz$&wZ+|I-RsT{5BBftJB0W!63^VlijyxaN_-_hw{N7+ z)!~tf-v@R0tnPA@GHL=#+c;(j`Ev zuU)<1su!kKSndgCj5Z9flCoKyt#rwE!FluYEoxG?fRF7vnTeSyx0K53W3mPp4vjJE z`T^e%6cmpu^$d7{5Q*4;r-&^@kxUKUx?TaX-P@z65~B{tM}iO zXReGKHm@cAX1=H;CI`Eozi@=5P5T4@$Og3 zt0>Vw;_mBVOU^f<|9fnB{qn`n?}vn8Bg$3~J+$zvxG}=>hTmk(4#Wu18q+RrwY(A{ z&+si78m9Z~13)fd{*f7?Yy%M?ruI{BL>Rohb z1k<^2_#Pvn%|---e^{(27qAP67`H-t%)Bof-c;kSoB1BGveI^Q%M=PvOVa~#fhVVH zd?pSLa*VKFK}14=CPE%32v7#V)pw8)KQsKod_D(PhXelrns@!?Pr3!%5bO-3D}}F=6^#3sUjuoHTo+gb1qy6#$p45~u-nTpmxmvtY=h_=8L3oJ zQNam9XofllT!k)TZr0A>p>lop^8-_;Q_My29lP#)!O0QKuODk7Gs1MkOcyIs5ET3(;|hhtUBXojuglBfDGP~(RQBf0nHVxc7R~!VMz3kGTxNK%e2}9&z$J%P z&jvaonM^~+KK+@Dk?(?`(fXVQhXQ!JgeyUkQ@jsxS9l+@v%~K*ewB(kQajKTEJtzv z{BO7yKr-{M_^*EUf0)tH&It_vtYK4JhVthx8v@G#{fCa;48}-$c>Bfvy`LY>?TCei z=JFe$LbbPSIRnR46g+|nSwDOiYjG9z^ZTERPXwE}XRs^XIK-?b8tx9mh7#_;1jE_P z-QC0XlBTr8>kW)*^{xC~$(E&5nIfHNU|`_y>7tBL&BCGg`)LS80Cw8WP_D7_ZPY9( zEUTK_s#@kr_KabaC5E2OD1z|;fsD)-Ww(==ZW<~l{0g?W2>>+@t(yDn7yt+;Cpbco zy#jJ0!m403=E}cdAC-0GkZ(vzO3J&6ij|7ve>+3v35wLK!S>A?S}~t%fd0C=ehaVt zB?QR269Iii?I=c=f5?Q5a$cA`!Xy=a{CHO=94R6)fte_kW<4E#oi#gwPhjJS(nxbb zcpy|niB4eLe;-C3CRc#|$jJQ)ULrC<$%G6^%NsW_7~TgaXOSbI82>^-#Yt8Gb`u^J z_MA-Xz4?&!ZTzPJTEKPlZjy!%EXQ-oV`qSG8xEAhIw5AuK{Nscae%n+;?l5EG8?0o z;YA+z!>>DL@wFXc z5EBCAkSH9*$SFBv9w=J3Kj#=_wqfb&9%paluY7nnSH zERM206L?H{Hb}!%Uq3%$;!w7$hg_z-sT({8_hfHVD2x|#_ziiD=E7?}K}Xn|YT=!a zn3=s;JJ?WP5ACw)z$oT>CZ%bp>}0-vc|#-t5@}Kyvofg_dpW7DZRrF3RfGE8h9{Fr zxGq)cxW%Eu&iiERWy5bMp>_&svr_8V&C74RMPYvJx^==x4?{whK!>Oc$H1tM$A&wb zU|v$6*7k}EQ72JXr2Rup86~c+ziJ0jVSYzy0k?r#H!UzWsNx8@c0LMltx9E+Jce6^ zyoMO(gR7T8GYr`rgdDuPPaeUn@ZK5R{v%J!oCIpC@N}Yukoxntt|E<-0s0&CvfWUe zqKwwIK0LJfhZBrB@QrCD+goJhd=Y^!&FK+zr3e)@ulyr1eIT?Mqn!t)8|g%chAO~& z!f2hU@keQrb@gAK-J~(5K7nk(fmmg(23!NmB$;K4-CT$VcV!374(@dUIF@Tu?{v(HsVPS8}%$NrcuEX?@ z0WcwQ&5Zk300WY$6Ahib3JN|HoJ~pSEN5bBY8tv^@aiqW5VPj=1FY4#Xd-n69N4#S zU%Yko_H<|pppn20xu}Nt_iKwPthvYT#zji(d|lZj?f+_Rzr%`_M`r+=kf@>!psdLx2W6P*gKPGR zjaj4dZ-t&%o;F9=5hcx%cELGwUdq(8I{xq-V0J(MrnLVdI9m4e-kdejF!*g?xym?L zByvai3ZkZ#k7j=1LHFN{eN7CwNNsE8cR8mghq!@h-=;Yda&$E||H)x2TawI}e z%P`ipH#arife@EG$u->|X1R#S*S2m`JWl-Fa1i_hScB+$ghCEB5BwIbqF;dtk~!vM z|L{wKOFjZrj6qti{VqN4Dipr_<@*>W;F??~91 zn=P@i!7L!W{EK8^d_sm^%;ytoKj7$5a}pvLj2C2+Iy|Iv^pN*n1Bb8&RU!(zs1i{n z>C{Gd6+lPfVeptQ&Lf8~;`94=a6pV{s;e)$kiDPY%P4T@y~NK50YD}sm;t?WzJO9R zG>m~QP}pOpLsUi|_t{zE6ETW#I4aJ;#4;PdJ`|)F=G?`hpO2j7u^pu3Juq~N<42Dq zG7U!Z?8XSjJ^j};cpXZ&J+?1a1ThI<47!KK65_LmUR;<)%;W2mRZfbCh-m8TuSB}Y z4*22FfOl_14oDqZTNnOG3?$tsw>pkMiTH=%8!=cTcqp&~UP8crfLmb?9$ca6@wqoV z%jou?+9>FXC0^Hrz!Ra0@}lmGG4|D(*)2Ty;$woA5X1&72!Jh%!U3i*6(IX(YU55J z!xT`+DR8RDI`IXs2Dn$g%C8^<93D{p!xv%<^ZZZVWEqVIRR^at&5J4VGw+!N$|xE4d%tod?}jTLrXF$) zYBKL>G5zU%{W{?qjb+$(!%T*ckn!H)P$-1Kfd%dy!EF3%n4&^DqRcW-tb{S&`n#%HDRka>x}w)f}2W{tNJb<~^AXW&to4Kq@djH#;!wo5SyU z9pxuLb>ItLc8oF=Y7YDpU)Fu8mIM$HXxYJz0lI&b(Vet0|!ZR=37?0Nc>vL0Fh@OkLr2>}R8tp*P4E#+Jvn0K>k*q&YYW*;>8@#s#Fj@VNxAMoMPEkjGgH!)kBA`_-XXT?n^F8H4pEnOm*yp}F5 zds9!|8j42+bIn-VW)=RNef}D;GN25PtGHpO?+?aRUYCb2ZPY1r%Uv-Dy)Mh1oXj-D zmt277tpPkb2fms<%1-C^e=+IKJ+O)-Jk>zj$sw5_P!<{DheJLyB+ORY-~4B8wKefT zkB!X&=Bo_Ccqb4w=i@sxFY2eweCG%VAb3qjgaH{FsF$4?6m&KicEnT;mFcrqWBRSk z0*I|CZ|J~sSSI?hSLC?kGJM3t)xtHRKgok)0hI$UuUndnZ7Kq<>e#Bv#^Tr#6bUd_ zC|4}@dXdJi_;&=W6;1GB;+uxXC_71AsBI+Ay>78 zAi}Up;nOkHVZ-C&uOFhW%OykBYUGKLg8@eXLde<40q=?cgkl{=v~b8$H*i1_!r>ta zQsnTuUQuWv@5XLeiZRbV|EFTag9kvNH_(Ow?iWuRio979 zIXi=?yOTgLRfrL+z7EgOaO5>%xDt@Bg#y!aB@k37=LDN2*^PZByqov9-5-JEKtxGM zNC>e35m|a!(_;#VOry%sHFx2A&o15^r9Q)Q$Yh)TwS<@aC`efINq+1-s)mq6(a90fax+S;KM)(B6y&){8S z9E)qyQ2eun2>vLqxWB!Ym3+1fb(FWS6stI9Q#z1yZOqBn9k z1E(^CNZxkt9mKatwAtPFD}IICA`47NSVsIiN*Z_)`xtlGG#TDK7J}k=^hn*+)s-WJ zv=3GT&&`fBOJgfics zKNzFUz-c9n@m;r)#4b# z7&us}+WW3Kd^I}l$4+QJNLLtG#6k%5)BE}1?~B3oz%_y%5aLR-y;_DD0h5J^(a_U7 z3g#b{D>RznPo!oW^me@_*%)#*F)3;yG_6RnV@=j4PMMo;{&ULY$<6P+qn!&Z354eA zxD%Y#wxW?}2-%IdDMuH+T!nS+eCbbTr`tjWRhu(QR4>e9uGBsq+Wq3mY|sTDC|uh& zDf_uh?x$m6K|w+#?GDL$L{MtNA-UgjM=n*2z39|d(JS3GB^3eI8gH} zWa}A7A7|p#s3Qon;HRR6g3!EV_T^=gViK@DfLhQkE2RC=7U%NgAs)aesv&_|+gsiG zQ`I54^r)m$dL_mV3NLIQeoCl{Kau)GGrJ3{SY78{U=KaI$ z4P+CP4ev{|WY1lId_o<3pNv29J~|m80=(}O+3)V~WJPb^2EKj!_IGFG8jMdkJQR3+ z?2t@uPC7vf6%ZYJu;3fDObq zo(kg1+W(yWE4TX6_WMqT_mPqOZ+M+48`}S#xpH3+$-+R4y%{lf-rc#DN&7=RO7I-_ z3J}bIgnp71#7Wt-7`w^^fGS&SRVjOpt$BhJ#B1B@j2u_}7@|wkmpeoLc4LRo@#+vW z*pWxd>?(*OfPArPX|34HP|;dH%{__^C~7j4>q;)HLxb%bQlimG1BgkH+A#vHtB_;D zRdhAPodsZIgjb+}2bn9Rhsg>37LtC@W+311^gqo3w>y4!vP2K24^&^F1mVBc)4q10);t3eGUXD&Yg2@fSk&64CBujB_$ z;C1L|kN0)MxpOBiJpx#bcnhe<9uODmBTL&B zBm#6}%SwXqDz_zzRooZXtqJJ90=1SMjs<|ww&CNMDaF(jQ=XGWI`TCX7}~1_`>ROv zOP%212n~k4r6uh+F2ww^!2;YnJwa-DbK9@-MAdQ9rcJ(XP1^Yxy%WTNp0NaIF5x#Afah5JTL%k`7mJTgnryv zyqYXd4m~FIXn9}*tj~TVo0U$r^C5aeP+ULns{eq@+xOA0W-I*_%TA;K<$5_o6i`?1 z%1MjyB=_*MaQu&4W(aR>9N}(VRM!=6na~B7`ODdILco_XerOh5cM`cZHUojRVo;c_c}*5=OWDoCT6$_ zi0dGRP?bT744G3Bcm7@DgzDx~aihnfrcX+W>`y*-DG6bQCB>=8Vj!`FhHnvZGw4Ao zK6^Aa)woVD)XS45A*(V=#^TD0m5JqnVmR9XvQ6q(uy<(&<1eeIi8nH`a_ln6|$cKndEWMqBjg1bmM*Ta7(FKAas`%h&qmDT`NsUUNAcp1_o{yxl zAeSIgA?lkE9@ic$zBg$UWBd>vas%4GSp7S`XVpzv1^^~OD5d;&B@nB&s5#C|_qS^2EE}fy=RP02UQFDAl33 zwwUO!L%58|xeQBql4FH$&t;2GB-}Xd;tqN-=% zcWuVC$(VW#eSHf%0x$fbC~CpqD4>M+^>}!Ac%5s@ciM>J>1ZU)*O`FdGwR``V^r)6 zf+h#D@P{A7a1EVECTUYSIO5;g^1N~9JM~?0tI*V$B>_o8 zJZb@~-VGTd-k+*Cxb6zW7~7+XYUq9oZYk4|IN=&Qq2ht3{L$M_H7X29jNOsUcpV^T zw5}nW1{a7ZhxG3O%6fQ+&;tAkVG4m3nDb&P=OHd}xGxmw-;F{(R!}(KZ3M>*dJf6B z5H#=+a92Y`EUd*6xe-R5)NH4%XMIi%2lG&+ozsp!;`$c1!Bk#$tPC0uh0^32H-tJY zH2W^bm-Y*<3a&-)mUuOYo-=$`?iUbCYf0Jxs&0yl=EeKPCFD?7|VSFRRvG!}T~D?`JEh>T-Fupu!yYM8{K-{Xfxmy-tb z&6_yxPpGN2kuB%~4KrE!VB)daJ0OAuzYI#Q;MST8H8h!w;%MgmC^V&T6EiwUbBZ?t z7flV4-um{psQRI+FMw9*O=~7@K~PnPoKq+q1s_x>sWOfv`@*iV{E0w8n*@JmjeYm} zHQG_5aa_YUALFZU(Cr^A5}ov<{s*ocuZ80mAlU`YPdO_#J(O7{nKX(Y?|IEBT#DQ6 zK)5QXbVnMT!g@rlSqNrlm5&z3`x zc%O&WOQIVX-lXvdojN0=1^*!44<0KcBct49#junh&4Qe!xcv!ERuU4$7W=m3qmnWg zi|~)iRtTQxVx`PG2mt{}#E>!uFI{&DPv}I;)!LR4KnQfU8Yb8`?Q^Y_sfr6*P8XoX z{FgL?mG@k#P<>3V zP;%h?TCDc#;Acs6gqoH&-NhnEZCS$O$LO_%u?oI_wKz7xdZyk&;dWKI4?}y**dT#N4`-<{!%%;S8UcfHt|6 zdP%#fl3WRu$je#n64;uq%{BpC zpgTXQ3`hq08xPCFiTeFJ%KQtkm|D!-M;iZ2q=F~}fOC_$Hlkm$jtpUp>S9!<;ON_A zJOYplK?ogtcOiZ^9AOdbyRxK@Xb)rKMFnnnAI1x3TZmgyHx;GzrgYX)HTCJs{kZ0- zqk+ioz813p9=SPBd?Fkv>=)!vKI>+f{EcK7=&RAM!Vw;nU^Z+K?D<;=jrBcV18wqy z>Lq$M9@OfdW`i+~N55D8+P<-4$F^Nv@2^Tx2E1pnl#$l(!UsicYT!pz?u+Zxnk}o~ zVCw;dbxU!a;1?<~J1O;kA0QB$1!BwHx|cd0htIGp3dX-**-1t5J|Z@hdVikCKoKa^ zEAb_M!h}f46&aOdb6=I~F=bh<_fe4hp}GX0Mx_s9>|{LPJ-D+70#oi674VEyN{T?W zn1g^~(~!Rp=Qd)h^qxt(OOgM&bRVv1Pkfu5neRw3&seqgV#Z?^r0SkS8 zH3X82fkkWk&-`=ugq$E0q4>NXLoY#T1J2zFhg=wON5&$o3xW_G4Lr{0Dq_>?*Sjr4 z+`vN3e^l0l7lZ%ey-Qa6Mm$aiXCg(3Vizde$oLM(nDltQYp+_x4WRlOR@tLKLWNtu zkP-QBRA7_?VI49m%rLeeDQ`v4=Qed5`zjm%3FP5|_r_wGeGjRtP4O)q4uey{z!783 zLwtENR#nmNux=i1f~^1zEFNie8pygFGk%ES1Bu37-35Se zsD7Xn2_|WgWPjBLD$(uLLEROr3r*~mGRo^=ahW*S$5-AhL#PgiBb1Q%1UWt(u9TRx z8BY1bcJ9BuaHBr$_X)q9amE>yb~v-6)*}-KA)x8pO9H35sO-Q0be}mU3)R8ndA&~$ ztYTL>t9KX&No9*eg&NOwL?EA-&AK@8y_GR_f^0RFWDhW+b7VwxtYt?+jH^mlm0Kpl zq>v&s5-c%*WAb#UlH+6AV%ei`|4mvJ)ZjJ6?V-@};-ikH*qo-vWtLnzI|>Jdz+vs+ z0L+Dqn!Ii!oshXA8Z3qK=xp&H#qEOO^lStQQg~oH^O21~k?~q2CM^(luQyl9^12YU z^P#<(Em_1awU;2V%NDL6JuYOa32m8B91P8v4oj?h^F|mBW!=^ZKiV|=rZTIs7i_M7%|ih|3o1KVJn63`(?L&>kaWU(TE9+Fh(5G4A@aOp^4 zqkN>p9fJc^gIsjeZI>OOQ$HZa@c$BlQAZ1TDFXKow*>;>g2XfHqjlLh!kAv0pfeUm z?c&x0p~gsN_oX{0;3Qtpy}PlU9TNdG&Wu{nRo_@;^|jaY=70E)O%fi!4ni!q+Dl`wybu zjtYGo_8bm0ojoR17{gE;2b*dP**NcTte4sufe^2mDVztd5P$H+v`jrY)Y zfOI(7ZU9U-a#*DLEE<4!oeSd)hJF->O#MYY=?FuR0W_h55e(a-6bX3EASCDzJ41?K z)+;>-?2Dfmqs<5((vHL`fP}Qg*3_lriq=3ovIlKjSWzL1%tbK}qyr1EqIC)sOzbpT zn=FZg{M*r@f|jYcSFDXJ5aj*)0bdhK|3PZaLzV|U9V;tgf753tTNnzt_@Dh}$a44A zvV#$4RrBu4MA7VsA{I{E;yjLNqrwmnAR030@r}I4^Bv+pPxO05g+JO+*oNR2Uytu) z>$SrrDxU*LaiF+DzAf#4QwWVoXf0>uOR#u+xaTVBN4n3aMFg17t8V>9?W;J0WL-pV zKaQaFMiPT&?PLdpd828l0kY?hK<$rG3g99Plg=XIWnAv7{=})E?0I0M$is1LbOxv? z+CBF@Ja`e#*SY-^1v&r5RH6kzUL@V6*bRM9pvyt_ zVZ`shuwu~I-1npTZ;})lszqpfD;?3FD`{E2?z1tSdqd}~I^%o|g?`x~68_QBU<`9V zhDljH&bZlGD%X$+A+_pKt3nzfGyMz_*d{~+f1Ih@gX1!_p*gzRV~wNk)IguQ0^nMR zLHm;RymCVW>G(|gr6eWa_OT|SEG&2E$?^Ze*O%7yA*!1}?z=C=*32>==O=J*{30D@ zgTpAA+t)#{l32FkpCTyfoGJ4*H_t2RnF5V?R8(*)8!6t4fZV%jldLBVdba}-&M!F= zvtLtlI}Yb*vK<&J_k9F=s1_P}eS7I#U-o3?B5gy>EnBh=-Xzs2#Ouh2{G_a2`E^vi ze!Y?9ZqD+yf@}c16P@nyWkUw~ z06F$^#v(0XOV*%p&h5JMf6!u;usRVl?O(x()xMYbO0AC3Gev z^_kFT@B;m5G;!#DKBBB&+5YFhYTv^@>0y6Tsqo(w@4xmA(kK4kq@hpsU@MVEebBURD?k|g1aR7p9cG=L}M6{=03W}rq7;3Ir(U3kr*{L?Xr zaUxM+2NavB385A){z-Lj_t}v22n%@Dn)HBNW(7&e^61M^mM!3pXRp2UC;c@BfDuxx z@*$BEs7Y4gv2v0}SQXrB##MjKoLaTV`sqgCpFI*NMM| zb}{JbEIlY9zjc zhp*iCETB87zr?W)C@@1>DMU&ffLs(44qp_cA2K=a^r!Og@NN)Q0`YPlTh;6GA`Mt< zbh6XWje6K6xQVtDboFadweSJf6I+GokJ#084YD&}Ajaq-ums)>``{&c76f~EL1^Py zg$!VEKPf@n6?s^RWIIPCMHE4zYYFp_m|*BKY5~W*1|b(f=@3Js-Gg?ZU^s9nIglCf z>Q>C%Sk{u#EwRbqPl%@%LJuyA8KCO9KUqg;B*qTkMFk=lXp*Rp37ix?~SeXevNpqf>(#F_7{;2bIQ) zyv!PeEaXurScc(*0Q761FwC~%pqVtL#GGWW_~f%~ghu6v&(JhtXrx6UWd~BOlbHdN zAZo=Ymi>>5@IONT2~u5@@JKuZmkljP0uYNSi}M&90)lJZ_aLdoGSZi|y;Ss4l!U+0&-Y47UoXSXZw)tAhnDIEjTgklc2gAXH}V@-!M9l5)4!2)m% ztjRNc3*}lzF}pWnZDa*X(7Oe*0h2Mm4QTGSGx#FmHpx!$S;8JCGzL;?n0*A>^MSVQ z|9Ek>$_lqaQ}1q;kKXeGt4M4{iaoFZm`W<|>*?j2P~jS;!AiiC)xq(Cyk>RhppZ!I zj9Mu#hh`SwI-?Y_L}U~wxCr4};`RT-s+o}SG?O8}^W} zWJyf*%!SqoOplNvB!9dNgwGWUqzyAHSAu4XssRh-oYo2rifH> z{O8%46ZRPTZhu`x&e?qoxl?3eB+rM_#T-xz7pu2J(Mp&d6lfzgcp4&Q(NjROJ^Xh` zhEO>({Sw_q5q%$kVj2R#M82 z5AQ!jqWt&#y#BL8f=ir=fC;^=dh!dcE#v-T8$7uC?|=WBBo$pLQ0O5zvOF=}MuQf) zam4?Z;t~ZRmLQSmCJfHKmce8X~tjTNBGdY@jrq=4IOAhB?@3oFrC8> z`#4B0O?)RZY3wPmlB`9c9uJEmeH<@1G0$n~vV^Iv7Ya|T4hQE9Lb$q=lro3#Gkg}2 ztr$t6O$(ur?Thvl0o z&;<_bc5$aG0<_A5AdrW2jMQ0yhKDF9E^hX+7Qk@Pea0{x2rJ0m(7&$;zY7WCzfDli z1zaJ1|G#v*5M2&dRi@`EXjb$Nx)myOUi5F@Eb4Q1YV=F}3D2~iE&A)`zPj+0&X@N6 zulBw>9P9u8_ik_Px>cxb8l>z|lpPrj713Qul8Q)nL`lYNBxGczjLb^5B4vflgqEF* zY`61x-9F#%?|Yqdo$ET+xz73LT<88n!+pQ+*L;r0^Z9%{pUWi1jT~1qd)}&)^LOFN zQ!+=r(q(iDj%k_RPt44eU*NsL^iD*?eibKIwKeir{A~A#^o*8hT%h_fyuZeb0~wEj}(A{^NQh+XA5-TKMO|y);kcm(13+>_(A=3Ir%=lJMlom<~Bx6r<8+ z{^_C0>QlQ_&fGeps-7XW-LPR>&m78KamYVFnk4*+uvvZ2iu8BI#R6ht#|H)mL=~AI z?(`F`{{1rgc)iMvfVy03#`f|vm&{M+3mwF^ty+!yhbYNB700|*j*AwO z^Ls?njwzJF&%XB6XTp3wSf5H>TNCX#xzglU%t-Nq%Spw)vRFP>`ipNh}GO0<9d7OMIIqGcmvgAP75tC9jWAn@TLW&rHP=ckE73Agn z?*rh6l8D}kLnQP;PF6O|mkAKB`rULYM$Et`lc6C>%XOC~(&rEK7bFJ3Z%W9XWTQM~kUY++^huu*OWb^?{&HRYT(#4#1i0>xoemg#YN1}0@Y;dX$ji&i$LeJ>8?}pL<3^=w zrft6cP~)Pyxp_)z3HAJss?UFnj^}uI^TTH9b#j7Sp4eUr{~bMZPiInm3kx?F7au>r z3SJ)f?xhGb-HrT+=kY$GNq$y&=X1R71?8aH zD~mTG{eb>bXQD%}ITBXwkwi1FzoZ9IC4;iCqGM>m8b;3HzO@`2$v=Laiya|ja`Mfm znpDb>OPR60F89-T_0KaeFqFcj3n;F45TZRssMCNskqiJC@cENi`N;2<=a5LFoq2$Q z^ihCJx-qQZy!kny90v09`m5uN{R38!VmA@W_GLPgWJc6=#mf7XV(4eP@-<9%jSYyz zJkitE4sQ9hf`yiF@TN*i`i#D*YG{Gv74b`^fnFS$jK@CPr<)y>MRxm*nJsqZb{B5H zC03xkhlD#xj~9|cq5{Vjuxw3z?#R9tLJ(+2f=4G$1{0pFma9c8;{HB@&B4#lk6ec% z*RKzGY*9%2A-=FK#b#S712aj<+X^6e>!K z{@|i*a(qv=op%QHvY4^IuFxTYU=!{NHIEn%?f5~bjGO@}ex73jp;y+=FRr9lr}j#Q ze7zA)E47NZRO;^tl56ykk?HtRBH88i%rE^;jd;SBCEC|pC8(5km${V7)>C8GP=0p) z{2j)%$`2o^!(?nVdZ>g~*dN*hVS(XBV?aV#=rmBtcWi4lWa2Zxv=C~5X;oEJj4m-R zQe53PU)9zO`gn{~bZl1DNP4f~9>?C=Dy?r1?F}wHdl~z&%fZpYC4JP))Gu1=bwS*` zVvT^aUlc6Q@?IRVeD|tFvYx#o=<^M)G+U(Hx-MBtp^h9&Ivo#!M^luBdpvm1m)44t z6@xZ2iwta~*};Rb;?UjwCrC^JRV}a#;3f?Y4F&l47+RkoYgg!7$;;Nbam!D~=!4Zu z(o~h+#1xtoL{C4}@w~069uRxxteHdJU#|TsDL1ADW$Lo#;50gB?|A(r=C*~)f;(l| zI-XDD{4A!9Up*Nf6~iG}aw7g}cUL$@H)km}SW(dp-}vmAe8)$4f7(`7BPy+vBoXuH zhX8`t$7+T2~R#>Hd@V^TIA# z9uVRWmpk8PF(&m``-*RdzTJbr61)}3tw+r484T-~JXwBj@1;ELCFMTfDh#*k6b)2a zTsB`~R=LUau)bw1sFOq^DU{}SZ{Kzj(l&(r3AC?L7y5(bT7$!_u49tqYE2_7Ukk~w zQU7Ye0)=%ug|b;`#K?y9P|=o`zm0XA)v-=L`uw3@b-wzqQ!DwP&`et!^MqBubo9}& z?TpKJ5BtR0)i!zhdT}g~WxM*v{<%<{@KgxC~H?5UJ-YJV`7Qdmf0df-9tM%S+@WHSr{7l*pl6Kk>bZC8BSw5y`~-V5^ed^3;g3X>INZoY5#*;AR4X>(j}Ai#drmJG+K z7nT>jGjc}K*M)D{l5%FRj;eA>>>7c_T>-r>Dn2z|D;#*t8~S}m5C44LdC`=EEK4bi zml2+MxC5X;WCwVB38MEF%H8KKoA>bH!;d!d3uZujejFkp>GiK*pYNo%V;1ogvISv|P9U_JNxP*XFeq(Y{7yB9$sFVQp_AIm-2o;FaP;#8A@tg-&bZT zy;HtZb6ck)y2I0R^`Cq3bqgs>HGEg7m*>NW!ifB8-prP86Lth`R zQ;X?WH9H*H7c~^~B+1p0v5sG|I81yFCG!d1wfb%UC>a5Ch7Z^IbLaR31@FHjxRFzP zMKgauKa1C(+_4Q!>>*npgj^~ANsdhE3vPAF{+qasl+}fxDu&2}8AFf$^5t|)TwL=O zB*DOhd!D$MXKH0HU9wr@qNVcdL;5unWr4-&C@gH2hq~p3-d!~ZwP}P;1-Lh?CkPHf zocP}_@OjFxlI?TLtHj!H4oejqKbNSfw542iBXcRk^I+ppi{VfbuR}!}W-27d`t|P;5df#Sn_$)}|U#szz#e2nx$wxNT_}o}PT-S#oOFa`9JcO|LXm)t7ml;1JXI&`kZQJ5fut)e4QY z8r_XeVS#4v&WInrzVh0j47b9j04ckrd=#e_9XK>^TqwP512_HY^e13J;^q}G-|n^& zOnF7_D~VM{-+OEL;`s{~J`{KpSA6(kD=!;=%9?iW=0wMkwXr$(Jn)Ye&gvQqdB2)s z%bmK-e;MHCDHG1Ksvt!}R*_q$^UA|{Spv_1VqcW;_tqpXgqs$7~y*ZnwA@kGt8 zH`>ka71t~eym;y>cgVv-R_YpMKgWADqo+qG`FGzv*idvB*~kzX@cVyWe@$-o*v(($ z0Oa%Elu8_*c%zhmoNc+8b&1*`k%VZ+PwJ+df(xpzO22a3k7wJeU9_!hXtO+EiJBGN)~?@590)krb!Z_c!l!n@98X;*d*1^jAgu?Aa%S zgM&Z5l@RPsqxRE#3Zj&}Njf&&KP)UMG<3@blBX!Xo)-Nq zwXIgv~fv(yo=xby3n?;eaEg#F1q<=Tid8wz@pm= zJQZx^H*#7XQrp8TQPQY=?7&S}D4|Y}$EyA%C%jrvT^NKF!@Ws^x2lBmC&KlbkpV&B&XWYeN(rQ&| z@umBrq~wWOs#IA8P~*)+zz9_XI78k(pi0nBsT&jqT`M1{QBPc?bAl4nZIS~>ASWZxs3 zV}*`WJNO+v*0Ir){Hd2&-2H`%f5X3}2I7a)VIoxl^B_xf+%7kt;p#dca#;`#p2jcI zON#RmbY0VC^@-!ZSK>^cx}RgExx|ldq#246VdR0)EZ>HWgjB$+<6~mDU&sjvsG_YS z0Z7!BbAHCXSbXeEOTeGjU2F~f882NkJ3OIS<&2;F_-4El!#y(=JD;Kufu3?gO|AVa zD-MVF`$wmz??nKwwBU3sbQ4#1ug?d$#a@HSOv7p2mi9AyYl3?STZ?Fx#Mpa$TRk;CX*H6{z#F81#Nv=nRw&|xfNqyebF6R*IA6CQ%3(RR7L4h<}gcXs3OxBo2 zqZ#HQBy{Q0Gt_3T+gQRUiu2trol#&jrPdnI6fEDY)Uhb;Z)y1ULx-Bz@?tbxKr@_V zXYr5)qRC?7=4N(wc82MAOuDctewX&1X+Tu`bWGThE+blSGTnM=NBqTDf4UKKI-P7} zI^TxIYtbBJs_cW1{hL6W{Sd)P?qlb`vdgxKxkA7=73;)mY$A7n8pn{TQbK9Cmu zWyu;H4(yTZPVAB54jfuk1>rIAFtTBi$V|KiEGI0i1#C=JS=lgMjzYOB-IrKhpkJWH zxDgQ9ch97*lYs|4Vb!)v-D!kJMa+HC^WU2d#?&g?XYi)zv+L%>d|m%6G*N z*Y#QAyG?ftQd@#Ocw|*R?D9`7J~>lf=J$lw>vi35${{{i^_eu^QFfnaEUKT~xx+_w z`=#yU(mJou%sP!FqoSuu^)1FLQyDKW3@}gXy|N8Xcaey^I;bcQV+VO@bj#1{3+U7L z?%nga#~Ql?=Y9K~R&(w`HIKyTnaCWv+;IQP53-9H&F%hsich?A>P;#5w*PE*)jK;$ z$)?2dA;FcZM;B!=Y>#wbOp|!AD_*bKRZsiVj`*v=KfKbUwqyU66SAu99zYT?O;nK( zIPFbM*K+j^zn~yKApeUvn{dmHTe#>>Bn1rb2BH>zQ8y_dh+VAw*7gY7bi1E(;xkm9 z$(}QlI_|Hf%%JPGBd-XI)U`gi<H6;g=+d_ww)Yj9hyzXTvMtX;vmCJ;OO-If6qf1oYmZ-0|&e7uH0 ze41D5P65SDk2xly_t%}^7jNRdsmJ?Mz>zpJsGarLjdeb6fMsQ=Z0wB=YB z<3+7|=PZ{3Mmbww({0iI_4jH9u-)sgD+ZNuh^}5*QR2eMyclxBV$!CU>qCdqVzO1V zb%*1!O&b1z>w|+T1^l%|6qMe+6urZq zJQ$&?|8>%Cnk6ovK`y1rN1u;7=J5m(#ZCtR7U#eCgir!BH#`ORUT-h2V`tB9Up6|I zvPwfzDtd5bG@Y&PG~=_oeDn7;iJzvw8|%#+R^`a9v?_r)o0u5VYAnNAC8L^W`!+XD z@!9j#OqrR*Bi@H!#D2e4a_XInTlZHvL7t=zU4=*E+Mc$5DhT>a-I{uiQW!QHdWUrQ zIeN;Xg9qpyKmWZuwsRApCt->V{<%RL;kv zDQ%1mn!7nCSE`wnN8Vqdrrq6{ba1Aj?LDLR6TL=4*BF9`GQ13;!002D6HQiNhvlEm zg;e`cTB>C?Md|3q?_A;L2LOUbD!`6Dynlb>!iCsSX@ixN#bUEoe6(X1OMFV* z@4IdWw=}Nqnn}?~93LffcU^#UUnp-rG(|K5+%E~n97=l;@%}8!E%I6>UJfj3jyjvb zH8!SKH#a>=HuuV?v94XXz2+#@URtXvoOi`U_vX#!<<11*+e(5PhJrLtC>fL|uijJX zXl0eTW=)XsM#`#%kmq;IM*DqEhR8RI4Ba03(h)9rNaq!78Okbl2)-A@5QY&BjC{vE z8;rxKkSW7?rk}I8Wxn|ighX5Gc(ojNkry8sdz(Lzme=jehr)e*w*f`Bu!PAOpIN9n z^03#3rPu#o-XG*GjYoAV2NISdv>Zz&bPh2P;$8JN2>(J#V#D*Oa%`~o;J+}kd)fG? zeU@jsJKNG_XI-|pWSuC+L<<`)7@C^5KWJbwIx0qg=*vbmr4f~4b8B4%K>2yZa^+~>S|Mf>LgMuJwq{!%A)BnYu=!?=&PS()2u&UVDq~~-9N}}1@p1X$zv11 zLITTzKmq5u2ZtKzuf&pbVs1C9*gobR-_ZS>T#kw73J@2a6YTQ^>| zKBPvggw0whu5|VR0W9F^;Z#-$!iIp|%qHi6zE5?!Yr*ggTZG(a7@*~==jIF5f7u$4 z3*%W#%r(<{6X%0)6Yi;Hv8uxBPBRyMS^M%q9j$$*(ikzm3L%*o%^Hxgzv3h&6Q zjGnf?(#=v3XuR@Z#GHwgHV6C(-$|hSn_1XTT(X;39M0273?l9ysES!>4-P&6Py&D# z_UlheNi(li6t~spak?W102}sc|Bb8~d3DgV{p&zl!VFJL^J;GL97ER#n7KzlV2CP6 zQcbyafCCYbvNCmUUfz!d-{_R9w=N0XUNYnICc0w8FrZ0bITY#~rV(8?@Vx}7EbAJ=;a6Z3?@CIV;U~FDz|Gtv*m&mTj)1dZk9e0%?Vkzx{iBS+oLY(+2pIW0)*voxBSCrkc|&)3$5e|J?xAjA>aatw5d7q^;0xKfdx%=DkzAG zZ4yctv#<80C)xbI9}~q*A82O#T;&1qWV%IVW_SzJ@`3ngUqIPJr%R|jQf>+g6<=i+3iUHnr)R#^ch?N{7IarQ1)@d?N zVG;Bx^La>T0XrO+%=kGu6}q~*kaPssb?X-!shGhQ2<4Iw@&LXQ7MKBB^SGeO&zk8v zo06o#L7s5%&>?;i5uMpvfbg=F`~0n;pLORejdL{c-^dKF>hvl0d`XAdp+@6TUN=iD zPd$cHx0**pqz3(rT%V5|>uO7Cw6Y1BKxvEKv?^z-c^6c z#w(@$M0RU4{PB^5x%YV8nJaylN}`t39l!Q&4C{M9^V#sp%*1~ruQ}spKeVc7y3CFA zfL;zc9RV~s`@XP)RL?=~HbjySNir31mSS|jPjL6b{)Txf5#a(xtx?m<*GyU6^YC37 zrw6#U++Xo0i$MzWgA`Xn3gDDh0wo-{up?A1RdWv`ZAh<3NX)VB+%FshqBlz#*Z>pY z^W^|L=AEM-M49)i*?$MXHs)Sw&r7}wNmm-Z=)4m zYlv6smx;uK?sr`pyMK5Dep@p!KF)mD)-_Pzlu%alILn*nSdpL3RaVy7x_cD_g3ohL z>+I>hH`^-7(3MQCGcSv#U1}xR?${<1AGI@G#yXp1uyCerlAbKm@cXLjEH1i?JFX`8 z=Ir`Z5pb-?uhrOkzEOnS{pv8qQ>W6>XL8!U<*fJ|*~kB=z}2yRFMr^j3$yPpWF_x+ z7q0&LGA2)klT9#9D)@beM__T-M)e8fP>aDrVi@2>La~%0g>m+-&l%N`GFD1!8WkTb z;h9=i;dl0nl@i<_yqxAdfuWOqlp|1d`ef74%AOm#o_qTRx;T%kYJD0h-oR3})ygs} z`qf*JdrXZD(-Ife>Ccb&0MX=!9%9hcJ0+!hTBFD7RZF9Ky=F6k7M&-v^Yd}N$vwr&%aUFyGNiVQ6cZa8FJ>-BL!71iaJP>3Pluix zXM-)fGOEiyA|0WwYW6)&?Oqspq;?4sA7@ikC45pa^}C^Q;7F$FLzVoj?>wszxDisfYia5n<0KZ$Dn!U!~&dD?2@-a`b#bVy^0?gpADUZ-!^$ z)HVe)|MlN*ZDg3>FRglAykZASxMov|$}O{;T3zG5kLXf8! z`2(DFx-vgGPBh=sR$3IkrZY@~Pe$qb>x7ZPmg?s{(F(Q+^`NHU4iDJ%>RYeozS;Xh ziC7dy*?%HP$~uXZC3m8OpdS~4vj~)QnVy*p{tY^G_UVVa^hr1G98|YD+moWdeHOpe z6Af}E(q;WrO?PKMKDIhylHd86OP$}m2m5kHVKPMxMF)w;_u8ADAs0@kx+G9JWr@Oi z3Fd<2zc^s9RN)RU#qbR>@P$UpCkKpw=f6v60eJ`@ZCmb5h@l*R_p2M|)pRh=*49E~w^Ki}^7e z>9u8c3-aBMP@MW;+khuG4jJV>(|US(O=-rO$^9t0?#*xnO?h~D8X~MMjx*E7?0=Nk zg>yZ4e95e3%E8pR{n_>S_8{H8Y9FLaa;g6ucUQwh8lF_bGmpZYxy_LZ?!7D~H!UO+ z_fcZY0%UKkX9h6w^;^rpw{rO*)9s0Y@8>fOUHhS;;`d(}ggU3YcatR8D=#O@=KXVk zos68w+Q2Fx&4Ee(Wy5gfL?Dojn*D5pRuTO4VbF)WpC^wra?DPUqPU6d6T-bKoqYyC=;z2y1?W z&8B}IyGoP~p5hKrnZw}7Lc2WDt>=-5ad*IRgC#qLPZ=2OiW3>j{{Slcr)Yb5lG)*v zSv}~wWG(h>;o--U8Oh%NJk4qKJ0nkFt3`7f3ce5UadRI+?lcmbGNu06CeKwrVuW;0 z0OOf`IV~nxaR0CTecgF$ij%&lFzFCWv*4PY7F8u{NULR>zwI)K!7u}A{tq7-|NGbX z;GPH2>1VB}cMVw-9xdVY$5B9<5y^uC@sPFnVhhBzZES2vd;|G$eJqQL=GU)Sc)Mre zymuKc&TUx*`>*vGZhdt{XqE4+7Amb4SzrjjfE6tskB6Jq!<6|%qS-CqK@gO+z zB=@S}#j7pMj~qEIMO~bYB2IU~G|Z}-3UWtB5*xPM;Ezvr7=ebbVK zUXAFi(#Nu(Xz~AKFsH@x9~rGS{MToUW{Q+{jt(ihu5FfbNg5DM!flx9eOP9QGZnn9C)EmL!zLV{d(l zY*Bla+ltK^<6-DhX*$x|2om2-at_&HXnfCZKVh-+>{wU-jiEQK(;CY*?$U(^fqf!8 zf20@dk}eDIH2!_nsvagiz9VcwZ&jOW#UEWn9!<+hdG^?v`@;<%>*<2et zi)45Q2_qcG_^v1fMzjYL<&2;cbDUyXgr<>HExihz0pX{83`sWqmdCoh!Z8R|4>%W z12d02l1rTXP@&1{QB$xAbK+D%fMi?!K?qajNtczfPs72oL3A6Gt|Q;JZ3m#+v`?LC zZj@zP9?39}%A0KImrn}Oe`AH((Jr*2zpO0xTf#RHNVdp@GSc8zkDZsy4@BUx39#lw1z_s=l;eR_UYMJkXav;j7ETa9zg=wO;V z@j1CW@#WWQ(jpWA6tVz_#{3?Vah#cKy@A@wu3sVM$3Wpiv@*9^;KlkReP`LJ%()tc zh<1sfKy~PIvctYVO&vpzaL=GqJZf&`)%WZ}Fz`ZOQ--rW`jbSx21mjoDP31zhJl!- z^nfdV*)??2A+PnEv2h4#(e7-IpjL68RR|izU#R-#HeE3sHiR~iAxPb*As%gsjPW_& za}F3(czPvBkjyMlZGNZsRF-ADUiw9?w!e=I?o$mkIXq9S4YBoxc#dR&mHq#cTB+m5kp1b7U`QpFT8Cl-dg~7<1D@0m>N?l z8$S7^qYTYT6-LS*OV!(QOT+Y z<<1pf(i*n*akni?UZRs9JS4+|5)MSboI#{Q18@Y3aNFNf+Ea`12bYa#SJD z5%-UWn3kk7E}^7qA~9H+80yI(!& zkZYbuPDeKSl7cqi;T3SYk$L_x0;HK^U<{Fuf zICwArp9v5K=%V6;-C@i~=5MWzsG?i@S=>A1_kX5ytIh5zx#gE|aTA6pq35ONU`I>e zzxVn0QyZq)dj^6i=Z%fShjR#pE14hZM;t6`KcO<|wOLGqm6a96IuhT5jPgWYU&%V8 zq=eI`=WP09(%$&GI`-|g6>1PN9Hu8~CQ?4iEP|DXErX;4;o@fhN$U3ciN8HJKJI+k ziHq4I{I1YFCN}ocx3~Acm{%3SKbc#`gSe$l=D;YBiwaGjUEuHfpzm0fY#*yS3B!ns?76|d&7SQlx$4r!s;n1`#4ghVnw z6mZPWuMFgFXb*b*q|2699S7NIo`lVG8Y8Sn$0o7$8#aUu%EV2C6`2dRt?M^tPIT*BMAxqZs1c562RK;qSCskmB#h?;p_(ua zJcbsi&ksfk$q*P<7EL6aeq9|M8ymdwjNPYfsL@|A!$t4hxdXiN#{0^Z#+r`FkFO93 zUS1ueX4~5lCbDO*sAw=6TmAM)vE^ofB;sS=WA%Iad#=Rjuo3lgX||q9zB+_4n_;~p5iXcV64Hy ziK~_O?51a6@m#?u1hXHywzP2!qSP99H3tUQQyUavq6px%->)W?)gCs0|1>tFeRaT|k4}&(F zXAA$yiipTp?oJ_{j^VANzNYNw!!uX*h=`C!@$>Nsk@inx*VZ~uShNsAHRoIy8O+Y} zjk)%=?*|~6UQhmha~O3vXn*nxG!G)Sqrcgn!7%Br%%FJ+gGyAGUPfdqd&xI!LiR|L zX%3^WEB6?2kSs8e;hU9Ua3BYTRqRTr4S0WVZ5cgRzuhelO8MdG>!m7_n`vd(#lspJ zUbt7nv|>+TB)RTGc8Y@SS@E6;+dgTC_gEC|B7Y!wc-T_JkzqFkWt>=Y4c9f(c`6YE z0%9;rer?PfJCt1V1D4~hHy60>*qOtk8vsF)F^@**MbxI0!L&0bZNPl298S%#x1iF> z^lY>LWf4;vZtwf|-|y}x5a;ac|Ipvt6#hqhcEWx+%@Y)3+YX0{Yr#du>_4IZbWy>| z4V?tl!z+`u)7ymLpZ{UOEwu9_XKMm{lxJkX+5j)xo5_F%x$Z*czRIjBLC(!3@InA& zKAC+pr6qEh@L!PghSW*;4FQiICxYOit6Z#g`7mmttKe;#(ERa@Id4Gy@|Sd3C-=zK z%-r0(p3VA8B=&~bo5TkIJ>$GS*ur(+z2%Z{OSQr$YU6ZIoOlY+bq30Q%M%gGtj|(Z z2Wp35!eEq~$H;=}yH%ZAOa;L?`y_hZRvf!IQD!U~g`1nG|K=DDQr@t;+|+@gj!IOT zACAyOxD+kP^zOqIYPF9Rm9%=iz#ZGE_YfiV4{D^UQ;7>9Fl3#sCJ zanf3>n$1Xa`vAlcuv{v1hl!f-O8^Xz!*ayHAdJzI$56vi=?NvRetv#`n_C&8KSV?? zH$))Q3l_o1-DD)-&5SzE#4&4B3~t54?%4|ymQaXb)nwOqT7O%&pL9Uq!lLAzIQa$F z4)8%_VWB+nl8QZ9WzGV@q%H+wM2NG839$C${w`8tNoc|CG4FcNb!<~<%5%&^z@EH; z(4*Y~tx*PKE8(0JRr2-)?1~r2>qoy>1WVhb67%r<$H1=Rc@qJi!ZH)2j)jn8TlIfU z?5c@Vqt_+rKLM(_Uc?{pUh?$>A;CXN=Uu;Z0Pmd;!7H|<_G=e~pqq^U=b<)7w<^r#J zP{bk*JE3!}eJ@+t$3}66m>1#9_=n@egr$ided@~VL&Ua%&hv+*2l>w=3~ z23hsLF}v+mKm%U~;;I{vf}KsK$tzHUo-pa2#zh)4OrW>ibM!*I1h^4ha_hYvhB-kj zuLVu-#|3qvVV*tU=D-*V@1d*hlE|59$Hpx@Fx!e3&KMYM*H_m~+w;J*##aW5UppIN z_Q9W@p1`{pySmqM4(;tXX6VQ;sPT<;@>hpRGg2)@PdGOTSxYE(+3nvbRfd!5js6sK zP;O=QrheRep^OT-+XW?0cpjiIxKu!S^@-FsVX&%n2XK5oN0ljV{I&3F4!=agKfy8n zOKvP73nX?Zbp2>hQfCodj10o|gq9BzUpi!YRbbAM4!LNJK;84<3XZ38Bk z9R}+gF}T6uqoCXhhlRa==1;E6qLtl#;ZxD5kV(Rp9f0Fh1OJ!n&aO3fkPP$bqr@$| zlGVinB67cCpg_;>EZf*kKA_r_(w?BR#Gl6sbe1jR5o}UcPmztkmRF;;LvF@~AcGSv{SI-k zAUbin>InJ_(n&S?h8-s&2(v5c&;j$6Tv;ZUS>c^!3Smnr6+F!FalX*Ezqc~LoiqJ| zS8j=lYaTQ+7T~i;rF2a{?FtZH)WH&n+O7(5>lnE)U_9piL{VlH-Y ztbVM#yz#?0c`9mwJ3hg=(M0`#T58>iiSHaUPZ9gqw;Omz)DZDV zP-@j|r9ris#UQDQ2DiGnNvM_h{HVQEZZ?)3VolUbQzW-;;zk+b%Y?#%lo}>wbwBfY z=d4LkCr1d?dP0)S#7{axEheNd;M6je0$ED3>u}^rpUGQ)3Krb}Thr)77*ANln!G=0umB7``<0b=K4JXJ)ozseWsF< z5+MexhYj0m91i>;2VSKyr*vC7Kxn*#JkijSaPN2ePCZ1ugj9ca6v2Ydl!OY?+=%|@ zCcQ`C>-`OBol=DC>&)nf8cqOGZx3Wxx=VQN+O^EGN74Wkj@iB&-MTIIqb)Gka-&Pw z5oZ_$Sa1kxhd8tWetv5k2 list[int]: ''' Return the array by using fusion sort ''' - if len(array) <= 1 : + + if len(array) <= 1: return array - else : + else: half = len(array) // 2 return merge(sort(array[:half]), sort(array[half:])) - #return insertion.sort(sort(array[:half]) + sort(array[half:])) - -def merge(array: list[int], array2: list[int]) -> list[int] : + + +def merge(array: list[int], array2: list[int]) -> list[int]: ''' Merge two arrays by sorting them ''' - return insertion.sort(array + array2) \ No newline at end of file + sorted_array = [] + + array_index = 0 + array2_index = 0 + + while len(sorted_array) != len(array) + len(array2): + + if array_index >= len(array): + + sorted_array.append(array2[array2_index]) + array2_index += 1 + + elif array2_index >= len(array2): + + sorted_array.append(array[array_index]) + array_index += 1 + + elif array2[array2_index] < array[array_index]: + + sorted_array.append(array2[array2_index]) + array2_index += 1 + + elif array[array_index] <= array2[array2_index]: + + sorted_array.append(array[array_index]) + array_index += 1 + + return sorted_array diff --git a/sort/insertion.py b/sort/insertion.py index 3c0284b..97dc3bf 100644 --- a/sort/insertion.py +++ b/sort/insertion.py @@ -2,19 +2,19 @@ def sort(array: list[int]) -> list[int]: ''' Sort an array using insertion sort. ''' - - for i in range(len(array)) : + + for i in range(len(array)): compared_element: int = array[i] j: int = i - 1 - while array[j] > compared_element and j >= 0 : + while array[j] > compared_element and j >= 0: array[j + 1] = array[j] - + j -= 1 - + array[j + 1] = compared_element return array diff --git a/sort/range.py b/sort/range.py index 8056465..911b6fb 100644 --- a/sort/range.py +++ b/sort/range.py @@ -1,8 +1,9 @@ import random + def generate_array_of_number(array_size: int) -> list[int]: ''' - Return a random numbers (0 to 100 both included) array + Return a random numbers (0 to 100 both included) array with the given size ''' - return [random.randint(0, 100) for i in range(array_size)] + return [random.randint(0, 100) for i in range(array_size)] diff --git a/sort/recursion.py b/sort/recursion.py index e604c8f..16667a3 100644 --- a/sort/recursion.py +++ b/sort/recursion.py @@ -2,11 +2,11 @@ def get_factorial(number: int, max: int = 100) -> int: ''' Return the factorial of the number ''' - - if (max == 0) : + + if (max == 0): return 0 - if number == 1 : + if number == 1: return number - else : + else: return number * get_factorial(number - 1, max - 1) diff --git a/sort/selection.py b/sort/selection.py index b1b76b6..5fb9261 100644 --- a/sort/selection.py +++ b/sort/selection.py @@ -2,20 +2,20 @@ def sort(array: list[int]) -> list[int]: ''' Sort an array using selection sort. ''' - for i in range(len(array)) : + for i in range(len(array)): compared_element: int = array[i] temp_element: int = compared_element switch_index: int = i - for j in range(i + 1, len(array)) : + for j in range(i + 1, len(array)): - if (array[j] < temp_element) : + if (array[j] < temp_element): temp_element = array[j] switch_index = j - - if compared_element != temp_element : + + if compared_element != temp_element: array[i] = temp_element array[switch_index] = compared_element From e2545392cd57987f8e7e1d7e9086638e55b211f8 Mon Sep 17 00:00:00 2001 From: Hugo <53018953+YannoteX@users.noreply.github.com> Date: Fri, 24 Nov 2023 16:03:05 +0100 Subject: [PATCH 03/10] update README && update main --- README.md | 64 +++++++++++++++++++++++++++-------------------------- __main__.py | 42 +++++++++++++++++------------------ 2 files changed, 54 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index 661ba06..8bd9968 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Sur un tableur, générez un tableau permettant de visualiser le temps d'éxécu Comment vous semble évoluer la courbe ? Observez bien les différentes courbes du graphique ci-dessous. Quelle est la plus ressemblante à notre situation ? -*La courbe a une allure linéaire. On peut en déduire que complexité de la fonction est O(n).* +@@*La courbe a une allure linéaire. On peut en déduire que complexité de la fonction est O(n).*@@ @@ -79,10 +79,10 @@ Observez attentivement l'animation de tri par sélection ci-dessous pour en comp Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? -*On observe un parcours du tableau progressif.* -*A chaque nouveau parcours du tableau, on identifie l'élément à trier et on parcours le reste du tableau à la recherche d'un autre plus petit.* -*Arrivé à la fin du parcours, on échange l'élément comparé avec le plus petit trouvé dans le reste du tableau, sinon on ne fait rien.* -*On passe à l'élément suivant.* +@@*On observe un parcours du tableau progressif.*@@ +@@*A chaque nouveau parcours du tableau, on identifie l'élément à trier et on parcours le reste du tableau à la recherche d'un autre plus petit.*@@ +@@*Arrivé à la fin du parcours, on échange l'élément comparé avec le plus petit trouvé dans le reste du tableau, sinon on ne fait rien.*@@ +@@*On passe à l'élément suivant.*@@ Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/selection.py`. Vérifiez son bon fonctionnement en éxécutant le fichier `python3 -m unittest`. Le test correspondant au tri par sélection doit passer. @@ -97,10 +97,10 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? -*La courbe obtenue a une allure carrée. On en déduit une complexité proche* -*de O(n^2). Ce n'est pas étonnant dans la mesure où le tableau est en bonne* -*partie reparcouru pour chaque élément comparé, cela décuple au carré le nombre* -*d'opération nécessaires au pire cas.* +@@*La courbe obtenue a une allure carrée. On en déduit une complexité proche*@@ +@@*de O(n^2). Ce n'est pas étonnant dans la mesure où le tableau est en bonne*@@ +@@*partie reparcouru pour chaque élément comparé, cela décuple au carré le nombre*@@ +@@*d'opération nécessaires au pire cas.*@@ @@ -112,10 +112,10 @@ Observez attentivement l'animation de tri par insertion ci-dessous pour en compr Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? -*On observe un parcours de tableau progressif.* -*A chaque élément comparé, on parcours la portion de tableau le précedent.* -*On insère celui-ci entre un élément plus petit et un élément plus grand.* -*Puis on passe à l'élément suivant.* +@@*On observe un parcours de tableau progressif.*@@ +@@*A chaque élément comparé, on parcours la portion de tableau le précedent.*@@ +@@*On insère celui-ci entre un élément plus petit et un élément plus grand.*@@ +@@*Puis on passe à l'élément suivant.*@@ Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/insertion.py`. Utilisez les tests automatiques pour vérifier votre implémentation. @@ -130,8 +130,8 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? -*Pour les même raison que citée précédemment, la complexité au pire cas est de* -*O(n^2). L'imbrication de deux boucles justifie cette exponentialité.* +@@*Pour les même raison que citée précédemment, la complexité au pire cas est de*@@ +@@*O(n^2). L'imbrication de deux boucles justifie cette exponentialité.*@@ @@ -180,12 +180,12 @@ Cet algorithme est de type "diviser pour régner". Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? -*On oberve un parcours de tableau dichotomique.* -*A chaque nouvelle itération de la fonction, le tableau est séparé en deux* -*puis réitéré jusqu'à ce qu'on obtienne un série de tableaux de taille 1.* -*Les tableaux sont alors rassemblés à nouveaux avec un traitement de tri* -*à chaque nouveau rassemblement, ce qui rédui considérablement la charge* -*de l'algorithme de tri, au détriment de la pile.* +@@*On oberve un parcours de tableau dichotomique.*@@ +@@*A chaque nouvelle itération de la fonction, le tableau est séparé en deux*@@ +@@*puis réitéré jusqu'à ce qu'on obtienne un série de tableaux de taille 1.*@@ +@@*Les tableaux sont alors rassemblés à nouveaux avec un traitement de tri*@@ +@@*à chaque nouveau rassemblement, ce qui rédui considérablement la charge*@@ +@@*de l'algorithme de tri, au détriment de la pile.*@@ Complétez la fonction `sort` du fichier `sort/fusion.py` en suivant les instructions suivantes. @@ -207,19 +207,21 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? -*En observant la courbe de la fusion, on remarque une fonction linéaire. Ce qui* -*n'est pas absurde lorsqu'on sait qu'une boucle est appelée lors du tri,* -*assoçié à une recherche dichotomique. On peut donc en déduire que la* -*complexité est de O(nlog(n)).* +@@*En observant la courbe de la fusion, on remarque une fonction linéaire. Ce qui*@@ +@@*n'est pas absurde lorsqu'on sait qu'une boucle est appelée lors du tri,*@@ +@@*assoçié à une recherche dichotomique. On peut donc en déduire que la*@@ +@@*complexité est de O(nlog(n)).*@@ -Question bonus : Y a-t-il des tailles de tableaux pour lesquelles le tri par fusion n'est pas aussi rapide que les précédents tris abordés ? *Le tri par fusion risque d'êtr plus lent pour des tableaux de très* -*petite taille, engendré par le calcul supplémentaire du à la séparation* -*dichotomique. On peut s'en douter en obesrvant la courbe d'un logarithme, qui* -*croit très rapidement au départ avant d'avoir un comportement asymptotique à* -*l'infini.* +Question bonus : Y a-t-il des tailles de tableaux pour lesquelles le tri par fusion n'est pas aussi rapide que les précédents tris abordés ? + +@@*Le tri par fusion risque d'être plus lent pour des tableaux de très*@@ +@@*petite taille, engendré par le calcul supplémentaire du à la séparation*@@ +@@*dichotomique. On peut s'en douter en obesrvant la courbe d'un logarithme, qui*@@ +@@*croit très rapidement au départ avant d'avoir un comportement asymptotique à*@@ +@@*l'infini.*@@ ### 4. sort() @@ -227,7 +229,7 @@ Bien que tout cela soit fascinant, Python possède sa propre méthode de tri : ` Une dernière fois, analysez le temps d'exécution et découvrez si python fait mieux que nos implémentations rudimentaires ;) -*Je n'ai plus les mots :* +@@*Je n'ai plus les mots :*@@ diff --git a/__main__.py b/__main__.py index ea31f15..3c12dd1 100644 --- a/__main__.py +++ b/__main__.py @@ -22,7 +22,7 @@ def main(): fusion_times: list[float] = [] sort_times: list[float] = [] - for i in range(100000, 2000001, 50000): + for i in range(1000, 20001, 500): print(f"Doing it with {i}") @@ -37,27 +37,27 @@ def main(): # compute array selection sort - # selection_array = rand_numbers_array.copy() - # timer_start = time.time() - # selection.sort(selection_array) - # timer_end: float = time.time() - # selection_times.append(timer_end - timer_start) + selection_array = rand_numbers_array.copy() + timer_start = time.time() + selection.sort(selection_array) + timer_end: float = time.time() + selection_times.append(timer_end - timer_start) # compute array insertion sort - # insertion_array = rand_numbers_array.copy() - # timer_start = time.time() - # insertion.sort(insertion_array) - # timer_end: float = time.time() - # insertion_times.append(timer_end - timer_start) + insertion_array = rand_numbers_array.copy() + timer_start = time.time() + insertion.sort(insertion_array) + timer_end: float = time.time() + insertion_times.append(timer_end - timer_start) # compute array fusion sort - # fusion_array = rand_numbers_array.copy() - # timer_start = time.time() - # fusion.sort(fusion_array) - # timer_end: float = time.time() - # fusion_times.append(timer_end - timer_start) + fusion_array = rand_numbers_array.copy() + timer_start = time.time() + fusion.sort(fusion_array) + timer_end: float = time.time() + fusion_times.append(timer_end - timer_start) # compute array sort from python @@ -69,11 +69,11 @@ def main(): plt.plot(array_sizes, generation_times, "-", color='lightgrey', label='Array Generation') - # plt.plot(array_sizes, selection_times, "-", - # color='darkolivegreen', label='Selection') - # plt.plot(array_sizes, insertion_times, "-", - # color='mediumslateblue', label='Insertion') - # plt.plot(array_sizes, fusion_times, "-", color='peru', label='Fusion') + plt.plot(array_sizes, selection_times, "-", + color='darkolivegreen', label='Selection') + plt.plot(array_sizes, insertion_times, "-", + color='mediumslateblue', label='Insertion') + plt.plot(array_sizes, fusion_times, "-", color='peru', label='Fusion') plt.plot(array_sizes, sort_times, "-", color='coral', label="Sort") plt.legend() From fa271fb6d3e9c7161276d06573ae2638358ea7aa Mon Sep 17 00:00:00 2001 From: Hugo <53018953+YannoteX@users.noreply.github.com> Date: Fri, 24 Nov 2023 16:04:48 +0100 Subject: [PATCH 04/10] =?UTF-8?q?fusion=20fixed=20et=20readme=20compl?= =?UTF-8?q?=C3=A9t=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 62 +++++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 8bd9968..fb0675d 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Sur un tableur, générez un tableau permettant de visualiser le temps d'éxécu Comment vous semble évoluer la courbe ? Observez bien les différentes courbes du graphique ci-dessous. Quelle est la plus ressemblante à notre situation ? -@@*La courbe a une allure linéaire. On peut en déduire que complexité de la fonction est O(n).*@@ ++La courbe a une allure linéaire. On peut en déduire que complexité de la fonction est O(n). @@ -79,10 +79,10 @@ Observez attentivement l'animation de tri par sélection ci-dessous pour en comp Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? -@@*On observe un parcours du tableau progressif.*@@ -@@*A chaque nouveau parcours du tableau, on identifie l'élément à trier et on parcours le reste du tableau à la recherche d'un autre plus petit.*@@ -@@*Arrivé à la fin du parcours, on échange l'élément comparé avec le plus petit trouvé dans le reste du tableau, sinon on ne fait rien.*@@ -@@*On passe à l'élément suivant.*@@ ++On observe un parcours du tableau progressif. ++A chaque nouveau parcours du tableau, on identifie l'élément à trier et on parcours le reste du tableau à la recherche d'un autre plus petit. ++Arrivé à la fin du parcours, on échange l'élément comparé avec le plus petit trouvé dans le reste du tableau, sinon on ne fait rien. ++On passe à l'élément suivant. Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/selection.py`. Vérifiez son bon fonctionnement en éxécutant le fichier `python3 -m unittest`. Le test correspondant au tri par sélection doit passer. @@ -97,10 +97,10 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? -@@*La courbe obtenue a une allure carrée. On en déduit une complexité proche*@@ -@@*de O(n^2). Ce n'est pas étonnant dans la mesure où le tableau est en bonne*@@ -@@*partie reparcouru pour chaque élément comparé, cela décuple au carré le nombre*@@ -@@*d'opération nécessaires au pire cas.*@@ ++La courbe obtenue a une allure carrée. On en déduit une complexité proche ++de O(n^2). Ce n'est pas étonnant dans la mesure où le tableau est en bonne ++partie reparcouru pour chaque élément comparé, cela décuple au carré le nombre ++d'opération nécessaires au pire cas. @@ -112,10 +112,10 @@ Observez attentivement l'animation de tri par insertion ci-dessous pour en compr Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? -@@*On observe un parcours de tableau progressif.*@@ -@@*A chaque élément comparé, on parcours la portion de tableau le précedent.*@@ -@@*On insère celui-ci entre un élément plus petit et un élément plus grand.*@@ -@@*Puis on passe à l'élément suivant.*@@ ++On observe un parcours de tableau progressif. ++A chaque élément comparé, on parcours la portion de tableau le précedent. ++On insère celui-ci entre un élément plus petit et un élément plus grand. ++Puis on passe à l'élément suivant. Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/insertion.py`. Utilisez les tests automatiques pour vérifier votre implémentation. @@ -130,8 +130,8 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? -@@*Pour les même raison que citée précédemment, la complexité au pire cas est de*@@ -@@*O(n^2). L'imbrication de deux boucles justifie cette exponentialité.*@@ ++Pour les même raison que citée précédemment, la complexité au pire cas est de ++O(n^2). L'imbrication de deux boucles justifie cette exponentialité. @@ -180,12 +180,12 @@ Cet algorithme est de type "diviser pour régner". Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? -@@*On oberve un parcours de tableau dichotomique.*@@ -@@*A chaque nouvelle itération de la fonction, le tableau est séparé en deux*@@ -@@*puis réitéré jusqu'à ce qu'on obtienne un série de tableaux de taille 1.*@@ -@@*Les tableaux sont alors rassemblés à nouveaux avec un traitement de tri*@@ -@@*à chaque nouveau rassemblement, ce qui rédui considérablement la charge*@@ -@@*de l'algorithme de tri, au détriment de la pile.*@@ ++On oberve un parcours de tableau dichotomique. ++A chaque nouvelle itération de la fonction, le tableau est séparé en deux ++puis réitéré jusqu'à ce qu'on obtienne un série de tableaux de taille 1. ++Les tableaux sont alors rassemblés à nouveaux avec un traitement de tri ++à chaque nouveau rassemblement, ce qui rédui considérablement la charge ++de l'algorithme de tri, au détriment de la pile. Complétez la fonction `sort` du fichier `sort/fusion.py` en suivant les instructions suivantes. @@ -207,21 +207,21 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? -@@*En observant la courbe de la fusion, on remarque une fonction linéaire. Ce qui*@@ -@@*n'est pas absurde lorsqu'on sait qu'une boucle est appelée lors du tri,*@@ -@@*assoçié à une recherche dichotomique. On peut donc en déduire que la*@@ -@@*complexité est de O(nlog(n)).*@@ ++En observant la courbe de la fusion, on remarque une fonction linéaire. Ce qui ++n'est pas absurde lorsqu'on sait qu'une boucle est appelée lors du tri, ++assoçié à une recherche dichotomique. On peut donc en déduire que la ++complexité est de O(nlog(n)). Question bonus : Y a-t-il des tailles de tableaux pour lesquelles le tri par fusion n'est pas aussi rapide que les précédents tris abordés ? -@@*Le tri par fusion risque d'être plus lent pour des tableaux de très*@@ -@@*petite taille, engendré par le calcul supplémentaire du à la séparation*@@ -@@*dichotomique. On peut s'en douter en obesrvant la courbe d'un logarithme, qui*@@ -@@*croit très rapidement au départ avant d'avoir un comportement asymptotique à*@@ -@@*l'infini.*@@ ++Le tri par fusion risque d'être plus lent pour des tableaux de très ++petite taille, engendré par le calcul supplémentaire du à la séparation ++dichotomique. On peut s'en douter en obesrvant la courbe d'un logarithme, qui ++croit très rapidement au départ avant d'avoir un comportement asymptotique à ++l'infini. ### 4. sort() @@ -229,7 +229,7 @@ Bien que tout cela soit fascinant, Python possède sa propre méthode de tri : ` Une dernière fois, analysez le temps d'exécution et découvrez si python fait mieux que nos implémentations rudimentaires ;) -@@*Je n'ai plus les mots :*@@ ++Je n'ai plus les mots : From 5aac91909d6417a703d6331974818986a6e8c72c Mon Sep 17 00:00:00 2001 From: Hugo <53018953+YannoteX@users.noreply.github.com> Date: Fri, 24 Nov 2023 16:05:54 +0100 Subject: [PATCH 05/10] =?UTF-8?q?fusion=20fixed=20et=20readme=20compl?= =?UTF-8?q?=C3=A9t=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 62 +++++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index fb0675d..cc5fb21 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Sur un tableur, générez un tableau permettant de visualiser le temps d'éxécu Comment vous semble évoluer la courbe ? Observez bien les différentes courbes du graphique ci-dessous. Quelle est la plus ressemblante à notre situation ? -+La courbe a une allure linéaire. On peut en déduire que complexité de la fonction est O(n). ++ La courbe a une allure linéaire. On peut en déduire que complexité de la fonction est O(n). @@ -79,10 +79,10 @@ Observez attentivement l'animation de tri par sélection ci-dessous pour en comp Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? -+On observe un parcours du tableau progressif. -+A chaque nouveau parcours du tableau, on identifie l'élément à trier et on parcours le reste du tableau à la recherche d'un autre plus petit. -+Arrivé à la fin du parcours, on échange l'élément comparé avec le plus petit trouvé dans le reste du tableau, sinon on ne fait rien. -+On passe à l'élément suivant. ++ On observe un parcours du tableau progressif. ++ A chaque nouveau parcours du tableau, on identifie l'élément à trier et on parcours le reste du tableau à la recherche d'un autre plus petit. ++ Arrivé à la fin du parcours, on échange l'élément comparé avec le plus petit trouvé dans le reste du tableau, sinon on ne fait rien. ++ On passe à l'élément suivant. Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/selection.py`. Vérifiez son bon fonctionnement en éxécutant le fichier `python3 -m unittest`. Le test correspondant au tri par sélection doit passer. @@ -97,10 +97,10 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? -+La courbe obtenue a une allure carrée. On en déduit une complexité proche -+de O(n^2). Ce n'est pas étonnant dans la mesure où le tableau est en bonne -+partie reparcouru pour chaque élément comparé, cela décuple au carré le nombre -+d'opération nécessaires au pire cas. ++ La courbe obtenue a une allure carrée. On en déduit une complexité proche ++ de O(n^2). Ce n'est pas étonnant dans la mesure où le tableau est en bonne ++ partie reparcouru pour chaque élément comparé, cela décuple au carré le nombre ++ d'opération nécessaires au pire cas. @@ -112,10 +112,10 @@ Observez attentivement l'animation de tri par insertion ci-dessous pour en compr Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? -+On observe un parcours de tableau progressif. -+A chaque élément comparé, on parcours la portion de tableau le précedent. -+On insère celui-ci entre un élément plus petit et un élément plus grand. -+Puis on passe à l'élément suivant. ++ On observe un parcours de tableau progressif. ++ A chaque élément comparé, on parcours la portion de tableau le précedent. ++ On insère celui-ci entre un élément plus petit et un élément plus grand. ++ Puis on passe à l'élément suivant. Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/insertion.py`. Utilisez les tests automatiques pour vérifier votre implémentation. @@ -130,8 +130,8 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? -+Pour les même raison que citée précédemment, la complexité au pire cas est de -+O(n^2). L'imbrication de deux boucles justifie cette exponentialité. ++ Pour les même raison que citée précédemment, la complexité au pire cas est de ++ O(n^2). L'imbrication de deux boucles justifie cette exponentialité. @@ -180,12 +180,12 @@ Cet algorithme est de type "diviser pour régner". Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? -+On oberve un parcours de tableau dichotomique. -+A chaque nouvelle itération de la fonction, le tableau est séparé en deux -+puis réitéré jusqu'à ce qu'on obtienne un série de tableaux de taille 1. -+Les tableaux sont alors rassemblés à nouveaux avec un traitement de tri -+à chaque nouveau rassemblement, ce qui rédui considérablement la charge -+de l'algorithme de tri, au détriment de la pile. ++ On oberve un parcours de tableau dichotomique. ++ A chaque nouvelle itération de la fonction, le tableau est séparé en deux ++ puis réitéré jusqu'à ce qu'on obtienne un série de tableaux de taille 1. ++ Les tableaux sont alors rassemblés à nouveaux avec un traitement de tri ++ à chaque nouveau rassemblement, ce qui rédui considérablement la charge ++ de l'algorithme de tri, au détriment de la pile. Complétez la fonction `sort` du fichier `sort/fusion.py` en suivant les instructions suivantes. @@ -207,21 +207,21 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? -+En observant la courbe de la fusion, on remarque une fonction linéaire. Ce qui -+n'est pas absurde lorsqu'on sait qu'une boucle est appelée lors du tri, -+assoçié à une recherche dichotomique. On peut donc en déduire que la -+complexité est de O(nlog(n)). ++ En observant la courbe de la fusion, on remarque une fonction linéaire. Ce qui ++ n'est pas absurde lorsqu'on sait qu'une boucle est appelée lors du tri, ++ assoçié à une recherche dichotomique. On peut donc en déduire que la ++ complexité est de O(nlog(n)). Question bonus : Y a-t-il des tailles de tableaux pour lesquelles le tri par fusion n'est pas aussi rapide que les précédents tris abordés ? -+Le tri par fusion risque d'être plus lent pour des tableaux de très -+petite taille, engendré par le calcul supplémentaire du à la séparation -+dichotomique. On peut s'en douter en obesrvant la courbe d'un logarithme, qui -+croit très rapidement au départ avant d'avoir un comportement asymptotique à -+l'infini. ++ Le tri par fusion risque d'être plus lent pour des tableaux de très ++ petite taille, engendré par le calcul supplémentaire du à la séparation ++ dichotomique. On peut s'en douter en obesrvant la courbe d'un logarithme, qui ++ croit très rapidement au départ avant d'avoir un comportement asymptotique à ++ l'infini. ### 4. sort() @@ -229,7 +229,7 @@ Bien que tout cela soit fascinant, Python possède sa propre méthode de tri : ` Une dernière fois, analysez le temps d'exécution et découvrez si python fait mieux que nos implémentations rudimentaires ;) -+Je n'ai plus les mots : ++ Je n'ai plus les mots : From 3b692e7976f5731a1203b327f9de177a9119da27 Mon Sep 17 00:00:00 2001 From: Hugo <53018953+YannoteX@users.noreply.github.com> Date: Fri, 24 Nov 2023 16:08:39 +0100 Subject: [PATCH 06/10] =?UTF-8?q?fusion=20fixed=20et=20readme=20compl?= =?UTF-8?q?=C3=A9t=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 97 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 49 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index cc5fb21..d6645a3 100644 --- a/README.md +++ b/README.md @@ -58,9 +58,9 @@ Mesurez combien de temps prend python à générer un tableau composés de : Sur un tableur, générez un tableau permettant de visualiser le temps d'éxécution en fonction de la taille de l'entrée. Comment vous semble évoluer la courbe ? Observez bien les différentes courbes du graphique ci-dessous. Quelle est la plus ressemblante à notre situation ? - -+ La courbe a une allure linéaire. On peut en déduire que complexité de la fonction est O(n). - +```diff +@@*La courbe a une allure linéaire. On peut en déduire que complexité de la fonction est O(n).*@@ +``` #### Quelques exemples de complexités courante : @@ -78,12 +78,12 @@ Observez attentivement l'animation de tri par sélection ci-dessous pour en comp Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? - -+ On observe un parcours du tableau progressif. -+ A chaque nouveau parcours du tableau, on identifie l'élément à trier et on parcours le reste du tableau à la recherche d'un autre plus petit. -+ Arrivé à la fin du parcours, on échange l'élément comparé avec le plus petit trouvé dans le reste du tableau, sinon on ne fait rien. -+ On passe à l'élément suivant. - +```diff +@@*On observe un parcours du tableau progressif.*@@ +@@*A chaque nouveau parcours du tableau, on identifie l'élément à trier et on parcours le reste du tableau à la recherche d'un autre plus petit.*@@ +@@*Arrivé à la fin du parcours, on échange l'élément comparé avec le plus petit trouvé dans le reste du tableau, sinon on ne fait rien.*@@ +@@*On passe à l'élément suivant.*@@ +``` Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/selection.py`. Vérifiez son bon fonctionnement en éxécutant le fichier `python3 -m unittest`. Le test correspondant au tri par sélection doit passer. Mesurez le temps d'éxécution pour un tableau de : @@ -96,12 +96,12 @@ Mesurez le temps d'éxécution pour un tableau de : Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? - -+ La courbe obtenue a une allure carrée. On en déduit une complexité proche -+ de O(n^2). Ce n'est pas étonnant dans la mesure où le tableau est en bonne -+ partie reparcouru pour chaque élément comparé, cela décuple au carré le nombre -+ d'opération nécessaires au pire cas. - +```diff +@@*La courbe obtenue a une allure carrée. On en déduit une complexité proche*@@ +@@*de O(n^2). Ce n'est pas étonnant dans la mesure où le tableau est en bonne*@@ +@@*partie reparcouru pour chaque élément comparé, cela décuple au carré le nombre*@@ +@@*d'opération nécessaires au pire cas.*@@ +``` ### 2. Tri par insertion @@ -111,12 +111,12 @@ Observez attentivement l'animation de tri par insertion ci-dessous pour en compr Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? - -+ On observe un parcours de tableau progressif. -+ A chaque élément comparé, on parcours la portion de tableau le précedent. -+ On insère celui-ci entre un élément plus petit et un élément plus grand. -+ Puis on passe à l'élément suivant. - +```diff +@@*On observe un parcours de tableau progressif.*@@ +@@*A chaque élément comparé, on parcours la portion de tableau le précedent.*@@ +@@*On insère celui-ci entre un élément plus petit et un élément plus grand.*@@ +@@*Puis on passe à l'élément suivant.*@@ +``` Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/insertion.py`. Utilisez les tests automatiques pour vérifier votre implémentation. Mesurez le temps d'éxécution pour un tableau de : @@ -129,10 +129,10 @@ Mesurez le temps d'éxécution pour un tableau de : Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? - -+ Pour les même raison que citée précédemment, la complexité au pire cas est de -+ O(n^2). L'imbrication de deux boucles justifie cette exponentialité. - +```diff +@@*Pour les même raison que citée précédemment, la complexité au pire cas est de*@@ +@@*O(n^2). L'imbrication de deux boucles justifie cette exponentialité.*@@ +``` ### 3. Tri par fusion @@ -179,14 +179,14 @@ Observez bien le schéma suivant : il représente le concept du tri par fusion. Cet algorithme est de type "diviser pour régner". Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? - -+ On oberve un parcours de tableau dichotomique. -+ A chaque nouvelle itération de la fonction, le tableau est séparé en deux -+ puis réitéré jusqu'à ce qu'on obtienne un série de tableaux de taille 1. -+ Les tableaux sont alors rassemblés à nouveaux avec un traitement de tri -+ à chaque nouveau rassemblement, ce qui rédui considérablement la charge -+ de l'algorithme de tri, au détriment de la pile. - +```diff +@@*On oberve un parcours de tableau dichotomique.*@@ +@@*A chaque nouvelle itération de la fonction, le tableau est séparé en deux*@@ +@@*puis réitéré jusqu'à ce qu'on obtienne un série de tableaux de taille 1.*@@ +@@*Les tableaux sont alors rassemblés à nouveaux avec un traitement de tri*@@ +@@*à chaque nouveau rassemblement, ce qui rédui considérablement la charge*@@ +@@*de l'algorithme de tri, au détriment de la pile.*@@ +``` Complétez la fonction `sort` du fichier `sort/fusion.py` en suivant les instructions suivantes. Il vous faudra deux fonctions : @@ -206,31 +206,32 @@ Mesurez le temps d'éxécution pour un tableau de : Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? - -+ En observant la courbe de la fusion, on remarque une fonction linéaire. Ce qui -+ n'est pas absurde lorsqu'on sait qu'une boucle est appelée lors du tri, -+ assoçié à une recherche dichotomique. On peut donc en déduire que la -+ complexité est de O(nlog(n)). - +```diff +@@*En observant la courbe de la fusion, on remarque une fonction linéaire. Ce qui*@@ +@@*n'est pas absurde lorsqu'on sait qu'une boucle est appelée lors du tri,*@@ +@@*assoçié à une recherche dichotomique. On peut donc en déduire que la*@@ +@@*complexité est de O(nlog(n)).*@@ +``` Question bonus : Y a-t-il des tailles de tableaux pour lesquelles le tri par fusion n'est pas aussi rapide que les précédents tris abordés ? - -+ Le tri par fusion risque d'être plus lent pour des tableaux de très -+ petite taille, engendré par le calcul supplémentaire du à la séparation -+ dichotomique. On peut s'en douter en obesrvant la courbe d'un logarithme, qui -+ croit très rapidement au départ avant d'avoir un comportement asymptotique à -+ l'infini. +```diff +@@*Le tri par fusion risque d'être plus lent pour des tableaux de très*@@ +@@*petite taille, engendré par le calcul supplémentaire du à la séparation*@@ +@@*dichotomique. On peut s'en douter en obesrvant la courbe d'un logarithme, qui*@@ +@@*croit très rapidement au départ avant d'avoir un comportement asymptotique à*@@ +@@*l'infini.*@@ +``` ### 4. sort() Bien que tout cela soit fascinant, Python possède sa propre méthode de tri : `sort()`. Une dernière fois, analysez le temps d'exécution et découvrez si python fait mieux que nos implémentations rudimentaires ;) - -+ Je n'ai plus les mots : - +```diff +@@*Je n'ai plus les mots :*@@ +``` ## Pour rendre ce TP From 8f99497b75e63608b4dd3e7bb4202effbf3cbb40 Mon Sep 17 00:00:00 2001 From: Hugo <53018953+YannoteX@users.noreply.github.com> Date: Fri, 24 Nov 2023 16:10:19 +0100 Subject: [PATCH 07/10] =?UTF-8?q?fusion=20fixed=20et=20readme=20compl?= =?UTF-8?q?=C3=A9t=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 62 +++++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index d6645a3..26696ba 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Sur un tableur, générez un tableau permettant de visualiser le temps d'éxécu Comment vous semble évoluer la courbe ? Observez bien les différentes courbes du graphique ci-dessous. Quelle est la plus ressemblante à notre situation ? ```diff -@@*La courbe a une allure linéaire. On peut en déduire que complexité de la fonction est O(n).*@@ +@@ La courbe a une allure linéaire. On peut en déduire que complexité de la fonction est O(n). @@ ``` @@ -79,10 +79,10 @@ Observez attentivement l'animation de tri par sélection ci-dessous pour en comp Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? ```diff -@@*On observe un parcours du tableau progressif.*@@ -@@*A chaque nouveau parcours du tableau, on identifie l'élément à trier et on parcours le reste du tableau à la recherche d'un autre plus petit.*@@ -@@*Arrivé à la fin du parcours, on échange l'élément comparé avec le plus petit trouvé dans le reste du tableau, sinon on ne fait rien.*@@ -@@*On passe à l'élément suivant.*@@ +@@ On observe un parcours du tableau progressif. @@ +@@ A chaque nouveau parcours du tableau, on identifie l'élément à trier et on parcours le reste du tableau à la recherche d'un autre plus petit. @@ +@@ Arrivé à la fin du parcours, on échange l'élément comparé avec le plus petit trouvé dans le reste du tableau, sinon on ne fait rien. @@ +@@ On passe à l'élément suivant. @@ ``` Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/selection.py`. Vérifiez son bon fonctionnement en éxécutant le fichier `python3 -m unittest`. Le test correspondant au tri par sélection doit passer. @@ -97,10 +97,10 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? ```diff -@@*La courbe obtenue a une allure carrée. On en déduit une complexité proche*@@ -@@*de O(n^2). Ce n'est pas étonnant dans la mesure où le tableau est en bonne*@@ -@@*partie reparcouru pour chaque élément comparé, cela décuple au carré le nombre*@@ -@@*d'opération nécessaires au pire cas.*@@ +@@ La courbe obtenue a une allure carrée. On en déduit une complexité proche @@ +@@ de O(n^2). Ce n'est pas étonnant dans la mesure où le tableau est en bonne @@ +@@ partie reparcouru pour chaque élément comparé, cela décuple au carré le nombre @@ +@@ d'opération nécessaires au pire cas. @@ ``` @@ -112,10 +112,10 @@ Observez attentivement l'animation de tri par insertion ci-dessous pour en compr Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? ```diff -@@*On observe un parcours de tableau progressif.*@@ -@@*A chaque élément comparé, on parcours la portion de tableau le précedent.*@@ -@@*On insère celui-ci entre un élément plus petit et un élément plus grand.*@@ -@@*Puis on passe à l'élément suivant.*@@ +@@ On observe un parcours de tableau progressif. @@ +@@ A chaque élément comparé, on parcours la portion de tableau le précedent. @@ +@@ On insère celui-ci entre un élément plus petit et un élément plus grand. @@ +@@ Puis on passe à l'élément suivant. @@ ``` Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/insertion.py`. Utilisez les tests automatiques pour vérifier votre implémentation. @@ -130,8 +130,8 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? ```diff -@@*Pour les même raison que citée précédemment, la complexité au pire cas est de*@@ -@@*O(n^2). L'imbrication de deux boucles justifie cette exponentialité.*@@ +@@ Pour les même raison que citée précédemment, la complexité au pire cas est de @@ +@@ O(n^2). L'imbrication de deux boucles justifie cette exponentialité. @@ ``` @@ -180,12 +180,12 @@ Cet algorithme est de type "diviser pour régner". Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? ```diff -@@*On oberve un parcours de tableau dichotomique.*@@ -@@*A chaque nouvelle itération de la fonction, le tableau est séparé en deux*@@ -@@*puis réitéré jusqu'à ce qu'on obtienne un série de tableaux de taille 1.*@@ -@@*Les tableaux sont alors rassemblés à nouveaux avec un traitement de tri*@@ -@@*à chaque nouveau rassemblement, ce qui rédui considérablement la charge*@@ -@@*de l'algorithme de tri, au détriment de la pile.*@@ +@@ On oberve un parcours de tableau dichotomique. @@ +@@ A chaque nouvelle itération de la fonction, le tableau est séparé en deux @@ +@@ puis réitéré jusqu'à ce qu'on obtienne un série de tableaux de taille 1. @@ +@@ Les tableaux sont alors rassemblés à nouveaux avec un traitement de tri @@ +@@ à chaque nouveau rassemblement, ce qui rédui considérablement la charge @@ +@@ de l'algorithme de tri, au détriment de la pile. @@ ``` Complétez la fonction `sort` du fichier `sort/fusion.py` en suivant les instructions suivantes. @@ -207,21 +207,21 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? ```diff -@@*En observant la courbe de la fusion, on remarque une fonction linéaire. Ce qui*@@ -@@*n'est pas absurde lorsqu'on sait qu'une boucle est appelée lors du tri,*@@ -@@*assoçié à une recherche dichotomique. On peut donc en déduire que la*@@ -@@*complexité est de O(nlog(n)).*@@ +@@ En observant la courbe de la fusion, on remarque une fonction linéaire. Ce qui @@ +@@ n'est pas absurde lorsqu'on sait qu'une boucle est appelée lors du tri, @@ +@@ assoçié à une recherche dichotomique. On peut donc en déduire que la @@ +@@ complexité est de O(nlog(n)). @@ ``` Question bonus : Y a-t-il des tailles de tableaux pour lesquelles le tri par fusion n'est pas aussi rapide que les précédents tris abordés ? ```diff -@@*Le tri par fusion risque d'être plus lent pour des tableaux de très*@@ -@@*petite taille, engendré par le calcul supplémentaire du à la séparation*@@ -@@*dichotomique. On peut s'en douter en obesrvant la courbe d'un logarithme, qui*@@ -@@*croit très rapidement au départ avant d'avoir un comportement asymptotique à*@@ -@@*l'infini.*@@ +@@ Le tri par fusion risque d'être plus lent pour des tableaux de très @@ +@@ petite taille, engendré par le calcul supplémentaire du à la séparation @@ +@@ dichotomique. On peut s'en douter en obesrvant la courbe d'un logarithme, qui @@ +@@ croit très rapidement au départ avant d'avoir un comportement asymptotique à @@ +@@ l'infini. @@ ``` ### 4. sort() @@ -230,7 +230,7 @@ Bien que tout cela soit fascinant, Python possède sa propre méthode de tri : ` Une dernière fois, analysez le temps d'exécution et découvrez si python fait mieux que nos implémentations rudimentaires ;) ```diff -@@*Je n'ai plus les mots :*@@ +@@ Je n'ai plus les mots : @@ ``` From e15bef3827309bca1103986fc86bb2befa35e166 Mon Sep 17 00:00:00 2001 From: Hugo <53018953+YannoteX@users.noreply.github.com> Date: Fri, 24 Nov 2023 16:11:21 +0100 Subject: [PATCH 08/10] =?UTF-8?q?fusion=20fixed=20et=20readme=20compl?= =?UTF-8?q?=C3=A9t=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 64 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 26696ba..2631971 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Sur un tableur, générez un tableau permettant de visualiser le temps d'éxécu Comment vous semble évoluer la courbe ? Observez bien les différentes courbes du graphique ci-dessous. Quelle est la plus ressemblante à notre situation ? ```diff -@@ La courbe a une allure linéaire. On peut en déduire que complexité de la fonction est O(n). @@ +@@ La courbe a une allure linéaire. On peut en déduire que complexité de la fonction est O(n). ``` @@ -79,10 +79,12 @@ Observez attentivement l'animation de tri par sélection ci-dessous pour en comp Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? ```diff -@@ On observe un parcours du tableau progressif. @@ -@@ A chaque nouveau parcours du tableau, on identifie l'élément à trier et on parcours le reste du tableau à la recherche d'un autre plus petit. @@ -@@ Arrivé à la fin du parcours, on échange l'élément comparé avec le plus petit trouvé dans le reste du tableau, sinon on ne fait rien. @@ -@@ On passe à l'élément suivant. @@ +@@ On observe un parcours du tableau progressif. +@@ A chaque nouveau parcours du tableau, on identifie l'élément à trier et on +@@ parcours le reste du tableau à la recherche d'un autre plus petit. +@@ Arrivé à la fin du parcours, on échange l'élément comparé avec le plus petit +@@ trouvé dans le reste du tableau, sinon on ne fait rien. +@@ On passe à l'élément suivant. ``` Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/selection.py`. Vérifiez son bon fonctionnement en éxécutant le fichier `python3 -m unittest`. Le test correspondant au tri par sélection doit passer. @@ -97,10 +99,10 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? ```diff -@@ La courbe obtenue a une allure carrée. On en déduit une complexité proche @@ -@@ de O(n^2). Ce n'est pas étonnant dans la mesure où le tableau est en bonne @@ -@@ partie reparcouru pour chaque élément comparé, cela décuple au carré le nombre @@ -@@ d'opération nécessaires au pire cas. @@ +@@ La courbe obtenue a une allure carrée. On en déduit une complexité proche +@@ de O(n^2). Ce n'est pas étonnant dans la mesure où le tableau est en bonne +@@ partie reparcouru pour chaque élément comparé, cela décuple au carré le nombre +@@ d'opération nécessaires au pire cas. ``` @@ -112,10 +114,10 @@ Observez attentivement l'animation de tri par insertion ci-dessous pour en compr Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? ```diff -@@ On observe un parcours de tableau progressif. @@ -@@ A chaque élément comparé, on parcours la portion de tableau le précedent. @@ -@@ On insère celui-ci entre un élément plus petit et un élément plus grand. @@ -@@ Puis on passe à l'élément suivant. @@ +@@ On observe un parcours de tableau progressif. +@@ A chaque élément comparé, on parcours la portion de tableau le précedent. +@@ On insère celui-ci entre un élément plus petit et un élément plus grand. +@@ Puis on passe à l'élément suivant. ``` Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/insertion.py`. Utilisez les tests automatiques pour vérifier votre implémentation. @@ -130,8 +132,8 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? ```diff -@@ Pour les même raison que citée précédemment, la complexité au pire cas est de @@ -@@ O(n^2). L'imbrication de deux boucles justifie cette exponentialité. @@ +@@ Pour les même raison que citée précédemment, la complexité au pire cas est de +@@ O(n^2). L'imbrication de deux boucles justifie cette exponentialité. ``` @@ -180,12 +182,12 @@ Cet algorithme est de type "diviser pour régner". Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? ```diff -@@ On oberve un parcours de tableau dichotomique. @@ -@@ A chaque nouvelle itération de la fonction, le tableau est séparé en deux @@ -@@ puis réitéré jusqu'à ce qu'on obtienne un série de tableaux de taille 1. @@ -@@ Les tableaux sont alors rassemblés à nouveaux avec un traitement de tri @@ -@@ à chaque nouveau rassemblement, ce qui rédui considérablement la charge @@ -@@ de l'algorithme de tri, au détriment de la pile. @@ +@@ On oberve un parcours de tableau dichotomique. +@@ A chaque nouvelle itération de la fonction, le tableau est séparé en deux +@@ puis réitéré jusqu'à ce qu'on obtienne un série de tableaux de taille 1. +@@ Les tableaux sont alors rassemblés à nouveaux avec un traitement de tri +@@ à chaque nouveau rassemblement, ce qui rédui considérablement la charge +@@ de l'algorithme de tri, au détriment de la pile. ``` Complétez la fonction `sort` du fichier `sort/fusion.py` en suivant les instructions suivantes. @@ -207,21 +209,21 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? ```diff -@@ En observant la courbe de la fusion, on remarque une fonction linéaire. Ce qui @@ -@@ n'est pas absurde lorsqu'on sait qu'une boucle est appelée lors du tri, @@ -@@ assoçié à une recherche dichotomique. On peut donc en déduire que la @@ -@@ complexité est de O(nlog(n)). @@ +@@ En observant la courbe de la fusion, on remarque une fonction linéaire. Ce qui +@@ n'est pas absurde lorsqu'on sait qu'une boucle est appelée lors du tri, +@@ assoçié à une recherche dichotomique. On peut donc en déduire que la +@@ complexité est de O(nlog(n)). ``` Question bonus : Y a-t-il des tailles de tableaux pour lesquelles le tri par fusion n'est pas aussi rapide que les précédents tris abordés ? ```diff -@@ Le tri par fusion risque d'être plus lent pour des tableaux de très @@ -@@ petite taille, engendré par le calcul supplémentaire du à la séparation @@ -@@ dichotomique. On peut s'en douter en obesrvant la courbe d'un logarithme, qui @@ -@@ croit très rapidement au départ avant d'avoir un comportement asymptotique à @@ -@@ l'infini. @@ +@@ Le tri par fusion risque d'être plus lent pour des tableaux de très +@@ petite taille, engendré par le calcul supplémentaire du à la séparation +@@ dichotomique. On peut s'en douter en obesrvant la courbe d'un logarithme, qui +@@ croit très rapidement au départ avant d'avoir un comportement asymptotique à +@@ l'infini. ``` ### 4. sort() @@ -230,7 +232,7 @@ Bien que tout cela soit fascinant, Python possède sa propre méthode de tri : ` Une dernière fois, analysez le temps d'exécution et découvrez si python fait mieux que nos implémentations rudimentaires ;) ```diff -@@ Je n'ai plus les mots : @@ +@@ Je n'ai plus les mots : ``` From 14e6d03de7ba8fdc4f73326c709af2073dc9fdf3 Mon Sep 17 00:00:00 2001 From: Hugo <53018953+YannoteX@users.noreply.github.com> Date: Fri, 24 Nov 2023 16:12:08 +0100 Subject: [PATCH 09/10] =?UTF-8?q?fusion=20fixed=20et=20readme=20compl?= =?UTF-8?q?=C3=A9t=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 66 +++++++++++++++++++++++++++---------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 2631971..6f53492 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Sur un tableur, générez un tableau permettant de visualiser le temps d'éxécu Comment vous semble évoluer la courbe ? Observez bien les différentes courbes du graphique ci-dessous. Quelle est la plus ressemblante à notre situation ? ```diff -@@ La courbe a une allure linéaire. On peut en déduire que complexité de la fonction est O(n). +@@ La courbe a une allure linéaire. On peut en déduire que complexité de la fonction est O(n). @@ ``` @@ -79,12 +79,12 @@ Observez attentivement l'animation de tri par sélection ci-dessous pour en comp Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? ```diff -@@ On observe un parcours du tableau progressif. -@@ A chaque nouveau parcours du tableau, on identifie l'élément à trier et on -@@ parcours le reste du tableau à la recherche d'un autre plus petit. -@@ Arrivé à la fin du parcours, on échange l'élément comparé avec le plus petit -@@ trouvé dans le reste du tableau, sinon on ne fait rien. -@@ On passe à l'élément suivant. +@@ On observe un parcours du tableau progressif. @@ +@@ A chaque nouveau parcours du tableau, on identifie l'élément à trier et on @@ +@@ parcours le reste du tableau à la recherche d'un autre plus petit. @@ +@@ Arrivé à la fin du parcours, on échange l'élément comparé avec le plus petit @@ +@@ trouvé dans le reste du tableau, sinon on ne fait rien. @@ +@@ On passe à l'élément suivant. @@ ``` Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/selection.py`. Vérifiez son bon fonctionnement en éxécutant le fichier `python3 -m unittest`. Le test correspondant au tri par sélection doit passer. @@ -99,10 +99,10 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? ```diff -@@ La courbe obtenue a une allure carrée. On en déduit une complexité proche -@@ de O(n^2). Ce n'est pas étonnant dans la mesure où le tableau est en bonne -@@ partie reparcouru pour chaque élément comparé, cela décuple au carré le nombre -@@ d'opération nécessaires au pire cas. +@@ La courbe obtenue a une allure carrée. On en déduit une complexité proche @@ +@@ de O(n^2). Ce n'est pas étonnant dans la mesure où le tableau est en bonne @@ +@@ partie reparcouru pour chaque élément comparé, cela décuple au carré le nombre @@ +@@ d'opération nécessaires au pire cas. @@ ``` @@ -114,10 +114,10 @@ Observez attentivement l'animation de tri par insertion ci-dessous pour en compr Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? ```diff -@@ On observe un parcours de tableau progressif. -@@ A chaque élément comparé, on parcours la portion de tableau le précedent. -@@ On insère celui-ci entre un élément plus petit et un élément plus grand. -@@ Puis on passe à l'élément suivant. +@@ On observe un parcours de tableau progressif. @@ +@@ A chaque élément comparé, on parcours la portion de tableau le précedent. @@ +@@ On insère celui-ci entre un élément plus petit et un élément plus grand. @@ +@@ Puis on passe à l'élément suivant. @@ ``` Puis implémentez l'algorithme en python dans la fonction `sort` du fichier `sort/insertion.py`. Utilisez les tests automatiques pour vérifier votre implémentation. @@ -132,8 +132,8 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? ```diff -@@ Pour les même raison que citée précédemment, la complexité au pire cas est de -@@ O(n^2). L'imbrication de deux boucles justifie cette exponentialité. +@@ Pour les même raison que citée précédemment, la complexité au pire cas est de @@ +@@ O(n^2). L'imbrication de deux boucles justifie cette exponentialité. @@ ``` @@ -182,12 +182,12 @@ Cet algorithme est de type "diviser pour régner". Écrivez en français classique ce que vous voyez. Quel est le fonctionnement ? Comment l'expliqueriez-vous à quelqu'un ? ```diff -@@ On oberve un parcours de tableau dichotomique. -@@ A chaque nouvelle itération de la fonction, le tableau est séparé en deux -@@ puis réitéré jusqu'à ce qu'on obtienne un série de tableaux de taille 1. -@@ Les tableaux sont alors rassemblés à nouveaux avec un traitement de tri -@@ à chaque nouveau rassemblement, ce qui rédui considérablement la charge -@@ de l'algorithme de tri, au détriment de la pile. +@@ On oberve un parcours de tableau dichotomique. @@ +@@ A chaque nouvelle itération de la fonction, le tableau est séparé en deux @@ +@@ puis réitéré jusqu'à ce qu'on obtienne un série de tableaux de taille 1. @@ +@@ Les tableaux sont alors rassemblés à nouveaux avec un traitement de tri @@ +@@ à chaque nouveau rassemblement, ce qui rédui considérablement la charge @@ +@@ de l'algorithme de tri, au détriment de la pile. @@ ``` Complétez la fonction `sort` du fichier `sort/fusion.py` en suivant les instructions suivantes. @@ -209,21 +209,21 @@ Tracez le graphique correspondant. Quelle semble être la complexité de notre fonction de tri ? Cela est-il logique par rapport au code que vous avez implémenté ? ```diff -@@ En observant la courbe de la fusion, on remarque une fonction linéaire. Ce qui -@@ n'est pas absurde lorsqu'on sait qu'une boucle est appelée lors du tri, -@@ assoçié à une recherche dichotomique. On peut donc en déduire que la -@@ complexité est de O(nlog(n)). +@@ En observant la courbe de la fusion, on remarque une fonction linéaire. Ce qui @@ +@@ n'est pas absurde lorsqu'on sait qu'une boucle est appelée lors du tri, @@ +@@ assoçié à une recherche dichotomique. On peut donc en déduire que la @@ +@@ complexité est de O(nlog(n)). @@ ``` Question bonus : Y a-t-il des tailles de tableaux pour lesquelles le tri par fusion n'est pas aussi rapide que les précédents tris abordés ? ```diff -@@ Le tri par fusion risque d'être plus lent pour des tableaux de très -@@ petite taille, engendré par le calcul supplémentaire du à la séparation -@@ dichotomique. On peut s'en douter en obesrvant la courbe d'un logarithme, qui -@@ croit très rapidement au départ avant d'avoir un comportement asymptotique à -@@ l'infini. +@@ Le tri par fusion risque d'être plus lent pour des tableaux de très @@ +@@ petite taille, engendré par le calcul supplémentaire du à la séparation @@ +@@ dichotomique. On peut s'en douter en obesrvant la courbe d'un logarithme, qui @@ +@@ croit très rapidement au départ avant d'avoir un comportement asymptotique à @@ +@@ l'infini. @@ ``` ### 4. sort() @@ -232,7 +232,7 @@ Bien que tout cela soit fascinant, Python possède sa propre méthode de tri : ` Une dernière fois, analysez le temps d'exécution et découvrez si python fait mieux que nos implémentations rudimentaires ;) ```diff -@@ Je n'ai plus les mots : +@@ Je n'ai plus les mots : @@ ``` From e766a2e2aa1b38cca21c0f39e206885abe9147c5 Mon Sep 17 00:00:00 2001 From: Hugo <53018953+YannoteX@users.noreply.github.com> Date: Fri, 24 Nov 2023 16:24:34 +0100 Subject: [PATCH 10/10] added more beautiful comments --- sort/fusion.py | 3 +++ sort/insertion.py | 3 +++ sort/selection.py | 5 ++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/sort/fusion.py b/sort/fusion.py index 5ede449..550571c 100644 --- a/sort/fusion.py +++ b/sort/fusion.py @@ -26,6 +26,7 @@ def merge(array: list[int], array2: list[int]) -> list[int]: while len(sorted_array) != len(array) + len(array2): + # Avoid list out of range if array_index >= len(array): sorted_array.append(array2[array2_index]) @@ -36,6 +37,8 @@ def merge(array: list[int], array2: list[int]) -> list[int]: sorted_array.append(array[array_index]) array_index += 1 + # or check wich value is the smallest + elif array2[array2_index] < array[array_index]: sorted_array.append(array2[array2_index]) diff --git a/sort/insertion.py b/sort/insertion.py index 97dc3bf..e04f032 100644 --- a/sort/insertion.py +++ b/sort/insertion.py @@ -4,12 +4,15 @@ def sort(array: list[int]) -> list[int]: ''' for i in range(len(array)): + # checking every elements of the array compared_element: int = array[i] j: int = i - 1 while array[j] > compared_element and j >= 0: + # reverse the course of the array to place the currently selected + # element after another one if it is smaller array[j + 1] = array[j] diff --git a/sort/selection.py b/sort/selection.py index 5fb9261..0b41f0c 100644 --- a/sort/selection.py +++ b/sort/selection.py @@ -3,12 +3,15 @@ def sort(array: list[int]) -> list[int]: Sort an array using selection sort. ''' for i in range(len(array)): + # Checking all element of the array + compared_element: int = array[i] temp_element: int = compared_element switch_index: int = i for j in range(i + 1, len(array)): + # checking the rest of the array in search for smaller elements if (array[j] < temp_element): @@ -16,7 +19,7 @@ def sort(array: list[int]) -> list[int]: switch_index = j if compared_element != temp_element: - + # switching the two elements if a smaller one has been found array[i] = temp_element array[switch_index] = compared_element