File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/5S13-2-DaACkZ0p.js.map
{"version":3,"file":"5S13-2-DaACkZ0p.js","sources":["../../src/exercices/5e/5S13-2.js"],"sourcesContent":["import { diagrammeBarres } from '../../lib/2d/diagrammes.js'\nimport { choice, combinaisonListes, shuffle } from '../../lib/outils/arrayOutils'\nimport { egalOuApprox } from '../../lib/outils/ecritures.js'\nimport { arrondi } from '../../lib/outils/nombres.js'\nimport { numAlpha, sp } from '../../lib/outils/outilString.js'\nimport { texNombre } from '../../lib/outils/texNombre.js'\nimport Exercice from '../Exercice.js'\nimport { fixeBordures, mathalea2d } from '../../modules/2dGeneralites.js'\nimport { calculANePlusJamaisUtiliser, listeQuestionsToContenu, randint } from '../../modules/outils.js'\nimport { fraction } from '../../modules/fractions.js'\nimport { context } from '../../modules/context.js'\nimport { ajouteChampTexteMathLive } from '../../lib/interactif/questionMathLive.js'\n\nimport { setReponse } from '../../lib/interactif/gestionInteractif.js'\nimport { tableauColonneLigne } from '../../lib/2d/tableau.js'\n\nexport const titre = 'Frequency calculations'\nexport const interactifReady = true\nexport const interactifType = 'mathLive'\nexport const amcReady = true\nexport const amcType = 'AMCHybride'\n\n/**\n |* 888 888 888\n |* 888 888 888\n |* 888 888 888\n |* 8888888888 .d88b. 888 88888b. .d88b. 888d888 .d8888b\n |* 888 888 d8P Y8b 888 888 \"88b d8P Y8b 888P\" 88K\n |* 888 888 88888888 888 888 888 88888888 888 \"Y8888b.\n |* 888 888 Y8b. 888 888 d88P Y8b. 888 X88\n |* 888 888 \"Y8888 888 88888P\" \"Y8888 888 88888P'\n |* 888\n |* 888\n |* 888\n */\n\n/**\n * Construit un tableau d'entiers de longueur connue\n * dont la somme des éléments est égale à un total connu.\n * @author Eve & Sylvain Chambon\n * @param {int} nbElements Nombre d'entiers dans le tableau\n * @param {int} total Somme des éléments du tableau\n * @returns {Array} Tableau d'entier\n * @example > listeEntiersDepuisSomme(100,3)\n * < [34,29,37]\n */\n\nfunction listeEntiersDepuisSomme (total, nbElements) {\n const valeurs = new Array(nbElements)\n // Fair distribution of the total in the elements of the array\n const quotient = Math.floor(total / nbElements)\n const reste = total % nbElements\n for (let i = 0; i < valeurs.length - 1; i++) {\n valeurs[i] = quotient\n }\n valeurs[valeurs.length - 1] = quotient + reste\n // Change values\n for (let i = 0, delta = 0; i < valeurs.length - 2; i++) {\n // creation of the delta\n delta = randint(-valeurs[i] + 1, valeurs[i] - 1)\n valeurs[i] += delta\n // distribution of the delta between the remaining values of the array\n const diviseur = valeurs.length - i - 2\n let q = 0\n if (delta >= 0) {\n q = Math.floor(delta / diviseur)\n } else {\n q = Math.ceil(delta / diviseur)\n }\n const r = delta % diviseur\n for (let j = i + 1; j < valeurs.length - 1; j++) {\n valeurs[j] -= q\n }\n valeurs[valeurs.length - 1] -= r\n }\n return valeurs\n}\n\nfunction graphique (hauteursBarres, etiquettes, {\n reperageTraitPointille = false,\n couleurDeRemplissage = 'blue',\n titreAxeVertical = '',\n titre = '',\n hauteurDiagramme = 8,\n coeff = 2,\n axeVertical = false,\n etiquetteValeur = true,\n labelAxeVert = false\n}) {\n const diagramme = diagrammeBarres(hauteursBarres, etiquettes, {\n reperageTraitPointille,\n couleurDeRemplissage,\n titreAxeVertical,\n titre,\n hauteurDiagramme,\n coeff,\n axeVertical,\n etiquetteValeur,\n labelAxeVert\n })\n return mathalea2d(Object.assign({}, fixeBordures([diagramme], { rxmin: -3, rymin: -3, rymax: 1.5 }), {\n style: 'inline',\n scale: 0.5\n }), diagramme)\n}\n\n/**\n |* 8888888888 d8b\n |* 888 Y8P\n |* 888\n |* 8888888 888 888 .d88b. 888d888 .d8888b 888 .d8888b .d88b.\n |* 888 `Y8bd8P' d8P Y8b 888P' d88P' 888 d88P\" d8P Y8b\n |* 888 X88K 88888888 888 888 888 888 88888888\n |* 888 .d8\"\"8b. Y8b. 888 Y88b. 888 Y88b. Y8b.\n |* 8888888888 888 888 \"Y8888 888 \"Y8888P 888 \"Y8888P \"Y8888\n */\n\n/**\n * La classe Population sert à construire la série basée sur le theme choisi en paramètre\n */\nclass Population {\n constructor (theme) {\n // series dictionaries\n const listeThemes = ['establishment', 'living room', 'car park', 'collection'] // chaque theme est une clé du dictionnaire\n const series = new Map()\n series.set('establishment', {\n lieu: 'an institution',\n individus: 'students',\n caractere: 'their favorite sport',\n caracterePourTableau: 'Sports',\n modalites: ['Soccer', 'Rugby', 'Basketball', 'Tennis', 'Judo', 'Handball', 'Volleyball', 'Athletics', 'Ping-pong']\n })\n series.set('living room', {\n lieu: 'an European esports show',\n individus: 'visitors',\n caractere: 'their country of origin',\n caracterePourTableau: 'Country',\n modalites: ['France', 'England', 'Holland', 'Spain', 'Italy', 'Belgium', 'Germany', 'Portugal', 'Austria']\n })\n series.set('car park', {\n lieu: 'a supermarket parking lot',\n individus: 'cars',\n caractere: 'their color',\n caracterePourTableau: 'Colors',\n modalites: ['Black', 'White', 'Blue', 'Red', 'Green', 'Gray', 'Brown', 'Yellow', 'Orange']\n })\n series.set('collection', {\n lieu: 'a collection',\n individus: 'discs',\n caractere: 'the music genres',\n caracterePourTableau: 'Styles',\n modalites: ['Pop', 'Jazz', 'Rap', 'RnB', 'Folk', 'Rock', 'Electro', 'Reggae', 'Drunk']\n })\n // construction of the series\n let serie = {}\n if (theme === 'chance') {\n serie = series.get(choice(listeThemes))\n } else {\n serie = series.get(theme)\n }\n this.lieu = serie.lieu\n this.individus = serie.individus\n this.caractere = serie.caractere\n this.caracterePourTableau = serie.caracterePourTableau\n this.effectifTotal = choice([100, 120, 150, 200, 250, 400, 500, 1000])\n this.modalites = shuffle(serie.modalites.slice(0, randint(5, serie.modalites.length)))\n this.effectifs = listeEntiersDepuisSomme(this.effectifTotal, this.modalites.length)\n this.rangEffectifCache = randint(0, this.modalites.length - 1)\n this.entreeCachee = this.modalites[this.rangEffectifCache]\n }\n\n getPreambule (styleExo) {\n let preambule = `In ${this.lieu} of ${this.effectifTotal} ${this.individus}, we noted ${this.caractere}.<br>`\n switch (styleExo) {\n case 'painting ' :\n preambule += 'The results are recorded in the following table:<br><br>'\n break\n case 'diagram' :\n preambule += 'We represented this data using the diagram below.<br><br>'\n break\n default :\n throw Error('Error: styleExo is neither table nor diagram')\n }\n return preambule\n }\n\n getEntrees () {\n const entrees = new Map()\n for (let i = 0; i < this.modalites.length; i++) {\n entrees.set(this.modalites[i], this.effectifs[i])\n }\n return entrees\n }\n}\n\n/**\n * Calculs de fréquences sur une série qualitative\n * avec un effectif manquant et l'effectif total donné\n * @author Eve & Sylvain CHAMBON\n * Référence 5S13-2\n */\nexport const uuid = 'ff67d'\nexport const ref = '5S13-2'\nexport default function CalculerDesFrequences () {\n Exercice.call(this) // Héritage de la classe Exercice()\n this.consigne = ''\n this.nbQuestions = 1\n this.nbQuestionsModifiable = true // pourquoi pas ?\n this.spacing = 1\n this.spacingCorr = 1.5\n this.nbCols = 1\n this.nbColsCorr = 1\n this.sup = 1\n this.besoinFormulaireNumerique = [\n 'Type of questions', 4, [\n '1: Choice of a random exercise from the two versions',\n '2: Calculate frequencies from a staffing table',\n '3: Calculate frequencies from a stick diagram',\n '4: The two versions in two questions (theme of the 2nd at random)'\n ].join('\\n')\n ]\n this.sup2 = 1\n this.besoinFormulaire2Numerique = [\n 'Context theme', 5, [\n '1: Random',\n '2: School and favorite sports',\n '3: European exhibition and nationalities of participants',\n '4: Parking and car colors',\n '5: Record collection and music styles'\n ].join('\\n')\n ]\n const listeDesThemes = ['chance', 'establishment', 'living room', 'car park', 'collection']\n\n /**\n * Les questions non modifiables, seule la physionomie de la consigne change (données en tableau ou en diagramme)...\n * Une seule fonction donc pour générer les questions et leurs corrections identiques pour les deux versions\n * @param {Map} entreesTableau l'objet Map avec les entrees du tableau sport/effectif\n * @param {String} cachee le sport dont on a caché l'effectif\n * @returns liste des questions, liste des corrections\n */\n function questionsEtCorrections (preambule, serie, exercice, numero) {\n let questions = []\n const rangValeurChoisie = randint(0, serie.effectifs.length - 1, serie.rangEffectifCache)\n const frequenceDemandee = arrondi(serie.effectifs[rangValeurChoisie] * 100 / serie.effectifTotal, 1)\n // correction question 1\n let correction1 = '<br>' + numAlpha(0) + `The missing squad is that of the ${serie.entreeCachee.charAt(0).toLocaleLowerCase() + serie.entreeCachee.slice(1)}. Let $e$ be this number.<br>`\n correction1 += `$e=${serie.effectifTotal}-(`\n let first = true\n serie.effectifs.forEach((eff, index) => {\n if (index !== serie.rangEffectifCache) {\n if (first) {\n correction1 += `${eff}`\n first = !first\n } else {\n correction1 += `+${eff}`\n }\n }\n })\n correction1 += ')$<br>'\n correction1 += `$e=${serie.effectifTotal}-${calculANePlusJamaisUtiliser(serie.effectifTotal - serie.effectifs[serie.rangEffectifCache])}$<br>`\n correction1 += `$e=${serie.effectifs[serie.rangEffectifCache]}$`\n // correction question 2\n let correction2\n if (!context.isAmc && !exercice.interactif) {\n correction2 = '<br>' + numAlpha(1) + 'Frequency calculations.<br><br>'\n correction2 += 'We recall that for the frequency relative to a value is given by the quotient:'\n correction2 += '$\\\\dfrac{\\\\text{effective value}}{\\\\text{total effective}}$<br><br>'\n correction2 += 'We therefore deduce the following calculations:<br><br>'\n const enteteTableau = ['']\n const premiereColonne = []\n const premiereLigneTableau = []\n const deuxiemeLigneTableau = []\n serie.effectifs.forEach((eff, index) => {\n enteteTableau.push(`\\\\text{${serie.modalites[index]}}`)\n const f = fraction(eff, serie.effectifTotal)\n premiereLigneTableau.push(f.texFraction)\n deuxiemeLigneTableau.push(`${texNombre(f.pourcentage)} ${sp(1)}\\\\%`)\n })\n premiereColonne.push('\\\\textbf{Frequencies}', '\\\\textbf{Frequencies in percentages}')\n correction2 += tableauColonneLigne(enteteTableau, premiereColonne, premiereLigneTableau.concat(deuxiemeLigneTableau))\n correction2 += '<br>'\n } else { // Pas besoin de tableau pour une seule valeur demandée.\n correction2 = '<br>' + numAlpha(1) + `Calculation of the frequency of the ${serie.modalites[rangValeurChoisie]} value.<br><br>`\n correction2 += 'We recall that for the frequency relative to a value is given by the quotient:'\n correction2 += '$\\\\dfrac{\\\\text{effective value}}{\\\\text{total effective}}$<br><br>'\n correction2 += 'We therefore deduce:<br>'\n const fValeur = fraction(serie.effectifs[rangValeurChoisie], serie.effectifTotal)\n correction2 += `$\\\\text{Frequency}_{${serie.modalites[rangValeurChoisie]}}= ${fValeur.texFraction}$<br>`\n correction2 += `$\\\\text{Frequency}_{${serie.modalites[rangValeurChoisie]}}${egalOuApprox(serie.effectifs[rangValeurChoisie] * 100 / serie.effectifTotal, 1)}${texNombre(arrondi(fValeur.pourcentage, 1))} ${sp(1)}\\\\%$`\n }\n\n if (!exercice.interactif && !context.isAmc) { // Questions normales pour version non interactive html ou latex\n questions = [preambule,\n '<br>' + numAlpha(0) + 'Determine the missing workforce.',\n '<br>' + numAlpha(1) + `Determine the frequencies for each ${serie.caractere.substring(5)} (as a percentage, round to the nearest tenth if necessary).`]\n } else {\n if (!context.isAmc) { // Questions pour interactivité html\n setReponse(exercice, numero * 2, serie.effectifs[serie.rangEffectifCache], { formatInteractif: 'calculation' })\n setReponse(exercice, numero * 2 + 1, frequenceDemandee, { formatInteractif: 'calculation' })\n questions = [preambule,\n '<br>' + numAlpha(0) + 'Determine the missing workforce.' + ajouteChampTexteMathLive(exercice, numero * 2, 'width10 inline'),\n '<br>' + numAlpha(1) + `Determine the frequency of the ${serie.modalites[rangValeurChoisie]} value (in percentage, round to the tenth if necessary).` + ajouteChampTexteMathLive(exercice, numero * 2 + 1, 'width10 inline')]\n } else { // Pour AMC, on ne peut pas doubler les questions, il faut les intégrer dans un seul AMCHybride.\n exercice.autoCorrection[numero] = {\n options: { multicols: true },\n enonce: preambule + '<br>' + numAlpha(0) + 'Determine the missing workforce.' + '<br>' + numAlpha(1) + `Determine the frequency of the ${serie.modalites[rangValeurChoisie]} value (in percentage, round to the tenth if necessary).`,\n propositions: [\n {\n type: 'AMCNum',\n propositions: [\n {\n texte: correction1 + correction2,\n reponse: {\n texte: numAlpha(0),\n valeur: [serie.effectifs[serie.rangEffectifCache]],\n param: {\n digits: 3,\n decimals: 0,\n signe: false\n }\n }\n }\n ]\n },\n {\n type: 'AMCNum',\n propositions: [\n {\n texte: '',\n reponse: {\n texte: numAlpha(1),\n valeur: [frequenceDemandee],\n param: {\n digits: 3,\n decimals: 1,\n signe: false\n }\n }\n }\n ]\n }\n ]\n }\n }\n }\n return { questions: questions.join('\\n'), corrections: [correction1, correction2].join('\\n') }\n }\n\n /**\n * version 0 :\n * La consigne avec un tableau d'effectifs\n * */\n function exerciceAvecTableau (theme, exercice, numero) { // On a besoin de l'exercise and the question number for the'interactif\n // problem parameters\n const serie = new Population(theme)\n let preambule = serie.getPreambule('painting ')\n // construct the table\n const entetesColonnes = [`\\\\text{\\\\textbf{${serie.caracterePourTableau}}}`]\n for (const modalite of serie.modalites) {\n entetesColonnes.push(`\\\\text{${modalite}}`)\n }\n entetesColonnes.push('\\\\text{\\\\textbf{TOTAL}}')\n const entetesLignes = ['\\\\text{\\\\textbf{Skills}}', '\\\\text{\\\\textbf{Frequencies}}']\n const cellules = []\n // first line of staff\n serie.effectifs.forEach((eff, index) => {\n if (index !== serie.rangEffectifCache) {\n cellules.push(eff)\n } else {\n cellules.push('')\n }\n })\n cellules.push(`${serie.effectifTotal}`)\n // second frequency line (empty)\n for (let i = 0; i <= serie.effectifs.length; i++) {\n cellules.push('')\n }\n preambule += tableauColonneLigne(entetesColonnes, entetesLignes, cellules, 1.5)\n preambule += '<br>'\n const texte = questionsEtCorrections(preambule, serie, exercice, numero) // on récupère les questions/réponses en relation\n return { questions: texte.questions, corrections: texte.corrections, effectifs: serie.effectifs } // On ajoute les effectifs pour ne pas avoir de doublons dans les différentes questions\n }\n\n /**\n * version 1 :\n * La consigne avec un diagramme bâton\n * */\n function exerciceAvecDiagramme (theme, exercice, numero) { // On a besoin de l'exercise and the question number for the'interactif\n // problem parameters\n const serie = new Population(theme)\n let preambule = serie.getPreambule('diagram')\n // construction of the diagram\n const effectifsSansValeurCachee = serie.effectifs.map((elt, i) => i !== serie.rangEffectifCache ? elt : 0)\n const diagrammeBaton = graphique(effectifsSansValeurCachee, serie.modalites, {\n reperageTraitPointille: false,\n axeVertical: true,\n titreAxeVertical: 'Workforce',\n labelAxeVert: true\n })\n preambule += diagrammeBaton\n const texte = questionsEtCorrections(preambule, serie, exercice, numero) // on,numero récupère les questions/réponses en relation\n return { questions: texte.questions, corrections: texte.corrections, effectifs: serie.effectifs } // On ajoute les effectifs pour ne pas avoir de doublons dans les différentes questions\n }\n\n // we put everything together\n this.nouvelleVersion = function () {\n this.listeQuestions = [] // Liste de questions\n this.listeCorrections = [] // Liste de questions corrigées\n this.autoCorrection = []\n const theme = listeDesThemes[this.sup2 - 1]\n const exercice = { questions: [], corrections: [] }\n let transit = {}\n const de = combinaisonListes([0, 1], this.nbQuestions)\n for (let i = 0, cpt = 0; i < this.nbQuestions && cpt < 50;) {\n switch (this.sup) {\n case 1: // au hasard\n switch (de[i]) {\n case 0:\n transit = exerciceAvecDiagramme(theme, this, i)\n break\n case 1:\n transit = exerciceAvecTableau(theme, this, i)\n break\n }\n exercice.questions = [transit.questions]\n exercice.corrections = [transit.corrections]\n break\n case 2: // tableau\n transit = exerciceAvecTableau(theme, this, i)\n exercice.questions = [transit.questions]\n exercice.corrections = [transit.corrections]\n break\n case 3: // diagramme\n transit = exerciceAvecDiagramme(theme, this, i)\n exercice.questions = [transit.questions]\n exercice.corrections = [transit.corrections]\n break\n case 4: // les deux\n transit = exerciceAvecTableau(theme, this, i)\n exercice.questions = [transit.questions]\n exercice.corrections = [transit.corrections]\n transit = exerciceAvecDiagramme('chance', this, i)\n exercice.questions.push(transit.questions)\n exercice.corrections.push(transit.corrections)\n }\n if (this.questionJamaisPosee(i, ...transit.effectifs)) {\n this.listeQuestions.push(...exercice.questions)\n this.listeCorrections.push(...exercice.corrections)\n i++\n }\n cpt++\n }\n listeQuestionsToContenu(this)\n }\n}\n"],"names":["titre","interactifReady","interactifType","amcReady","amcType","listeEntiersDepuisSomme","total","nbElements","valeurs","quotient","reste","i","delta","randint","diviseur","q","r","j","graphique","hauteursBarres","etiquettes","reperageTraitPointille","couleurDeRemplissage","titreAxeVertical","hauteurDiagramme","coeff","axeVertical","etiquetteValeur","labelAxeVert","diagramme","diagrammeBarres","mathalea2d","fixeBordures","Population","theme","listeThemes","series","serie","choice","shuffle","styleExo","preambule","entrees","uuid","ref","CalculerDesFrequences","Exercice","listeDesThemes","questionsEtCorrections","exercice","numero","questions","rangValeurChoisie","frequenceDemandee","arrondi","correction1","numAlpha","first","eff","index","calculANePlusJamaisUtiliser","correction2","context","enteteTableau","premiereColonne","premiereLigneTableau","deuxiemeLigneTableau","f","fraction","texNombre","sp","tableauColonneLigne","fValeur","egalOuApprox","setReponse","ajouteChampTexteMathLive","exerciceAvecTableau","entetesColonnes","modalite","entetesLignes","cellules","texte","exerciceAvecDiagramme","effectifsSansValeurCachee","elt","diagrammeBaton","transit","de","combinaisonListes","cpt","listeQuestionsToContenu"],"mappings":"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"}