<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: axel584</title>
    <description>The latest articles on DEV Community by axel584 (@axel584).</description>
    <link>https://dev.to/axel584</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F896046%2F90d4031c-746c-4021-b22e-c5a1b693bf99.png</url>
      <title>DEV Community: axel584</title>
      <link>https://dev.to/axel584</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/axel584"/>
    <language>en</language>
    <item>
      <title>Ce que l'advent of code m'a appris en Python #1</title>
      <dc:creator>axel584</dc:creator>
      <pubDate>Mon, 04 Dec 2023 17:13:41 +0000</pubDate>
      <link>https://dev.to/axel584/ce-que-ladvent-of-code-ma-appris-en-python-1-56c9</link>
      <guid>https://dev.to/axel584/ce-que-ladvent-of-code-ma-appris-en-python-1-56c9</guid>
      <description>&lt;p&gt;L'&lt;a href="https://adventofcode.com/2023"&gt;advent of code&lt;/a&gt; est une compétition composée d'énigme à résoudre dans le langage que l'on souhaite. &lt;/p&gt;

&lt;p&gt;J'ai vraiment commencé à me pencher sur les énigmes que depuis l'année dernière en essayant autant que possible de faire les énigmes chaque jour en utilisant le langage Python que j'apprécie particulièrement.&lt;/p&gt;

&lt;p&gt;Et chaque jour, je découvrais des subtilités du langage et j'ai décidé de compiler ce que j'ai appris dans des billets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Expression régulière : recherche gauche
&lt;/h2&gt;

&lt;p&gt;Pour le premier jour, je voulais faire une recherche dans une chaîne de caractère, mais en récupérant la dernière occurrence dans une ligne (on appelle ça parfois faire une recherche gauche.) &lt;/p&gt;

&lt;p&gt;Pour cela, on utilise le &lt;em&gt;negative lookahead&lt;/em&gt; qui permet d'obtenir la dernière occurence.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;(Test)(?!Test)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Bon, au final, j'ai utilisé une autre technique pour trouver ce dont j'avais besoin, mais j'étais content de découvrir cette fonctionnalité des regexp.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test Unitaire
&lt;/h2&gt;

&lt;p&gt;Bien que j'utilise les TU au quotidien dans mon boulot, l'année dernière, je n'avais pas pris l'habitude d'écrire les tests avant d'écrire mon code et comme les énigmes d'Advent of Code sont toujours fourni avec un jeu de données de test et leur résultat, il est très facile d'écrire un test pour s'assurer que le code est bon (au moins sur le jeu de test) pour l’exécuter ensuite sur notre entrée principal de l'énigme.&lt;/p&gt;

&lt;p&gt;A bientôt pour les découvertes des autres jours.&lt;/p&gt;

</description>
      <category>python</category>
      <category>adventofcode</category>
    </item>
    <item>
      <title>Projet Euler #1 : Multiples de 3 ou 5</title>
      <dc:creator>axel584</dc:creator>
      <pubDate>Tue, 30 Aug 2022 14:10:32 +0000</pubDate>
      <link>https://dev.to/axel584/projet-euler-1-multiples-de-3-ou-5-451g</link>
      <guid>https://dev.to/axel584/projet-euler-1-multiples-de-3-ou-5-451g</guid>
      <description>&lt;p&gt;Le &lt;a href="https://projecteuler.net/"&gt;Project Euler&lt;/a&gt; est un site web proposant une série de problèmes mathématiques conçus pour être résolus à l'aide de programmes informatiques. Il tient son nom du mathématicien suisse &lt;a href="https://fr.wikipedia.org/wiki/Leonhard_Euler"&gt;Leonhard Euler&lt;/a&gt; qui a vécu au XVIIIème siècle.&lt;/p&gt;

&lt;p&gt;Il comprend actuellement plus de 700 problèmes de difficultés variables, chacun pouvant être résolu en principe en moins d'une minute par un algorithme efficace sur un ordinateur de puissance modeste.&lt;/p&gt;

&lt;p&gt;Ce challenge permet de découvrir des curiosités mathématiques, mais aussi d'améliorer ses compétences en programmation. Je me suis amusé à en résoudre quelques uns et je voulais vous partager mes découvertes.&lt;/p&gt;

