{"id":278,"date":"2022-06-08T07:05:38","date_gmt":"2022-06-08T06:05:38","guid":{"rendered":"https:\/\/blog.univ-angers.fr\/mathsinfo\/?p=278"},"modified":"2022-06-19T08:02:43","modified_gmt":"2022-06-19T07:02:43","slug":"kata7","status":"publish","type":"post","link":"https:\/\/blog.univ-angers.fr\/mathsinfo\/2022\/06\/08\/kata7\/","title":{"rendered":"Septi\u00e8me exercice en Python, JavaScript et APL\u00a0"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/06\/image-6.png\"><img loading=\"lazy\" decoding=\"async\" width=\"852\" height=\"344\" src=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/06\/image-6.png\" alt=\"\" class=\"wp-image-279\" srcset=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/06\/image-6.png 852w, https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/06\/image-6-300x121.png 300w, https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/06\/image-6-768x310.png 768w, https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/06\/image-6-500x202.png 500w\" sizes=\"auto, (max-width: 852px) 100vw, 852px\" \/><\/a><\/figure>\n\n\n\n<p><span style=\"text-decoration: underline\">R\u00e9sum\u00e9 en fran\u00e7ais<\/span> : Ecrire une fonction qui admet en param\u00e8tre un nombre entier positif et qui retourne le nombre de fois o\u00f9 vous devez multiplier ses chiffres pour obtenir un seul chiffre.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Version classique<\/h2>\n\n\n\n<p>On doit compter (variable <strong>compteur<\/strong>) combien de fois il faut multiplier les chiffres entre eux jusqu&rsquo;\u00e0 obtenir un seul chiffre. Ce nombre d&rsquo;it\u00e9rations \u00e9tant inconnu, nous allons naturellement utiliser une boucle <strong>Tant Que<\/strong> (<strong>while<\/strong>). Maintenant, comment faire la multiplication des chiffres d&rsquo;un nombre ? On peut par exemple <strong>transformer<\/strong> ce nombre en <strong>chaine<\/strong> puis en <strong>liste<\/strong> et multiplier les \u00e9l\u00e9ments de cette liste gr\u00e2ce \u00e0 une boucle.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Python<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>def mul(n):\n  chaine = str(n)            # Transformation nombre en chaine\n  liste = list(chaine)       # puis en liste\n  produit = 1                # Initialisation du r\u00e9sultat du produit\n  for c in liste:\n    produit *= int(c)        # int = convertir chaine en entier\n  return produit  \n\n&gt;&gt; mul(999)\n729<\/code><\/pre>\n\n\n\n<p>On peut \u00e9galement utiliser une librairie comme <strong>operator<\/strong> ou <strong>numpy<\/strong> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import numpy as np\n\ndef mul(n):\n  liste = list(str(n))                      # Nombre en liste\n  return np.prod(&#091;int(v) for v in liste])   # \"prod\" pour produit\n\n&gt;&gt; mul(999)\n729<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">javascript<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>const mul = n =&gt; \n{\n     liste = &#091;...''+n] ;    \/\/ Conversion nombre &gt; chaine &gt; liste\n     produit = 1 ;\n     for (c of liste) produit *= +c ;\n     return produit\n}\n\n&gt;&gt; mul(999)\n729<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">APL<\/h3>\n\n\n\n<p>Pour transformer un nombre en chaine on utilise <strong>\u2355<\/strong> et inversement <strong>\u234e<\/strong> transforme une chaine en nombre :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      '2',\u23553     \u235d Concat\u00e9nation de la chaine '2' et de '3'\n23\n      \u234e '2+3'    \u235d Transformation de la chaine en nombre\n5<\/code><\/pre>\n\n\n\n<p>Ainsi, en \u00e9crivant :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      \u234e\u00a8\u2355 987\n9 8 7<\/code><\/pre>\n\n\n\n<p>On transforme le nombre 987 en un vecteur compos\u00e9 de ses chiffres, le \u00a8 signifiant <strong>pour chaque<\/strong> (<strong>for each<\/strong>). Il suffit ensuite de faire le produit des termes, c&rsquo;est-\u00e0-dire une r\u00e9duction :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      \u00d7\/ \u234e\u00a8\u2355 999\n729<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Programme finaL version classique en javascript<\/h3>\n\n\n\n<p><a href=\"https:\/\/tio.run\/##PY89TwMxDIb3@xXekogSMSMVBtZKDLAhBpMzvVSXOLKT8iV@@5Gjajf7tZ\/H8gGPqEFiqdeZR1qWIwoETkVIFbZQJkEl2N7BzwAwUuBWLrGvvOMPkodeW@e1zLFaA8b11cR15U@EFxpbIGtxA8mtNvQxh7mNpLYH94Bw27PAOWDtyQZeXleLUG2Sz5aExaaVNgau\/i90y0ifj@8dcf7AMVtjHAy\/w9BVyjP5mff2\/I81zxNBbumNBG4gKmgLU7@tVTDvL6OnUzt\/QawwocI3CUMizDHvjXPL8gc\" target=\"_blank\" rel=\"noreferrer noopener\">A tester ici<\/a> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const persistence = n =&gt;\n{\n   var compteur = 0;                  \/\/ Notre compteur de tours\n   while (n &gt; 9) {\n     compteur ++;\n     produit = 1;                     \/\/ Calcul du produit des chiffres\n     liste = &#091;...''+n];               \/\/ Conversion du nombre en liste\n     for (c of liste) produit *= +c;  \/\/ +c --&gt; entier\n     n = produit  \n   }\n   \n   return compteur;\n}\n\n&gt;&gt; persistence(999)\n4<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Programme finaL version classique en python<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>import numpy as np\n\ndef persistence(n):\n  compteur = 0\n  while n &gt; 9:\n    compteur += 1\n    n = np.prod(&#091;int(v) for v in list(str(n))])\n  return compteur \n\n&gt;&gt; persistence(999)\n4<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Version r\u00e9cursive<\/h2>\n\n\n\n<p>Si un nombre est plus petit que 10, sa <strong>persistence<\/strong> est <strong>0<\/strong>. Sinon, sa <strong>persistence<\/strong> est <strong>1 +<\/strong> la <strong>persistence<\/strong> du <strong>produit de ses chiffres<\/strong>. Par exemple :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>persistence(39) = 1 + persistence(3 * 9)\n                = 1 + persistence(27)\n                = 1 + (1 + persistence(2 * 7)) \n                = 1 + 1 + persistence(14)\n                = 1 + 1 + (1 + persistence(1 * 4))\n                = 1 + 1 + 1 + persistence(4)              \n                = 1 + 1 + 1 + 0\n                = 3<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">version finale r\u00e9cursive en python<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>import numpy as np\n\ndef persistence(n):\n    if n &lt; 10: return 0\n    p = np.prod(&#091;int(v) for v in list(str(n))])\n    return 1 + persistence(p) <\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">version finale r\u00e9cursive en javascript<\/h3>\n\n\n\n<p>La multiplication des chiffres peut se faire par <strong>reduce<\/strong> plut\u00f4t que par une boucle <strong>for<\/strong> classique :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt; &#091;...'999'].reduce((a,c) =&gt; a * (+c), 1)   \/\/ avec parenth\u00e8ses\n729\n\n&gt;&gt; &#091;...'999'].reduce((a,c) =&gt; a * +c, 1)    \/\/ ou sans parenth\u00e8se !\n729\n\n&gt;&gt; &#091;...'999'].reduce((a,c) =&gt; a * +c)      \/\/ ou sans initialisation !!\n729<\/code><\/pre>\n\n\n\n<p>On obtient finalement :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>persistence = num =&gt; \n    num &lt; 10 ? \n    0 :\n    1 + persistence(&#091;...'' + num].reduce((a, c) =&gt; a * +c))<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Version finale r\u00e9cursive en apl<\/h3>\n\n\n\n<p>La r\u00e9curvisit\u00e9 en APL existe en utilisant le symbole <strong>\u2207<\/strong>. Exemple classique de la factorielle :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      {\u2375 = 1 : 1 \u22c4 \u2375 \u00d7 \u2207 \u2375 - 1} 10\n3628800\n      !10\n3628800<\/code><\/pre>\n\n\n\n<p>La forme est <strong>test : valeurSiVrai \u22c4 valeurSiFaux<\/strong> o\u00f9 \u22c4 (diamant) est le s\u00e9parateur. <\/p>\n\n\n\n<p>Voici une <strong>proposition pour notre probl\u00e8me<\/strong> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      persistence \u2190 {\u2375 &lt; 10 : 0 \u22c4 1 + \u2207 \u00d7\/ \u234e\u00a8 \u2355 \u2375}\n\n      persistence 999\n4<\/code><\/pre>\n\n\n\n<p><span style=\"text-decoration: underline\">Qui est la traduction de<\/span> : Si le nombre \u2375 est inf\u00e9rieur \u00e0 10, renvoyer 0 sinon, faire 1 plus la persistence du produit des chiffres de \u2375.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>R\u00e9sum\u00e9 en fran\u00e7ais : Ecrire une fonction qui admet en param\u00e8tre un nombre entier positif et qui retourne le nombre de fois o\u00f9 vous devez multiplier ses chiffres pour obtenir un seul chiffre. Version classique On doit compter (variable compteur) &hellip; <a href=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/2022\/06\/08\/kata7\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":4913,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-278","post","type-post","status-publish","format-standard","hentry","category-twitter"],"_links":{"self":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/posts\/278","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/users\/4913"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/comments?post=278"}],"version-history":[{"count":19,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/posts\/278\/revisions"}],"predecessor-version":[{"id":656,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/posts\/278\/revisions\/656"}],"wp:attachment":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/media?parent=278"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/categories?post=278"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/tags?post=278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}