exercices/5e/5N13.js

/* eslint-disable camelcase */
import Exercice from '../Exercice.js'
import { context } from '../../modules/context.js'
import { listeQuestionsToContenu, randint, enleveElement, choice, texFraction } from '../../modules/outils.js'
import { setReponse } from '../../modules/gestionInteractif.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'
import FractionEtendue from '../../modules/FractionEtendue.js'
export const amcReady = true
export const amcType = 'AMCOpen' // type de question AMC
export const interactifReady = true
export const interactifType = 'mathLive'

export const titre = 'Simplification de fractions'

/**
 * Simplifier une fraction, le facteur commun est inférieur à une valeur donnée en paramètre qui est 11 par défaut
 * @author Rémi Angot
 *  5N13
 */
export const uuid = 'f8f4e'
export const ref = '5N13'
export default function Exercice_fractions_simplifier (max = 11) {
  Exercice.call(this) // Héritage de la classe Exercice()
  this.sup = max // Correspond au facteur commun
  this.sup2 = false
  this.titre = titre
  this.interactifReady = interactifReady
  this.interactifType = interactifType
  this.consigne = 'Simplifier les fractions suivantes.'
  this.spacing = 2
  this.spacingCorr = 2
  this.amcType = amcType
  this.amcReady = amcReady

  this.nouvelleVersion = function () {
    this.sup = parseInt(this.sup)
    this.autoCorrection = []
    this.listeQuestions = [] // Liste de questions
    this.listeCorrections = [] // Liste de questions corrigées
    this.consigne = this.sup2 ? 'Simplifier les fractions suivantes au maximum.' : 'Simplifier les fractions suivantes.'
    const liste_fractions = [
      [1, 2],
      [1, 3],
      [2, 3],
      [1, 4],
      [3, 4],
      [1, 5],
      [2, 5],
      [3, 5],
      [4, 5],
      [1, 6],
      [5, 6],
      [1, 7],
      [2, 7],
      [3, 7],
      [4, 7],
      [5, 7],
      [6, 7],
      [1, 8],
      [3, 8],
      [5, 8],
      [7, 8],
      [1, 9],
      [2, 9],
      [4, 9],
      [5, 9],
      [7, 9],
      [8, 9],
      [1, 10],
      [3, 10],
      [7, 10],
      [9, 10]
    ] // Couples de nombres premiers entre eux
    for (
      let i = 0, fraction, a, k, b, texte, texteCorr;
      i < this.nbQuestions;
      i++
    ) {
      fraction = choice(liste_fractions) //
      a = fraction[0]
      b = fraction[1]
      k = randint(2, this.sup)
      enleveElement(liste_fractions, fraction) // Il n'y aura pas 2 fois la même réponse
      texte =
          '$ ' +
          texFraction(k * a, k * b) +
          ' = ' +
          texFraction('\\phantom{00000000000000}', '') +
          ' = ' +
          texFraction('\\phantom{0000}', '') +
          ' $'
      texteCorr =
          '$ ' +
          texFraction(k * a, k * b) +
          ' = ' +
          texFraction(k + ' \\times ' + a, k + ' \\times ' + b) +
          ' = ' +
          texFraction(a, b) +
          ' $'
      texte += ajouteChampTexteMathLive(this, i, 'largeur25 inline')
      if (this.interactif && context.isHtml) texte = texte.replace(' \\dfrac{\\phantom{00000000000000}}{} = \\dfrac{\\phantom{0000}}{}', '')
      this.listeQuestions.push(texte)
      this.listeCorrections.push(texteCorr)
      // Pour AMC question AmcOpen
      this.autoCorrection[i] = { enonce: texte, propositions: [{ texte: texteCorr, statut: 1, feedback: '' }] }
      if (this.sup2) {
        setReponse(this, i, new FractionEtendue(a, b), { formatInteractif: 'fraction' })
      } else {
        setReponse(this, i, new FractionEtendue(k * a, k * b), { formatInteractif: 'fractionPlusSimple' })
      }
    }
    listeQuestionsToContenu(this) // Espacement de 2 em entre chaque questions.
  }
  this.besoinFormulaireNumerique = ['Valeur maximale du facteur commun', 99999]
  this.besoinFormulaire2CaseACocher = ['Simplification maximale exigée']
}