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/6P15-CCoep5XI.js.map
{"version":3,"file":"6P15-CCoep5XI.js","sources":["../../src/exercices/6e/6P15.js"],"sourcesContent":["import Decimal from 'decimal.js'\nimport { Tableau } from '../../lib/2d/tableau.js'\nimport { choice, combinaisonListes } from '../../lib/outils/arrayOutils'\nimport { nombreDeChiffresDansLaPartieEntiere } from '../../lib/outils/nombres.js'\nimport { numAlpha } from '../../lib/outils/outilString.js'\nimport { stringNombre, texNombre } from '../../lib/outils/texNombre.js'\nimport { fixeBordures, mathalea2d } from '../../modules/2dGeneralites.js'\nimport { context } from '../../modules/context.js'\nimport FractionEtendue from '../../modules/FractionEtendue.js'\nimport { ajouteChampTexteMathLive } from '../../lib/interactif/questionMathLive.js'\nimport { listeQuestionsToContenu, randint } from '../../modules/outils.js'\nimport Exercice from '../Exercice.js'\nimport { setReponse } from '../../lib/interactif/gestionInteractif.js'\n\nexport const titre = 'Calculate the proportionality coefficient'\nexport const interactifReady = true\nexport const interactifType = 'mathLive'\nexport const amcReady = true\nexport const amcType = 'AMCHybride'\nexport const dateDePublication = '18/03/2023'\n\nexport const uuid = '2d5eb'\nexport const ref = '6P15'\n/**\n * @author jean-claude Lhote\n * @constructor\n */\nexport default function CalculerCoeffPropo () {\n  Exercice.call(this)\n  this.sup = 1\n  this.spacing = 2\n  this.spacingCorr = 3\n  this.nbQuestions = 5\n  this.besoinFormulaireNumerique = ['Coefficient type', 4, '1: Integer\\n2: Decimal\\n3: Fraction\\n4: Mixture']\n  this.nouvelleVersion = function () {\n    const isBetterWithLinearity = function (nombres) {\n      const [a, b, c] = nombres\n      if (a % b === 0 || a % c === 0 || b % c === 0 || b % a === 0 || c % a === 0 || c % b === 0) return true\n      if (a + b === c || a + c === b || b + c === a) return true\n      if (a - b === c || a - c === b || b - c === a || b - a === c || c - a === c || c - b === a) return true\n      if (2 * a - 3 * b === 0 || 2 * a - 3 * c === 0 || 2 * b - 3 * c === 0 || 3 * a - 2 * b === 0 || 3 * a - 2 * c === 0 || 3 * b - 2 * c === 0) return true\n      return false\n    }\n    this.listeQuestions = []\n    this.listeCorrections = []\n    this.autoCorrection = []\n    const typeDeCoefficient = ['Entire', 'Decimal', 'Fraction']\n    let listeTypesDeCoefficient = []\n    const tableauxEntiers = [[2, 3, 4, 5, 6, 7, 8, 9], [10, 12, 15, 16], [20, 24, 25, 30, 35, 40], [50, 60, 70, 80, 90]]\n    const tableauxCoefficientsEntiers = [[2, 4, 6, 8, 10], [3, 5, 7, 9, 80, 90], [11, 5, 19, 15, 25, 50, 75], [12, 15, 20, 25, 30, 40]]\n    const tableauxCoefficientsFractions = [[[2, 5], [3, 4], [2, 3], [2, 7]], [[3, 7], [4, 7], [4, 9], [5, 9]], [[7, 3], [8, 3], [3, 2], [7, 2]], [[9, 4], [7, 8], [8, 7], [9, 5]]]\n    // @todo provide a table of choice of fractions rather than randomizing their construction\n\n    if (this.sup === 4) listeTypesDeCoefficient = combinaisonListes(typeDeCoefficient, this.nbQuestions)\n    else listeTypesDeCoefficient = combinaisonListes([typeDeCoefficient[this.sup - 1]], this.nbQuestions)\n    for (let i = 0, texte, texteCorr; i < this.nbQuestions; i++) {\n      if (context.isAmc) this.autoCorrection[i] = {}\n      // I'm in js, I do practical JsDoc inline typing to recover autocompletion\n      /** @type number | Decimal | FractionEtendue */\n      let coefficient\n      /** @type Array<{ nombre: number, visible: boolean }> */\n      const premiereLigne = []\n      /** @type Array<{ nombre: number, visible: boolean }> */\n      const deuxiemeLigne = []\n      const colonneReference = randint(0, 2) // La colonne qui contiendra deux valeurs visibles pour faire le calcul\n      do {\n        switch (listeTypesDeCoefficient[i]) {\n          case 'Entire': // On choisit un coefficient dans les listes => tout est entier\n            coefficient = choice(tableauxCoefficientsEntiers[i % 4])\n            for (let colonne = 0; colonne < 3; colonne++) {\n              const contenuVisible = choice([true, false])\n              premiereLigne[colonne] = {\n                nombre: choice(choice(tableauxEntiers), premiereLigne.map(elt => elt.nombre)),\n                visible: colonne === colonneReference ? true : contenuVisible\n              }\n              deuxiemeLigne[colonne] = {\n                nombre: premiereLigne[colonne].nombre * coefficient,\n                visible: colonne === colonneReference ? true : !contenuVisible\n              }\n            }\n            break\n          case 'Decimal': // On construit un coefficient... on pourrait le choisir dans une liste\n            coefficient = new Decimal(randint(1, 9) + randint(0, 2) * 10).div(10)\n            for (let colonne = 0; colonne < 3; colonne++) {\n              const contenuVisible = choice([true, false])\n              premiereLigne[colonne] = {\n                nombre: choice(choice(tableauxEntiers), premiereLigne.map(elt => elt.nombre)),\n                visible: colonne === colonneReference ? true : contenuVisible\n              }\n              deuxiemeLigne[colonne] = {\n                nombre: coefficient.mul(premiereLigne[colonne].nombre),\n                visible: colonne === colonneReference ? true : !contenuVisible\n              }\n            }\n            break\n          case 'Fraction': { // construction de la fraction => prévoir une liste simplifiera le code\n            let allNumberAreGood\n            do {\n              allNumberAreGood = true\n              const [numerateur, denominateur] = choice(choice(tableauxCoefficientsFractions))\n              coefficient = new FractionEtendue(numerateur, denominateur)\n              for (let colonne = 0; colonne < 3; colonne++) {\n                const contenuVisible = choice([true, false])\n                let unNombre\n                let antiBoucleInfinie = 0\n                do { // On choisit un nombre à multiplier par une fraction => on veut un résultat entier obligatoirement !\n                  unNombre = choice(choice(tableauxEntiers), premiereLigne.map(elt => elt.nombre))\n                  antiBoucleInfinie++\n                } while (!coefficient.multiplieEntier(unNombre).estEntiere && antiBoucleInfinie < 20)\n                if (antiBoucleInfinie === 20) allNumberAreGood = false\n                premiereLigne[colonne] = {\n                  nombre: unNombre,\n                  visible: colonne === colonneReference ? true : contenuVisible\n                }\n                deuxiemeLigne[colonne] = {\n                  nombre: premiereLigne[colonne].nombre * coefficient,\n                  visible: colonne === colonneReference ? true : !contenuVisible\n                }\n              }\n            } while (!allNumberAreGood)\n            break\n          }\n        }\n      } while (isBetterWithLinearity(premiereLigne.map(elt => elt.nombre)))\n      const coefficientRationnel = coefficient instanceof FractionEtendue\n      const coefficientDecimal = coefficient instanceof Decimal\n      const coefficientTex = coefficientRationnel ? coefficient.texFraction : stringNombre(coefficient)\n      // filling the stated table and correction.\n      const ligne1 = [{ texte: 'Size A' }].concat(premiereLigne.map(elt => {\n        return elt.visible ? { texte: stringNombre(elt.nombre), math: true } : { texte: '...' }\n      }))\n      const ligne2 = [{ texte: 'Size B' }].concat(deuxiemeLigne.map(elt => {\n        return elt.visible ? { texte: stringNombre(elt.nombre), math: true } : { texte: '...' }\n      }))\n      const monTableau = listeTypesDeCoefficient[i] === 'Fraction'\n        ? new Tableau({\n          largeurTitre: 6,\n          largeur: 3,\n          hauteur: 2,\n          nbColonnes: 4,\n          ligne1,\n          ligne2,\n          flecheDroite: { texte: '\\\\times \\\\ldots', latex: true },\n          flecheDroiteSens: 'down',\n          flecheGauche: { texte: '\\\\times \\\\ldots', latex: true },\n          flecheGaucheSens: 'high'\n        })\n        : new Tableau({\n          largeurTitre: 6,\n          largeur: 3,\n          hauteur: 2,\n          nbColonnes: 4,\n          ligne1,\n          ligne2,\n          flecheDroite: { texte: '×...' },\n          flecheDroiteSens: 'down'\n        })\n      const ligne1Corr = [{ texte: 'Size A' }].concat(premiereLigne.map(elt => {\n        return { texte: stringNombre(elt.nombre), math: true }\n      }))\n      const ligne2Corr = [{ texte: 'Size B' }].concat(deuxiemeLigne.map(elt => {\n        return { texte: stringNombre(elt.nombre), math: true }\n      }))\n      const monTableauCorr = listeTypesDeCoefficient[i] === 'Fraction'\n        ? new Tableau({\n          largeurTitre: 7,\n          largeur: 3,\n          hauteur: 2,\n          nbColonnes: 4,\n          ligne1: ligne1Corr,\n          ligne2: ligne2Corr,\n          flecheDroite: { texte: `\\\\times ${coefficientTex}`, latex: true },\n          flecheDroiteSens: 'down',\n          flecheGauche: { texte: `\\\\times ${coefficient.inverse().texFraction}`, latex: true },\n          flecheGaucheSens: 'high'\n        })\n        : new Tableau({\n          largeurTitre: 7,\n          largeur: 3,\n          hauteur: 2,\n          nbColonnes: 4,\n          ligne1: ligne1Corr,\n          ligne2: ligne2Corr,\n          flecheDroite: { texte: `× ${coefficientTex}`, math: true },\n          flecheDroiteSens: 'down'\n        })\n      texte = 'The table below represents a situation of proportionality.<br>'\n      texte += numAlpha(0) + 'Calculate the proportionality coefficient.<br>'\n      texte += numAlpha(1) + 'Complete the proportionality table.<br>'\n      // drawing the table according to the context\n      // define an object for expected responses\n      const reponsesAttendue = { reponse1: {}, reponse2: {} }\n      for (let colonne = 1, rep = 1; colonne < 4; colonne++) {\n        if (colonne !== colonneReference + 1) {\n          reponsesAttendue[`response${rep.toString()}`] = {\n            lettre: premiereLigne[colonne - 1].visible ? 'B' : 'A',\n            colonne,\n            reponse: premiereLigne[colonne - 1].visible\n              ? {\n                  valeur: deuxiemeLigne[colonne - 1].nombre,\n                  digits: 4\n                }\n              : { valeur: premiereLigne[colonne - 1].nombre, digits: 2 }\n          }\n          rep++\n        }\n      }\n      if (context.isHtml) { // Pour HTML on utilise mathalea2d\n        texte += mathalea2d(Object.assign({}, fixeBordures([monTableau])), monTableau)\n        if (this.interactif) {\n          texte += 'Proportionality coefficient from A to B:' + ajouteChampTexteMathLive(this, 3 * i, 'width15 inline')\n          setReponse(this, 3 * i, coefficient, { formatInteractif: coefficientRationnel ? 'fractionEqual' : 'calculation' })\n          texte += `<br>Value of the ${reponsesAttendue.reponse1.lettre} quantity for the ${reponsesAttendue.reponse1.colonne} column:`\n          texte += ajouteChampTexteMathLive(this, 3 * i + 1, 'width15 inline')\n          setReponse(this, 3 * i + 1, reponsesAttendue.reponse1.reponse.valeur, { formatInteractif: 'calculation' })\n          texte += `<br>Value of the ${reponsesAttendue.reponse2.lettre} quantity for the ${reponsesAttendue.reponse2.colonne} column:`\n          texte += ajouteChampTexteMathLive(this, 3 * i + 2, 'width15 inline')\n          setReponse(this, 3 * i + 2, reponsesAttendue.reponse2.reponse.valeur, { formatInteractif: 'calculation' })\n        }\n      } else { // pour LAtex, c'est profCollege dans le texte\n        texte += '\\n\\\\Propor[Math,Stretch=2,width=15]{'\n        for (let colonne = 0; colonne < 3; colonne++) {\n          texte += `${ligne1[colonne + 1].texte.replace('...', '\\\\ldots')}/`\n          texte += `${ligne2[colonne + 1].texte.replace('...', '\\\\ldots')}`\n          if (colonne < 2) texte += ','\n          else texte += '}\\not'\n        }\n        texte += '\\n\\\\FlechesPD{1}{2}{$\\\\times$\\\\ldots}\\n'\n        if (context.isAmc) {\n          this.autoCorrection[i] = {\n            enonce: texte,\n            options: { multicols: true, barreseparation: true }, // facultatif. Par défaut, multicols est à false. Ce paramètre provoque un multicolonnage (sur 2 colonnes par défaut) : pratique quand on met plusieurs AMCNum. !!! Attention, cela ne fonctionne pas, nativement, pour AMCOpen. !!!\n            propositions: [\n              {\n                type: 'AMCNum',\n                propositions: [{\n                  texte: '',\n                  statut: '',\n                  reponse: { // coefficient\n                    texte: 'coefficient value',\n                    valeur: [coefficient],\n                    param: coefficientDecimal\n                      ? {\n                          digits: 3,\n                          decimal: 2,\n                          signe: false,\n                          approx: 0\n                        }\n                      : coefficientRationnel\n                        ? {\n                            digitsNum: nombreDeChiffresDansLaPartieEntiere(deuxiemeLigne[colonneReference].nombre),\n                            digitsDen: nombreDeChiffresDansLaPartieEntiere(premiereLigne[colonneReference].nombre),\n                            digits: nombreDeChiffresDansLaPartieEntiere(deuxiemeLigne[colonneReference].nombre) + nombreDeChiffresDansLaPartieEntiere(premiereLigne[colonneReference].nombre),\n                            approx: 0//,\n                            // alsoCorrect: newRangeFraction(secondLine[Referencecolumn].number, firstLine[Referencecolumn].number)\n                          }\n                        : {\n                            digits: 2,\n                            decimals: 0,\n                            signe: false,\n                            approx: 0\n                          }\n                  }\n                }]\n              },\n              {\n                type: 'AMCNum',\n                propositions: [{\n                  texte: '',\n                  statut: '',\n                  reponse: {\n                    texte: `Response from the ${reponsesAttendue.reponse1.lettre} column ${reponsesAttendue.reponse1.colonne} line:`,\n                    valeur: [reponsesAttendue.reponse1.reponse.valeur],\n                    param: {\n                      digits: reponsesAttendue.reponse1.reponse.digits,\n                      decimals: 0,\n                      signe: false,\n                      approx: 0\n                    }\n                  }\n                }]\n              },\n              {\n                type: 'AMCNum',\n                propositions: [{\n                  texte: '',\n                  statut: '',\n                  reponse: {\n                    texte: `Response from the ${reponsesAttendue.reponse2.lettre} column ${reponsesAttendue.reponse2.colonne} line:`,\n                    valeur: [reponsesAttendue.reponse2.reponse.valeur],\n                    param: {\n                      digits: reponsesAttendue.reponse2.reponse.digits,\n                      decimals: 0,\n                      signe: false,\n                      approx: 0\n                    }\n                  }\n                }]\n              }\n            ]\n          }\n        }\n      }\n      texteCorr = numAlpha(0) +\n                `The proportionality coefficient is given by the quotient of $${texNombre(deuxiemeLigne[colonneReference].nombre)}$\n by $${texNombre(premiereLigne[colonneReference].nombre)}$.<br>Either $\\\\dfrac{${texNombre(deuxiemeLigne[colonneReference].nombre)}}{${texNombre(premiereLigne[colonneReference].nombre)}}`\n      if (coefficientRationnel) {\n        const quotient = new FractionEtendue(deuxiemeLigne[colonneReference].nombre, premiereLigne[colonneReference].nombre)\n        if (!quotient.estIrreductible) {\n          texteCorr += `= ${coefficient.texFraction}$.<br>`\n        } else {\n          texteCorr += '$.<br>'\n        }\n      } else {\n        texteCorr += `= ${texNombre(coefficient)}$.<br>`\n      }\n      for (let colonne = 1; colonne < 4; colonne++) { // La première colonne ici c'est la colonne des entêtes\n        if (premiereLigne[colonne - 1].visible && colonne !== colonneReference + 1) { // on a la première valeur, on calcule donc la deuxième\n          texteCorr += `For the ${colonne} column, we calculate: $${ligne1Corr[colonne].texte}\\\\times ${coefficientTex}=`\n          if (coefficientRationnel) {\n            texteCorr += `\\\\dfrac{${ligne1Corr[colonne].texte}\\\\times ${coefficient.num}}{${coefficient.den}}=`\n          }\n          texteCorr += `${ligne2Corr[colonne].texte}$.`\n        } else {\n          if (colonne !== colonneReference + 1) {\n            texteCorr += `For the ${colonne} column, we calculate: $${ligne2Corr[colonne].texte}${coefficientRationnel ? '\\\\times' + coefficient.inverse().texFraction : '\\\\div' + coefficientTex}=`\n            if (coefficientRationnel) {\n              texteCorr += `\\\\dfrac{${ligne2Corr[colonne].texte}\\\\times ${coefficient.den}}{${coefficient.num}}=`\n            }\n            texteCorr += `${ligne1Corr[colonne].texte}$.`\n          }\n        }\n        if (colonne < 4 && colonne !== colonneReference + 1) texteCorr += '<br>'\n      }\n      // drawing the table according to the context\n      if (context.isHtml) { // Pour HTML on utilise mathalea2d\n        texteCorr += mathalea2d(Object.assign({}, fixeBordures([monTableauCorr])), monTableauCorr)\n      } else { // pour LAtex, c'est profCollege dans le texte\n        texteCorr += '\\\\Propor[Math,\\nStretch=2,\\nwidth=1.5]{'\n        for (let colonne = 0; colonne < 3; colonne++) {\n          texteCorr += `$${ligne1Corr[colonne + 1].texte}$/`\n          texteCorr += `$${ligne2Corr[colonne + 1].texte}$`\n          if (colonne < 2) texteCorr += ','\n          else texteCorr += '}\\not'\n        }\n        if (coefficientRationnel) {\n          texteCorr += `\\\\FlechesPG{2}{1}{$\\\\times ${coefficient.inverse().texFraction}$}\\n`\n        }\n        texteCorr += `\\\\FlechesPD{1}{2}{$\\\\times ${coefficientTex}$}`\n        if (context.isAmc) {\n          this.autoCorrection[i].propositions[0].propositions[0].texte = texteCorr\n        }\n      }\n      if (this.questionJamaisPosee(i, ...premiereLigne.map(elt => elt.nombre), ...deuxiemeLigne.map(elt => elt.nombre))) {\n        this.listeQuestions.push(texte)\n        this.listeCorrections.push(texteCorr)\n      }\n    }\n    listeQuestionsToContenu(this)\n  }\n}\n"],"names":["titre","interactifReady","interactifType","amcReady","amcType","dateDePublication","uuid","ref","CalculerCoeffPropo","Exercice","isBetterWithLinearity","nombres","a","b","c","typeDeCoefficient","listeTypesDeCoefficient","tableauxEntiers","tableauxCoefficientsEntiers","tableauxCoefficientsFractions","combinaisonListes","i","texte","texteCorr","context","coefficient","premiereLigne","deuxiemeLigne","colonneReference","randint","choice","colonne","contenuVisible","elt","Decimal","allNumberAreGood","numerateur","denominateur","FractionEtendue","unNombre","antiBoucleInfinie","coefficientRationnel","coefficientDecimal","coefficientTex","stringNombre","ligne1","ligne2","monTableau","Tableau","ligne1Corr","ligne2Corr","monTableauCorr","numAlpha","reponsesAttendue","rep","mathalea2d","fixeBordures","ajouteChampTexteMathLive","setReponse","nombreDeChiffresDansLaPartieEntiere","texNombre","listeQuestionsToContenu"],"mappings":"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"}