exercices/4e/4C24.js

import Exercice from '../Exercice.js'
import { listeQuestionsToContenu, choice } from '../../modules/outils.js'
import { setReponse } from '../../modules/gestionInteractif.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'
import FractionX from '../../modules/FractionEtendue.js'
import { context } from '../../modules/context.js'
export const titre = 'Simplifier des fractions à l\'aide des nombres premiers'
export const interactifReady = true
export const interactifType = 'mathLive'
export const amcReady = true
export const amcType = 'AMCHybride'

export const dateDePublication = '17/03/2022'
// export const dateDeModifImportante = '24/10/2021'

/**
 * @author Guillaume Valmont (amendée par Eric Elter pour this.sup2 et une version 3e)
 * Référence 4C24
*/
export const uuid = '612b9'
export const ref = '4C24'
export default function SimplifierFractions () {
  Exercice.call(this)
  this.consigne = 'Simplifier le plus possible les fractions suivantes.'
  this.nbQuestions = 5

  this.besoinFormulaireNumerique = ['Nombre de facteurs communs', 3, '1, 2 ou 3']
  this.besoinFormulaire2Numerique = ['Facteurs premiers utilisés', 2, '1 : De 2 à 7\n2 : De 2 à 23']
  this.sup = 2
  this.sup2 = 1
  this.sup3 = 1
  this.nbCols = 2
  this.nbColsCorr = 2
  this.tailleDiaporama = 3
  this.video = ''

  this.nouvelleVersion = function () {
    this.listeQuestions = []
    this.listeCorrections = []
    this.autoCorrection = []
    if (parseInt(this.nbQuestions) === 1) {
      this.consigne = 'Simplifier le plus possible la fraction suivante.'
    }

    for (let i = 0, texte, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      const facteurCommun1 = this.sup2 !== 1 ? choice([2, 3, 5, 11, 13, 17, 19]) : choice([2, 3, 5])
      let facteurCommun2 = this.sup2 !== 1 ? choice([2, 3, 5, 11, 13, 17, 19]) : choice([2, 3, 5])
      let facteurCommun3 = this.sup2 !== 1 ? choice([2, 3, 5, 11, 13, 17, 19]) : choice([2, 3, 5])
      const facteurSurprise = this.sup2 !== 1 ? choice([2, 3, 5, 11, 13, 17, 19, 23]) : choice([2, 3, 5, 7])
      let facteurNumerateur = this.sup2 !== 1 ? choice([2, 3, 5, 11, 13, 17, 19, 23]) : choice([2, 3, 5, 7])
      const facteurDenominateur = this.sup2 !== 1 ? choice([2, 3, 5, 11, 13, 17, 19, 23]) : choice([2, 3, 5, 7])
      let numerateur, denominateur
      if (this.sup < 3) facteurCommun3 = 1
      if (this.sup < 2) facteurCommun2 = 1
      numerateur = facteurNumerateur * facteurCommun1 * facteurCommun2 * facteurCommun3
      denominateur = facteurDenominateur * facteurCommun1 * facteurCommun2 * facteurCommun3
      while (numerateur === denominateur) {
        facteurNumerateur = this.sup2 !== 1 ? choice([2, 3, 5, 11, 13, 17, 19, 23]) : choice([2, 3, 5, 7])
        numerateur = facteurNumerateur * facteurCommun1 * facteurCommun2 * facteurCommun3
      }
      const surprise = choice(['numerateur', 'denominateur', 'aucun'])
      switch (surprise) {
        case 'numerateur':
          numerateur = numerateur * facteurSurprise
          break
        case 'denominateur':
          denominateur = denominateur * facteurSurprise
          break
      }
      const f = new FractionX(numerateur, denominateur)
      texte = `$${f.texFraction}$${ajouteChampTexteMathLive(this, i, 'inline largeur25', { texte: ' =' })}`
      texteCorr = `$${f.texFraction}${f.texSimplificationAvecEtapes(true)}$`
      setReponse(this, i, f.simplifie(), { formatInteractif: 'fraction' })
      if (context.isAmc) {
        if (this.sup3 === 1) {
          this.autoCorrection[i] = {
            enonce: '',
            enonceAvant: false,
            propositions: [
              {
                type: 'AMCOpen',
                propositions: [{
                  enonce: 'Rendre irréductible la fraction ' + texte + '.<br>La rédaction sera évaluée plus que le résultat en lui-même.',
                  texte: texteCorr,
                  statut: 3, // OBLIGATOIRE (ici c'est le nombre de lignes du cadre pour la réponse de l'élève sur AMC)
                  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
                  pointilles: false // EE : ce champ est facultatif et permet (si false) d'enlever les pointillés sur chaque ligne.
                }]
              }
            ]
          }
        } else {
          this.autoCorrection[i] = {
            enonce: '',
            enonceAvant: false,
            propositions: [
              {
                type: 'AMCNum',
                propositions: [{
                  texte: '',
                  statut: '',
                  reponse: {
                    texte: 'Rendre irréductible la fraction ' + texte + '.',
                    valeur: [f.simplifie()],
                    param: {
                      digits: 2,
                      decimals: 0,
                      signe: false,
                      approx: 0
                    }
                  }
                }]
              }
            ]
          }
        }
      }
      if (this.questionJamaisPosee(i, numerateur, denominateur)) {
        this.listeQuestions.push(texte)
        this.listeCorrections.push(texteCorr)
        i++
      }
      cpt++
    }

    listeQuestionsToContenu(this)
  }
  if (context.isAmc) this.besoinFormulaire3Numerique = ['Type de réponses AMC', 2, '1 : Question ouverte\n2 : Réponse numérique']
}