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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"}