{
"cells": [
{
"cell_type": "markdown",
"id": "7b33ad92",
"metadata": {},
"source": [
"# Septième exercice en JavaScript"
]
},
{
"cell_type": "markdown",
"id": "7f4e9974",
"metadata": {},
"source": [
"
"
]
},
{
"cell_type": "markdown",
"id": "60fae855",
"metadata": {},
"source": [
"*Résumé en français* : Ecrire une fonction qui admet en paramètre un nombre entier positif et qui retourne le nombre de fois où vous devez multiplier ses chiffres pour obtenir un seul chiffre."
]
},
{
"cell_type": "markdown",
"id": "755fa541",
"metadata": {},
"source": [
"## Version classique"
]
},
{
"cell_type": "markdown",
"id": "7d7bf9bc",
"metadata": {},
"source": [
"On doit compter (variable `compteur`) combien de fois il faut multiplier les chiffres entre eux jusqu'à obtenir un seul chiffre. Ce nombre d'itérations étant inconnu, nous allons naturellement utiliser une boucle **Tant Que** (`while`). Maintenant, comment faire la multiplication des chiffres d'un nombre ? On peut par exemple **transformer** ce nombre en **chaine** puis en **liste** et multiplier les éléments de cette liste grâce à une boucle."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "7190588b",
"metadata": {},
"outputs": [],
"source": [
"var mul = n => \n",
"{\n",
" liste = [...''+n] ; // Conversion nombre > chaine > liste\n",
" produit = 1 ;\n",
" for (c of liste) produit *= +c ;\n",
" return produit\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "ab2f3607",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"729"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mul(999)"
]
},
{
"cell_type": "markdown",
"id": "7a7aef7f",
"metadata": {},
"source": [
"Ce qui donne ce programme pour la version classique :"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "ab411e7f",
"metadata": {},
"outputs": [],
"source": [
"var persistence = n =>\n",
"{\n",
" var compteur = 0; // Notre compteur de tours\n",
" while (n > 9) {\n",
" compteur ++;\n",
" produit = 1; // Calcul du produit des chiffres\n",
" liste = [...''+n]; // Conversion du nombre en liste\n",
" for (c of liste) produit *= +c; // +c --> entier\n",
" n = produit \n",
" }\n",
" \n",
" return compteur;\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "3ddb3512",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
" persistence(999)"
]
},
{
"cell_type": "markdown",
"id": "ebf47515",
"metadata": {},
"source": [
"## Version récursive"
]
},
{
"cell_type": "markdown",
"id": "85a4d639",
"metadata": {},
"source": [
"Si un nombre est plus petit que 10, sa **persistence** est **0**. Sinon, sa **persistence** est **1 +** la **persistence** du **produit de ses chiffres**. Par exemple :\n",
"\n",
"
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"
]
},
{
"cell_type": "markdown",
"id": "7b8ad345",
"metadata": {},
"source": [
"Programme final version récursive :"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "a5aaf28e",
"metadata": {},
"outputs": [],
"source": [
"var persistence = n => {\n",
" if (n < 10) return 0;\n",
" produit = 1;\n",
" liste = [...''+n];\n",
" for (c of liste) produit *= +c; \n",
" return 1 + persistence(produit) \n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "f8b3c126",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"persistence(999)"
]
},
{
"cell_type": "markdown",
"id": "fe674992",
"metadata": {},
"source": [
"La multiplication des chiffres peut se faire par `reduce` plutôt que par une boucle `for` classique :"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "d0975eb5",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"729"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[...'999'].reduce((a,c) => a * (+c), 1) // avec parenthèses"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "dbf904f4",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"729"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[...'999'].reduce((a,c) => a * +c, 1) // ou sans parenthèse !"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "b296c2a1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"729"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[...'999'].reduce((a,c) => a * +c) // ou sans initialisation !!"
]
},
{
"cell_type": "markdown",
"id": "8cdb4402",
"metadata": {},
"source": [
"On obtient finalement :"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "bc7b69d2",
"metadata": {},
"outputs": [],
"source": [
"var persistence = num => \n",
" num < 10 ? \n",
" 0 :\n",
" 1 + persistence([...'' + num].reduce((a, c) => a * +c))"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "2692cbf0",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"persistence(999)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "JavaScript (Node.js)",
"language": "javascript",
"name": "javascript"
},
"language_info": {
"file_extension": ".js",
"mimetype": "application/javascript",
"name": "javascript",
"version": "18.3.0"
}
},
"nbformat": 4,
"nbformat_minor": 5
}