HEX
Server: Apache
System: Linux vps.mmtprep.com 4.18.0-477.21.1.el8_8.x86_64 #1 SMP Thu Aug 10 13:51:50 EDT 2023 x86_64
User: mmtprep (1001)
PHP: 8.1.34
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/6M31-AVUWJhWg.js.map
{"version":3,"file":"6M31-AVUWJhWg.js","sources":["../../src/exercices/6e/6M31.js"],"sourcesContent":["import { choice, combinaisonListes } from '../../lib/outils/arrayOutils'\nimport { sp } from '../../lib/outils/outilString.js'\nimport { texNombre } from '../../lib/outils/texNombre.js'\nimport Exercice from '../Exercice.js'\nimport { context } from '../../modules/context.js'\nimport { listeQuestionsToContenu, randint } from '../../modules/outils.js'\nimport { texTexte } from '../../lib/format/texTexte'\nimport { ajouteChampTexteMathLive } from '../../lib/interactif/questionMathLive.js'\nimport { propositionsQcm } from '../../lib/interactif/qcm.js'\nimport { getDigitFromNumber } from './_ExerciceConversionsLongueurs.js'\nimport Decimal from 'decimal.js'\nimport { setReponse } from '../../lib/interactif/gestionInteractif.js'\n\nexport const titre = 'Convert volumes'\nexport const amcReady = true\nexport const amcType = 'qcmMono'\nexport const interactifReady = true\nexport const interactifType = ['qcm', 'mathLive']\n\nexport const dateDeModifImportante = '31/05/2023'\n\n/**\n * Conversions de volumes.\n *\n * Dans la correction, on ne voit qu`une multiplication ou qu`un division pour obtenir le résultat\n *\n * * 1 : Conversions en mètres-cubes avec des multiplications\n * * 2 : Conversions en mètres-cubes avec des divisions\n * * 3 : Conversions en mètres-cubes avec des multiplications ou divisions\n * * 4 : Conversions avec des multiplications ou divisions\n * * Paramètre supplémentaire : utiliser des nombres décimaux (par défaut tous les nombres sont entiers)\n * @author Rémi Angot\n * Référence 6M31\n * Amélioration de l'interactivité (mathLive maintenant inline) par Guillaume Valmont le 14/05/2022\n */\nexport const uuid = '33ac2'\nexport const ref = '6M31'\nexport default function ExerciceConversionsVolumes () {\n  Exercice.call(this) // Héritage de la classe Exercice()\n  this.sup = 1 // Niveau de difficulté de l`exercice\n  this.sup2 = false // Avec des nombres décimaux ou pas\n  this.sup3 = 1 // interactifType Qcm\n  this.titre = titre\n  this.spacing = 2\n  this.nbColsCorr = 1\n  this.amcReady = amcReady\n  this.amcType = amcType\n  this.interactifReady = interactifReady\n\n  function nombreAleatoire (nbChiffres) { // retourne un entier aléatoire à n chiffres sous la forme d'un Decimal\n    let a = new Decimal(0)\n    for (let i = 0; i < nbChiffres; i++) {\n      a = a.add(randint(1, 9) * 10 ** i)\n    }\n    return a\n  }\n\n  this.nouvelleVersion = function () {\n    this.consigne = (this.interactif && this.sup3 === 1) ? 'Check the right answer.' : 'Complete.'\n    this.interactifType = this.sup3 === 2 ? 'mathLive' : 'mth'\n    this.autoCorrection = []\n    this.listeQuestions = [] // Liste de questions\n    this.listeCorrections = [] // Liste de questions corrigées\n    Decimal.set({ toExpNeg: -20, toExpPos: 20 }) // pour éviter la conversion en notation scientifique on va jusqu'à 20 décimales (-7 est la valeur par défaut)\n    const prefixeMulti = [\n      [' da', '\\\\times1000', 1000],\n      [' h', '\\\\times1000\\\\times1000', 1000000],\n      [' k', '\\\\times1000\\\\times1000\\\\times1000', 1000000000]\n    ]\n    const prefixeDiv = [\n      [' d', '\\\\div1000', 1000],\n      [' vs', '\\\\div1000\\\\div1000', 1000000],\n      [' m', '\\\\div1000\\\\div1000\\\\div1000', 1000000000]\n    ]\n\n    const unite = 'm'\n    const listeUnite = ['mm', 'cm', 'dm', 'm', 'dam', 'hmm', 'km']\n    for (\n      let i = 0,\n        a,\n        k,\n        div,\n        resultat,\n        resultatFaux,\n        typesDeQuestions,\n        texte,\n        texteCorr,\n        cpt = 0;\n      i < this.nbQuestions && cpt < 50;\n    ) {\n      this.autoCorrection[i] = {}\n      // We limit the number of tries to search for new values\n      typesDeQuestions = this.sup < 5 ? this.sup : randint(1, 4)\n      k = randint(0, 2) // Choix du préfixe\n      if (typesDeQuestions === 1) {\n        // level 1\n        div = false // Il n`y aura pas de division\n      } else if (typesDeQuestions === 2) {\n        // level 2\n        div = true // Avec des divisions\n      } else if (typesDeQuestions === 3) {\n        div = choice([true, false]) // Avec des multiplications ou des divisions\n      } else if (typesDeQuestions === 4) {\n        div = choice([true, false]) // Avec des multiplications ou des divisions sans toujours revenir au m^3\n      }\n\n      if (this.sup2) {\n        // If the box for decimal numbers is checked\n        a = choice([\n          (new Decimal(randint(10, 199))).div(10),\n          nombreAleatoire(1).div(10),\n          nombreAleatoire(1).div(100),\n          nombreAleatoire(3).div(100)\n        ])\n        // XX,X 0,X 0,0X X,XX\n      } else {\n        a = choice([\n          nombreAleatoire(1),\n          nombreAleatoire(1).mul(10),\n          nombreAleatoire(1).mul(100),\n          nombreAleatoire(2)\n        ])\n        // X, X0, X00, XX\n      }\n\n      if (!div && typesDeQuestions < 4) {\n        // Whether to multiply to convert\n\n        resultat = a.mul(prefixeMulti[k][2])\n        texte =\n                    '$' +\n                    texNombre(a, 3) +\n                    texTexte(prefixeMulti[k][0] + unite) +\n                    '^3' +\n                    ' = \\\\dotfill' +\n                    texTexte(unite) +\n                    '^3' +\n                    '$'\n        texteCorr =\n                    '$' +\n                    texNombre(a, 3) +\n                    texTexte(prefixeMulti[k][0] + unite) +\n                    '^3' +\n                    ' = ' +\n                    texNombre(a, 3) +\n                    '\\\\times' +\n                    prefixeMulti[k][1] +\n                    texTexte(unite) +\n                    '^3' +\n                    ' = ' +\n                    texNombre(resultat, 20) +\n                    texTexte(unite) +\n                    '^3' +\n                    '$'\n        texteCorr += '<br>' + buildTab(a, prefixeMulti[k][0] + 'm', resultat, unite, 2, true)\n      } else if (div && typesDeQuestions < 4) {\n        k = randint(0, 1) // Pas de conversions de mm^3 en m^3 avec des nombres décimaux car résultat inférieur à 10e-8\n        // The previous comment is irrelevant with Decimal, we can display 20 digits after the decimal point here without switching to scientific notation!\n        resultat = a.div(prefixeMulti[k][2])\n        texte =\n                    '$' +\n                    texNombre(a, 3) +\n                    texTexte(prefixeDiv[k][0] + unite) +\n                    '^3' +\n                    ' = \\\\dotfill' +\n                    texTexte(unite) +\n                    '^3' +\n                    '$'\n        texteCorr =\n                    '$' +\n                    texNombre(a, 3) +\n                    texTexte(prefixeDiv[k][0] + unite) +\n                    '^3' +\n                    ' = ' +\n                    texNombre(a, 3) +\n                    '\\\\div' +\n                    prefixeDiv[k][1] +\n                    texTexte(unite) +\n                    '^3' +\n                    ' = ' +\n                    texNombre(resultat, 20) + // avec les Decimaux, on peut demander une telle précision, texNombre n'affichera que ce qui est utile (sauf à mettre force, le troisième paramètre à true)\n                    texTexte(unite) +\n                    '^3' +\n                    '$'\n        texteCorr += '<br>' + buildTab(a, prefixeDiv[k][0] + 'm', resultat, unite, 2, true)\n      } else if (typesDeQuestions === 4) {\n        const unite1 = randint(0, 3)\n        let ecart = randint(1, 2) // nombre de multiplication par 10 pour passer de l`one to one`autre\n        if (ecart > 4 - unite1) {\n          ecart = 4 - unite1\n        }\n        const unite2 = unite1 + ecart\n        let multiplicationsPar1000 = ''\n\n        if (randint(0, 1) > 0) {\n          switch (ecart) {\n            case 1:\n              multiplicationsPar1000 = `\\\\times 1${sp()}000`\n              break\n            case 2:\n              multiplicationsPar1000 = `\\\\times 1${sp()}000 \\\\times 1${sp()}000`\n              break\n            case 3:\n              multiplicationsPar1000 =\n                                `\\\\times 1${sp()}000 \\\\times 1${sp()}000 \\\\times 1${sp()}000`\n              break\n          }\n          resultat = a.mul(10 ** (3 * ecart))\n          texte =\n                        '$' +\n                        texNombre(a, 3) +\n                        texTexte(listeUnite[unite2]) +\n                        '^3' +\n                        ' = \\\\dotfill' +\n                        texTexte(listeUnite[unite1]) +\n                        '^3' +\n                        '$'\n          texteCorr =\n                        '$' +\n                        texNombre(a, 3) +\n                        texTexte(listeUnite[unite2]) +\n                        '^3' +\n                        ' = ' +\n                        texNombre(a, 3) +\n                        multiplicationsPar1000 +\n                        texTexte(listeUnite[unite1]) +\n                        '^3' +\n                        ' = ' +\n                        texNombre(resultat, 20) + // avec les Decimaux, on peut demander une telle précision, texNombre n'affichera que ce qui est utile (sauf à mettre force, le troisième paramètre à true)\n                        texTexte(listeUnite[unite1]) +\n                        '^3' +\n                        '$'\n          texteCorr += '<br>' + buildTab(a, listeUnite[unite2], resultat, listeUnite[unite1], 2, true)\n        } else {\n          switch (ecart) {\n            case 1:\n              multiplicationsPar1000 = `\\\\div 1${sp()}000`\n              break\n            case 2:\n              multiplicationsPar1000 = `\\\\div 1${sp()}000 \\\\div 1${sp()}000`\n              break\n            case 3:\n              multiplicationsPar1000 = `\\\\div 1${sp()}000 \\\\div 1${sp()}000 \\\\div 1${sp()}000`\n              break\n          }\n          resultat = a.div(10 ** (3 * ecart))\n          texte =\n                        '$' +\n                        texNombre(a, 3) +\n                        texTexte(listeUnite[unite1]) +\n                        '^3' +\n                        ' = \\\\dotfill' +\n                        texTexte(listeUnite[unite2]) +\n                        '^3' +\n                        '$'\n          texteCorr =\n                        '$' +\n                        texNombre(a, 3) +\n                        texTexte(listeUnite[unite1]) +\n                        '^3' +\n                        ' = ' +\n                        texNombre(a, 3) +\n                        multiplicationsPar1000 +\n                        texTexte(listeUnite[unite2]) +\n                        '^3' +\n                        ' = ' +\n                        texNombre(resultat, 20) +\n                        texTexte(listeUnite[unite2]) +\n                        '^3' +\n                        '$'\n          texteCorr += '<br>' + buildTab(a, listeUnite[unite1], resultat, listeUnite[unite2], 2, true)\n        }\n      }\n\n      this.autoCorrection[i].enonce = `${texte}\\n`\n      resultatFaux = combinaisonListes([resultat.div(10), resultat.div(100), resultat.div(1000), resultat.mul(10), resultat.mul(100), resultat.mul(1000)], 6)\n      this.autoCorrection[i].propositions = [{\n        texte: `$${texNombre(resultat, 20)}$`,\n        statut: true\n      },\n      {\n        texte: `$${texNombre(resultatFaux[0], 20)}$`,\n        statut: false\n      },\n      {\n        texte: `$${texNombre(resultatFaux[1], 20)}$`,\n        statut: false\n      },\n      {\n        texte: `$${texNombre(resultatFaux[2], 20)}$`,\n        statut: false\n      },\n      {\n        texte: `$${texNombre(resultatFaux[3], 20)}$`,\n        statut: false\n      }\n      ]\n      if (this.interactif && this.interactifType === 'mth') {\n        texte += propositionsQcm(this, i).texte\n      } else if (this.interactif && this.interactifType === 'mathLive') {\n        texte = texte.replace('\\\\dotfill', `$${ajouteChampTexteMathLive(this, i, 'length inline width25')}$`)\n        setReponse(this, i, resultat)\n      }\n      if (this.listeQuestions.indexOf(texte) === -1) {\n        // If the question has never been asked, we create another one\n        if (context.vue === 'slide') {\n          texte = texte.replace('= \\\\dotfill', '\\\\text{ en }')\n        }\n        if (context.isHtml) {\n          texte = texte.replace(\n            '\\\\dotfill',\n            '.................................................'\n          )\n        }\n        if (this.sup4 && i === this.nbQuestions - 1) {\n          texte += '<br><br>' + buildTab(0, '', 0, '', Math.min(10, this.nbQuestions), true, true)\n        }\n        this.listeQuestions.push(texte)\n        this.listeCorrections.push(texteCorr)\n        i++\n      }\n      cpt++\n    }\n    listeQuestionsToContenu(this)\n  }\n  this.besoinFormulaireNumerique = [\n    'Difficulty level',\n    5,\n    '1: Cubic meter conversions with multiplications\\n2: Cubic meter conversions with divisions\\n3: Cubic meter conversions with multiplications or divisions\\n4: Conversions with multiplications or divisions\\n5: Mixture'\n  ]\n  this.besoinFormulaire2CaseACocher = ['With decimal numbers']\n  if (context.isHtml && !(context.vue === 'slide')) this.besoinFormulaire3Numerique = ['Interactive exercise', 2, '1: MCQ\\n2: Numerical'] // Texte, tooltip\n  this.besoinFormulaire4CaseACocher = ['With table', false]\n}\n\nfunction buildTab (a, uniteA, r, uniteR, ligne = 2, force = false, correction = false) {\n  const tabRep = function (nbre, uniteNbre) {\n    const res = []\n    let caseARemplir\n    for (let ee = 0; ee < 33; ee++) res.push('')\n    switch (uniteNbre.replaceAll(' ', '')) {\n      case 'km':\n        for (let i = 0; i < 33; i++) {\n          caseARemplir = i % 3 === 1 ? (getDigitFromNumber(nbre, Decimal.pow(10, 8 - i)) !== '' ? '\\\\hspace*{0.1cm}' + getDigitFromNumber(nbre, Decimal.pow(10, 8 - i)) + '\\\\hspace*{0.1cm}' : '\\\\hspace*{0.4cm}') : (getDigitFromNumber(nbre, Decimal.pow(10, 8 - i)) === '' ? '\\\\hspace*{0.2cm}' : getDigitFromNumber(nbre, Decimal.pow(10, 8 - i)))\n          res[i] = (8 - i === 0 ? '\\\\color{red}{' : '') + caseARemplir + (8 - i === 0 ? (new Decimal(nbre).decimalPlaces() === 0 ? '}' : ',}') : '')\n        }\n        break\n      case 'hmm':\n        for (let i = 0; i < 33; i++) {\n          caseARemplir = i % 3 === 1 ? (getDigitFromNumber(nbre, Decimal.pow(10, 11 - i)) !== '' ? '\\\\hspace*{0.1cm}' + getDigitFromNumber(nbre, Decimal.pow(10, 11 - i)) + '\\\\hspace*{0.1cm}' : '\\\\hspace*{0.4cm}') : (getDigitFromNumber(nbre, Decimal.pow(10, 11 - i)) === '' ? '\\\\hspace*{0.2cm}' : getDigitFromNumber(nbre, Decimal.pow(10, 11 - i)))\n          res[i] = (11 - i === 0 ? '\\\\color{red}{' : '') + caseARemplir + (11 - i === 0 ? (new Decimal(nbre).decimalPlaces() === 0 ? '}' : ',}') : '')\n        }\n        break\n      case 'dam':\n        for (let i = 0; i < 33; i++) {\n          caseARemplir = i % 3 === 1 ? (getDigitFromNumber(nbre, Decimal.pow(10, 14 - i)) !== '' ? '\\\\hspace*{0.1cm}' + getDigitFromNumber(nbre, Decimal.pow(10, 14 - i)) + '\\\\hspace*{0.1cm}' : '\\\\hspace*{0.4cm}') : (getDigitFromNumber(nbre, Decimal.pow(10, 14 - i)) === '' ? '\\\\hspace*{0.2cm}' : getDigitFromNumber(nbre, Decimal.pow(10, 14 - i)))\n          res[i] = (14 - i === 0 ? '\\\\color{red}{' : '') + caseARemplir + (14 - i === 0 ? (new Decimal(nbre).decimalPlaces() === 0 ? '}' : ',}') : '')\n        }\n        break\n      case 'm':\n        for (let i = 0; i < 33; i++) {\n          caseARemplir = i % 3 === 1 ? (getDigitFromNumber(nbre, Decimal.pow(10, 17 - i)) !== '' ? '\\\\hspace*{0.1cm}' + getDigitFromNumber(nbre, Decimal.pow(10, 17 - i)) + '\\\\hspace*{0.1cm}' : '\\\\hspace*{0.4cm}') : (getDigitFromNumber(nbre, Decimal.pow(10, 17 - i)) === '' ? '\\\\hspace*{0.2cm}' : getDigitFromNumber(nbre, Decimal.pow(10, 17 - i)))\n          res[i] = (17 - i === 0 ? '\\\\color{red}{' : '') + caseARemplir + (17 - i === 0 ? (new Decimal(nbre).decimalPlaces() === 0 ? '}' : ',}') : '')\n        }\n        break\n      case 'dm':\n        for (let i = 0; i < 33; i++) {\n          caseARemplir = i % 3 === 1 ? (getDigitFromNumber(nbre, Decimal.pow(10, 20 - i)) !== '' ? '\\\\hspace*{0.1cm}' + getDigitFromNumber(nbre, Decimal.pow(10, 20 - i)) + '\\\\hspace*{0.1cm}' : '\\\\hspace*{0.4cm}') : (getDigitFromNumber(nbre, Decimal.pow(10, 20 - i)) === '' ? '\\\\hspace*{0.2cm}' : getDigitFromNumber(nbre, Decimal.pow(10, 20 - i)))\n          res[i] = (20 - i === 0 ? '\\\\color{red}{' : '') + caseARemplir + (20 - i === 0 ? (new Decimal(nbre).decimalPlaces() === 0 ? '}' : ',}') : '')\n        }\n        break\n      case 'cm':\n        for (let i = 0; i < 33; i++) {\n          caseARemplir = i % 3 === 1 ? (getDigitFromNumber(nbre, Decimal.pow(10, 23 - i)) !== '' ? '\\\\hspace*{0.1cm}' + getDigitFromNumber(nbre, Decimal.pow(10, 23 - i)) + '\\\\hspace*{0.1cm}' : '\\\\hspace*{0.4cm}') : (getDigitFromNumber(nbre, Decimal.pow(10, 23 - i)) === '' ? '\\\\hspace*{0.2cm}' : getDigitFromNumber(nbre, Decimal.pow(10, 23 - i)))\n          res[i] = (23 - i === 0 ? '\\\\color{red}{' : '') + caseARemplir + (23 - i === 0 ? (new Decimal(nbre).decimalPlaces() === 0 ? '}' : ',}') : '')\n        }\n        break\n      case 'mm':\n        for (let i = 0; i < 33; i++) {\n          caseARemplir = i % 3 === 1 ? (getDigitFromNumber(nbre, Decimal.pow(10, 26 - i)) !== '' ? '\\\\hspace*{0.1cm}' + getDigitFromNumber(nbre, Decimal.pow(10, 26 - i)) + '\\\\hspace*{0.1cm}' : '\\\\hspace*{0.4cm}') : (getDigitFromNumber(nbre, Decimal.pow(10, 26 - i)) === '' ? '\\\\hspace*{0.2cm}' : getDigitFromNumber(nbre, Decimal.pow(10, 26 - i)))\n          res[i] = (26 - i === 0 ? '\\\\color{red}{' : '') + caseARemplir + (26 - i === 0 ? (new Decimal(nbre).decimalPlaces() === 0 ? '}' : ',}') : '')\n        }\n        break\n    }\n    return res\n  }\n\n  const createTab = function (aT, rT, first, end, ligne, correction = false) {\n    let texte = '$\\\\def\\\\arraystretch{1.5}\\\\begin{array}{|'\n    for (let i = first; i <= end; i++) {\n      texte += 'c|'\n    }\n    texte += '}'\n    const headers2 = ['\\\\hspace*{0.4cm}', '\\\\hspace*{0.4cm}', '\\\\text{km}^3', '\\\\text{hm}^3', '\\\\text{dam}^3', '\\\\text{m}^3', '\\\\text{dm}^3', '\\\\text{cm}^3', '\\\\text{mm}^3', '\\\\hspace*{0.4cm}', '\\\\hspace*{0.4cm}']\n    texte += '\\\\hline'\n    for (let i = first; i < end; i++) {\n      texte += `${headers2[i]} ${i < end - 1 ? ' &' : ' \\\\\\\\'}`\n    }\n    texte += ' \\\\hline'\n\n    for (let i = first; i < end; i++) {\n      texte += '\\\\begin{array}{c:c:c}'\n      texte += `${aT[3 * i]} & ${aT[3 * i + 1]}& ${aT[3 * i + 2]} \\\\\\\\`\n      texte += !correction ? ` ${rT[3 * i]} & ${rT[3 * i + 1]}& ${rT[3 * i + 2]} \\\\\\\\` : ''\n      texte += '\\\\end{array}'\n      texte += (i !== end - 1 ? ' &' : '')\n    }\n    for (let k = 3; k <= ligne; k++) {\n      texte += '\\\\\\\\ \\\\hline'\n      for (let i = first; i < end; i++) {\n        texte += '\\\\begin{array}{c:c:c}'\n        texte += ' & & \\\\\\\\'\n        texte += '\\\\end{array}'\n        texte += (i !== end - 1 ? ' &' : '')\n      }\n    }\n    texte += '\\\\\\\\ \\\\hline'\n\n    texte += ' \\\\end{array}$'\n    return texte\n  }\n  const aTab = tabRep(a, uniteA)\n  const rTab = tabRep(r, uniteR)\n  const minTab1 = aTab[0] !== '' || aTab[1] !== '' || aTab[2] !== '' ? 0 : aTab[3] !== '' || aTab[4] !== '' || aTab[5] !== '' || force ? 3 : 6\n  const minTab2 = rTab[0] !== '' || rTab[1] !== '' || rTab[2] !== '' ? 0 : rTab[3] !== '' || rTab[4] !== '' || rTab[5] !== '' || force ? 3 : 6\n  const maxTab1 = aTab[32] !== '' || aTab[31] !== '' || aTab[30] !== '' ? 33 : aTab[29] !== '' || aTab[28] !== '' || aTab[27] !== '' || force ? 30 : 27\n  const maxTab2 = rTab[32] !== '' || rTab[31] !== '' || rTab[30] !== '' ? 33 : rTab[29] !== '' || rTab[28] !== '' || rTab[27] !== '' || force ? 30 : 27\n  return createTab(aTab, rTab, Math.min(minTab1, minTab2) / 3, Math.max(maxTab1, maxTab2) / 3, ligne, correction)\n}\n"],"names":["titre","amcReady","amcType","interactifReady","interactifType","dateDeModifImportante","uuid","ref","ExerciceConversionsVolumes","Exercice","nombreAleatoire","nbChiffres","a","Decimal","i","randint","prefixeMulti","prefixeDiv","unite","listeUnite","k","div","resultat","resultatFaux","typesDeQuestions","texte","texteCorr","cpt","choice","texNombre","texTexte","buildTab","unite1","ecart","unite2","multiplicationsPar1000","sp","combinaisonListes","propositionsQcm","ajouteChampTexteMathLive","setReponse","context","listeQuestionsToContenu","uniteA","r","uniteR","ligne","force","correction","tabRep","nbre","uniteNbre","res","caseARemplir","ee","getDigitFromNumber","createTab","aT","rT","first","end","headers2","aTab","rTab","minTab1","minTab2","maxTab1","maxTab2"],"mappings":"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"}