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/_Roses-ye2MyhHM.js.map
{"version":3,"file":"_Roses-ye2MyhHM.js","sources":["../../src/exercices/6e/_Roses.js"],"sourcesContent":["/* eslint-disable camelcase */\nimport { point } from '../../lib/2d/points.js'\nimport { polygoneRegulierParCentreEtRayon } from '../../lib/2d/polygones.js'\nimport { longueur, segment } from '../../lib/2d/segmentsVecteurs.js'\nimport { latexParCoordonnees, latexParCoordonneesBox, texteParPoint } from '../../lib/2d/textes.js'\nimport { homothetie, rotation, similitude } from '../../lib/2d/transformations.js'\nimport { choice } from '../../lib/outils/arrayOutils'\nimport { lettreMinusculeDepuisChiffre, sp } from '../../lib/outils/outilString.js'\nimport { contraindreValeur, listeQuestionsToContenu, randint } from '../../modules/outils.js'\nimport { calculer } from '../../modules/outilsMathjs.js'\nimport Exercice from '../Exercice.js'\nimport { mathalea2d, colorToLatexOrHTML, vide2d, fixeBordures } from '../../modules/2dGeneralites.js'\nimport { ajouteChampTexteMathLive } from '../../lib/interactif/questionMathLive.js'\nimport { context } from '../../modules/context.js'\nimport * as pkg from '@cortex-js/compute-engine'\nimport FractionEtendue from '../../modules/FractionEtendue.js'\nconst { ComputeEngine } = pkg\nexport const interactifReady = true\nexport const interactifType = 'custom'\nexport const amcReady = true\nexport const amcType = 'AMCOpen'\nlet engine\nif (context.versionMathalea) engine = new ComputeEngine()\n\n/**\n * Travailler les tables de multiplication ou d'addition autrement\n * @author Jean-Claude Lhote\n */\nexport class Rose {\n  constructor ({ values = [], nombreDeValeurs, rayon = 2, operation = 'addition', type = 'résultats', typeDonnees = 'entiers', cellulesPreremplies = Array.from('abcdefghi'), valeurMax = 10, indexInconnue = 999 }) {\n    this.type = type\n    this.operation = operation\n    this.typeDonnees = typeDonnees\n    this.nombreDeValeurs = nombreDeValeurs\n    this.cellulesPreremplies = cellulesPreremplies\n    this.rayon = rayon\n    this.resultats = []\n    this.valeurMax = valeurMax\n    this.indexInconnue = indexInconnue\n\n    if (values === undefined || values.length === 0) {\n      while (this.valeurMax - 2 < this.nombreDeValeurs) {\n        this.valeurMax++\n      }\n      const den = randint(2, this.valeurMax)\n      for (let i = 0; i < this.nombreDeValeurs; i++) {\n        switch (this.typeDonnees) {\n          case 'entiers' :\n            values.push(randint(2, this.valeurMax, values))\n            this.rayon = 2\n            break\n          case 'entiers relatifs' :\n            values.push(randint(-this.valeurMax, this.valeurMax, [0, 1, ...values]))\n            this.rayon = 2\n            break\n          case 'litteraux' : {\n            const value = calculer(`${randint(1, this.valeurMax)}x + ${randint(1, this.valeurMax)}`, null).printResult\n            values.push(value)\n            this.rayon = 3\n          }\n            break\n          case 'fractions dénominateurs multiples':\n            values.push(new FractionEtendue(randint(1, this.valeurMax), den).simplifie())\n            this.rayon = 2.5\n            break\n          case 'fractions positives dénominateurs premiers':\n            values.push(new FractionEtendue(randint(1, this.valeurMax), choice([2, 3, 5, 7])).simplifie())\n            this.rayon = 2.5\n            break\n\n          case 'fractions positives' :\n            values.push(new FractionEtendue(randint(1, this.valeurMax), randint(2, this.valeurMax)).simplifie())\n            this.rayon = 2.5\n            break\n          case 'fractions relatives' :\n            values.push(new FractionEtendue(randint(-this.valeurMax, this.valeurMax, 0), randint(2, this.valeurMax)).simplifie())\n            this.rayon = 2.5\n            break\n        }\n      }\n    } else { // si elles sont définies, on complète éventuellement la grille aléatoirement.\n      for (let i = this.values.length; i < this.nombreDeValeurs; i++) {\n        switch (this.typeDonnees) {\n          case 'entiers' :\n            values.push(randint(2, this.valeurMax, values))\n            break\n          case 'entiers relatifs' :\n            values.push(randint(-this.valeurMax, this.valeurMax, [0, 1, ...values]))\n            break\n          case 'litteraux' : {\n            const value = calculer(`${randint(1, this.valeurMax)}x + ${randint(1, this.valeurMax)}`, null).printResult\n            values.push(value)\n          }\n            break\n          case 'fractions dénominateurs multiples':\n            values.push(new FractionEtendue(randint(1, this.valeurMax), values[i - 1].d).simplifie())\n            break\n          case 'fractions positives dénominateurs premiers':\n            values.push(new FractionEtendue(randint(1, this.valeurMax), choice([2, 3, 5, 7])).simplifie())\n            break\n          case 'fractions positives' :\n            values.push(new FractionEtendue(randint(1, this.valeurMax), randint(2, this.valeurMax)).simplifie())\n            break\n          case 'fractions relatives' :\n            values.push(new FractionEtendue(randint(-this.valeurMax, this.valeurMax, 0), randint(2, this.valeurMax)).simplifie())\n            break\n        }\n      }\n    }\n    this.values = values\n    this.calculeResultats()\n  }\n\n  // méthode qui calcule les résultats si on le veut (sinon on peut les renseigner dans this.resultats manuellement)\n  calculeResultats () {\n    for (let i = 0; i < this.nombreDeValeurs; i++) {\n      this.resultats[i] = this.operate(this.values[i], this.values[(i + 1) % this.nombreDeValeurs])\n    }\n  }\n\n  // fonction utilisée par calculeResultats\n  operate (a, b) {\n    switch (this.operation) {\n      case 'addition':\n        if (this.typeDonnees !== 'litteraux') {\n          if (this.typeDonnees.substring(0, 4) === 'frac') {\n            return a.sommeFraction(b) // math.fraction(math.add(a, b))\n          } else {\n            return a + b // math.add(a, b)\n          }\n        } else {\n          return calculer(`${a.toString()}+${b.toString()}`, null).printResult\n        }\n      case 'multiplication':\n        if (this.typeDonnees !== 'litteraux') {\n          if (this.typeDonnees.substring(0, 4) === 'frac') {\n            return a.produitFraction(b)\n          } else {\n            return a * b\n          }\n        } else {\n          return calculer(`(${String(a)}) * (${String(b)})`, null).printResult\n        }\n    }\n  }\n\n  representation () {\n    if (this.type === 'résultats') {\n      this.rayonBoite = 1\n    } else {\n      if (this.typeDonnees.substring(0, 4) === 'frac') this.rayonBoite = 1.5\n      else if (this.typeDonnees === 'litteraux') {\n        if (this.operation === 'multiplication') this.rayonBoite = 3.2\n        else this.rayonBoite = 2.5\n      } else this.rayonBoite = 1\n    }\n    const objets = []\n    const O = point(0, 0, '', '')\n    const A = rotation(point(this.rayon, 0, '', ''), O, 180 / this.nombreDeValeurs - 90, 'A')\n    for (let i = 0, bulle1, bulle2; i < this.nombreDeValeurs; i++) {\n      const M = rotation(A, O, 360 * i / this.nombreDeValeurs, 'M')\n      M.positionLabel = 'center'\n      const B = similitude(M, O, 180 / this.nombreDeValeurs, 1.2, 'B')\n      const D = similitude(M, O, -180 / this.nombreDeValeurs, 1.2, 'D')\n      const C = homothetie(M, O, 1.5, 'C')\n      const N = rotation(C, O, 360 / this.nombreDeValeurs, 'N')\n      const P = similitude(M, O, 180 / this.nombreDeValeurs, 2.5, 'P')\n      const s = segment(O, B, 'black')\n      const t = segment(B, C, 'black')\n      const u = segment(C, D, 'black')\n      const M2 = homothetie(C, O, 0.6)// pointIntersectionDD(droite(B, D), droite(O, C), 'M2')\n      const s1 = homothetie(segment(C, P), C, (longueur(C, P) - this.rayonBoite) / longueur(C, P))\n      s1.styleExtremites = '->'\n      s1.tailleExtremites = 5\n      s1.pointilles = 2\n      const s2 = homothetie(segment(N, P), N, (longueur(N, P) - this.rayonBoite) / longueur(N, P))\n      s2.styleExtremites = '->'\n      s2.tailleExtremites = 5\n      s2.pointilles = 2\n      if (this.type === 'can1') {\n        bulle1 = vide2d() // rotation(boite({??????}), M, 180 / this.nombreDeValeurs - 90)\n      } else {\n        bulle1 = vide2d()\n      }\n      objets.push(bulle1)\n      objets.push(s, t, u, s1, s2)\n      bulle2 = rotation(polygoneRegulierParCentreEtRayon(P, this.rayonBoite, this.nombreDeValeurs), P, 360 / this.nombreDeValeurs - 90)\n      if (this.type === 'résultats' || this.type === 'solutions' || this.type === 'can1' || this.type === 'can2') {\n        if (!(this.type === 'can1' && (this.indexInconnue === i || i === (this.indexInconnue - 1) % this.nombreDeValeurs || i === (this.indexInconnue + 1) % this.nombreDeValeurs))) {\n          if (!(this.type === 'can2' && (this.indexInconnue === i || i === (this.indexInconnue + 1) % this.nombreDeValeurs))) {\n            if (this.typeDonnees !== 'litteraux' && this.typeDonnees.substring(0, 4) !== 'frac') {\n              objets.push(texteParPoint(this.values[i].toString(), M, 'milieu', 'black', 1, 'middle', true))\n            } else {\n              if (this.typeDonnees !== 'litteraux') {\n                if (this.values[i] instanceof FractionEtendue) {\n                  objets.push(latexParCoordonnees(this.values[i].toLatex(), M.x, M.y, 'black', 0, 0, 'none', 8))\n                } else {\n                  objets.push(texteParPoint(String(this.values[i]), M, 'milieu', 'black', 1, 'middle', true))\n                }\n              } else {\n                objets.push(latexParCoordonneesBox(this.values[i], M2.x, M2.y, 'black', 50, 12, 'none', 8, { anchor: 'center' }))\n              }\n            }\n          }\n        }\n        if (this.type === 'can1' && this.indexInconnue === i) {\n          objets.push(texteParPoint(lettreMinusculeDepuisChiffre(i + 1), M))\n        }\n      }\n      if (this.type === 'solutions' || this.type === 'valeurs' || this.type === 'can1' || this.type === 'can2') { // on ajoute les produits\n        if (!(this.type === 'can2' && this.indexInconnue === i)) {\n          if (this.typeDonnees !== 'litteraux' && this.typeDonnees.substring(0, 4) !== 'frac') {\n            objets.push(texteParPoint((this.resultats[i]).toString(), P, 'milieu', 'black', 1, 'middle', true))\n          } else {\n            objets.push(latexParCoordonnees(String(this.resultats[i]), P.x, P.y, 'black', 0, 0, 'none', 8))\n          }\n        }\n        if (this.type === 'can2' && this.indexInconnue === i) {\n          objets.push(texteParPoint(lettreMinusculeDepuisChiffre(i + 1), P))\n        } else {\n          bulle2.color = colorToLatexOrHTML('black')\n          if (this.type === 'valeurs') {\n            objets.push(texteParPoint(lettreMinusculeDepuisChiffre(i + 1), M))\n          }\n        }\n      } else {\n        objets.push(texteParPoint(this.cellulesPreremplies[i], P, 'milieu', 'black', 1, 'middle', true))\n      }\n\n      objets.push(bulle2)\n    }\n    return objets\n  }\n}\nexport function ExoRose () {\n  Exercice.call(this)\n  this.spacing = 2\n  this.tailleDiaporama = 1\n  this.nbQuestions = 1\n  this.sup = 10\n  this.sup2 = 4\n  this.sup3 = 1\n  this.operation = 'multiplication'\n  this.type = 'résultats'\n  this.typeDonnees = 'entiers'\n  this.nombreDeValeurs = 4\n  this.valeurMax = 10\n  this.roses = []\n\n  this.indexInconnue = []\n  this.nouvelleVersion = function () {\n    this.listeQuestions = [] // Liste de questions\n    this.listeCorrections = [] // Liste de questions corrigées\n    this.valeurMax = contraindreValeur(10, 30, this.sup, 10)\n    this.nombreDeValeurs = contraindreValeur(3, 9, this.sup2, 5)\n    switch (this.sup3) {\n      case 1:\n        this.type = 'résultats'\n        if (this.typeDonnees.substring(0, 4) === 'frac' || this.typeDonnees === 'litteraux') {\n          if (this.nombreDeValeurs > 5) this.nombreDeValeurs = 5\n        }\n        break\n      case 2:\n        this.type = 'valeurs'\n        break\n      case 3:\n        if (this.typeDonnees.substring(0, 4) === 'frac' || this.typeDonnees === 'litteraux') {\n          if (this.nombreDeValeurs > 5) this.nombreDeValeurs = 5\n        }\n        this.type = 'can1'\n        break\n      case 4:\n        this.type = 'can2'\n        if (this.typeDonnees.substring(0, 4) === 'frac' || this.typeDonnees === 'litteraux') {\n          if (this.nombreDeValeurs > 5) this.nombreDeValeurs = 5\n        }\n        break\n    }\n\n    for (\n      let i = 0, objets, objetsCorr, texte, texteCorr, cpt = 0;\n      i < this.nbQuestions && cpt < 50;\n\n    ) {\n      this.indexInconnue[i] = randint(0, this.nombreDeValeurs - 1)\n      if (this.operation === 'multiplication') {\n        this.introduction = 'The numbers at the ends of the arrows are the products of the numbers from which the arrows come.'\n      } else {\n        this.introduction = 'The numbers at the ends of the arrows are the sums of the numbers from which the arrows come.'\n      }\n      switch (this.type) {\n        case 'résultats':\n          if (this.operation === 'multiplication') {\n            texte = 'Calculate the products at the ends of the arrows.<br>'\n          } else {\n            texte = 'Calculate the sums at the ends of the arrows.<br>'\n          }\n          break\n        case 'valeurs':\n          if (this.operation === 'multiplication') {\n            texte = 'Find the factors behind the arrows.<br>'\n          } else {\n            texte = 'Find the terms behind the arrows.<br>'\n          }\n          break\n        case 'can1':\n          if (this.typeDonnees.includes('entiers')) {\n            texte = `Find the number in the ${lettreMinusculeDepuisChiffre(this.indexInconnue[i] + 1)} box.<br>`\n          } else {\n            texte = `Find the expression in the ${lettreMinusculeDepuisChiffre(this.indexInconnue[i] + 1)} box.<br>`\n          }\n          break\n        case 'can2':\n          if (this.typeDonnees.includes('entiers')) {\n            texte = `Find the number in the ${lettreMinusculeDepuisChiffre(this.indexInconnue[i] + 1)} box.<br>`\n          } else {\n            texte = `Find the expression in the ${lettreMinusculeDepuisChiffre(this.indexInconnue[i] + 1)} box.<br>`\n          }\n          break\n      }\n\n      this.roses[i] = new Rose({\n        nombreDeValeurs: this.nombreDeValeurs,\n        type: this.type,\n        operation: this.operation,\n        valeurMax: this.valeurMax,\n        typeDonnees: this.typeDonnees,\n        indexInconnue: this.indexInconnue[i]\n      })\n      objets = this.roses[i].representation()\n      this.roses[i].type = 'solutions'\n      objetsCorr = this.roses[i].representation()\n      texte += mathalea2d(Object.assign({ scale: 0.6 }, fixeBordures(objets)), objets)\n      if (this.interactif) {\n        if (this.type.substring(0, 3) === 'can') {\n          texte += ajouteChampTexteMathLive(this, i, 'nospacebefor', { texteAvant: `${lettreMinusculeDepuisChiffre(this.indexInconnue[i] + 1)}=`, tailleExtensible: true })\n        } else {\n          for (let k = 0; k < this.nombreDeValeurs; k++) {\n            texte += ajouteChampTexteMathLive(this, i * this.nombreDeValeurs + k, 'nospacebefor', { texteAvant: `${lettreMinusculeDepuisChiffre(k + 1)}=`, tailleExtensible: true })\n            texte += sp(6)\n          }\n        }\n      }\n      texteCorr = mathalea2d(Object.assign({ scale: 0.6 }, fixeBordures(objetsCorr)), objetsCorr)\n      if (this.questionJamaisPosee(i, ...this.roses[i].values)) {\n        // Si la question n'a jamais été posée, on en crée une autre\n        this.listeQuestions.push(texte)\n        this.listeCorrections.push(texteCorr)\n        if (context.isAmc) {\n          this.autoCorrection[i] = {\n            enonce: this.introduction + '<br>' + texte,\n            propositions: [\n              {\n                texte: '',\n                statut: (this.type === 'can1' || this.type === 'can2') ? 1 : Math.ceil(this.sup2 / 4), // OBLIGATOIRE (ici c'est le nombre de lignes du cadre pour la réponse de l'élève sur AMC)\n                sanscadre: false, // EE : ce champ est facultatif et permet (si true) de cacher le cadre et les lignes acceptant la réponse de l'élève\n                pointilles: false // EE : ce champ est facultatif et permet (si true) de cacher le cadre et les lignes acceptant la réponse de l'élève\n              }\n            ]\n          }\n        }\n        i++\n      }\n      cpt++\n    }\n    listeQuestionsToContenu(this)\n  }\n  this.besoinFormulaireNumerique = ['Valeur maximale (entre 10 et 30) des facteurs', 30]\n  this.besoinFormulaire2Numerique = ['Nombre de facteur entre 3 et 9 (limité à 5 pour les valeurs fractionnaires ou littérales)', 9]\n  this.besoinFormulaire3Numerique = ['Type de questions', 4, '1 : Calculer les produits\\n2 : Calculer les facteurs\\n3 : Course aux nombres 1\\n4 : Course aux nombres 2']\n\n  this.correctionInteractive = i => {\n    const taille = this.nombreDeValeurs\n    const champsTexte = []\n    const divFeedback = this.type.substring(0, 3) === 'can'\n      ? document.querySelector(`#resultatCheckEx${this.numeroExercice}Q${i}`)\n      : document.querySelector(`#resultatCheckEx${this.numeroExercice}Q${(i + 1) * taille - 1}`)\n    const saisies = []\n    if (this.type.substring(0, 3) === 'can') {\n      champsTexte[0] = document.getElementById(`champTexteEx${this.numeroExercice}Q${i}`)\n      saisies[0] = champsTexte[0].value.replace(',', '.').replace(/\\((\\+?-?\\d+)\\)/, '$1')\n    } else {\n      for (let k = 0; k < taille; k++) {\n        champsTexte[k] = document.getElementById(`champTexteEx${this.numeroExercice}Q${i * taille + k}`)\n        saisies[k] = champsTexte[k].value.replace(',', '.').replace(/\\((\\+?-?\\d+)\\)/, '$1')\n      }\n    }\n    let resultat\n    if (this.saisieCoherente(saisies, taille, i)) {\n      divFeedback.innerHTML = '😎'\n      resultat = 'OK'\n    } else {\n      divFeedback.innerHTML = '☹️'\n      resultat = 'KO'\n    }\n    return resultat\n  }\n  this.saisieCoherente = function (saisies, taille, question) {\n    let resultatOK = true\n    let stringSaisie = saisies[0]\n    let stringResultat\n    if (this.type === 'can2') {\n      stringResultat = this.roses[question].typeDonnees.substring(0, 4) === 'frac'\n        ? this.roses[question].resultats[this.indexInconnue[question]].toLatex().replace('dfrac', 'frac')\n        : this.roses[question].resultats[this.indexInconnue[question]].toString()\n      return engine.parse(stringResultat).isSame(engine.parse(stringSaisie))\n    } else if (this.type === 'can1') {\n      stringSaisie = saisies[0]\n      stringResultat = this.roses[question].typeDonnees.substring(0, 4) === 'frac'\n        ? this.roses[question].values[this.indexInconnue[question]].toLatex().replace('dfrac', 'frac')\n        : this.roses[question].values[this.indexInconnue[question]].toString()\n      return engine.parse(stringSaisie).isSame(engine.parse(stringResultat))\n    } else {\n      for (let i = 0; i < taille; i++) {\n        stringSaisie = saisies[i]\n        if (this.type === 'résultats') {\n          stringResultat = this.roses[question].typeDonnees.substring(0, 4) === 'frac'\n            ? this.roses[question].resultats[i].toLatex().replace('dfrac', 'frac')\n            : this.roses[question].resultats[i].toString()\n        } else {\n          stringResultat = this.roses[question].typeDonnees.substring(0, 4) === 'frac'\n            ? this.roses[question].resultats[i].toLatex().replace('dfrac', 'frac')\n            : String(this.roses[question].resultats[i])\n          stringSaisie = this.roses[question].typeDonnees.substring(0, 4) === 'frac'\n            ? `${saisies[i]}${this.roses[question].operation === 'addition' ? '+' : '\\\\times '}${saisies[(i + 1) % this.nombreDeValeurs]}`\n            : String(this.roses[question].operate(saisies[i], saisies[(i + 1) % this.nombreDeValeurs]))\n        }\n        resultatOK = resultatOK && engine.parse(stringSaisie).isEqual(engine.parse(stringResultat))\n      }\n      return resultatOK\n    }\n  }\n}\n"],"names":["ComputeEngine","pkg","interactifReady","interactifType","amcReady","amcType","engine","context","Rose","values","nombreDeValeurs","rayon","operation","type","typeDonnees","cellulesPreremplies","valeurMax","indexInconnue","den","randint","i","value","calculer","FractionEtendue","choice","a","b","objets","O","point","A","rotation","bulle1","bulle2","M","B","similitude","D","C","homothetie","N","P","s","segment","t","u","M2","s1","longueur","s2","vide2d","polygoneRegulierParCentreEtRayon","texteParPoint","latexParCoordonnees","latexParCoordonneesBox","lettreMinusculeDepuisChiffre","colorToLatexOrHTML","ExoRose","Exercice","contraindreValeur","objetsCorr","texte","texteCorr","cpt","mathalea2d","fixeBordures","ajouteChampTexteMathLive","k","sp","listeQuestionsToContenu","taille","champsTexte","divFeedback","saisies","resultat","question","resultatOK","stringSaisie","stringResultat"],"mappings":"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"}