{"id":402,"date":"2022-06-11T07:17:38","date_gmt":"2022-06-11T06:17:38","guid":{"rendered":"https:\/\/blog.univ-angers.fr\/mathsinfo\/?p=402"},"modified":"2022-06-19T08:03:11","modified_gmt":"2022-06-19T07:03:11","slug":"kata10","status":"publish","type":"post","link":"https:\/\/blog.univ-angers.fr\/mathsinfo\/2022\/06\/11\/kata10\/","title":{"rendered":"Dixi\u00e8me exercice en Python, JavaScript et APL"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/06\/image-10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"630\" height=\"587\" src=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/06\/image-10.png\" alt=\"\" class=\"wp-image-403\" srcset=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/06\/image-10.png 630w, https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/06\/image-10-300x280.png 300w, https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/06\/image-10-322x300.png 322w\" sizes=\"auto, (max-width: 630px) 100vw, 630px\" \/><\/a><\/figure>\n\n\n\n<p><span style=\"text-decoration: underline\">R\u00e9sum\u00e9 en fran\u00e7ais<\/span> : On vous donne une liste contenant des <strong>couleurs<\/strong> de <strong>moufles<\/strong> (donc pas de main gauche ou droite \u00e0 distinguer). On vous demande le <strong>nombre de paires<\/strong> que vous pouvez <strong>constituer<\/strong>, c&rsquo;est-\u00e0-dire avoir <strong>2 moufles de la m\u00eame couleur<\/strong>. <\/p>\n\n\n\n<p>Avec le <strong>premier exemple<\/strong> donn\u00e9, on peut constituer une <strong>paire<\/strong> de moufles <strong>rouge<\/strong> (red) <strong>et<\/strong> une <strong>paire bleue<\/strong> (blue) soit <strong>2 paires<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Version classique<\/h2>\n\n\n\n<p><a rel=\"noreferrer noopener\" href=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/2022\/06\/07\/kata6\/\" target=\"_blank\">Relisez l&rsquo;exercice 6<\/a> que j&rsquo;ai propos\u00e9, vous devriez constater de nombreuses ressemblances.<\/p>\n\n\n\n<p><em>Une <strong>premi\u00e8re id\u00e9e<\/strong> est de commencer par <strong>r\u00e9cup\u00e9rer les diff\u00e9rentes couleurs<\/strong> puis, <strong>pour chacune d&rsquo;elle<\/strong>, de compter <strong>combien de fois<\/strong> cette <strong>couleur apparait<\/strong>. Il suffira de <strong>diviser par 2<\/strong> ce nombre (sans tenir compte des virgules) pour savoir <strong>combien de paires<\/strong> on peut <strong>constituer<\/strong> avec cette couleur. Finalement, on fera la <strong>somme<\/strong> du <strong>nombre de paires<\/strong> trouv\u00e9es.<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">python<\/h3>\n\n\n\n<p>Je reprends la <strong>structure classique<\/strong> vue dans l&rsquo;exercice 6 :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def nb_paires(gants):\n couleurs = &#091; ]                   # couleurs distinctes\n for g in gants:                  # on parcourt les gants\n  if g not in couleurs:           # nouvelle couleur ?\n   couleurs.append(g)             # on l'ajoute \u00e0 la liste\n paires = 0                       # nombre de paires possibles\n for c in couleurs:               # on parcourt \u00e0 nouveau les gants\n  paires += gants.count(c) \/\/ 2   # on compte puis \u00f7 enti\u00e8re par 2 \n return paires                    # on renvoie le nombre de paires\n\n&gt;&gt; nb_paires(&#091;\"gray\",\"black\",\"purple\",\"purple\",\"gray\",\"black\"])\n3\n&gt;&gt; nb_paires(&#091;\"red\",\"green\",\"blue\"])\n0<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">javascript<\/h3>\n\n\n\n<p>A nouveau je reprends la structure de l&rsquo;exercice 6 :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const nb_paires = gants =&gt; \n{\n  couleurs = gants.reduce((a, g) =&gt; \n                   a.includes(g) ? a : a.concat(g), &#091;]);\n  paires = 0;\n  for (c of couleurs) \n  {\n      paires += Math.floor(gants.filter(g =&gt; g == c).length \/ 2)\n  }\n    return paires\n}\n\n&gt;&gt; nb_paires(&#091;\"gray\",\"black\",\"purple\",\"purple\",\"gray\",\"black\"])\n3\n&gt;&gt; nb_paires(&#091;\"red\",\"green\",\"blue\"])\n0<\/code><\/pre>\n\n\n\n<p><span style=\"text-decoration: underline\">Remarque<\/span> : La <strong>division enti\u00e8re<\/strong> par <strong>2<\/strong> ou des puissances de 2 (c&rsquo;est-\u00e0-dire 4, 8, 16, 32&#8230;) peut se faire autrement. En effet, si un nombre est \u00e9crit en <strong>binaire<\/strong>, <strong>diviser par 2<\/strong> revient \u00e0 <strong>supprimer<\/strong> l&rsquo;unit\u00e9 (<strong>bit<\/strong> le plus \u00e0 <strong>droite<\/strong>) :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt; (13).toString(2)      \/\/ 13 en binaire. Python : bin(13) \u2192 '0b1101'\n'1101'\n&gt;&gt; (6).toString(2)       \/\/ Diviser par 2 = supprimer l'unit\u00e9 \n'110'<\/code><\/pre>\n\n\n\n<p>La raison est que 13 = <strong>1<\/strong> * 2^<span style=\"text-decoration: underline\">3<\/span> + <strong>1<\/strong> * 2^<span style=\"text-decoration: underline\">2<\/span> + <strong>0<\/strong> * 2^<span style=\"text-decoration: underline\">1<\/span> + <strong>1<\/strong> = 1101<sub>2<\/sub>. En divisant par 2, toutes les puissances vont diminuer de 1 : 6 = <strong>1<\/strong> * 2^<span style=\"text-decoration: underline\">2<\/span> + <strong>1<\/strong> * 2^<span style=\"text-decoration: underline\">1<\/span> + <strong>0<\/strong> * 2^<span style=\"text-decoration: underline\">0<\/span> = 110<sub>2<\/sub><\/p>\n\n\n\n<p>On utilise <strong>&gt;&gt;<\/strong> pour d\u00e9caler un bit vers la <strong>droite<\/strong> en Python et JavaScript :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>13 &gt;&gt; 1\n6<\/code><\/pre>\n\n\n\n<p>De la m\u00eame fa\u00e7on, on peut diviser par 4, multiplier par 8 etc :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>13 &gt;&gt; 2        \/\/ Diviser par 4 (c'est-\u00e0-dire \u00f7 2 fois par 2)\n3\n13 &lt;&lt; 3        \/\/ Multiplier par 8 (c'est-\u00e0-dire \u00d7 3 fois par 2)\n104<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Version ensembliste<\/h2>\n\n\n\n<p>Comme nous l&rsquo;avons \u00e9galement vu dans l&rsquo;exercice 6, nous pouvons utiliser des <strong>ensembles<\/strong> (<strong>set<\/strong>) pour r\u00e9cup\u00e9rer les \u00e9l\u00e9ments <strong>uniques<\/strong>. Les versions sont alors nettement plus courtes :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span style=\"text-decoration: underline\">Python<\/span>\n\ndef nb_paires(gants):\n    return sum(gants.count(v) \/\/ 2 for v in set(gants))\n\n<span style=\"text-decoration: underline\">JavaScript<\/span>\n\nconst nb_paires = gants =&gt; &#091;...new Set(gants)]\n    .reduce((a,v) =&gt; a + (gants.filter(c =&gt; c == v).length &gt;&gt; 1), 0)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">apl<\/h3>\n\n\n\n<p>Toujours dans l&rsquo;exercice 6, nous avons vu l&rsquo;utilisation de \u2338 (<strong>key<\/strong>), qui permet de <strong>synth\u00e9tiser<\/strong> des informations. Ici, nous voulons pour chaque couleur distincte, compter combien de fois elle apparait dans la liste et diviser cette valeur par 2 (sans virgule). Ecrivons cela \u00e9tape par \u00e9tape :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      gants \u2190 'gray' 'red' 'purple' 'purple' 'gray' 'black'\n\n      {\u237a, \u2375}\u2338 gants        \u235d Positions des couleurs dans le vecteur\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502gray  \u25021\u25025    \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502red   \u25022\u2502     \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502purple\u25023\u25024    \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502black \u25026\u2502     \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\n      {\u237a, \u2374\u2375}\u2338 gants       \u235d Nombre d'apparitions de chaque couleur\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2510\n\u2502gray  \u25022\u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2524\n\u2502red   \u25021\u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2524\n\u2502purple\u25022\u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2524\n\u2502black \u25021\u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2518\n      {\u2374\u2375}\u2338 gants            \u235d Uniquement le nombre d'apparitions\n2\n1\n2\n1\n\n      {.5 \u00d7 \u2374\u2375}\u2338 gants       \u235d Division par 2\n1  \n0.5\n1  \n0.5\n      {\u230a .5 \u00d7 \u2374\u2375}\u2338 gants     \u235d avec partie enti\u00e8re\n1\n0\n1\n0\n      +\u233f {\u230a .5 \u00d7 \u2374\u2375}\u2338 gants   \u235d Somme de la colonne\n2<\/code><\/pre>\n\n\n\n<p>Le <strong>programme final<\/strong> APL <a href=\"https:\/\/tryapl.org\/?q=nb_paires+%E2%86%90+%2B%E2%8C%BF+%7B%E2%8C%8A+.5+%C3%97+%E2%8D%B4%E2%8D%B5%7D%E2%8C%B8+%E2%8B%84+nb_paires+%27red%27+%27green%27+%27red%27+%27blue%27+%27blue%27&amp;run\" target=\"_blank\" rel=\"noreferrer noopener\">\u00e0 tester ici<\/a> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      nb_paires \u2190 +\u233f {\u230a .5 \u00d7 \u2374\u2375}\u2338\n\n      nb_paires 'red' 'green' 'red' 'blue' 'blue'\n2\n      nb_paires 'red' 'green' 'blue'\n0<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Python et JavaScript : Version utilisant une seule boucle et une pile<\/h2>\n\n\n\n<p>Est-il vraiment n\u00e9cessaire de r\u00e9cup\u00e9rer les couleurs uniques ? Imaginons la situation dans la <strong>vie r\u00e9elle<\/strong> avec <strong>&lsquo;red&rsquo; &lsquo;green&rsquo; &lsquo;red&rsquo; &lsquo;blue&rsquo; &lsquo;blue&rsquo;<\/strong> :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Dans ma t\u00eate je pense \u00e0 <strong>0<\/strong>, c&rsquo;est le <strong>nombre de paires<\/strong> que j&rsquo;ai r\u00e9ussi \u00e0 faire<\/li><li>Je prends le <strong>premier<\/strong> gant, il est <strong>&lsquo;red&rsquo;<\/strong>, je n&rsquo;ai pas cette couleur donc je la garde<\/li><li>Je prends le <strong>deuxi\u00e8me<\/strong>, il est <strong>&lsquo;green&rsquo;<\/strong>, je n&rsquo;ai pas cette couleur donc je la garde<\/li><li>Je prends le <strong>troisi\u00e8me<\/strong>, il est <strong>&lsquo;red&rsquo;<\/strong>. J&rsquo;ai d\u00e9j\u00e0 cette couleur, je peux donc faire une <strong>paire<\/strong>. <strong>J&rsquo;enl\u00e8ve<\/strong> les 2 moufles &lsquo;red&rsquo; et <strong>j&rsquo;ajoute 1<\/strong> au nombre de paires<\/li><li>Je prends le <strong>quatri\u00e8me<\/strong>, il est <strong>&lsquo;blue&rsquo;<\/strong>,  je n&rsquo;ai pas cette couleur donc je la garde<\/li><li>Je prends le <strong>cinqui\u00e8me<\/strong>, il est <strong>&lsquo;blue&rsquo;<\/strong>. J&rsquo;ai d\u00e9j\u00e0 cette couleur, je peux donc faire une <strong>paire<\/strong>. J&rsquo;enl\u00e8ve les 2 moufles &lsquo;blue&rsquo; et <strong>j&rsquo;ajoute 1<\/strong> au nombre de paires<\/li><li>J&rsquo;ai finalement r\u00e9ussi \u00e0 constituer <strong>2 paires<\/strong>.<\/li><\/ul>\n\n\n\n<p>\ud83e\udd16 Refaites de t\u00eate le processus avec les gants <strong>&lsquo;red&rsquo; &lsquo;red&rsquo; &lsquo;red&rsquo; &lsquo;red&rsquo; &lsquo;red&rsquo; <\/strong><\/p>\n\n\n\n<p><strong>Prendre<\/strong> un gant revient \u00e0 <strong>ajouter<\/strong> un \u00e9l\u00e9ment dans une liste, inversement <strong>cr\u00e9er<\/strong> une <strong>paire<\/strong> \u00e0 <strong>\u00e9liminer<\/strong> cette couleur de la liste. Voyons comment ajouter, enlever ou tester si un \u00e9l\u00e9ment est dans un ensemble en utilisant les m\u00e9thodes <strong>add<\/strong>, <strong>remove<\/strong>, <strong>delete<\/strong> :<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">python<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt; paires = set()           # Ensemble vide\n&gt;&gt; paires.add('red')        # on ajoute 'red' \u00e0 l'ensemble\n&gt;&gt; paires\n{'red'}\n&gt;&gt; paires.add('blue')\n&gt;&gt; paires\n{'red', 'blue'}\n&gt;&gt; paires.remove('red')     # on enl\u00e8ve 'red'\n&gt;&gt; paires\n{'blue'}\n&gt;&gt; 'red' in paires          # on teste si 'red' est dans l'ensemble\nFalse<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">javascript<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt; paires = new Set()       \/\/ Ensemble vide\n&gt;&gt; paires.add('red')        \/\/ on ajoute 'red' \u00e0 l'ensemble\nSet(1)&nbsp;{'red'}\n&gt;&gt; paires.add('blue')\nSet(2)&nbsp;{'red', 'blue'}\n&gt;&gt; paires.delete('red')     \/\/ on enl\u00e8ve 'red'\n&gt;&gt; paires\nSet(1)&nbsp;{'blue'}\n&gt;&gt; paires.has('red')        \/\/ on teste si 'red' est dans l'ensemble\nfalse<\/code><\/pre>\n\n\n\n<p>Versions finales bas\u00e9es sur cette id\u00e9e :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><span style=\"text-decoration: underline\">Python<\/span>\n\ndef nb_paires(gants):\n  couleurs = set()          # les couleurs trouv\u00e9es\n  paires = 0                # nb de paires r\u00e9alis\u00e9es\n  for c in gants:           # on parcourt les gants\n    if c in couleurs:       # couleur d\u00e9j\u00e0 vue ?\n      couleurs.remove(c)    # on la retire des couleurs trouv\u00e9es\n      paires += 1           # le nombre de paires augmente de 1\n    else:                   # sinon\n      couleurs.add(c)       # ajouter cette nouvelle couleur\n  return paires             # nombre de paires trouv\u00e9es\n\n<span style=\"text-decoration: underline\">JavaScript<\/span>\n\nconst nb_paires = gants =&gt; {\n  couleurs = new Set();\n  paires = 0;\n  for (c of gants)\n  {\n    if (couleurs.has(c)) \n    {   \n      couleurs.delete(c);\n      paires ++\n    }\n    else\n      couleurs.add(c)\n  }\n  return paires\n} <\/code><\/pre>\n\n\n\n<p>\ud83e\udd2f Pour terminer, voici une version (difficile \u00e0 lire) avec <strong>reduce<\/strong> du programme <strong>JavaScript<\/strong> pr\u00e9c\u00e9dent :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const nb_paires = gants =&gt; \n     gants.reduce((a, c) =&gt;   \/\/ On parcourt les couleurs\n       a&#091;1].has(c) ?          \/\/ Couleur d\u00e9j\u00e0 vue ?\n       &#091;a&#091;0] + a&#091;1].delete(c), a&#091;1]] : \/\/ +1 paire et suppr couleur\n       &#091;a&#091;0], a&#091;1].add(c)]   \/\/ sinon on ajoute couleur\n      ,&#091;0, new Set()])       \/\/ Initialisation paires = 0 et couleurs\n     &#091;0]                     \/\/ On r\u00e9cup\u00e8re le nombre de paires<\/code><\/pre>\n\n\n\n<p>On utilise le fait que <strong>true + nombre<\/strong> donne le m\u00eame r\u00e9sultat que <strong>1 + nombre<\/strong> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt; a = new Set()         \/\/ Ensemble vide\n&gt;&gt; a.add('red')          \/\/ on ajoute 'red'\nSet(1)&nbsp;{'red'}\n&gt;&gt; 3 + a.delete('red')   \/\/ a.delete renvoie <strong>true<\/strong> qui correspond \u00e0 <strong>1<\/strong>\n4                        \/\/ Cela donne bien 3 + 1 = 4<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Autre version en APL<\/h2>\n\n\n\n<p>Nous avons vu le <strong>produit interne<\/strong> \u00e0 plusieurs reprises dans les exercices. Il existe \u00e9galement un <strong>produit externe<\/strong> (not\u00e9 \u2218), l&rsquo;exemple classique \u00e9tant la <strong>table de multiplication<\/strong> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n      (\u23735) \u2218.\u00d7 \u23733       \u235d Multiplier chaque \u00e9l\u00e9ment de 1 2 3 4 5\n1  2  3                 \u235d par chaque \u00e9l\u00e9ment de 1 2 3\n2  4  6\n3  6  9                 \u235d d'o\u00f9 une matrice 5 x 3\n4  8 12\n5 10 15<\/code><\/pre>\n\n\n\n<p>Voici un autre exemple :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      gants \u2190 'red' 'green' 'red' 'blue' 'blue'\n\n      \u222a gants               \u235d El\u00e9ments uniques dans le vecteur\n\u250c\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2510\n\u2502red\u2502green\u2502blue\u2502\n\u2514\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2518\n      gants \u2218.\u2261 \u222a gants     \u235d On teste toutes les \u00e9galit\u00e9s\n1 0 0                       \u235d 'red' est \u00e9gal au 1er \u00e9l\u00e9ment de \u222a gants\n0 1 0                       \u235d 'vert' \u00e9gal au 2e \u00e9l\u00e9ment de \u222a gants\n1 0 0                       \u235d 'red' est \u00e9gal au 1er \u00e9l\u00e9ment de \u222a gants\n0 0 1                       \u235d 'blue' est \u00e9gal au 32 \u00e9l\u00e9ment de \u222a gants\n0 0 1                       \u235d 'blue' est \u00e9gal au 32 \u00e9l\u00e9ment de \u222a gants<\/code><\/pre>\n\n\n\n<p>On peut alors faire la somme des colonnes, diviser les totaux par 2 et prendre la partie enti\u00e8re :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      \u230a .5 \u00d7 +\u233f gants \u2218.\u2261 \u222a gants\n1 0 1<\/code><\/pre>\n\n\n\n<p>Et finalement r\u00e9duire par la somme :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      +\/ \u230a .5 \u00d7 +\u233f gants \u2218.\u2261 \u222a gants\n2\n\n\u235d En faisant les produits puis la somme (produit interne +.\u00d7)\n\n      +\/ \u230a .5 +.\u00d7 gants \u2218.\u2261 \u222a gants\n2\n<\/code><\/pre>\n\n\n\n<p>Ce qui donne cette <strong>autre version finale<\/strong> en APL <a href=\"https:\/\/tio.run\/##SyzI0U2pTMzJT9dNzkksLs5M\/g8EeUnxBYmZRanFCo\/aJihUa@srPOrpUtAzVdDWOzxd4VHvVoVHHTP0HnUuBNKrgNxaLoQO9aLUFHUF9fSi1NQ8dRgvKac0FUbhVguWBgA\" target=\"_blank\" rel=\"noreferrer noopener\">\u00e0 tester ici <\/a>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      nb_paires \u2190 {+\/ \u230a .5 +.\u00d7 \u2375 \u2218.\u2261 \u222a\u2375}\n\n      nb_paires gants\n2<\/code><\/pre>\n\n\n\n<p>\ud83e\uddd0 Les plus attentifs d&rsquo;entre vous auront remarqu\u00e9 que <strong>\u2375 \u2218.\u2261 \u222a\u2375<\/strong> peut s&rsquo;\u00e9crire <strong>\u22a2\u2218.\u2261\u222a<\/strong> (<strong>fork<\/strong>). En effet, on applique l&rsquo;union \u00e0 <strong>\u2375<\/strong>, l&rsquo;identit\u00e9 \u00e0 <strong>\u2375<\/strong> puis le test d&rsquo;\u00e9galit\u00e9 aux 2 r\u00e9sultats. Or <strong>(f\u2375)g(h\u2375)<\/strong> peut s&rsquo;\u00e9crire sous la forme <strong>(fgh)\u2375<\/strong> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      (\u22a2\u2218.\u2261\u222a) 'red' 'green' 'red' 'blue' 'blue'\n1 0 0\n0 1 0\n1 0 0\n0 0 1\n0 0 1<\/code><\/pre>\n\n\n\n<p>\ud83e\udd75 Ce qui nous am\u00e8ne \u00e0 cette <strong>troisi\u00e8me version<\/strong> <a href=\"https:\/\/tio.run\/##SyzI0U2pTMzJT9dNzkksLs5M\/g8EeUnxBYmZRanFCo\/aJiho6z\/qmPGop0tBz1RBW@\/wdIVHXYuAInqPOhc@6ljFhVCsXpSaoq6gnl6UmpqnDuMl5ZSmwijcasHSAA\" target=\"_blank\" rel=\"noreferrer noopener\">\u00e0 tester ici<\/a> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      nb_paires \u2190 +\/\u2218\u230a .5 +.\u00d7 \u22a2\u2218.\u2261\u222a\n\n      nb_paires 'red' 'green' 'red' 'blue' 'blue'\n2\n      nb_paires 'red' 'green' 'blue'\n0<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>R\u00e9sum\u00e9 en fran\u00e7ais : On vous donne une liste contenant des couleurs de moufles (donc pas de main gauche ou droite \u00e0 distinguer). On vous demande le nombre de paires que vous pouvez constituer, c&rsquo;est-\u00e0-dire avoir 2 moufles de la &hellip; <a href=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/2022\/06\/11\/kata10\/\">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-402","post","type-post","status-publish","format-standard","hentry","category-twitter"],"_links":{"self":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/posts\/402","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=402"}],"version-history":[{"count":42,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/posts\/402\/revisions"}],"predecessor-version":[{"id":659,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/posts\/402\/revisions\/659"}],"wp:attachment":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/media?parent=402"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/categories?post=402"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/tags?post=402"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}