&lt;p&gt;La première énigme a pour énoncé : &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Si nous énumérons tous les nombres naturels inférieurs à 10 qui sont des multiples de 3 ou 5, nous obtenons 3, 5, 6 et 9. La somme de ces multiples est 23.&lt;br&gt;
Trouver la somme de tous les multiples de 3 ou 5 en dessous de 1000.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Une solution très facile
&lt;/h2&gt;

&lt;p&gt;`somme = 0&lt;br&gt;
for i in range(1000) :&lt;br&gt;
    if i%3==0 or i%5==0 :&lt;br&gt;
        somme = somme + i&lt;/p&gt;

&lt;p&gt;print(somme) `&lt;/p&gt;

&lt;p&gt;Pour décrire certains points pour les non-pythoniens, on pourrait parler de la fonction "range" qui permet d'itérer sur un nombre donné (ici de 0 à 9999). Le nombre passé en paramètre est "exclu" de l'itération. Cette fonction peut aussi être appelée avec 2 paramètres range(a,b) et dans ce cas, on va itérer de la valeur a (inclue) à la valeur b (exclue). Et dans le cas de 3 paramètres, on aura le "pas" comme 3ème paramètre. Ainsi : &lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; for i in range(10,2,-1):&lt;br&gt;
...   print(i)&lt;br&gt;
...&lt;br&gt;
10&lt;br&gt;
9&lt;br&gt;
8&lt;br&gt;
7&lt;br&gt;
6&lt;br&gt;
5&lt;br&gt;
4&lt;br&gt;
3&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Pour résumer : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;range(stop) prend un argument.&lt;/li&gt;
&lt;li&gt;range(start, stop) prend deux arguments.&lt;/li&gt;
&lt;li&gt;range(start, stop, step) prend trois arguments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Et le deuxième point qui peut être intéressant est le % qui permet de calculer le "modulo", c'est à dire le reste de la division entière. Ainsi, &lt;code&gt;9 % 3&lt;/code&gt; = 0 et si le reste de la division est zéro, c'est que le nombre est divisible par 3 et donc que c'est un multiple de 3.&lt;/p&gt;

&lt;h2&gt;
  
  
  Une solution plus complexe
&lt;/h2&gt;

&lt;p&gt;Une &lt;a href="https://www.mathematiquesfaciles.com/suites-arithmetiques_2_81427.htm"&gt;suite arithmétique&lt;/a&gt; est une suite de nombres où l'on ajoute toujours la même valeur pour avoir le nombre suivant (exemple : 3, 6, 9, 12... on a ajouté 3 à chaque fois). La somme d'une suite arithmétique est donné par la formule : Sn = nombre de termes × (premier terme + dernier terme)/2&lt;/p&gt;

&lt;p&gt;Mon prof de math au collège m'expliquait qu'il faut voir ça comme un escalier où chaque marche fait la même hauteur. Si on veut connaître la surface de l'escalier, il suffit de couper l'escalier en deux et d'en retourner la moitié pour l'emboiter sur l'autre. La plus grande marche coïncide avec la plus petite, la deuxième plus grande marche avec la deuxième plus petite etc.&lt;br&gt;
Un dessin vaut mieux qu'un long discours :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Qe8XhufV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xogz4rdv51vu98ovtsu3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Qe8XhufV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xogz4rdv51vu98ovtsu3.png" alt="Image description" width="622" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pour calculer la somme des nombres inférieur à 1000 divisibles par 3, il faudra faire la somme des 333 premiers nombres, on y ajoutera la somme des 200 premiers nombres de la suite arithmétique de raison 5 (c'est comme cela qu'on appelle l'incrément), mais il faudra aussi supprimer les multiples de 15 qui ont été compté 2 fois.&lt;/p&gt;

&lt;p&gt;Comme vous pouvez le voir, une énigme peut se résoudre de différentes façons. Ici, la deuxième façon sera beaucoup plus rapide à exécuter que la première.&lt;/p&gt;

&lt;p&gt;Si vous voulez me suivre sur Project Euler, vous pouvez ajouter ma clef pour m'avoir comme ami : 1891189_bX2ADi2zhlhONUJq1m0aezfIme4sbvXV&lt;br&gt;
Et n'hésitez pas à me laisser votre clef en commentaire pour que je puisse vous suivre.&lt;/p&gt;

</description>
      <category>french</category>
      <category>challenge</category>
      <category>python</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
