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/4I1-2-Az96H1Ms.js.map
{"version":3,"file":"4I1-2-Az96H1Ms.js","sources":["../../src/exercices/4e/4I1-2.js"],"sourcesContent":["// on importe les fonctions nécessaires.\nimport { point, tracePoint } from '../../lib/2d/points.js'\nimport { segment } from '../../lib/2d/segmentsVecteurs.js'\nimport { texteParPoint } from '../../lib/2d/textes.js'\nimport { choice, shuffle } from '../../lib/outils/arrayOutils'\nimport { arrondi } from '../../lib/outils/nombres'\nimport Exercice from '../deprecatedExercice.js'\nimport { mathalea2d, colorToLatexOrHTML } from '../../modules/2dGeneralites.js'\nimport { context } from '../../modules/context.js'\nimport { listeQuestionsToContenuSansNumero, randint, calculANePlusJamaisUtiliser } from '../../modules/outils.js'\n// Ici ce sont les fonctions de la librairie maison 2d.js qui gèrent tout ce qui est graphique (SVG/tikz) et en particulier ce qui est lié à l'objet lutin\nimport { allerA, angleScratchTo2d, avance, baisseCrayon, creerLutin, leveCrayon, orienter, tournerD, tournerG } from '../../modules/2dLutin.js'\nimport { scratchblock } from '../../modules/scratchblock.js'\n\nexport const interactifReady = true\nexport const interactifType = 'cliqueFigure'\nexport const amcReady = true\nexport const amcType = 'qcmMono'\nexport const titre = 'Scratch Turtle with Repeats'\n\n/**\n * Référence : 4I2\n * Publié le : 29/06/2021\n * @author Jean-Claude Lhote\n * Géné\n */\nexport const uuid = '8ded2'\nexport const ref = '4I1-2'\nexport default function AlgoTortue () { // ça c'est la classe qui permet de créer cet exercice\n  Exercice.call(this) // la classe parente qui définit les attributs commun à tous les exercices\n  this.titre = titre\n  this.nbQuestions = 1\n  this.nbQuestionsModifiable = false\n  this.nbCols = 1\n  this.nbColsCorr = 1\n  this.pasDeVersionLatex = false\n  this.pas_de_version_HMTL = false\n  this.typeExercice = 'Scratch'\n  this.listePackages = 'scratch3'\n  this.interactif = true\n  this.listeAvecNumerotation = false\n\n  this.nouvelleVersion = function (numeroExercice) {\n    this.listeQuestions = []\n    this.listeCorrections = []\n    this.autoCorrection = []\n\n    this.figures = []\n    const objetsCorrection = []\n    const paramsCorrection = {}\n    const paramsEnonces = {}\n\n    const choix = choice([\n      'polygonsRegular',\n      'spirals',\n      'rosettes1',\n      'gearwheel',\n      'frieze1'\n    ])\n    let val1, val2, val3, n, n2\n    const sens = choice(['turnright', 'turnleft'])\n    let sequenceFrise1\n    let sensOppose\n    if (sens === 'turnright') {\n      sensOppose = 'turnleft'\n    } else {\n      sensOppose = 'turnright'\n    }\n    const lutins = []\n    const bonneReponse = randint(0, 3)\n    const angleDepart = 90 // On choisit l'orientation de départ\n    const xDepart = 0 // Le départ est en (0,0) pour avoir la même marge dans toutes les directions\n    const yDepart = 0 // Mais on pourrait envisager de changer ça et de recadrer...\n    context.unitesLutinParCm = 10 // avancer de 10 pour le lutin lui fait parcourir 1cm (en fait 0,5cm car j'ai ajouté un scale=0.5 pour la sortie latex)\n    context.pixelsParCm = 20 // 20 pixels d'screen represent 1cm (well it depends on the zoom, so it'est juste un réglage par défaut)\n\n    let texte = '' // la chaine qui va contenir l'énoncé\n    let texteCorr = '' // la chaine qui va contenir la correction\n\n    for (let i = 0; i < 4; i++) { // Ici on crée 4 instance de l'objet Lutin.\n      lutins[i] = creerLutin()\n      lutins.color = colorToLatexOrHTML('green') // la couleur de la trace\n      lutins.epaisseur = 3 // son epaisseur\n      lutins.pointilles = false // le type de pointillés (on peut mettre false pour avoir un trait plein)\n      allerA(xDepart, yDepart, lutins[i]) // ça c'est pour faire bouger le lutin (écrire le programme ne le fait pas exécuter !)\n      baisseCrayon(lutins[i]) // à partir de là, le lutin laissera une trace (ses positions successives sont enregistrées dans lutin.listeTraces)\n      orienter(angleScratchTo2d(angleDepart), lutins[i]) // l'angle 2d is l'angle trigonométrique... Scratch est décallé de 90°, il faut donc convertir pour utiliser Orienter()\n    }\n    // We write the start of the program in the codeScratch attribute of the sprite... this string type attribute contains the code of the sprite program in Scratch Latex\n    // Each instruction added to the program corresponds to an action performed on the sprite object.\n    lutins[0].codeScratch = '\\\\begin{scratch}[print,fill,blocks,scale=0.75]\\n \\\\blockinit{when \\\\greenflag is clicked}\\n'\n    lutins[0].codeScratch += `\\\\blockmove{go to x: \\\\ovalnum{${xDepart}} y: \\\\ovalnum{${yDepart}}}\\n` // ça c'est pour ajouter la brique scratch\n    lutins[0].codeScratch += `\\\\blockmove{move to \\\\ovalnum{${angleDepart}}}\\n`\n    lutins[0].codeScratch += '\\\\blockpen{pen in writing position}\\n'\n    switch (choix) {\n      case 'polygonsRegular':\n        n = choice([3, 5, 6, 7, 8]) // Nombre de côtés\n        val1 = arrondi(360 / n, 1)\n        val2 = (10 - n) * 10\n        if (bonneReponse !== 3) {\n          lutins[0].codeScratch += `\\\\blockrepeat{repeat \\\\ovalnum{${n}} times}{\\\\blockmove{advance \\\\ovalnum{${val2}} steps}\\n`\n        } else {\n          lutins[0].codeScratch += `\\\\blockmove{rotate \\\\${sens}{} by \\\\ovalnum{${val1}} degrees}\\\\blockrepeat{repeat \\\\ovalnum{${n - 1}} times}{\\\\blockmove{advance \\\\ovalnum{${val2}} steps}\\n`\n        }\n        if (bonneReponse === 0 || bonneReponse === 3) {\n          lutins[0].codeScratch += `\\\\blockmove{rotate \\\\${sens}{} by \\\\ovalnum{${val1}} degrees}}\\n`\n        } else {\n          if (bonneReponse === 1) {\n            lutins[0].codeScratch += `\\\\blockmove{rotate \\\\${sensOppose}{} by \\\\ovalnum{${val1}} degrees}}\\n`\n          } else {\n            if (val1 !== 90) {\n              lutins[0].codeScratch += `\\\\blockmove{rotate \\\\${sens}{} by \\\\ovalnum{${180 - val1}} degrees}}\\n`\n            } else {\n              lutins[0].codeScratch += `\\\\blockmove{rotate \\\\${sens}{} by \\\\ovalnum{${val1}} degrees}\\\\blockmove{move forward by \\\\ovalnum{${val2}} steps}\\n\\\\blockmove{rotate \\\\${sens}{} by \\\\ovalnum{ ${val1}} degrees}}\\n`\n            }\n          }\n        }\n        orienter(-90, lutins[2])\n        for (let i = 0; i < n; i++) {\n          avance(val2, lutins[0])\n          avance(val2, lutins[1])\n          avance(val2, lutins[2])\n          if (i !== 0) avance(val2, lutins[3])\n\n          if (sens === 'turnright') {\n            tournerD(val1, lutins[0])\n            tournerD(val1, lutins[3])\n            tournerG(val1, lutins[1])\n            if (val1 !== 90) {\n              tournerD(180 - val1, lutins[2])\n            } else {\n              tournerD(val1, lutins[2])\n              avance(val2, lutins[2])\n              tournerD(val1, lutins[2])\n            }\n          } else {\n            tournerG(val1, lutins[0])\n            tournerG(val1, lutins[3])\n            tournerD(val1, lutins[1])\n            if (val1 !== 90) {\n              tournerG(180 - val1, lutins[2])\n            } else {\n              tournerG(val1, lutins[2])\n              avance(val2, lutins[2])\n              tournerG(val1, lutins[2])\n            }\n          }\n        }\n        break\n      case 'rosettes1':\n        n = choice([3, 4, 5, 6, 8]) // Nombre branches\n        n2 = randint(3, 6, 5)\n        val1 = randint(2, 4) * 10\n        val2 = (10 - n) * 5\n        val3 = (8 - n2) * 4\n        lutins[0].codeScratch += `\\\\blockrepeat{repeat \\\\ovalnum{${n}} times} \\n{`\n        if (bonneReponse < 2) {\n          lutins[0].codeScratch += '\\\\blockmove{go to x: \\\\ovalnum{0} y: \\\\ovalnum{0}}\\n'\n        }\n        if (bonneReponse % 2 === 0) {\n          lutins[0].codeScratch += `\\\\blockmove{move forward by \\\\ovalnum{${val1}} steps}\\n`\n        } else {\n          if (bonneReponse === 1) {\n            lutins[0].codeScratch += `\\\\blockmove{move forward by \\\\ovalnum{${calculANePlusJamaisUtiliser(val1 / 2)}} steps}\\n`\n          } else {\n            lutins[0].codeScratch += `\\\\blockmove{move forward by \\\\ovalnum{${calculANePlusJamaisUtiliser(val1 + 2)}} steps}\\n`\n          }\n        }\n        switch (bonneReponse) {\n          case 0:\n            lutins[0].codeScratch += `\\n\\\\blockmove{rotate \\\\turnright{} by \\\\ovalnum{${calculANePlusJamaisUtiliser(90 - 180 / n2)}} degrees}\\n`\n            break\n          case 1:\n            lutins[0].codeScratch += '\\n\\\\blockmove{rotate \\\\turnright{} by \\\\ovalnum{90} degrees}\\n'\n            break\n          case 2:\n            lutins[0].codeScratch += '\\n\\\\blockmove{rotate \\\\turnleft{} by \\\\ovalnum{90} degrees}\\n'\n            break\n          case 3:\n            lutins[0].codeScratch += '\\n'\n            break\n        }\n        lutins[0].codeScratch += `\\\\blockrepeat{repeat \\\\ovalnum{${n2}} times}\\n{\\\\blockmove{move forward \\\\ovalnum{${val3}} steps}\\n\\\\blockmove{rotate \\\\turnleft{} \\\\ovalnum{${calculANePlusJamaisUtiliser(360 / n2)}} degrees }\\n}\\n`\n        switch (bonneReponse) {\n          case 0:\n            lutins[0].codeScratch += `\\\\blockmove{rotate \\\\turnleft{} by \\\\ovalnum{${calculANePlusJamaisUtiliser(90 - 180 / n2)}} degrees}\\n`\n            break\n          case 1:\n            lutins[0].codeScratch += '\\\\blockmove{rotate \\\\turnleft{} by \\\\ovalnum{90} degrees}\\n'\n            break\n          case 2:\n            lutins[0].codeScratch += '\\\\blockmove{rotate \\\\turnright{} by \\\\ovalnum{90} degrees}\\n'\n            break\n          case 3:\n            lutins[0].codeScratch += '\\\\blockmove{rotate \\\\turnright{} by \\\\ovalnum{180} degrees}\\n'\n            break\n        }\n        lutins[0].codeScratch += `\\\\blockmove{rotate \\\\${sens}{} by \\\\ovalnum{${calculANePlusJamaisUtiliser(360 / n)}} degrees}\\n}\\n`\n\n        for (let i = 0; i < n; i++) {\n          allerA(0, 0, lutins[0])\n          allerA(0, 0, lutins[1])\n          // goTo(0, 0, sprites[2])\n          // goTo(0, 0, sprites[3])\n          avance(val1, lutins[0])\n          avance(val1 / 2, lutins[1])\n          avance(val1, lutins[2])\n          avance(val1 + 2, lutins[3])\n          tournerD(90 - 180 / n2, lutins[0])\n          tournerD(90, lutins[1])\n          tournerG(90, lutins[2])\n          for (let j = 0; j < n2; j++) {\n            avance(val3, lutins[0])\n            avance(val3, lutins[1])\n            avance(val3, lutins[2])\n            avance(val3, lutins[3])\n            tournerG(360 / n2, lutins[0])\n            tournerG(360 / n2, lutins[1])\n            tournerG(360 / n2, lutins[2])\n            tournerG(360 / n2, lutins[3])\n          }\n          tournerG(90 - 180 / n2, lutins[0])\n          tournerG(90, lutins[1])\n          tournerD(90, lutins[2])\n          tournerD(180, lutins[3])\n          if (sens === 'turnright') {\n            tournerD(360 / n, lutins[0])\n            tournerD(360 / n, lutins[1])\n            tournerD(360 / n, lutins[2])\n            tournerD(360 / n, lutins[3])\n          } else {\n            tournerG(360 / n, lutins[0])\n            tournerG(360 / n, lutins[1])\n            tournerG(360 / n, lutins[2])\n            tournerG(360 / n, lutins[3])\n          }\n        }\n        break\n      case 'spirals':\n        n = choice([3, 4, 5, 6, 8]) // Nombre de côtés\n        n2 = randint(1, 4) + Math.floor((9 - n) / 2)\n        val1 = randint(1, 4) * 5\n        val2 = 60 + randint(0, 4) * 5\n        val3 = calculANePlusJamaisUtiliser(360 / n)\n\n        if (bonneReponse !== 2) {\n          lutins[0].codeScratch += `\\\\blockvariable{set \\\\ovalvariable*{length} to \\\\ovalnum{${val1}}}\\\\blockrepeat{repeat until \\\\booloperator{\\\\ovalvariable{length}>\\\\ovalnum{${val2}}}}{ \\\\blockmove{move forward in \\\\ovalvariable{length} steps}\\n`\n        } else {\n          lutins[0].codeScratch += `\\\\blockvariable{set \\\\ovalvariable*{length} to \\\\ovalnum{${val2}}}\\\\blockrepeat{repeat until \\\\booloperator{\\\\ovalvariable{length}<\\\\ovalnum{${val1}}}}{ \\\\blockmove{move forward in \\\\ovalvariable{length} steps}\\n`\n        }\n        if (bonneReponse % 2 === 0) { // les lutins 0 et 2 tournent normalement\n          lutins[0].codeScratch += `\\\\blockmove{rotate \\\\${sens}{} by \\\\ovalnum{${val3}} degrees}\\n`\n        } else {\n          if (bonneReponse === 1) {\n            if (sens === 'turnright') { // Le lutin 1 tourne dans le mauvais sens\n              lutins[0].codeScratch += `\\\\blockmove{rotate \\\\turnleft{} by \\\\ovalnum{${val3}} degrees}\\n`\n            } else {\n              lutins[0].codeScratch += `\\\\blockmove{rotate \\\\turnright{} by \\\\ovalnum{${val3}} degrees}\\n`\n            }\n          } else { // le lutin 3 ne tourne pas assez\n            lutins[0].codeScratch += `\\\\blockmove{rotate \\\\${sens}{} by \\\\ovalnum{${val3 - 10}} degrees}\\n`\n          }\n        }\n        if (bonneReponse === 2) {\n          lutins[0].codeScratch += `\\\\blockvariable{add \\\\ovalnum{${-n2}} to \\\\ovalvariable{length}}\\n`\n          lutins[0].codeScratch += '}\\n'\n        } else {\n          lutins[0].codeScratch += `\\\\blockvariable{add \\\\ovalnum{${n2}} to \\\\ovalvariable{length}}\\n`\n          lutins[0].codeScratch += '}\\n'\n        }\n        for (let i = val1; i < val2; i += n2) {\n          avance(i, lutins[0])\n          avance(i, lutins[1]) // Le lutin 1 tourne dans le mauvais sens\n          avance(i, lutins[3]) // le lutin2 ne tourne pas assez\n          if (sens === 'turnright') {\n            tournerD(val3, lutins[0])\n            tournerG(val3, lutins[1])\n            tournerD(val3 - 10, lutins[3])\n          } else {\n            tournerG(val3, lutins[0])\n            tournerD(val3, lutins[1])\n            tournerG(val3 - 10, lutins[3])\n          }\n        }\n        for (let i = val2; i > val1; i -= n2) {\n          avance(i, lutins[2]) // Le lutin2 diminue la logneur de ses déplacements\n          if (sens === 'turnright') {\n            tournerD(val3, lutins[2])\n          } else {\n            tournerG(val3, lutins[2])\n          }\n        }\n        break\n      case 'gearwheel':\n        n = choice([3, 4, 5, 6, 8]) // Nombre de côtés\n        val1 = randint(1, 2) * 10\n        val2 = calculANePlusJamaisUtiliser(720 / n)\n        val3 = calculANePlusJamaisUtiliser(360 / n)\n\n        if (bonneReponse < 5) {\n          lutins[0].codeScratch += `\\\\blockrepeat{repeat \\\\ovalnum{${n}} times}{\\\\blockmove{advance \\\\ovalvariable{${val1}} steps}\\n`\n          if (bonneReponse < 2) {\n            lutins[0].codeScratch += `\\\\blockmove{rotate \\\\${sens}{} by \\\\ovalnum{${val3}} degrees}\\n`\n          } else {\n            lutins[0].codeScratch += `\\\\blockmove{rotate \\\\${sensOppose}{} by \\\\ovalnum{${val3}} degrees}\\n`\n          }\n          lutins[0].codeScratch += `\\\\blockmove{advance by \\\\ovalvariable{${val1 * 2}} steps}\\n`\n          if (bonneReponse === 0) {\n            lutins[0].codeScratch += `\\\\blockmove{rotate \\\\${sens}{} by \\\\ovalnum{${val2}} degrees}\\n`\n          } else {\n            lutins[0].codeScratch += `\\\\blockmove{rotate \\\\${sensOppose}{} by \\\\ovalnum{${val2}} degrees}\\n`\n          }\n          if (bonneReponse < 3) {\n            lutins[0].codeScratch += `\\\\blockmove{advance by \\\\ovalvariable{${val1 * 2}} steps}\\n`\n          } else {\n            lutins[0].codeScratch += `\\\\blockmove{advance by \\\\ovalvariable{${val1}} steps}\\n`\n          }\n          if (bonneReponse > 0) {\n            lutins[0].codeScratch += `\\\\blockmove{rotate \\\\${sens}{} by \\\\ovalnum{${val2}} degrees}\\n`\n          } else {\n            lutins[0].codeScratch += `\\\\blockmove{rotate \\\\${sensOppose}{} by \\\\ovalnum{${val2}} degrees}\\n`\n          }\n          lutins[0].codeScratch += '}\\n'\n        }\n        for (let i = 0; i < n; i++) {\n          avance(val1, lutins[0])\n          avance(val1, lutins[1])\n          avance(val1, lutins[2])\n          avance(val1, lutins[3])\n          if (sens === 'turnright') {\n            tournerD(val3, lutins[0])\n            tournerD(val3, lutins[1])\n            tournerG(val3, lutins[2])\n            tournerG(val3, lutins[3])\n          } else {\n            tournerG(val3, lutins[0])\n            tournerG(val3, lutins[1])\n            tournerD(val3, lutins[2])\n            tournerD(val3, lutins[3])\n          }\n          avance(val1 * 2, lutins[0])\n          avance(val1 * 2, lutins[1])\n          avance(val1 * 2, lutins[2])\n          avance(val1 * 2, lutins[3])\n          if (sens === 'turnright') {\n            tournerD(val2, lutins[0])\n            tournerG(val2, lutins[1])\n            tournerG(val2, lutins[2])\n            tournerG(val2, lutins[3])\n          } else {\n            tournerG(val2, lutins[0])\n            tournerD(val2, lutins[1])\n            tournerD(val2, lutins[2])\n            tournerD(val2, lutins[3])\n          }\n          avance(val1 * 2, lutins[0])\n          avance(val1 * 2, lutins[1])\n          avance(val1 * 2, lutins[2])\n          avance(val1, lutins[3])\n          if (sens === 'turnright') {\n            tournerG(val2, lutins[0])\n            tournerD(val2, lutins[1])\n            tournerD(val2, lutins[2])\n            tournerD(val2, lutins[3])\n          } else {\n            tournerD(val2, lutins[0])\n            tournerG(val2, lutins[1])\n            tournerG(val2, lutins[2])\n            tournerG(val2, lutins[3])\n          }\n        }\n        break\n      case 'frieze1':\n        n = 3 // Nombre de répétitions\n        n2 = choice([45, 60, 90])\n        n2 = choice([45, 60, 90])\n        val1 = randint(1, 2) * 5\n        val2 = randint(1, 3) * 5\n        val3 = randint(2, 4) * 5\n        sequenceFrise1 = [\n          [`\\\\blockmove{advance by \\\\ovalvariable{${val2}} steps}\\n`, val2],\n          [`\\\\blockmove{rotate \\\\${sens}{} by \\\\ovalnum{${n2}} degrees}\\n`, sens, n2],\n          [`\\\\blockmove{advance by \\\\ovalvariable{${val1}} steps}\\n`, val1],\n          [`\\\\blockmove{rotate \\\\${sens}{} by \\\\ovalnum{${n2}} degrees}\\n`, sens, n2],\n          [`\\\\blockmove{advance by \\\\ovalvariable{${val1}} steps}\\n`, val1],\n          [`\\\\blockmove{rotate \\\\${sensOppose}{} by \\\\ovalnum{${n2}} degrees}\\n`, sensOppose, n2],\n          [`\\\\blockmove{advance by \\\\ovalvariable{${val1}} steps}\\n`, val1],\n          [`\\\\blockmove{rotate \\\\${sensOppose}{} by \\\\ovalnum{${n2}} degrees}\\n`, sensOppose, n2],\n          [`\\\\blockmove{advance by \\\\ovalvariable{${val3}} steps}\\n`, val3],\n          [`\\\\blockmove{rotate \\\\${sensOppose}{} by \\\\ovalnum{${n2}} degrees}\\n`, sensOppose, n2],\n          [`\\\\blockmove{advance by \\\\ovalvariable{${val2}} steps}\\n`, val2],\n          [`\\\\blockmove{rotate \\\\${sens}{} by \\\\ovalnum{${n2}} degrees}\\n`, sens, n2]\n        ]\n        lutins[0].codeScratch += `\\\\blockrepeat{repeat \\\\ovalnum{${n}} times}{\\n`\n        for (let i = 0; i < 6; i++) {\n          lutins[0].codeScratch += sequenceFrise1[(2 * (bonneReponse + i)) % 12][0]\n          lutins[0].codeScratch += sequenceFrise1[(2 * (bonneReponse + i) + 1) % 12][0]\n        }\n        lutins[0].codeScratch += '}\\n'\n        for (let k = 0; k < n; k++) {\n          for (let i = 0; i < 6; i++) {\n            for (let j = 0; j < 4; j++) {\n              avance(sequenceFrise1[(2 * (j + i)) % 12][1], lutins[j])\n              if (sequenceFrise1[(2 * (j + i) + 1) % 12][1] === 'turnright') {\n                tournerD(sequenceFrise1[(2 * (j + i) + 1) % 12][2], lutins[j])\n              } else {\n                tournerG(sequenceFrise1[(2 * (j + i) + 1) % 12][2], lutins[j])\n              }\n            }\n          }\n        }\n        break\n    }\n    lutins[0].codeScratch += '\\\\blockpen{lift pen}\\n'\n    lutins[0].codeScratch += '\\\\end{scratch}'\n    texte = 'What figure is drawn by the pen when running the program below?<br>The drawing starts at the blue cross.<br>'\n    texte += 'Turning 90° means moving towards the right of the screen.<br>'\n\n    let largeur = 1\n    let hauteur = 1\n    for (let i = 0; i < 4; i++) { // on calcule la largeur et la hauteur maximale des parcours.\n      leveCrayon(lutins[i])\n      largeur = Math.max(largeur, lutins[i].xMax - lutins[i].xMin)\n      hauteur = Math.max(hauteur, lutins[i].yMax - lutins[i].yMin)\n    }\n    largeur = Math.round(largeur + 1.5)\n\n    if (context.isHtml) { // On crée 2 colonnes selon le contexte html / Latex\n      texte += '<table style=\"width: 100%\"><tr><td>'\n    } else {\n      texte += '\\\\begin{minipage}[b]{.25\\\\textwidth}'\n    }\n    texte += scratchblock(lutins[0].codeScratch) // la fonction scratchblock va convertir le code Latex en code html si besoin.\n    if (context.isHtml) { // on change de colonne...\n      texte += '</td><td>'\n      texte += '    '\n      texte += '</td><td style=\"vertical-align: top; text-align: center\">'\n    } else {\n      texte += '\\\\end{minipage}'\n      texte += '\\\\hfill \\\\begin{minipage}[b]{.74\\\\textwidth}'\n    }\n\n    let ordreLutins = [0, 1, 2, 3]\n    ordreLutins = shuffle(ordreLutins) // On mélange les emplacements pour éviter d'avoir la bonne réponse au même endroit-\n\n    for (let i = 0; i < 4; i++) {\n      for (let j = 0; j < lutins[i].listeTraces.length; j++) { // On recadre les traces des lutins...\n        lutins[i].listeTraces[j][0] -= Math.floor(lutins[i].xMin)\n        lutins[i].listeTraces[j][2] -= Math.floor(lutins[i].xMin)\n        lutins[i].listeTraces[j][1] -= Math.floor(lutins[i].yMin)\n        lutins[i].listeTraces[j][3] -= Math.floor(lutins[i].yMin)\n      }\n    }\n    const depart = []\n    for (let i = 0; i < 4; i++) { // ajouter le point de départ de chaque tracé\n      depart[i] = tracePoint(point(lutins[i].listeTraces[0][0], lutins[i].listeTraces[0][1]))\n      depart[i].taille = 5\n      depart[i].color = colorToLatexOrHTML('blue')\n      depart[i].epaisseur = 2\n      if (i === bonneReponse) {\n        objetsCorrection.push(depart[i])\n      }\n    }\n    const echelle = segment(0, hauteur + 0.5, 1, hauteur + 0.5)\n    echelle.epaisseur = 2\n    echelle.styleExtremites = '|-|'\n    objetsCorrection.push(lutins[bonneReponse])\n    paramsEnonces.xmin = -0.5\n    paramsEnonces.ymin = -1.5\n    paramsEnonces.xmax = largeur\n    paramsEnonces.ymax = hauteur + 1\n    paramsEnonces.pixelsParCm = Math.round(400 / largeur)\n    paramsEnonces.scale = calculANePlusJamaisUtiliser(4 / largeur)\n    paramsEnonces.style = ''\n    paramsCorrection.xmin = -0.5\n    paramsCorrection.ymin = -0.5\n    paramsCorrection.xmax = largeur\n    paramsCorrection.ymax = hauteur + 1\n    paramsCorrection.pixelsParCm = Math.round(400 / largeur)\n    paramsCorrection.scale = calculANePlusJamaisUtiliser(4 / largeur)\n\n    // mathalea2d() is the function which adds either an SVG figure (in html) or a tikz figure in Latex. Here, just the grid is the starting point.\n    for (let i = 0; i < 4; i++) {\n      paramsEnonces.id = `figure${i}Ex${numeroExercice}Q0`\n      texte += mathalea2d(paramsEnonces,\n        lutins[ordreLutins[i]],\n        depart[ordreLutins[i]],\n        texteParPoint(`figure ${i + 1}`, point((lutins[ordreLutins[i]].xMax - lutins[ordreLutins[i]].xMin) / 2, -0.8), 'medium', 'black', 1)\n      )\n      if (i === 1) texte += '<br>'\n    }\n    if (context.isHtml) {\n      texte += '</td></tr></table>'\n    } else {\n      texte += '\\\\end{minipage}'\n    }\n    if (context.isAmc) {\n      this.autoCorrection[0] = {\n        enonce: texte,\n        propositions: [\n          {\n            texte: 'figure 1',\n            statut: false\n          },\n          {\n            texte: 'figure 2',\n            statut: false\n          },\n          {\n            texte: 'Figure 3',\n            statut: false\n          },\n          {\n            texte: 'Figure 4',\n            statut: false\n          }\n        ],\n        options: { ordered: true }\n      }\n      this.autoCorrection[0].propositions[ordreLutins.indexOf(bonneReponse)].statut = true\n    }\n    this.indiceBonneFigure = ordreLutins.indexOf(bonneReponse)\n    // Here, the figure contains the grid, the starting point and the sprite which comes to life in its trace...\n    texteCorr += `The correct figure is the ${this.indiceBonneFigure + 1} figure`\n    if (this.interactif && context.isHtml) {\n      texte += `<span id=\"resultatCheckEx${this.numeroExercice}Q0\"></span>`\n    }\n    this.figures[0] = [{ id: `figure0Ex${this.numeroExercice}Q0`, solution: (ordreLutins.indexOf(bonneReponse) === 0) },\n      { id: `figure1Ex${numeroExercice}Q0`, solution: (ordreLutins.indexOf(bonneReponse) === 1) },\n      { id: `figure2Ex${numeroExercice}Q0`, solution: (ordreLutins.indexOf(bonneReponse) === 2) },\n      { id: `figure3Ex${numeroExercice}Q0`, solution: (ordreLutins.indexOf(bonneReponse) === 3) }\n    ]\n    texteCorr += mathalea2d(paramsCorrection, objetsCorrection)\n    this.listeQuestions.push(texte) // on met à jour la liste des questions\n    this.listeCorrections.push(texteCorr) // et la liste des corrections\n    listeQuestionsToContenuSansNumero(this) // on envoie tout à la fonction qui va mettre en forme.\n  }\n}\n"],"names":["interactifReady","interactifType","amcReady","amcType","titre","uuid","ref","AlgoTortue","Exercice","numeroExercice","objetsCorrection","paramsCorrection","paramsEnonces","choix","choice","val1","val2","val3","n","n2","sens","sequenceFrise1","sensOppose","lutins","bonneReponse","randint","angleDepart","xDepart","yDepart","context","texte","texteCorr","i","creerLutin","colorToLatexOrHTML","allerA","baisseCrayon","orienter","angleScratchTo2d","arrondi","avance","tournerD","tournerG","calculANePlusJamaisUtiliser","j","k","largeur","hauteur","leveCrayon","scratchblock","ordreLutins","shuffle","depart","tracePoint","point","echelle","segment","mathalea2d","texteParPoint","listeQuestionsToContenuSansNumero"],"mappings":"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"}