exercices/5e/5L16.js

import Exercice from '../Exercice.js'
import { randint, listeQuestionsToContenu, combinaisonListes, choice, contraindreValeur } from '../../modules/outils.js'
import { setReponse } from '../../modules/gestionInteractif.js'
import { ajouteChampTexteMathLive } from '../../modules/interactif/questionMathLive.js'
export const interactifReady = true
export const interactifType = 'mathLive'
export const titre = 'Simplifier l\'écriture d\'une expression littérale'

export const dateDePublication = '07/04/2022'
export const dateDeModifImportante = '18/06/2022'

/**
 * Description didactique de l'exercice
 * @author Guillaume Valmont
 * Référence 5L16
 * Ajout du paramètre de procédure inverse par Guillaume Valmont le 18/06/2022
*/
export const uuid = 'e2e64'
export const ref = '5L16'
export default function SimplifierEcritureLitterale () {
  Exercice.call(this)
  this.nbQuestions = 10

  this.besoinFormulaireNumerique = ['Type de simplification', 3, '1 : × devant une lettre ou une parenthèse\n2 : Carré et cube\n3 : Mélange']
  this.sup = 3
  this.besoinFormulaire2CaseACocher = ['Procédure inverse']
  this.sup2 = false
  this.nbCols = 2
  this.nbColsCorr = 2

  this.nouvelleVersion = function (numeroExercice) {
    this.listeQuestions = []
    this.listeCorrections = []
    this.autoCorrection = []

    if (this.sup2) {
      this.consigne = 'On a simplifié des écritures littérales.<br>Réécrire chaque expression en écrivant les symboles × qui sont sous-entendus.'
    } else {
      this.consigne = 'Simplifier l\'écriture.'
    }

    let typeQuestionsDisponibles
    switch (contraindreValeur(1, 3, parseInt(this.sup), 3)) {
      case 1:
        typeQuestionsDisponibles = ['ax', 'ax+b', 'b+ax', 'a+x', 'x+a', 'a(x+b)', 'a(b+x)', 'a(bx+c)', 'a(b+cx)']
        break
      case 2:
        typeQuestionsDisponibles = ['x²', 'x³', 'a+x²', 'x²+a', 'a+x³', 'x³+a']
        break
      default:
        typeQuestionsDisponibles = ['ax', 'ax+b', 'b+ax', 'a+x', 'x+a', 'a(x+b)', 'a(b+x)', 'a(bx+c)', 'a(b+cx)', 'x²', 'x³', 'a+x²', 'x²+a', 'a+x³', 'x³+a', 'ax²', 'ax³', 'ax²+b', 'ax³+b', 'b+ax²', 'b+ax³', 'abx²', 'abx³']
        break
    }
    const listeTypeQuestions = combinaisonListes(typeQuestionsDisponibles, this.nbQuestions)

    for (let i = 0, texte, donnee, resultat, reponse, texteCorr, cpt = 0; i < this.nbQuestions && cpt < 50;) {
      const a = randint(2, 9)
      const b = randint(2, 9, [a])
      const c = randint(2, 9, [a, b])
      let inverserFacteurs = choice([true, false])
      let inverserParentheses = choice([true, false])
      if (this.sup2) {
        inverserFacteurs = false
        inverserParentheses = false
      }
      switch (listeTypeQuestions[i]) {
        case 'ax':
          if (inverserFacteurs) {
            donnee = `x \\times ${a}`
          } else {
            donnee = `${a} \\times x`
          }
          resultat = `${a}x`
          break
        case 'ax+b':
          if (inverserFacteurs) {
            donnee = `x \\times ${a} + ${b}`
          } else {
            donnee = `${a} \\times x + ${b}`
          }
          resultat = `${a}x+${b}`
          break
        case 'b+ax':
          if (inverserFacteurs) {
            donnee = `${b} + x \\times ${a}`
          } else {
            donnee = `${b} + ${a} \\times x`
          }
          resultat = `${b}+${a}x`
          break
        case 'a+x':
          donnee = `${a} + x`
          resultat = `${a}+x`
          break
        case 'x+a':
          donnee = `x + ${a}`
          resultat = `x+${a}`
          break
        case 'a(x+b)':
          if (inverserParentheses) {
            donnee = `(x + ${b}) \\times ${a}`
          } else {
            donnee = `${a} \\times (x + ${b})`
          }
          resultat = `${a}(x+${b})`
          break
        case 'a(b+x)':
          if (inverserParentheses) {
            donnee = `(${b} + x) \\times ${a}`
          } else {
            donnee = `${a} \\times (${b} + x)`
          }
          resultat = `${a}(${b}+x)`
          break
        case 'a(bx+c)':
          if (inverserParentheses) {
            if (inverserFacteurs) {
              donnee = `(x \\times ${b} + ${c}) \\times ${a}`
            } else {
              donnee = `(${b} \\times x + ${c}) \\times ${a}`
            }
          } else {
            if (inverserFacteurs) {
              donnee = `${a} \\times (x \\times ${b} + ${c})`
            } else {
              donnee = `${a} \\times (${b} \\times x + ${c})`
            }
          }
          resultat = `${a}(${b}x+${c})`
          break
        case 'a(b+cx)':
          if (inverserParentheses) {
            if (inverserFacteurs) {
              donnee = `(${b} + x \\times ${c}) \\times ${a}`
            } else {
              donnee = `(${b} + ${c} \\times x) \\times ${a}`
            }
          } else {
            if (inverserFacteurs) {
              donnee = `${a} \\times (${b} + x \\times ${c})`
            } else {
              donnee = `${a} \\times (${b} + ${c} \\times x)`
            }
          }
          resultat = `${a}(${b}+${c}x)`
          break
        case 'x²':
          donnee = 'x \\times x'
          resultat = 'x^2'
          break
        case 'x³':
          donnee = 'x \\times x \\times x'
          resultat = 'x^3'
          break
        case 'a+x²':
          donnee = `${a} + x \\times x`
          resultat = `${a}+x^2`
          break
        case 'x²+a':
          donnee = `x \\times x + ${a}`
          resultat = `x^2+${a}`
          break
        case 'a+x³':
          donnee = `${a} + x \\times x \\times x`
          resultat = `${a}+x^3`
          break
        case 'x³+a':
          donnee = `x \\times x \\times x + ${a}`
          resultat = `x^3+${a}`
          break
        case 'ax²':
          if (inverserParentheses) {
            if (inverserFacteurs) {
              donnee = `x \\times ${a} \\times x`
            } else {
              donnee = `${a} \\times x \\times x`
            }
          } else {
            if (inverserFacteurs) {
              donnee = `x \\times x \\times ${a}`
            } else {
              donnee = `${a} \\times x \\times x`
            }
          }
          resultat = `${a}x^2`
          break
        case 'ax²+b':
          if (inverserParentheses) {
            if (inverserFacteurs) {
              donnee = `x \\times ${a} \\times x + ${b}`
            } else {
              donnee = `${a} \\times x \\times x + ${b}`
            }
          } else {
            if (inverserFacteurs) {
              donnee = `x \\times x \\times ${a} + ${b}`
            } else {
              donnee = `${a} \\times x \\times x + ${b}`
            }
          }
          resultat = `${a}x^2+${b}`
          break
        case 'b+ax²':
          if (inverserParentheses) {
            if (inverserFacteurs) {
              donnee = `${b} + x \\times ${a} \\times x`
            } else {
              donnee = `${b} + ${a} \\times x \\times x`
            }
          } else {
            if (inverserFacteurs) {
              donnee = `${b} + x \\times x \\times ${a}`
            } else {
              donnee = `${b} + ${a} \\times x \\times x`
            }
          }
          resultat = `${b}+${a}x^2`
          break
        case 'abx²':
          if (inverserParentheses) {
            if (inverserFacteurs) {
              donnee = `x \\times ${a} \\times x \\times ${b}`
            } else {
              donnee = `${a} \\times x \\times x \\times ${b}`
            }
          } else {
            if (inverserFacteurs) {
              donnee = `x \\times x \\times ${a} \\times ${b}`
            } else {
              donnee = `${a} \\times x \\times x \\times ${b}`
            }
          }
          resultat = `${a * b}x^2`
          break
        case 'ax³':
          if (inverserParentheses) {
            if (inverserFacteurs) {
              donnee = `x \\times x \\times ${a} \\times x`
            } else {
              donnee = `x \\times ${a} \\times x \\times x`
            }
          } else {
            if (inverserFacteurs) {
              donnee = `x \\times x \\times x \\times ${a}`
            } else {
              donnee = `${a} \\times x \\times x \\times x`
            }
          }
          resultat = `${a}x^3`
          break
        case 'ax³+b':
          if (inverserParentheses) {
            if (inverserFacteurs) {
              donnee = `x \\times x \\times ${a} \\times x + ${b}`
            } else {
              donnee = `x \\times ${a} \\times x \\times x + ${b}`
            }
          } else {
            if (inverserFacteurs) {
              donnee = `x \\times x \\times x \\times ${a} + ${b}`
            } else {
              donnee = `${a} \\times x \\times x \\times x + ${b}`
            }
          }
          resultat = `${a}x^3+${b}`
          break
        case 'b+ax³':
          if (inverserParentheses) {
            if (inverserFacteurs) {
              donnee = `${b} + x \\times x \\times ${a} \\times x`
            } else {
              donnee = `${b} + x \\times ${a} \\times x \\times x`
            }
          } else {
            if (inverserFacteurs) {
              donnee = `${b} + x \\times x \\times x \\times ${a}`
            } else {
              donnee = `${b} + ${a} \\times x \\times x \\times x`
            }
          }
          resultat = `${b}+${a}x^3`
          break
        case 'abx³':
          if (inverserParentheses) {
            if (inverserFacteurs) {
              donnee = `${b} \\times x \\times x \\times ${a} \\times x`
            } else {
              donnee = `${b} \\times x \\times ${a} \\times x \\times x`
            }
          } else {
            if (inverserFacteurs) {
              donnee = `${b} \\times x \\times x \\times x \\times ${a}`
            } else {
              donnee = `${b} \\times ${a} \\times x \\times x \\times x`
            }
          }
          resultat = `${a * b}x^3`
          break
      }
      if (this.sup2) {
        texte = `$${resultat}$`
        texteCorr = `$${resultat} = ${donnee}$`
        reponse = donnee
      } else {
        texte = `$${donnee}$`
        texteCorr = `$${donnee} = ${resultat}$`
        reponse = resultat
      }
      // On formate la réponse de façon à ce qu'elle corresponde exactement à celle attendue par MathLive
      reponse = reponse.replace(/\s/g, '') // En retirant les espaces
      reponse = reponse.replace(/\\timesx/g, '\\times x') // Et en les remettant entre les times et les x
      if (this.interactif) {
        texte += ajouteChampTexteMathLive(this, i)
      }
      setReponse(this, i, reponse, { formatInteractif: 'ignorerCasse' })
      if (this.questionJamaisPosee(i, texte)) {
        this.listeQuestions.push(texte)
        this.listeCorrections.push(texteCorr)
        i++
      }
      cpt++
    }
    listeQuestionsToContenu(this)
  }
}